Пропитон

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

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

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

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

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

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

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

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

Бейсик XXI века

Да, это Python. Подобно тому, как пост-бейсиковая эпоха оставила после себя «проклятие GOTO» и «макаронное программирование», пост-пайтоновые времена обещают нам кризис посерьезней.

Будет аллергия на «сахар», будет конфликт «концептуалистов» с «практиками», будет массовая миграция на пост-пайтоновские языки и другие беды, доселе неведомые.

И его начнут стыдиться и избегать, точно так же, как сейчас стыдятся и избегают BASIC и PHP. Но это будет потом. Подождем…

Про SQL

В запросах полям можно назначать синонимы. Но по ним нельзя сортировать.

select name as username from users order by username

Стандарт говорит нам «используйте реальные имена полей, потому что на момент сортировки синонимы еще не определены».

Ладно, пример не показателен. Но если одна и та же таблица используется несколько раз, то использование реальных имен вызывает путаницу — из какой именно части запроса это поле?

Выход я, конечно, нашел. Если использовать синонимы для таблиц, то в сочетании с реальными полями неоднозначность исчезает. То есть для таблиц синонимы определяются до сортировки, а для полей — после. Странная какая-то логика.

Lua

Католицизм — это круто

Кевин Смит, «Догма».

Lua — это язык программирования, написанный подразделением технологий компьютерной графики Папского Католического университета Рио-Де-Жанейро. Все-таки католики знают толк в миссионерстве — о языке Lua нет даже нейтральных отзывов, только восторженные. И восторг этот, как оказалось, вполне оправдан.

Lua («луна» по-португальски) проектировался — и до сих пор является непревзойденным в этом своем качестве — как встраиваемый язык сценариев. Он компактен; он прост — изучается без преувеличения за час; однако простота не синоним ограниченности, он мощен — поддерживает императивный, функциональный, объектно-ориентированный подходы, в нем даже есть многопоточность.

И он быстр — об этом говорит успешное применение в графике вообще и в видеоиграх в частности. В простеньком Angry Birds и в «навороченном» World of Warcraft, во вполне коммерческом Adobe Lightroom и в полностью свободном GIMP, в системном OpenWRT и прикладном SciTe — то есть везде, где быстрая низкоуровневая платформа нуждается в удобной и гибкой логической надстройке.

Lua работает везде. От мобильных устройств на Android, iOS и Symbian (и даже проще — игрушечных роботов Lego Mindstorm тоже можно программировать на Lua) до мейнфреймов. Впрочем, на мейнфрейме можно запустить все, что угодно, это не особенно интересно. Зато интересна поддержка всех разновидностей Windows, Linux и UNIX. Да, и MacOS с WindowsPhone тоже.

Определенно, Бог создал мир за шесть дней потому, что написал его на Lua.

Perl

perl -wle '(1 x $_) !~ /^(11+)\1+$/ && print while ++ $_'

Программа для вывода простых чисел. Вот это я понимаю, «магия слова».

XP

Экстремальное программирование («Extreme Programming») это дисциплина разработки программного обеспечения и ведения бизнеса в этой области, которая фокусирует усилия обеих сторон (программистов и бизнесменов) на общих целях. Команды, использующие ХР, производят качественное программное обеспечение с весьма большой скоростью.

Не в этом ли причина всеобщей болезни сорванных сроков — Doom 3, Half-Life 2, Need4Speed Carbon? Не могло это быть простым совпадением, что-то одновременно повлияло на монстров игрового рынка. Теперь понятно — «модная болезнь» ударила по связке «цена-время-качество», закона сохранения энергии ведь никто не отменял.

Причем на Западе это фактор «время», а у нас «качество» — Lada Racing Club, вышедший примерно в то же время, доводился до ума уже после выхода в продажу. Болезнь одна, только симптомы разные.