Пропитон

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

На мой взгляд, Python в качестве первого языка — самый худший выбор. Дело не в том, что он сложен, просто многие сложные концепции вроде сборщика мусора, объектной модели и шаблонов проектирования встретятся вам раньше, чем инструкции условного выполнения и циклы. Если вы уже знаете C, Go или, скажем, Lua — вам будет легче. Изучая Python без подготовки, вы получите искаженное представление классических понятий, потому что здесь — и только здесь! — они реализованы иначе.

Основная ловушка здесь в том, что метод «просто пиши так и все будет работать» отлично работает, но несет в себе немалый риск скатиться в «code monkey», для которых программирование это магия, где для получения результата достаточно просто соблюдать ритуалы. Разобраться в том, что происходит в глубинах этого «черного ящика», вы, конечно, можете. Но это очень «непрактичные» знания, для выполнения конкретных задач они могут понадобиться очень не скоро. Если вообще понадобятся — большая стандартная библиотека и огромное количество библиотек внешних предоставляют готовый интерфейс к выполнению большинства задач.

Здесь кроется вторая ловушка. Стандартная библиотека и общий уровень повторного использования кода в Python настолько велик, что уже породил профессиональную шутку «для решения любой задачи надо просто найти в интернете нужную библиотеку». Это прекрасно, но имеет и оборотную сторону. Впервые столкнувшись с чем-то нестандартным, вы сразу осознаете, сколь много вы не знаете. В большей мере из-за того, что язык умело прячет за абстракциям все, что можно.

Дальше. Python не является академическим языком программирования. Если вы услышите эту формулировку в позитивном ключе, знайте — перед вами тот самый «code monkey», познания которого определяются количеством выученных заклинаний. Хороший «практик» (так они предпочитают себя называть), может быть весьма эффективным программистом с точки зрения достижения целей, но пренебрежительное отношение к академичности его все равно выдает.

Между тем, все очень просто — академические языки состоят из четко очерченных компонентов.

  1. Семантика. Это уровень абстракции данных и действий. Доскональное знание семантики дает точное представление о возможностях и границах языка.
  2. Прагматика. Это уровень реального, машинного представления. Программист на «высоких» языках программирования опускается сюда не часто, но обычно все же имеет представление о том, что здесь и как.
  3. Синтаксис. Это способ записи программы, «грамматика» языка.
  4. Синтаксический сахар. Зачастую в синтаксис добавляются дополнительные правила, которые позволяют записывать действия другим способом — более компактным, понятным или удобным. Необязательные, как сахар в кофе. «Для вкуса».
  5. Библиотеки. Строго говоря, библиотеки не являются частью языка, но так или иначе в языках программирования вводятся некие «стандартные библиотеки», без которых писать работающие программы (даже самые простые) невозможно.

Все это есть и в Python, но если в «нормальных» языках программирования эти части не пересекаются, то здесь все иначе. В Python нет даже базовых типов — все данные являются частью объектной модели. Но при этом встроенную объектную модель нельзя расширять и она «зашита» прямо на уровне семантики и синтаксиса, а для работы некоторых из них необходимо подключение библиотек. Одно плавно переходит в другое и задача «знать Python» становится посильной разве что для Гвидо Ван Россума, автора и «пожизненного великодушного диктатора» языка. Нельзя знать язык, не зная все пять его составляющих, а каждая из них еще и непрерывно и порой драматически меняется от версии к версии. Поэтому изучение Python сродни умению переплыть Ла-Манш — вы не будете плавать в бассейне или озерах, вы раз за разом будете учиться переплывать Ла-Манш и однажды это сделаете. Так что — наберитесь сил. И терпения.