Моя история отношений с компьютерами началась довольно рано — родители купили первый семейный компьютер, когда мне было лет шесть, и я практически сразу понял, что это самая крутая вещь во Вселенной. На нём стояла Windows 95, и одно из первых воспоминаний о ней — как я несколько дней подряд случайно убивал систему разными экспериментами, после чего отец полночи снова переустанавливал систему. Я облазил все настройки в Control Panel, пытаясь понять смысл за аббревиатурами и представить себе, зачем может понадобится столько видов «интернета» (ISDN, PPTP, TCP/IP, мост).
Затем была Windows 98, и странная книжка «Windows 98 для профессионалов», в которой была роковая глава про скрипты на VBScript. Я переписывал скрипты из неё в Блокнот, запускал, они не работали, я пытался найти ошибки; затем начал писать игру про колонизацию далекого космоса, построенную целиком на попапах с Да/Отмена (их было легко вызвать из скрипта).
Потом в руки попалась книга про System V Unix, начал играть в орлянку и покатился.
Но это, несомненно, магия — ты пишешь какие-то полупонятные слова-заклинания, и мир, немножечко, но меняется.
Программирование почти сразу пробудило ощущение того, что возможно если не всё, то очень многое. Программистов часто сравнивают с художниками (Пол Грэм даже выпустил книгу с таким названием), но я никогда не испытывал такого предвкушения от чистого листа А3, как от пустого файла в текстовом редакторе. Когда есть понимание задачи, понимание возможностей инструментов, и тысячи способов преодолеть пропасть между ними.
Говорят, что шахматисты запоминают тысячи вариаций и тактик, это иногда моделируют как decision trees: если у нас есть такое состояние поля, то отсюда можно перейти в состояния А, Б, В, и В — самое выгодное. Мне кажется, что в моей голове происходит то же самое, но про код: как смоделируем этот кусок проблемы, к чему это может привести, как справиться с последствиями.
И когда я попадаю в ситуацию, где ни один паттерн не матчится, то как будто теряю ориентацию в пространстве. Такое происходило несколько раз за последние пару недель, когда я смотрел на шестой пёрл. С учётом того, что это вообще не тот пёрл из анекдотов, то стоит думать о нём как о другом языке. К счастью, у дефолтной реализации название Rakudo, пока буду называть так.
У меня пока есть две мысли. С одной стороны, этот язык сделан теми, кто любит мощные инструменты, для таких же; с другой стороны, это как если бы язык программирования настраивался так же гибко, как лучшие текстовые редакторы. Не нравится писать кавычки? Можно писать qq(string goes here)
. Устал типизировать? Ну не пиши эти типы. Хочешь — пиши императивно, функционально, в духе ООП, или вообще реактивно, язык не против, главное — не запутаться самому.
При этом он не сильно потерял в той утилитарности, которой мне нравился пятый пёрл. Прочитать файл: $path.IO.slurp (понятно, что это только один из вариантов). Паттерн-матчинг в голове перегружен и сбоит; может это и называется «выйти из зоны комфорта».
С одной стороны — ощущение возможности всего, с другой — восхищение мощностью компьютеров, тем самым compute, который можно купить в Амазоне или Гугл-облаке.
Это как мощный автомобиль — есть что-то притягательное в raw power. Мне как-то рассказали байку в Алмате, мол, какой-то нувориш купил себе очень мощный Ламборджини с крайне низкой посадкой — настолько низкой, что он может проехаться только по центральной улице и обратно, иначе застрянет.
Я понимаю тот же appeal в отношении компьютеров: даже если эту вычислительную мощность негде толком применить, обладать ею приятно. Впрочем, эта аналогия не совсем верна — компьютеры так продвинулись за мою жизнь в скорости, что если бы автомобили развивались также, то были бы уже во много раз быстрее скорости звука (но меньше скорости света).
Последний пример из такого безумного прогресса: новый Мак Про, который можно сконфигурировать на 28 ядер и полтора терабайта оперативной памяти. Есть ли у меня в обычной жизни сценарии, где мне понадобится столько ресурсов? Нет. Хочется ли мне, чтобы такие ресурсы у меня были? Конечно.