Дошкольником начинаешь развлекать себя играми на советском калькуляторе, и вскоре обнаруживаешь, что надо управлять десятками миллиардов записей в базах данных. На наши вопросы-о-том-как-становятся-программистами ответил Монс Андерсон, также известный как «Владимир Перепелица».

— Не помню, кем я хотел быть в детстве, но еще совсем маленьким читал детскую энциклопедию, и любимые тома были «Вещество и энергия», «Числа и фигуры», всё про химию, астрономию. У меня была домашняя лаба, где я делал взрывчатые вещества — до того, как начали изучать химию в школе.

А с чем-то программируемым я столкнулся так: у отца были «Электроника МК-52», «МК-61», программируемые калькуляторы. Соответственно, первая книжечка – это вот игровая программа, набирай и играй. Я точно помню «Крестики-нолики», «Морской бой» и еще была какая-то фигня логическая.

До сих пор помню комбинацию кнопочек В/О С/П, хотя уже не помню, что она значит.

Однажды я взял папин калькулятор и запорол ему большую хорошую инженерную программу. Калькулятор был с памятью, я её и затёр игрушкой какой-то. Он меня заставил программу перенабирать. Потом у меня появился Sinclair, спаянный вручную одним папиным знакомым. Нестандартный Sinclair: у него не было дисковода, так что все программы мои были write only. То есть включил, написал, потестировал, погонял, выключил.

Первый x86 компьютер — 200-й Pentium MMX с Windows 95 OSR2 — мне купили в декабре 1997 года, потому что я в 10 классе перешел в информатико-математическую школу и без компьютера было трудно. Я туда поставил Pascal, Delphi, подсмотрел у кого-то, как писать ассемблерные вставки. Так и писал на Pascal с ассемблерными вставками и бесил соседей тем, что не вылезаю из инета — модемный тариф был часов на 400 в месяц, а телефон — на спаренной с соседями линии.

Обязательно ли получать высшее образование?

У меня в 11 классе дипломов всяких пачечка была: химия — 2 место по стране, астрономия — 2 место, информатика на областном уровне (спортивное программирование никогда не было моей стезей), физика – тоже что-то типа того. Решили с родителями, что нужно поступать в крутой институт, и выбрали МФТИ. Это при том, что жили мы в Николаеве. Но — знакомый знакомого был деканом факультета физической и квантовой электроники МФТИ, и я, весь из себя олимпиадник, поехал в Москву сдавать вступительные экзамены. Не сдал.

Но так как в школу я пошел рано, до армии оставался год, так что я пошел на заочное отделение МФТИ. Учился, решал задачки, а днем работал на стройке коттеджей для «новых русских». Пилил камни, клал кирпичи, встречался с рэкетом — конец 90-х же!

Со второй попытки поступил, два года проучился, а на третий — бросил. Не подружился с математикой.

С самого первого курса, с первой лекции по матанализу, когда рассказывают абсолютно очевидные вещи и говорят, что сейчас это будут доказывать. Я так не могу. Вот физика, химия — их я люблю, понимаю, воспринимаю. Я могу прийти, вообще ничего не читав, сесть напротив физика и обсуждать с ним любую тему, которую он захочет. Если чего-то не знаю, не помню, я буду спрашивать, уточнять. А математика и матан, все эти доказательства, теоремы Коши и им подобные... К зимней сессии у меня было три незачета и недопуск к экзаменам. Конечно, мог сдать, но решил, что учиться меня научили, а продолжать вот это — неинтересно.

Я к тому моменту уже программировал что-то на заказ, так что очевидный ответ — да, чтобы зарабатывать деньги программированием или даже стать хорошим программистом, диплом не нужен. Именно по программированию у нас в вузе препод был довольно-таки «халявщиком», а по программе нужно было учить Pascal, который мы уже знали.

Для тех, кто не застал эту прекрасную эпоху: вот так выглядит Турбо Паскаль

В какой компании работать, а каких избегать?

Отчислился я в начале 2003, и после университета года четыре работал системным администратором и писал разные сайтики. Например, предыдущий сайт «Опоры России» напилил единолично, начиная с кода и базы данных и заканчивая версткой/дизайном.

