С чего начинаются программисты: история Ильи Коновалова

Two people viewing a large framed artwork of a smiling samurai holding a katana in a gallery, surrounded by smaller framed pictures on the walls. Two people viewing a large framed artwork of a smiling samurai holding a katana in a gallery, surrounded by smaller framed pictures on the walls.

Начало

О программировании я узнал в далеком детстве из книжек "А я был в компьютерном городе" и "Энциклопедия профессора Фортрана". Читать и писать я в то время умел, а компьютеры еще не особо попадались. Поэтому когда папа раздобыл где-то ZX Spectrum и к нему монитор (на котором была кривая цветопередача и большая часть из 16 цветов были разными оттенками красного), то я сразу начал пытаться писать программы. В основном перепечатывал их из школьного учебника по информатике. Еще там были игры (в Политехническом музее продавались кассеты с играми), которые с одной стороны не дотягивали до уровня Денди, но с другой стороны Денди были у всех, а Спектрум только у меня. И все-таки тогда же я на Бейсике начал что-то программировать сам. В основном методом проб и ошибок, опираясь на примеры из учебника.

А потом был первый компьютер. И там были всякие батники и QBasic. Пользоваться всем этим хозяйством мне казалось совсем естественным. Я был принципиально против оконного интерфейса, потому что я мог все делать в консоли или Volkov Commander. Был момент, когда я ходил в кружок, где были маки и ЛогоМиры - и я сидел и прописывал траекторию движения колеса от взорвавшейся машины.

В седьмом классе программирование уже было почти по-настоящему - на Школьном алгоритмическом языке Е. Одноклассники тогда же начали писать что-то на С, а я продолжал использовать Бэйсик. В конце школы был уже именно Бэйсик и на нем мы с приятелем написали игру, в которую все одноклассники активно играли.

Продолжение

Потом был институт, и на первом курсе были Паскаль (на котором я писал программы переводя с Бэйсика), Java, самостоятельно изучал Perl по книжке с верблюдом и официальной документации. С третьего курса понадобился C, я уже успел и его попробовать, поэтому как-то в нем ориентировался. Я просто брал разные книжки и учебные материалы и читал их. Однажды утром я решил узнать, что такое сокеты и как ими пользоваться, взял учебник по Java и минут за 10 что-то прочитал и этого хватило.

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

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

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

Автор статьи является ментором по программированию на С и может обучить основам программирования Нанять

Вопросы

Какой совет дашь новичкам, который редко встречается или считается необычным, спорным?

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

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

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

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

У меня десятки задумок и незаконченных проектов. Если есть свободное время, я работаю над ними. Или начинаю работать над другими, которые в данный момент интереснее. При этом я стараюсь не использовать то, что я уже и так знаю, а, по возможности, пробовать что-то такое, о чем читал, но еще не пробовал. Недавно пробовал писать на Lisp. Есть планы попробовать Go, Rust, Smalltalk и Eve. И в очередной раз Haskell.

Топ-3 книжек для новичка?

Working Effectively with Legacy Code - обязательно. Прямо сейчас лежит у меня на столе. Читать ее не обязательно, скорее использовать как справочный материал. По конкретным языкам программирования и инструментам.... Всегда всем рекомендую Git Magic. Для C - Керниган и Ритчи (лежит на столе на работе). По sed хороший учебник Sed Grymoire. Остальное обычно гуглится - сайт со стандартами POSIX, документация по Make.

Топ-3 сайта/рассылки/источника инфы, на которые должен быть подписан каждый разработчик?

Понятия не имею. Мне прилетают какие-то рассылки из блога 8thlight, но это не совсем критично. Туда же Coding Horror (Джеф Атвуд) и Martin Fowler. По-моему гораздо больше пользы я получаю из чтения The Daily WTF.

Фото рабочего стола


Об эффективности обучения у Ильи и остальных менторов mkdev мы рассказывали в цифрах подписчикам нашей рассылки. Получить отчёт об успехах наших учеников ты можешь, подписавшись через эту форму: