Чёрная Пятница на mkdev! С 24 по 26 ноября скидки 30% на обучение у всех менторов.

Получить скидку >

Victor shepelev aka zverok

Программистом я, кажется, родился. По крайней мере, когда году в 95-м знакомые дали почитать какую-то книжку с картинками вроде «Basic для самых маленьких», в четырёх томах с картинками — читал я её запоем, даром что попробовать всё прочитанное было не на чем.

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

Помогли сразу две неприятности: во-первых, в школе началась информатика, по которой задавали домашки. Во-вторых, катаясь на санках под Рождество, я крепко въехал в неожиданный пень правой ногой — и провалялся всю зиму на диване возле компьютера. Пройдя за первые же пару недель обоих «Принцев», «Dangerous Dave» и ещё пару хитов тех времён, я от скуки добрался-таки до окошка ввода Borland Pascal 5. И пропал.

Внезапно оказалось, что программировать «по-настоящему» (да ещё обладая ленивым и непоседливым умом, мешающим штудировать книжки) намного сложнее, чем читать программы в книжках. Но зато — и намного интереснее. Кажется, я никогда в жизни не делал учебных заданий из книжек — сразу стал пытался написать какие-то игры, «демки», шуточные программы и ужасно ими гордился (совершенно этим измучив друзей, которые приходили поиграть на компьютере, а не рассматривать как цифирки от одного до двадцати переливаются всеми — 16-ю — доступными моему компьютеру цветами). В результате перекрашивать текст на экране и пищать спикером компьютера я научился раньше чем освоил понятие цикла (и даже раньше чем освоил копи-пейст — в тогдашних досовских программах это было довольно нетривиально... так что для повторения 20 раз похожего звукового эффекта я просто заново набирал 20 раз одну и ту же последовательность команд, почему нет?)

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

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

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

...В общем, учиться в своём программистском ВУЗе я бросил где-то в середине второго курса.

Нет, иногда ещё заходил на пары, и даже в результате стечения обстоятельств закончил его с красным дипломом, но в остальном — 80% «дисциплин» прошло мимо. Тут, конечно, не обошлось без бурной молодости, увлечения театром, девушками и алкоголем... Но главной причиной оказалась скука. В несчастном моём ВУЗе, как оказалось, все преподаватели делились на «старых мастеров» (вроде 70-летней системной программистки, большого знатока ассемблера и побитовой оптимизации) и «теоретиков» (в плохом смысле этого слова) среднего возраста — включая человека, который C++ преподавал нам, изучая его по «самоучителю для начинающих» на переменах между парами. 1% молодых идеалистов, которые успевали совмещать преподавание нам с работой на реальных проектах, ничего в общем не менял.

Странный совет №2. Программированию лучше учиться у практиков, программирование — это ремесло, мастерство и навыки в гораздо большей степени, чем знание и запоминание.

Но даже унылые преподаватели и бессмысленное структурирование вузовских дисциплин любовь к программированию у меня не отбили. Наоборот — вызвали здоровую подростковую злость «я во всём этом могу разобраться гораздо лучше!» И поэтому, после периода увлечения теми же демками и игрушками что раньше, только уже под Windows и на Delphi, я переключился на глобальные идеи и попытки разобраться «как вообще что в этом вашем IT работает».

На смену Delphi очень скоро пришёл C++ (до сих пор люблю! несмотря на всю его чудовищность), на смену самоучителям и справочникам — книжки с теорией разработки, управления проектами «и вообще». Один из немногих клёвых курсов в университете — разработка компиляторов — заставил заинтересоваться внутренностями языков программирования, и тем какие они вообще бывают, и собрать знатную электронную библиотеку даже по самым странным и малоизвестным из них. Как ни странно, этот бардачный период самообразования впоследствии много раз оказывался полезным (но об этом мы ещё поговорим ниже).

Странный совет №3. Несмотря на предыдущий совет, в какой-то момент жизни разработчика оказывается, что теория и понимание основ и деталей — очень нужны. Важно этот момент не пропустить, а лучше — предупредить, и заставить себя любопытствовать Большими Теоретическими Книжками. Тем более что они, зачастую, оказываются неожиданно интересными.

Например — полистайте неустаревающую классику, вроде SICP, Code Complete, Mythical Man-Month; открывающие глаза «Интерфейс» Джеффа Раскина или «Искусство программирования в UNIX» (даже если собираетесь программировать под iOS!); несколько устаревшие, но любопытные книжки классиков современных — «Паттерны Проектирования» Банды Четырёх или «Экстремальное Программирование» Кента Бека; найдётся свободная минутка — загляните в «Дизайн и эволюцию С++» Страуструпа, читается как хороший научный детектив.

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

Оказалось, что мне не нравится работать в офисе. Точнее совсем не нравится. Так с тех пор и не работал.

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

Странный совет №4. «Работать программистом» — это ещё не всё. Те, кто только начинают свой путь в индустрию, часто забывают задуматься, чем и как вообще хотят заниматься, с кем работать, как организовывать своё время... И если для первой работы подход «лишь бы наняли и зарплату платили» может быть вполне ок — то позже совершенно не стыдно остановиться и подумать «а туда ли я иду? а чего я вообще хочу?»

Честно говоря, уходил я из офиса с Секретной Целью — написать свою софтину, продавать её долларов за 20-30 и Сказочно Обогатиться (это был такой — в начале двухтысячных уже заметно утихший — бум shareware софта, что-то вроде бума мобильных приложений в 2010-х). Ничего из этого, надо сказать, не вышло — слишком много было идей, и слишком мало, как в процессе выяснилось, умений — в области предпринимательства, планирования да и, чего уж там, собственно программирования. Оказалось, что несмотря на довольно глубокие познания в C++ я по-прежнему затруднялся их приложить чтобы сделать что-то готовое — включая интерфейс, документацию, план версий, разумное ограничение фич...

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

