С новичка до ниндзи почему ваши навыки Python важны в науке о данных

Превращение с новичка в ниндзю почему ваши навыки Python невероятно важны в науке о данных

 

Введение

 

Мы знаем, что программирование — полезное (необходимое?) умение, которым должны обладать ученые-данных. Но на каком уровне должно быть владение программированием? Должен ли ученый-данных стремиться стать «достаточно хорошим» или желать стать экспертом в программировании? Стоит ли нам хотеть стать кодирующими ниндзя?

Если мы собираемся изучить эту тему, нам следует сначала представить себе, как выглядят коды начинающего, среднего и экспертного уровня программиста $mdash; или по крайней мере, как они выглядят его код.

Ниже вы найдете 2 программные задачи, каждая из которых содержит 3 отрывка кода; один для начинающего, среднего и экспертного программистов, с объяснением различий. Это должно дать нам основу для обсуждения важности программирования.

Помните, что эти подходы являются выдуманными и предполагают имитацию программирования на этих разных уровнях. Все сценарии функциональны и выполняют поставленную задачу, но делают это с разной степенью элегантности, эффективности и питонизма.

 

Задача: Найти факториал числа

 

Давайте сначала рассмотрим простую задачу, которую можно решить несколькими способами — найти факториал заданного числа. Давайте реализуем эту задачу для гипотетических программистов-новичков, среднего уровня и экспертов на языке Python и сравним различия в коде.

 

Подход новичка

 

Новичок может использовать простой подход с использованием цикла for для вычисления факториала. Вот как он мог бы это сделать.

n = int(input("Введите число, для которого нужно найти факториал: "))factorial = 1if n < 0:    print("Факториал не существует для отрицательных чисел")elif n == 0:    print("Факториал числа 0 равен 1")else:    for i in range(1, n + 1):        factorial *= i    print(f"Факториал числа {n} равен {factorial}")

 

Подход программиста среднего уровня

 

Программист среднего уровня может использовать функцию для улучшения переиспользуемости кода и улучшения его читаемости, а также использовать библиотеку math для основных проверок.

import mathdef factorial(n):    if n < 0:        return "Факториал не существует для отрицательных чисел"    elif n == 0:        return 1    else:        return math.prod(range(1, n + 1))n = int(input("Введите число, для которого нужно найти факториал: "))result = factorial(n)print(f"Факториал числа {n} равен {result}")

 

Подход эксперта

 

Опытный программист может использовать рекурсию и добавить подсказки по типам для лучшей поддерживаемости. Он также может использовать краткий и выразительный синтаксис Python.

from typing import Uniondef factorial(n: int) -> Union[int, str]:    return 1 if n == 0 else n * factorial(n - 1) if n > 0 else "Факториал не существует для отрицательных чисел"n = int(input("Введите число, для которого нужно найти факториал: "))print(f"Факториал числа {n} равен {factorial(n)}")

 

Итог

 

Давайте посмотрим на различия в коде и что больше всего выделяется между уровнями компетентности.

  • Новичок: Использует более длинный код, не использует функции или библиотеки, прямолинейная логика
  • Средний уровень: Использует функцию для лучшей структуры, использует math.prod для вычисления произведения
  • Эксперт: Использует рекурсию для элегантности, добавляет подсказки по типам и использует условное выражение Python для краткости

 

Задача: Генерация чисел Фибоначчи

 

В качестве второго примера рассмотрим задачу нахождения последовательности чисел Фибоначчи до n чисел. Вот как программисты разного уровня могут решить эту задачу.

 

Подход для начинающих

 

Начинающий программист может использовать базовый цикл for и список для сбора чисел Фибоначчи.

n = int(input("Сколько чисел Фибоначчи сгенерировать? "))
fibonacci_sequence = []
if n <= 0:
    print("Пожалуйста, введите положительное целое число.")
elif n == 1:
    print([0])
else:
    fibonacci_sequence = [0, 1]
    for i in range(2, n):
        next_number = fibonacci_sequence[-1] + fibonacci_sequence[-2]
        fibonacci_sequence.append(next_number)
    print(fibonacci_sequence)

 

Подход для среднего уровня

 

Программист среднего уровня может использовать генераторы списков и функцию zip для более пайтоновского подхода.

n = int(input("Сколько чисел Фибоначчи сгенерировать? "))
if n <= 0:
    print("Пожалуйста, введите положительное целое число.")
