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

И тут у меня появился мой первый компьютер. Там я нашел всякие батники и QBasic. Мне казалось вполне естественным использовать все эти вещи. Я внутренне возражал против графического пользовательского интерфейса, так как мог делать все в консоли или в командире волков. Был момент, когда у меня была внеклассная работа с Маками и LogoWorlds (российская среда разработки Logo — прим. переводчика). Там я анализировал схему движения колес взорвавшейся машины.

В седьмом классе кодирование стало вполне реальным, и мы начали использовать алгоритмический язык E. Мои одноклассники начали писать кое-что на C, а я продолжал использовать BASIC. К концу учебы мы научились пользоваться одним и тем же Бейсиком в классе, и мы с другом сделали игру, которая стала очень популярной среди наших одноклассников.

Что было дальше

А дальше был институт, где на первом курсе у нас был Паскаль (я писал на нем код просто переводя с Бейсика) и Ява. Я изучал Perl самостоятельно по O’Reilly Camel Book и официальным руководствам. К третьему курсу потребовался C, и я уже имел некоторые знания о нем, так как использовал его немного раньше. Я просто читал разные вещи об этом. Однажды утром я решил узнать, что такое сокет и как его использовать, поэтому я просто взял книгу о Java, прочитал ее 10 минут, и этого было достаточно. Тем временем была стажировка, и нам нужно было найти место, где можно было бы работать стажерами. Меня пригласили в какой-то кабинет в моем институте и поставили какие-то задачи. Один из них заключался в том, чтобы взять 150 дисков с множеством картинок и составить таблицу с информацией, где каждая из них находится. Я немного поразмышлял, за пару дней написал скрипт на Perl, потом еще день вставлял и вынимал диски и в итоге составил приличный список файлов. Думаю, это были мои первые деньги, заработанные на программировании. Меня даже приглашали продолжить работу там после окончания стажировки, но я отказался.

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

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

Вопросы

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

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

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

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

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

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

Ваши лучшие 3 книги для новичка?

Эффективная работа с устаревшим кодом обязательна. Он сейчас у меня на столе. Нет необходимости перечитывать его, но вы должны использовать его в качестве справочного материала. Если говорить о конкретных языках и инструментах… Я всегда рекомендую Git Magic. О C вы можете прочитать у Кернигана и Ритчи (она лежит у меня на рабочем столе). Еще есть отличная книга Брюса Барнетта о седе. Остальное (например, сайт со стандартами POSIX или руководства по Make) легко гуглится.

Ваши 3 лучших сайта/новостных бюллетеней/источников информации, которые должен прочитать каждый разработчик?

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

Фото вашего рабочего места

Это статья mkdev автора Ильи Коновалова. Вы можете нанять Илью в качестве своего личного наставника C.