Первые шаги в программировании и компьютерной науке могут быть немного удручающими. Какой язык лучше взять? Какую IDE стоит использовать? И что более важно, почему?
На мой взгляд, самое главное, что вам нужно сделать в программировании — это выбрать правильный инструмент для работы. Вторая по важности вещь — выбрать инструмент, с которым вам наиболее удобно. Если бы я сказал, что вам подойдёт C++, потому что это самый быстрый язык, это не будет хорошим советом, если вы никогда не имели дело с управлением памятью или не писали свои структуры данных. Возможно, вы бы продирались сквозь него и получили плохой опыт.
Python, с другой стороны, решает многие проблемы за вас. Он работает заметно медленнее, чем C++, зато на нём гораздо проще писать. И как новичка вас вряд ли заботит его скорость, вы просто хотите сделать что-нибудь крутое и изучить основные понятия.
Итак, первое решение, которое вам нужно принять — какой язык вы хотите выучить. Почему из сотен языков новичку следует изучать Python? Тому есть несколько причин…
Оглавление
Простой синтаксис
Часть философии языка (как показано в PEP 20, “Дзен Python”), содержит следующее:
- Красивое лучше, чем уродливое.
- Простое лучше, чем сложное.
- Читаемость имеет значение.
Так что, как можно видеть, Python создавался с самого начала из соображений простоты. Это было глотком свежего воздуха, поскольку господствовали тогда языки C и C++, не очень дружелюбные к пользователю.
Давайте сравним синтаксис языков Python и C++ на простом примере ‘Hello, World’:
C++:
#include stdout int main() { std::cout << "Hello, world!\n"; }
Python:
print('Hello, world!')
Разница довольно значительна, хотя мы всего лишь распечатали строку в консоли. Теперь для большей наглядности сравним его с PHP:
Python:
x=1 while x <=5: print 'x is less than 5:' + str(x) x += 1
PHP:
<?php $x=1; while($x<=5) { echo "x is less than 5: $x"; x++; } ?>
Python пытается избавиться от лишнего и требует только то, что действительно нужно, и именно поэтому он создавался без фигурных скобок и точек с запятой на концах строк. Взгляните на разницу (последнее сравнение синтаксиса, я обещаю):
Python:
def foo(x): if x == 0: bar() baz() else: qux(x) foo(x - 1)
C:
void foo(int x) { if (x == 0) { bar(); baz(); } else { qux(x); foo(x - 1); } }
На самом деле я не пытаюсь очернять другие языки. Все остальные упомянутые здесь языки замечательны и имеют массу применений, но они не столь пригодны для новичков.
С ключевыми словами is
, not
и with
, хорошо написанный скрипт на Python можно читать почти как английский текст. Это особенно верно для условий в цикле if
, которые бывает сложно прочесть, когда они разрастаются:
a = None b = None if a is not None and b is not None: print 'Foo!' else: print 'Bar!'
Условное выражение выше гораздо яснее, чем обычное if ((a != null) && (b != null))
.
Легко установить и начать работать
Многие новички, пытаясь изучить язык, сдаются ещё до того, как напишут первую строчку кода. В некоторых языках, таких как Java, вам нужно установить и запустить сложные директории проекта и потом компилировать код.
С Python, всё, что вам нужно — это загрузить и запустить установщик и выполнить python <your-script>.py
. Не нужно никаких сложных структур каталогов.
Хотя это всё реже встречается в современных языках, компиляция кода может быть сложнее, чем вы думали (впрочем, это не обязательно плохо). Просто посмотрите на этот маленький makefile для C:
CC = gcc CFLAGS = -g -Wall TARGET = myprog all: $(TARGET) $(TARGET): $(TARGET).c $(CC) $(CFLAGS) -o $(TARGET) $(TARGET).c clean: $(RM) $(TARGET)
Замечу, что это простой makefile. Этому я бы предпочёл Python в любом случае.
Python позволяет вам изучить понятия программирования перед тем, как углубляться в детали того, как высокоуровневый код превращается в машинный, который вам безусловно следует знать, но не когда вы начинаете.
Огромная стандартная библиотека
Одно из наиболее знаменитых преимуществ Python — стандартная библиотека, и это не просто так. Она содержит более 300 модулей (в версии 3.5), от простейшего HTTP сервера (http.server) до баз данных (sqlite3), и сжатых библиотек (gzip).
Бóльшая часть того, вам захочется делать на Python, уже сделано за вас в стандартной библиотеке. Так что вы можете создавать крутые вещи без больших усилий, например приложения для машинного обучения. Мне постоянно приходится напоминать себе, что надо поискать модули, чтобы избежать переписывания кода самому. Поэтому перед тем, как вы попробуете написать библиотеку разбора адресов url, сначала проверьте, существует ли она!
Главное достоинство того, что код был написан до вас — знание того, что он тщательно протестирован и не содержит ошибок. Зачастую он был давно доступен и использовался крупнейшими компаниями (о них мы поговорим позже), так что вы знаете, через что он прошёл.
Сообщество
Большое, активное сообщество означает две вещи:
- Много самописных библиотек
- Много людей, готовых вам помочь
Возможно, это одни из наиболее важных причин, почему вам лучше использовать Python, независимо от уровня ваших навыков. Это значит, что в вашем распоряжении множество документации, руководств и примеров кода, чтобы с их помощью лучше изучить язык.
Python постоянно занимает высокие места в различных рейтингах, таких как Redmonk (#4) и Tiobe (#4). И что более важно, язык очень востребован работодателями. На графике ниже можно видеть (представлен Indeed), что Python — второй по этому показателю язык, что даёт вам возможность применить свои навыки программирования в работе.
Легко отлаживать
Один из самых сложных навыков для новичка — это отладка. Именно здесь вы по-настоящему узнаёте язык и то, как он работает изнутри. Иногда у вас будут простые ошибки типа синтаксических, в других случаях они будут проявляться в 1 из 100 запусков вашей программы. Тут вам придётся ближе познакомиться со своим отладчиком и основными ошибками в языке. К счастью для вас, Python располагает хорошей системой обработки и отчётов об ошибках, чего нет у многих других языков.
Например, если что-то пойдёт на так в C++ (разыменование неправильного указателя, обращение к элементу вне массива и так далее), вам повезёт, если упадёт программа. В таком случае вы знаете, что где-то в ней есть проблема, но едва ли знаете где (а отладчики не всегда просты и понятны новичкам). Если вам не повезло и программа не упала (или падает в случайное время), вы получите непонятные и не очень очевидные ошибки.
Что не умеет делать Python
Окей, я не думал, что правильно написать статью про Python и не упомянуть о недостатках. Как и многие другие языки, он вовсе не совершенен, есть ряд вещей, для которых он неприменим.
Как я упоминал несколько раз, Python медленный. Точнее, очень медленный по сравнению с компилируемыми языками наподобие C, C++ или Go. Дело в том, что есть несколько особенностей, которые замедляют язык, вроде динамической типизации или сборщика мусора. Таким образом, не нужно использовать чистый Python для обработки больших массивов данных, вместо этого вам нужно добавить код на C++.
Из-за сборки мусора в Python’s его нельзя применять для систем реального времени. Причина в том, что она запускается в непредсказуемое время, так что вы не можете знать, займёт ли ваша функция 1 мс или 100 мс. Тут получается слишком много неизвестных. Вместо него для программ реального времени вам потребуется язык с ручным управлением памятью, такой как C или C++.
Поскольку потребляет много системных ресурсов и содержит интерпретатор, обычно можно (я говорю ‘обычно’, потому что есть другие варианты) запускать код на Python только под операционной системой (никаких микроконтроллеров и встроенных систем).
Вывод
Есть несколько причин, почему Python хорош для начинающих. Существует множество ресурсов для начинающих, так что не нужно много времени, чтобы начать программировать на Python.
Какой язык вы изучали первым и почему? Сообщите в комментариях!
Только Python
Потому что:
1. Хочу создавать новое, а не быть “обслугой” существующих php, node сервисов
2. Мульти- парадигмальный, кроссплатформенный, мультинаправленный для всех, кто не боится смотреть на свою работу без ЧСВ и призмы {{{{}}}}
3. Можно создавать рабочие прототипы, оптимизируя по мере необходимости
4. Тьма “батареек” для любых моих нужд и бинды ко всему
5. Близость к прикладным научным дисциплинам – CAS, статистике, ML