else:
    fibonacci_sequence = [0, 1]
    [fibonacci_sequence.append(fibonacci_sequence[-1] + fibonacci_sequence[-2]) for _ in range(n - 2)]
    print(fibonacci_sequence[:n])

 

Подход для экспертов

 

Эксперт может использовать генераторы для более эффективного использования памяти, а также возможность Python по обмену переменными в одной строке.

def generate_fibonacci(n: int):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b

n = int(input("Сколько чисел Фибоначчи сгенерировать? "))
if n <= 0:
    print("Пожалуйста, введите положительное целое число.")
else:
    print(list(generate_fibonacci(n)))

 

Резюме

 

Давайте посмотрим, в чем основные отличия и какие основные программные различия разделяют уровни компетенции.

  • Начинающий: Использует базовые управляющие структуры и списки, прямолинейный, но немного громоздкий
  • Средний уровень: Использует генераторы списков и функцию zip для более пайтоновского и краткого решения
  • Эксперт: Использует генераторы для более эффективного использования памяти, а также обмен переменных для элегантного изменения значений

 

Польза от “ниндзя” кодирования

 

Если вся приведенная выше код работает и в конечном итоге выполняет поставленную задачу, зачем нам стремиться стать лучшими программистами, какими только мы можем быть? Отличный вопрос!

Стать опытным программистом означает не только добиться работы кода. Вот несколько причин, почему стремление стать лучшим программистом является полезным:

 

1. Эффективность

 

  • Время: Написание более эффективного кода означает более быстрое выполнение задач, что полезно и для программиста, и для пользователей программного обеспечения
  • Использование ресурсов: Эффективный код использует меньше ЦП и памяти, что может быть важным для приложений, работающих с ограниченными ресурсами или в масштабе

 

2. Читаемость и обеспечение поддержки

 

  • Коллаборация: Код часто разрабатывается и поддерживается командами. Чистый, хорошо структурированный и хорошо прокомментированный код гораздо легче для других программистов понять и совместно работать с ним
  • Долговечность: При расширении или эволюции проектов поддерживаемый код легче расширять, отлаживать и рефакторить, экономя время и усилия в долгосрочной перспективе

 

3. Повторное использование

 

  • Модульность: При написании функций или модулей, которые хорошо решают задачу, вы можете легко повторно использовать этот код в других проектах или контекстах
  • Сообщество: Качественный код можно сделать открытым и использовать для блага широкого сообщества разработчиков

 

4. Надежность и стабильность

 

  • Обработка ошибок: Продвинутые программисты часто пишут код, который не только решает проблемы, но и элегантно обрабатывает ошибки, делая программное обеспечение более надежным
  • Тестирование: Понимание того, как писать тестируемый код и фактические тесты, гарантирует, что код работает, как ожидается в различных сценариях

 

5. Признание навыков

 

  • Карьерный рост: Быть признанным умелым программистом может привести к продвижению, возможностям работы и более высокой оплате
  • Личное удовлетворение: Есть ощущение достижения и гордости от того, что вы способны писать качественный код

 

6. Приспособляемость

 

  • Новые технологии: Крепкие фундаментальные навыки облегчают адаптацию к новым языкам, библиотекам или парадигмам
  • Решение проблем: Глубокое понимание концепций программирования повышает вашу способность к творческому и эффективному решению проблем

 

7. Эффективность по стоимости

 

  • Меньше отладки: Хорошо написанный код часто более устойчив к ошибкам, что сокращает количество времени и ресурсов, затраченных на отладку
  • Масштабируемость: Хороший код может быть более легко масштабируемым, что делает его более экономичным в долгосрочной перспективе

 Итак, хотя выполнение работы, конечно, важно, способ, которым вы это делаете, может иметь широкие последствия для вашего личностного развития, команды и вашей организации. Мы все должны стремиться стать лучшими программистами, которыми мы можем быть, и это касается не только специалистов по обработке данных.  

****[Matthew Mayo](https://www.kdnuggets.com/wp-content/uploads/./profile-pic.jpg)**** (@mattmayo13) имеет степень магистра по компьютерным наукам и диплом о профессиональной переподготовке по майнингу данных. В качестве главного редактора VoAGI Мэттью стремится сделать сложные концепции data science доступными. Его профессиональные интересы включают обработку естественного языка, алгоритмы машинного обучения и исследование новейших технологий искусственного интеллекта. Он движим миссией демократизации знаний в сообществе data science. Мэттью занимается программированием с шести лет.