Затем я устроился в хостинг-провайдер «Агава» Perl-разработчиком (в резюме у меня Perl`a не было, так что все удивились, когда я решил 4 толстых тестовых задания, которые никто никогда не решал). Я начал ковырять биллинг, начал параллельно изучать новые технологии, которые там применялись. Находил и исправлял нелепости в коде, вроде отправления 1500 SQL-запросов для отрисовки одной страницы. Узнал, что такое ORM, сам написал ORM. Узнал, что такое фреймворки, сам написал фреймворк.

Тут случился кризис 2008 года. «Агава» начала увольнять разработчиков (потому что они стоили дороже) и нанимать менеджеров. Менеджеры накапливались и все сильнее конфликтовали с друг другом, что неудивительно, когда на одного разработчика — 5-7 менеджеров.

У меня был запас денег, а значит и времени, для новых собеседований. Я ходил в Яндекс, он мне не понравился. Я ходил в Mail.ru. Mail.ru мне тогда сильно не понравился. Пошел в Рамблер, мне понравились технологии, которые у них использовались, понравились люди. Был еще где-то, в конторах типа ашмановской, но в итоге выбрал Рамблер.

Тогда в Рамблер только-только пришла Ольга Турищева. У них были деньги, несмотря на кризис: они уволили «эффективных менеджеров» и наняли разработчиков. На мой взгляд, все шло неплохо. Кризис пережили «на ура», начали развивать новые проекты. Писали, запускали, иногда решали, что, нет, надо сделать что-то другое. На моей памяти мы запустили, погоняли и похоронили Рамблер-Друзей. Был такой RSS-агрегатор, для него я писал и поддерживал код, собирающий новости на наш сервер.

Именно разработка этой штуки натолкнула меня на асинхронно-событийные технологии, которыми я сейчас занимаюсь как основным направлением.

Дальше мы писали Рамблер-Фото и это был отличнейший пример использования agile-методологий. Мы разрабатывали его четко по Scrum, начиная с прописывания всех use cases, менеджер сидел прямо с нами, мы делали daily scrums. Проект получился, на мой взгляд, и технологически и продуктово очень хорошим. Когда с него позже сняли всех разработчиков и практически всё администрирование, он проработал еще года два вообще без вмешательства. Я не знаю, зачем его было закрывать, неужели несчастные восемь серверов так много денег ели? Как говорили те, у кого оставался доступ к админке, пользовательские смски (то есть деньги), приходили до самого последнего дня.

Не знаю, что было в голове у тех, кто этим управлял. Это было уже во времена Афиши-Рамблер, «объединенной компании». Тогда сняли руководство технологического Рамблера и поставили медийное руководство Афиши. Наступил сложный период, когда вся эта объединенная компания пыталась найти себя. Нашла она себя в том, что теперь это не технологическая компания, а медийная, и курс развития будет соответствующий.

К этому моменту у большей части программистов (и не только) деморализация была полная. Разработчики говорили: «Мы не знаем, что мы делаем, зачем мы делаем и когда выкинут то, что мы делаем сейчас».

Потому что прямо на их глазах закрывали какие-то проекты, которые обсуждались, делались и были сделаны, Рамблер-Авиа, например.

Я точно так же, — уже не помню сколько, кажется, около года — руководил проектом Рамблер-Контакты, был такой мессенджер.

Техническое руководство, архитектура, плюс писал некоторые компоненты. И наш проект закрыли приблизительно так же. Хотя у нас был клиент с неплохим дизайном и интересным функционалом. У нас были офигительные отзывы. Приходили отзывы пользователей: «Классный клиент, отличный дизайн, делайте еще» и т.д.

Помню совсем нелепую историю. В какой-то момент нам сказали, что мы упёрлись в «потолок». По графику был рост пользователей, и где-то он остановился. Мы начали разбираться, обнаружили такую штуку: кто-то из рекламщиков фиганул рекламу «Скачай аську "Контакты"». Мы полезли в логи, в логах — тысячи айсикьюшных логинов. Они пытались войти в ICQ нашим клиентом, и Рамблер не мог их пустить. Конечно, они не стали нашими пользователями.

В общем, это были последние дни. Часть людей из менеджеров говорила: может быть, получится сохранить проект. Кто-то говорил: нет, проект под закрытие. Причем это говорилось еще до того, как были выяснены все подробности — что случилось, почему замедлился рост аудитории. «14 человек пилили проект два года, но мы все равно это закрываем». Не попытались никак сохранить, перенять экспертизу, просто потушили сервера, выкинув все потраченные ресурсы.

Вывод простой: хреновое управление способно убить вообще любой проект.

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

Разумеется, я из Рамблера ушел — в Mail.ru, куда меня давно звали. Пришел один, но значился как руководитель отдела, получил полномочия писать, что я хочу и как я хочу. Начал писать и набирать людей, отдел почти сразу вырос до пяти человек.

Формально я отношусь к «почте», но в основном делаю интеграционные проекты. Например, API для Почты, которые связывают её с внешним миром. Когда были более-менее написаны аватарки, связки со всякими соцсетями, меня попросили по-быстрому помочь с проектом «Облако». Я включился в работу и вот уже 2 года я занимаюсь Облаком@Mail.Ru.

Работаю на Perl я в довольно узкой сфере — занимаюсь асинхронными сетевыми приложениями. Их использует любой высоконагруженный софт, где большое количество запросов, либо большое количество одновременных соединений, много действий «наружу», основную часть которых составляет ожидание. Ходить в API других сервисов, обновлять сотни тысяч ключей и тому подобное.

В принципе, по ходу занимаюсь многими технологиями, выявляю и устраняю различные проблемы. Уровень нагрузки на один сервер у нас доходит до 30-40 тысяч запросов в секунду, и я обычно заморачиваюсь на тему высокой производительности кода. Я довольно-таки убежденный адепт подхода, что программы пишутся для компов, а не для людей, которые будут их потом читать или поддерживать. Мы пишем программы для компов, компы должны уметь их эффективно читать и исполнять.

Для примера, в свое время, когда я сюда пришел, то наткнулся на список рассылки с тестами производительности HTTP-серверов на Perl и понял, что они сильно проигрывают (в полтора раза!) имеющимся решениям на Python, Nodе. И возмутился.

Сел, составил план, как всё сделать, чего нужно написать, запланировал оптимизацию с использованием C. Но на практике я остановился еще до того, как воткнул сишные кусочки, потому что уже обошел по производительности все перловые решения, питоновые и нодовые. Я помню, что предыдущее решение было на уровне 2500-3000 запросов в секунду, Python брал 5000, Node – 6000, на чистом Перле у меня получилось 8000 на одном процессорном ядре.

В любой задаче может быть применён вот такой подход:
1. Ставим цель: достигнуть определённого решения.
2. Выбираем средства, которые могут удовлетворять решению.
3. Если средство подходит — PROFIT
4. Если не подходит (а так обычно и бывает), то либо решение дорабатываем напильником, либо, если не подходит очень сильно, делаем своё.
5. Проводим сравнительную характеристику нового решения и существующего.
6. Если существующее вдруг оказывается быстрее, то выявляем место или метод, за счёт которого получается такой результат, и вносим правки в новое решение.

Просто ли стать программистом?

Мне кажется, сейчас войти в профессию программиста гораздо проще, чем 15 лет назад.

Железо стало доступнее. В мои времена компьютер довольно много стоил, купить его ребенку — было серьезным решением для родителей.

Среды разработки были так себе, и языков популярных, быстро разворачиваемых, особо не было... Сейчас инструменты стали умнее, появились обучающие штуки, куда просто приходишь и решаешь задачи — Codeacademy, HTML Academy.

Codeacademy, самый популярный мировой проект обучения коду, предлагает писать код сразу, пропустив теоретическое обучение.

Конкуренция? На низком уровне конкуренция была всегда. Достаточно было кому-то набросать HTML-страничку, поставить тег с угловыми скобками и вопросами, и он уже начинал считать себя серверным программистом на PHP. Вообще не зная, что такое cgi, что такое заголовки, HTTP. На таком уровне конкуренция всегда есть. Когда человек уже поднимается по уровню, начинает понимать и архитектуру приложений, и как это все работает, даже рабочий язык становится не важен.

Проверить, насколько вам интересно программирование, очень просто: надо открыть любой обучающий проект и попробовать что-то сделать.

Например, известен JavaScript-эмулятор поведения лифтов. Там можно описать алгоритм, который управляет несколькими лифтами с учетом времени и количества пассажиров. Есть разные игрушки, есть задачи, где нужно просто описывать алгоритмы.

Но главный совет начинающим — такой: не стоит выбирать себе занятие и профессию исходя из желания заработать денег. Не нужно думать: программистам платят много, поэтому стану программистом. Платят тем, кто хорошо делает то, что он делает. Гораздо лучше — стать профессионалом в том, что тебе нравится. А если пошел не туда, начал заниматься, уже разобрался, зарабатываешь, но чувствуешь, что не твоё, — чем раньше это поймешь и попробуешь другое, тем лучше.

А кто вообще такой — «хороший программист»?

Я провел сотни две собеседований и полностью сменил подход к тому, как я это делаю. Был период, когда про мои собеседования говорили, что это ад, писали в фейсбуке: «Меня тут вообще изнасиловали, опустили». Раньше я использовал всякие штуки из языков программирования, какие-то хитрые подковыристые моменты, но потом понял, что они вообще ничего не показывают. Человек может знать весь набор заковыристых моментов, но обладать неживым мышлением. Я для себя вывел следующие критерии: у человека должно быть живое мышление, он должен довольно легко переключаться, думать с этой стороны, с другой, предложить что-то свое.

Он должен не бояться своей некомпетентности. Если я спрашиваю человека о чем-то и он этого не знает, пусть спокойно скажет: «я не знаю». Я вот не боюсь сказать, что чего-то не знаю. Никто не знает всего. Обычно это становится проблемой: я встречал людей, которые боятся своё незнание показать, они будут тупить неделями, чтобы его скрыть. Это ужасно.

Должен быть интерес к улучшению, алгоритмам и вообще понимание того, как функционирует железо. Как работает процессор, как работает память, как они общаются, как вообще работают программы. Программа — это не просто нечто, написанное на бумажке, которое как-то там в облаках исполняется. Должно быть понимание, что эта операция означает «загрузить вот это в память», из памяти по кусочкам загрузить в процессор и там обработать.

Не могу выразить, что такое «талант программиста». Я много людей видел, и бывает, приходишь на собеседование, общаешься с человеком и понимаешь, у него обширный бэкграунд и работал много, но — ему не нравится. Нет, он спокойно сядет и будет работать, но он не талантливый программист. А с кем-то общаешься, понимаешь, что у него полгода после института и три скрипта, но вот его «прёт».

Как говорится, человеку нравится то, к чему у него талант, и у него талант к тому, что нравится.

Если ему интересно заниматься тем, чем он занимается, в частности — программированием, то он будет развиваться. Здесь самое опасное и страшное, на мой взгляд: если человек пришел в программирование, ему оно не очень нравится, но он научился и не стремится к развитию. Я встречал нескольких людей, которые просидели долго в маленьких компаниях. Там им дали должности ведущих разработчиков, технических директоров и руководителей.

У такого человека вроде бы и большая зарплата, он десять лет сидит, но сидит на технологиях прошлого века. В подчинении никого нет, к примеру, он единственный программист или были коллеги, но они ушли. И он в тупике. Ему нужно либо резать пополам зарплату и идти куда-то выше, чтобы научиться чему-то, либо заниматься самому.

Важно научиться удерживать в голове большие объемы данных. Самые сложные проекты (по моему опыту) — те которые, тяжело представить в голове. Если алгоритм укладывается схематично на листике, его не проблема рассмотреть, продумать и написать. Потому что пишешь все равно из того, что представляешь в голове. Если ты всю систему не можешь загрузить в голову, то не можешь по ходу учитывать какие-то моменты.

Если я сажусь и мне нужно что-то решить, я не пишу сразу. Я очень долго могу это дело обдумывать и составлять карту того, что я буду писать.

А кто-то пишет код, не представляя, как программа вообще функционирует. Это как в школе различаются те, кто зубрит и те, кто понимает. Да, можно посмотреть документацию, написать код, и оно даже будет работать. Но сам автор не понимает, почему оно работает.

Вообще, с HTML в самом начале (1998-й? 1999-й?) я столкнулся так – заходил в веб, видел, что тут что-то мигает, крутится. Мне становилось интересно: а как это сделать? а я тоже хочу так сделать! Не для того, чтобы показать кому-то, а просто сделать для себя. Когда нет такого интереса что-то сделать для себя, мне кажется, вряд ли можно взять и стать программистом. Нужен живой интерес.

Из личного опыта: у меня среди программистов в отделе есть двое бывших сисадминов. Один был на техфоруме, послушал мой доклад, вспомнил, что когда-то чуть-чуть писал на Perl, и решил, что хочет продолжить. Я его взял, подучил, и он мне очень помогает в плане подготовки кода к эксплуатации. То есть он знает то, чего обычно не знают программисты — за счет личного опыта в эксплуатации. Другой — из местных админов. Он был админом, который выкатывал наши компоненты, мы с ним по ходу общались, и как-то в полушутку я сказал: иди в программисты. В общем, его инженерные знания очень ему помогли. Для него изучить сам язык было делом пары недель.

Как выбирают, на чём программировать?

Расскажу, как я вообще столкнулся с Perl, моим любимым языком программирования. В институте я писал задачки на Pascal, а для себя начал учить HTML, CSS, JavaScript. Даже тогда в каком-то 2000 году у меня была галерея картинок-фоток, которая подгружалась динамически, зачаточный AJAX (тогда и слова такого не было). В какой-то момент подумал: «хочу гостевую книгу». А её на JavaScript не сделаешь. Пошел к одному знакомому, говорю: «Дай чего-нибудь для гостевой книги». Получил Perl-скрипт. Принес, положил – Internal Server Error. Пришлось немножко разобраться, погуглить, что это такое. Ну а дальше начал править скрипт под себя.

Символ языка Ruby — рубин, языка Python — два червяка две змеи, символ Perl — верблюд. Не спрашивайте.

Как-то так сложилось, что правил я этот язык даже без документации: в скрипте есть это, а мне нужно вот это; я подправлю, а оно работает. Это первый язык, который оказался органично совместим с моим мозгом — я без документации доходил до работающих решений.

Потом мы развернули местный институтский форум: взяли WebBBS (тоже перловую), развернули. И понеслась. Я его очень много патчил, допиливал, делал всякие расширения и оптимизации.

Приблизительно на 50000 сообщений в архиве оно начало подтормаживать и мы переписали все на C (знания Perl просто не хватило тогда). У меня всегда в Pascal и в C была проблема с указателями, я не понимал, как они работают. Указатели были какими-то непонятными символами, амперсандами, звездочками, я не понимал, что с ними делать. Вот в процессе написания форума мне друг Серега очень просто и ненавязчиво объяснил управление памятью и указатели. Я вдруг легко это осознал и начал писать на C.

Сталкивался со многими языками. Я писал на технологиях ASP и ASP.net, используя разные языки: C#, Jscript, Visual Basic. Когда отлаживал один скрипт на Jscript с регулярными выражениями, использовал встроенный движок браузера Firefox и между делом нашел в Firefox дыру в безопасности.

Несколько лет после университета я был по сути фрилансером, пока не попалась вакансия «Perl-разработчик» в Агаве. А ведь пока я писал на всех этих разных языках и где-то админил, я параллельно писал на Perl. Что-нибудь для себя, что-нибудь обсчитать, переделать... Так или иначе, я его изучал. В итоге, когда я увидел вакансию на Perl на довольно неплохие деньги, примерно в полтора раза больше, чем то, что я получал на текущем месте работы, я подумал: «Блин, а почему бы и нет?».

К слову о деньгах — я могу сказать, что если человек хочет много денег и при этом он довольно-таки педант, сейчас ему, наверное, стоит ориентироваться на Java.

Это банки, это кровавый enterprise, и там не будет какой-нибудь свободы выбора архитектуры. Сколько я джавистов собеседовал — у них очень завышена по рынку зарплатная планка при том, что писать они умеют простейшие процедуры-обработчики для сервера Tomcat или что-то подобное. Принял запрос, сделал два запроса через… кстати, да, базы данных такой джавист тоже не будет знать, потому что он делает все запросы через Hibernate, который настроил какой-нибудь местный DBA с оракловыми сертификатами. :)

А если хочется чего-нибудь такого живого, разнообразного, всякого, но, тем не менее, тоже хорошо оплачиваемого, это Perl и С. А если такого стартаперского: по-быстренькому чего-нибудь собрать, запустить и показать инвесторам, — то тут, наверное, стоит посмотреть на Ruby, Go, может быть, Python. Тут уже как понравится. Кому-то, может, по душе придется Javascript с Angular и MongoDB.

Человек должен органично принимать синтаксис и подходы того языка, на котором он собирается писать. Если человеку не нравится писать, он пишет плохой код.

Я видел джавистов, которые писали на Perl. Это ужасно. Они постоянно недовольны, они постоянно возмущаются, им всё не нравится, и они стремятся все сделать по-своему. Они стремятся сделать всю эту гору классов, абстрактные фабрики, которые в Perl не нужны. Там это можно сделать, но он про другое. В Perl вообще можно очень многое сделать, что есть в других языках, но оно не является для этого языка органичным.

Perl — довольно своеобразный язык. Его автор — лингвист, и при разработке самого синтаксиса языка он применял всякие, скажем так, лингвистические подходы. Основной принцип — TIMTOWTDI — «любую вещь можно сделать многими способами» (there is more than one way to do it).

Когда кто-то говорит про Перл, что он сложный, что его невозможно читать, я могу ответить только одно: можно взять китайский язык и говорить, что язык – ужасный, его невозможно читать, ничего не понятно.

Любой язык, любую технологию, с которой ты сталкиваешься, нужно сначала изучить. Есть уровень чтения, есть уровень записи — уровень, когда ты можешь на языке писать. Большинство обычно изучают маленький объем, начинают считать, что они знают язык, и когда сталкиваются с программами, написанными с применением сложного синтаксиса, просто не могут их прочесть и начинают утверждать, что язык плох.

Единственное, для чего, на мой взгляд, Перл плохенько подходит, – написание драйверов. Сложно мне представить, как на Перле писать драйвера. Еще его слабая сторона – математика, она медленнее в 20-30 раз, чем в C. То есть если нам нужно обсчитать детерминант матрицы 100*100, для этого нужно брать C или какие-то специально заточенные под это дело языки.

Я писал на Java и могу сказать, что JVM – отличная вещь, очень быстрая, на ней можно написать очень высокопроизводительную штуку. Был у нас проект «Рамблер-Контакты» с jabber-сервером на джаве. И джависты, не могли нормально сделать XML-парсер, у них все время либо тормозил, либо криво парсил. Поэтому я взял свой сишный парсер, который у меня был написан для Perl, и перегнал его на джаву. Просто написал по-сишному. Он парсил, возможно, в несколько раз быстрее, чем то, что у них было до этого. И не глючил.

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

Я могу сделать что угодно: такие запросы отправить, распарсить что угодно, собрать, подключить Си и так далее. С другим языком мне придется очень долго достигать такого же уровня.

Если бы не было Perl, я бы, наверное, остановился на Ruby. Но Ruby не могло быть без Перла, у которого он многое позаимствовал.

Меня спрашивают, почему я в свое время не изучил Python? Питоновых вакансий же больше. А я последние несколько лет не ищу вакансии — меня уже зовут: «Приходи к нам пособеседоваться», «Не интересно ли тебе перейти». Постоянно висит одна: зазывают игрушки писать, а я всё отказываюсь.

Чем вдохновляться?

Лично мне нравится создавать и менять что-то созданное. В реальном мире с реальными материалами… я многими вещами занимался: обработкой материалов, литьем металла — там очень сложно что-то скопировать, что-то доработать. Заинтересовался ювелирным литьем, но ведь запредельные деньги нужны, чтобы достать оборудование. Можно, конечно, по старинке, как это делали много лет назад, но сейчас есть классные устройства для того, чтобы ювелирку делать. Только цена попытки — огромная. А в программировании можно пробовать себя практически бесплатно, только ценой времени. И это большое удовольствие.

Еще, наверное, здесь играет роль честолюбие. Мне приятно, когда мои какие-то компоненты, продукты или еще какие модули — быстрее всех прочих, в рамках одного языка или в рамках разных языков.

Периодически случается так: я сажусь и пишу новые модули, используя какие-то новые подходы, способы оптимизации. Я их пишу, сравниваю с остальными, удовлетворяюсь тем, что они — самые быстрые, и использую их в течение какого-нибудь времени. Проходит время — появляются новые технологии, новые модули, кто-то берет те же идеи у меня, либо еще откуда-то (либо используются другие библиотеки), меня догоняют, перегоняют, и я смотрю, что бы еще дооптимизировать.

Правда, с этим связано то, что я — плохой мейнтейнер. Я всё, что пишу, выкладываю на github и на CPAN, но пересобирать старые модули — лениво (хотя я стараюсь). Пример – есть у меня XML Parser Style — модуль-плагин к XML Parser’у. Это первая версия. Потом я нахожу что-то лучше, удобнее, интереснее, пишу следующий модуль. Потом я прекращаю их использовать и пишу свой XML Parser, очень крутой, быстрый. И проблема в том, что мне присылают патчи в те модули, которыми я перестал пользоваться. Залезаешь в код трехлетней давности смотришь: «Блин, да это неэффективно, я так писал? Эх, да это все переписать надо». А переписывать что-то старое неинтересно — зачем?

Как заниматься (само)обучением?

Я не прочитал за всю свою историю ни одной айтишной книжки — так, чтоб от начала и до конца. Кроме Нортона и его ассемблера. И немножко Кернигана и Ричи, которых я читал, когда уже много писал на Си. Просто было интересно открыть и читать так: это знаю, тут знаю, о, это интересно, знаю, знаю, знаю.

Основной материал моего обучения – это документация, это статьи, это исходники. Очень люблю читать исходники. Еще есть эксперименты на практике, и соревнования, и, в принципе, я стараюсь следить за тем, что происходит вообще в среде, в разрезе «а что бывает, если привносить в Perl что-нибудь из других языков».

Проходил сертификацию на Scrum, изучал, но это не было остро необходимым. Не то что я вдруг понимал: блин, надо бы поучиться! Мне всегда хватало собственного интереса. Когда в какой-то момент не хватало архитектурных знаний, я садился и читал: про базы данных, про сети.

Я немного преподавал в МФТИ... до того, как меня оттуда отчислили. В первом семестре по информатике был уже изученный вдоль и поперек Pascal. 10 минут на задачу, остальное времени на этой же машине сидишь, пишешь какие-нибудь фрактальчики на ассемблере. Препод наш это увидел и сказал: «Ну всё!». И говорит (мне и еще одному парню, который вместо ассемблера на С++ писал): «Раз вы тут такие все из себя и вам неинтересно, вот ты читаешь одногруппникам курс C++ полгода, а ты читаешь ассемблер. А я вам ставлю зачет за весь год, идет?». Ну ок.

Преподавал я приблизительно так: книжка Нортона, один день я сижу сам все эти задачки решаю-изучаю, придумываю 14 заданий разных, прихожу-рассказываю, даю задания. На удивление, моя группа довольно неплохо на выходе сдала ассемблер.

С недавнего времени совместно с двумя другими крутыми Perl-разработчиками я веду курс программирования на Perl в МГУ. Очень интересный опыт, который показал, что среди большой выборки людей обязательно найдётся немало тех, кому этот язык придётся по душе.

Мне вообще нравится рассказывать. Когда еще в Агаве работал и какие-то вещи интересные накапывал, меня просили рассказать. Я рассказал на маленькой внутриперловой тусовке на Moscow.pm. Оказалось, что это всем интересно, и попросили рассказать на большой конференции. Я пошел на большую — YAPC::Russia 2008 — рассказал на сорок минут плюс весь обед. Мне понравилось. Я рассказывал и на конференции Highload, и еще где-то (кажется, на devcon).

Потом подумал: все, что знаю, я рассказал. Но практика показала, что люди даже того, что я уже не раз рассказывал, все равно не знают. И это можно повторять. А тут подвернулась возможность рассказать это студентам. Причем у студентов мозги не заморочены мыслями, что Perl – это прошлый век. Они готовы смотреть на самые разные технологии, им всё интересно.

Чего ждать от будущего?

Размышлять, куда всё движется, приходится — раз уж я этим занимаюсь. На самом деле, я не вижу предпосылок для кардинальных изменений в программировании. Хорошо, за 20-30 лет языки изменятся: мы будем писать не просто программы, а программы, которые пишут программы.

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

На самом деле, всё лежит в бинарной, математической логике. Возможно, появятся вещи, более приспособленные под то, что называется «нечеткой логикой». Тогда увидим еще какие-то языки программирования и приспособления, заточенные под это. Всякие нечеткие логики распознавания изображений, например, — вот в этой сфере лежат. Но сам я подобные математические применения недолюбливаю и не особо ими занимаюсь, мне нравится писать в бинарной логике: когда есть алгоритм, четкая размерность... Думаю, что эта модель сохранится в течение большей части нашей жизни.

Напоследок мы решили сыграть с мистером Андерсоном блиц-раунд в «вопрос-ответ».

— Расскажи какую-нибудь смешную историю времен школьного программирования?

Когда я перешел в информатико-математическую школу в 10 классе, одноклассники уже писали на Pascal, им его с 8 класса давали. Я быстренько справился с его синтаксисом, но старался программы сдавать за урок. Потому что я не умел сохранять! Ни одна зараза не рассказала мне, как сохранить на эту чёртову дискету. Казалось бы, возьми да узнай, но как-то у меня не получалось с сохранением, уже не помню почему именно. Первый семестр 10 класса — оценка у меня еле-еле 3, просто потому что я не умел сохранять. Родители подумали-подумали, решили, что при таких раскладах недолго мне учиться в этой школе, и купили домашний компьютер.

— А какая первая игрушка была на домашнем компьютере?

Duke Nukem 3D!

Алексей Капранов считает, что каждый программист должен поработать в стартапе... Был такой опыт?

Я уходил из «Агавы» — делать сайты. Собрались с несколькими человеками, прикинули, заказов было уже порядочно на тот момент — каждый третий из знакомых (такое было окружение) спрашивал: а могу ли я ему сделать сайтик? Я как-то начал делать сайты, но с чисто программерской стороны закопался: думал, сейчас сделаю универсальный фреймворк. Идея была такая: напилю конструктор, а дальше буду на нём собирать сайты.

Практика показала, что те скиллы, которые у меня были тогда, только меня могли обеспечивать. Я не видел путей к расширению. Мог бы взять еще людей, но они бы делали, на мой взгляд, либо также, либо хуже с той же скоростью, поэтому мы бы просто делили эти деньги. Я не видел какого-то роста. Сдал, какие были, сайты, решил на это дело забить и вернулся в «Агаву» с повышением зарплаты относительно предыдущей. Оказалось, что на тот момент штатная работа была доходнее, чем фрилансинг.

Мне кажется, что из меня плохой стартапер, потому что я хочу делать качественнее, даже если это требует времени. Какой-нибудь студент, который позволит себе быстро наклепать прототип и показать инвестору, может быть более успешным стартапером, чем я.

— Ты о чем-то жалеешь из своей трудовой биографии?

Жалею, что потратил первые годы на всякую фигню, сайтики эти, сисадминство. Какой-то опыт оно дало, но этот опыт я получил бы за гораздо меньшее время. Думаю, мне бы понравилось, если бы я пошел в Mail.ru плюс-минус сразу, как только бросил институт и понял, что компы чинить — это не моё.

Тем, кто моложе, я бы посоветовал помнить, что время – единственный ценный ресурс.

Мы его обычно меняем на опыт, и опыт — это тоже неплохо. Просто потом становится сложнее, становится больше обязанностей, теряется свобода действий. Будучи студентом и умея жить на полторы тысячи рублей в месяц (начало 2000-х), можно себе позволить вообще что угодно, любой стартап. Но когда у тебя семья и большая ипотека, всё становится сложнее.

Автор исходника заглавной фотографии — Вадим Францев

Поделиться