Но если читатель здесь начал сочувствовать моей семье, голодающей — как семья всякого «художника в поисках себя» — то совершенно напрасно. Внезапно оказалось, что интерес к информационным технологиям и тонны прочитанных книжек, блогов и дискуссий позволяют зарабатывать деньги довольно удивительными способами. Например, я успел побыть журналистом легендарной московской «Компьютерры» (бумажного журнала), колумнистом и новостником в полудюжине других IT-изданий; самопровозглашённым (то есть без профильного диплома, но с тонной довольных клиентов) консультантом по удобству пользовательских интерфейсов; автором технической документации к паре крупных систем, обозревателем копеечного софта для огромного каталога... В общем, было даже весело.

Самое забавное, что значительная часть этого опыта потом пригодилась — и продолжает пригождаться. По необходимости, чтобы не стыдно было за собственные тексты, я потихоньку разобрался в истории информационных технологий, теории информационной архитектуры, способах быстрого анализа новых технологий... Всё это ужасно помогает посмотреть на рабочие проблемы с нескольких разных сторон.

А ещё за время журналистской работы я встретился с несколькими прекрасными редакторами, которые умели превращать длинный и запутанный текст в короткий и внятный. Потом оказалось что с кодом тоже можно и нужно так поступать.

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

Всё это время я не терял надежды и не оставлял попыток найти Свой Язык (окончательно лишив этого звания слишком низкоуровневый C++) и начать писать Что-Нибудь Офигенное. Год тащился от языка D и что-то такое на нём писал. Ненадолго увлёкся Perl-ом. Прочитал пару книжек по Python-у и не проникся. И прочая, и прочая.

Потом на каком-то форуме разработчиков кто-то похвалил неведомый мне раньше язык Ruby — и тут я пропал окончательно.

Ruby оказался именно тем языком, на котором мне было удобно думать (я, напомню, совершенно уверен что каждый из нас может найти тот язык, на котором именно тебе писать комфортно и легко), так что в течение года я перечитал всю доступную по нему литературу (начиная с прекрасного и самодостаточного учебника от Pragmatic Programmers — Programming Ruby), залез в исходники интерпретатора и разобрался как и что работает, активно писал письма на чудовищном английском в рассылку ruby-talk — тогда ещё самому Матцу хватало времени отвечать на вопросы новичков, подписался на все доступные блоги известных рубистов...

...и, наконец-то, написал Большой Работающий Проект.

Вспоминать о том проекте немножко стыдно, но если честно — ужасно приятно. Получился он случайно: в качестве помощи другу, открывшему маленький компьютерный магазин, я сделал простенький скрипт для разбора разноформатных Excel-файлов с комплектующими, которые присылали поставщики. Потом сделал к этому скрипту Windows-интерфейс для сравнения разных процессоров и клавиатур. Потом добавил в него фичу «считать нашу цену на основе цен поставщиков». И собирать заказы. И отслеживать их состояние. И учитывать прибыли. И формировать документы... Магазин расширялся, и (уже за деньги — это была такая, параллельно с журналистикой, уже нормальная работа на два-три часа в день) система стала многопользовательской, в неё добавлялся учёт складских остатков, бакапы, разделение ролей, экспорт на сайт...

Самое смешное в этой истории — как я с самого начала влюбился в Ruby, так с самого начала же невзлюбил Рельсы. Так что когда система стала многопользовательской — нормальным веб-сервером с браузерными клиентами — я как-то случайно написал свой веб-фреймворк с нуля. На гитхабе его не ищите — это было довольно чудовищное порождение Тьмы, почти полностью копирующее модный тогда Camping — зато в процессе я, раньше далёкий от Веба, между делом разобрался в архитектуре MVC и её альтернативах, логике работы HTTP-серверов, и многих других вещах, от которых Рельсы бы меня нежно уберегли.

Проект, кстати, до сих пор используется и развивается (к счастью, уже не мной.... брр, вспомнить страшно!), успешно поддерживая функционирование крупного магазина с несколькими филиалами и десятками сотрудников.

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

А дальше...

А дальше — вот. Работаю в крупной компании, делаю кучу опенсорса, выступаю на конференциях, учу студентов. Потому что больше всего в своей работе я люблю «разобраться и объяснить» — хоть разобраться в задаче и объяснить глупому компьютеру как её выполнять, а хоть и с умным студентом немножко поделиться радостью владения крутыми инструментами, радостью от того что — получается.

Продолжаю следить за развитием Ruby и новыми идеями — через RubyFlow, RubyNewsWeekly, /r/ruby; в последние годы увлёкся применением программирования в науке и всякими идеями воплощёнными в Wolfram Research — читаю их блог, GitXiv со свежими научными исследованиями, выложенными на GitHub. Да и — чего греха таить — на топ нескольких профильных хабов Хабрахабра подписан, в основном ради улавливания «хайпа» — если уж что-то перевели для Хабра, точно раскрученная тема.

Такие дела. Любите программирование и никогда не останавливайтесь.

Воспользуйся промо-кодом 7DBAFC и учись у лучшего Ruby-эксперта со скидкой в 10% (количество купонов ограничено) Записаться


Наконец-то решил заняться самообразованием?

Тогда начни с нашего бесплатного путеводителя по миру веб-разработки. Внутри куча полезных советов и материалов для самостоятельного изучения.

Заполучить книгу Cover huge ru