Пропитон
Есть несколько вещей, о которых авторы учебных пособий почти не говорят. Они как миссионеры, вопрос “зачем?” для них сродни посягательству на догмат веры. Но ведь это… нечестно, да? О проблемах лучше говорить “на берегу”.
Python в качестве первого языка - самый худший выбор. Дело не в том, что он сложен, просто многие сложные концепции вроде сборщика мусора, объектной модели и шаблонов проектирования встретятся вам раньше, чем инструкции условного выполнения и циклы. Если вы уже знаете C, Go или, скажем, Lua - вам будет легче. Изучая Python без подготовки, вы получите искаженное представление классических понятий, потому что здесь - и только здесь! - они реализованы не так, как у Вирта, Кнута, Дейкстры, Тьюринга. Здесь весело и за веселье это надо платить.
Основная ловушка здесь в том, что метод “просто пиши так и все будет работать” отлично работает, но несет в себе немалый риск скатиться в “code monkey”, для которых программирование это магия, где для получения результата достаточно просто соблюдать ритуалы. Разобраться в том, что происходит в глубинах этого “черного ящика”, вы, конечно, можете. Но это очень “непрактичные” знания, для выполнения конкретных задач они могут понадобиться очень не скоро. Если вообще понадобятся - большая стандартная библиотека и огромное количество библиотек внешних предоставляют готовый интерфейс к выполнению большинства задач.
Здесь кроется вторая ловушка. Стандартная библиотека и общий уровень повторного использования кода в Python настолько велик, что уже породил профессиональную шутку “для решения любой задачи надо просто найти в интернете нужную библиотеку”. Это прекрасно, но имеет и оборотную сторону. Впервые столкнувшись с чем-то нестандартным, вы сразу осознаете, сколь много вы не знаете. В большей мере из-за того, что язык умело прячет за абстракциям все, что можно.
Дальше. Python не является академическим языком программирования. Если вы услышите эту формулировку в позитивном ключе, знайте - перед вами тот самый “code monkey”, познания которого определяются количеством выученных заклинаний. Хороший “практик” (так они предпочитают себя называть), может быть весьма эффективным программистом с точки зрения достижения целей, но пренебрежительное отношение к академичности его все равно выдает.
Между тем, все очень просто - академические языки состоят из четко очерченных компонентов.
- Семантика. Это уровень абстракции данных и действий. Доскональное знание семантики дает точное представление о возможностях и границах языка.
- Прагматика. Это уровень реального, машинного представления. Программист на “высоких” языках программирования опускается сюда не часто, но обычно все же имеет представление о том, что здесь и как.
- Синтаксис. Это способ записи программы, “грамматика” языка.
- Синтаксический сахар. Зачастую в синтаксис добавляются дополнительные правила, которые позволяют записывать действия другим способом - более компактным, понятным или удобным. Необязательные, как сахар в кофе. “Для вкуса”.
- Библиотеки. Строго говоря, библиотеки не являются частью языка, но так или иначе в языках программирования вводятся некие “стандартные библиотеки”, без которых писать работающие программы (даже самые простые) невозможно.
Все это есть и в Python, но если в “нормальных” языках программирования эти части не пересекаются, то здесь все иначе. В Python нет даже базовых типов - все данные являются частью объектной модели. Но при этом встроенную объектную модель нельзя расширять и она “зашита” прямо на уровне семантики и синтаксиса, а для работы некоторых из них необходимо подключение библиотек. Одно плавно переходит в другое и задача “знать Python” становится посильной разве что для Гвидо Ван Россума, автора и “пожизненного великодушного диктатора” языка. Нельзя знать язык, не зная все пять его составляющих, а каждая из них еще и непрерывно и порой драматически меняется от версии к версии. Поэтому изучение Python сродни умению переплыть Ла-Манш - вы не будете плавать в бассейне или озерах, вы раз за разом будете учиться переплывать Ла-Манш и однажды это сделаете. Или не сделаете. В любом случае - наберитесь сил. И терпения.