Алексей Капранов — мудрый и харизматичный программист, редкий для отрасли пример сочетания высокого профессионализма c умением (и желанием) общаться с миром. Многие знают его как разработчика сложной и высоконагруженной Почты Рамблера. Часто можно встретить Алексея на отраслевых конференциях, в Интернет-сообществах: он всегда приветлив и заинтересован в общении. Алексей согласился поделиться с нами своим опытом и взглядами на профессию программиста — получилось очень интересно и местами неожиданно.
Мой путь
Выбор профессии у меня проходил очень предсказуемо для окружающих и невероятно удивительно для меня. Дело в том, что у меня и отец, и мама — программисты. Из первого поколения советских компьютерщиков. Папа паял эти огромные ЕС-ки, а мама заряжала в них перфокарты. При этом я в школе мечтал стать химиком, потом биологом, а потом энтомологом. Природу люблю очень.
Но в последних классах (93-95 годы) познакомился с компьютерами, и меня полностью затянуло.
Сначала бесконечные олимпиады по информатике, потом первый модем дома, потом в нашем Брянском техуниверситете открыли специальность «Программирование» и я конечно на неё прошёл. Сам не заметил, как прошли годы, очнулся примерно на 5 курсе, в районе диплома, погоревал по своим школьным мечтам минут 10 и с тех пор безвылазно работаю по специальности.
Работать “по-настоящему” начал на 3 курсе, когда по маминому заказу стал писать мелкие штучки для банка, в котором она тогда возглавляла IT. Сначала какие-то перекодировщики файлов, потом скрипты в терминальной программе Telemate для работы с расчётно-кассовым центром, потом был большой проект — рабочее место валютного кассира. Интернета не было, как и обилия книг — впитывал всю информацию, до которой удавалось дотянуться.
Зачитывал до дыр и мануалы к Клипперу, и новости Turbo Pascal 7.0 в журнале «Компьютер-Пресс». Пробовал все программы. Так, однажды я приволок домой диск FreeBSD и поставил рядом с Досом. Затянуло мигом: я полностью забросил FoxPro и Delphi, начал писать на awk и Perl и через два года сумел найти работу в ISP.
Были у меня свои кумиры: отрасль молодая, горячая, всё бурлит, каждые полгода — открытие и новая звезда.
Но в основном восхищался всякими великими иностранными учёными конечно. Дейкстра, Диффи, Буч. Ричард Столлман, когда я стал постарше и помудрее. Ну и один мамин коллега, программист из Брянска, Леонид Осовцов :) Он был такой живой, настоящий кумир, не икона. Уехал давно, живёт счастливо в Израиле.
Главное открытие тех времён для меня — невероятно огромный мир свободного ПО. Один диск с дистрибутивом FreeBSD содержал больше программ, чем я видел за все предыдущие годы под Досом. И ни одна из них не требовала поиска серийника. Да ещё и всё в исходниках. Я быстро включился в процесс разработки, писал патчи, дискутировал с разработчиками. Как-то в один момент компьютер из игрового автомата и печатной машинки превратился в окно в большой мир. Интернет практически полностью состоял из программистов, и поэтому мне тогда там было очень легко.
Я довольно быстро достиг потолка в Брянске и сразу после получения диплома уехал в Москву. Артус, Агава, Инлайн, Первый канал, Рамблер. В Рамблере поработал 4 года, сначала запрограммировал веб-почту, потом создал под неё отдел на 15 человек и поруководил им.
Примерно в 2002 году, уже переехав в Москву, я обнаружил Рунет :) Плотно завязнув в англоязычной среде (я не говорю «сайтах», потому что в то время Интернет состоял не только из веба), я попросту пропустил момент его появления. Пришлось спешно подтягиваться.
НадоБы
Сейчас я работаю универсальным техническим солдатом в стартапе НадоБы.ру. Формально — технический директор, но по совместительству и сисадмин, тестировщик, архитектор, постановщик задач, product- и project-менеджер, юзабилист, верстальщик и программист на 3,5 языках. В общем, помогаю своей технической команде из 4 человек по всем фронтам. Задачи в основном лёгкие концептуально, но требующие быстрой реакции в условиях большого количества неизвестных. Интересные, большие, творческие задачи стараюсь отдавать сотрудникам, иначе могу увлечься и уйти в них с головой надолго и тогда страдает менеджмент. [От редакции: сейчас, спустя 4 года после написания этого текста, Алексей работает в почтовом отделе Яндекса]
Есть занятия и вне работы. В последнее время бываю связан с организацией всякого рода технических конференций. Принимаю участие в работе Московской группы Перл-программистов Moscow.pm. От случая к случаю создаю, поддерживаю и участвую в разнообразных open source-проектах. Интересно, что всё это удаётся хорошо совмещать с непрекращающимся процессом самообразования, так что получается win-win.
Работа в стартапах
Я уверен, что абсолютно каждый человек обязан поработать в стартапе. И чем раньше, тем лучше. Например, сразу после университета или на последних курсах, когда более-менее свободные жизненные обстоятельства позволяют безболезненно рисковать. Стартап — это практика по принципам рыночной экономики, по ресурсному управлению в условиях редкости этих самых ресурсов, это возможность для специалиста понять, зачем в принципе нужен маркетинг, зачем люди ходят в деловых костюмах и носят бессмысленные наручные часы, почему реклама — неизбежное зло и т. д. Можно продолжать бесконечно. У меня всё это происходит прямо сейчас, довольно поздно, но что поделать.В стартапе учишься другому — нет тяжёлых, сложных, исследовательских задач, зато очень много очень срочных очень важных и очень маленьких задачек. Это постоянное общение, партнёры-агенты-клиенты, это опыт найма не только лучших, но и дешёвых людей. Настоятельно рекомендую попробовать всем.
Идеальный программист
Пару слов об некоем идеальном товарище в нашей профессии, которым я не стал, никогда уже не стану и вечно буду жалеть об этих двух «не».Этот товарищ должен был бы очень-очень рано понять, что программист — это слесарь, у которого каждые 15 минут забирают станок и привозят новый, следующей модели.
Здесь несколько важных слов.
Во-первых, слесарь. Программист-создатель, ценный кадр, который быстро делает много хороших вещей — далеко не творческая и даже не исследовательская профессия, несмотря на ореол, которым и по сей день она окутана. Для такого человека терпение и усидчивость в сто раз важнее таланта, способностей к математике и лингвистике и тому подобных вещей, за которые хвалят в школе.
Во-вторых, 15 минут. Программист постоянно учится. Просто вообще всегда. Это общая черта многих (если не всех) молодых профессий, но она плохо сочетается со слесарностью. С тем, что человек должен быть одновременно и вечным студентом, и хорошим работником. Ведь как оно у рабочих людей — любимым молотком можно отлично, продуктивно работать 20 лет. У нас все наоборот. Хотя есть и отдельная большая история про людей, которые достигают уровня создания себе своих собственных станков.
В-третьих, этот самый станок. Сейчас каждый программист использует (числа взяты с потолка) 45 библиотек, 5 фреймворков, 2 текстовых редактора, 2 операционных системы, 5 тесно переплетающихся языков, 2-3 системы контроля версий и ещё множество других инструментов, таких как багтрекер, вики-среда, отладчик, профайлер и так далее. Это действительно большой и сложной станок, практически кабина самолёта. Само рабочее место стало сложной системой, станком с ЧПУ. Люди, досконально знающие один текстовый редактор и язык Си, мало где применимы. (Как правило, они очень ценны на своих местах, но вот мест этих — раз, два и обчёлся).
А может быть...
Есть очень хороший вариант для тех, кто сомневается: пойти в науку. Очень советую. После диплома сразу искать хорошую аспирантуру в Европе или США и ехать грызть гранит.Столько всего нам, программистам, не хватает, очень хочется, чтобы как можно больше людей шло статьи писать, а не высоконагруженные проекты запускать или, прости Господи, поисково оптимизировать. Столько ещё интересного надо открыть, столько всяких фундаментов заложить. Невероятно, 2010 год, а искусственного интеллекта нет. Вместо него кластер из полумиллиона серверов рекламу показывает, сотни шикарных распределённых ботнетов спам рассылают, а кумир миллионов — компания, запустившая первый массовый DRM. Позорище, перед Вселенной стыдно.
Если бы я сам не стал программистом — был бы учёным, стопроцентно естественником, скорее всего биологом.
Почему? Ну я вообще плохо понимаю людей, которые выбирают профессию рационально, по расчёту. У нас в институте были такие ребята — шли, например, учиться на унылую специальность «Турбины», потому что турбинистов брали в Газпром. Я вижу, что у современного человека работа — это большая и часто самая важная часть жизни, и её надо выбирать только по любви. У меня была первая любовь с биологией, но потом я от неё ушёл к информатике.
Будни программиста
Сейчас моя работа состоит из заполнения скелета продуктовой задачи «мясом» и полного обеспечения программисту возможности комфортно для себя её полностью решить. Такая работа директора по разработке. В любом стартапе технический директор — сначала директор по разработке, а уж потом настоящий техдир, то есть завхоз. Чтобы было хоз, надо его сначала разработать.
Все краевые места, интеграционные моменты, даже просто сложные ошибки контролирую и исправляю сам в свободное время. Всё очень быстро движется, как я и хотел, как и предсказывал. Каждый день я учусь. Каждый день я читаю блоги не только потому, что это интересно, но и потому, что иначе нельзя.
Плохо то, что в работе слишком много бизнеса. Ненавижу бизнес, люблю честность, свободу и коммунизм :)
К счастью я рано понял, что только бизнес гарантирует свободу. Честность, если напрячься, можно блюсти в себе и в близких, а коммунизм мы построим, когда изобретём искусственный интеллект, который добудет нам бесплатную энергию. Пока всё идёт по плану :)
Рекомендации начинающим
Качества, которые нужно постараться развивать, чтобы стать выдающимся профессионалом, это:
- Терпение. Программист, решивший 10 задач по 10 раз часто лучше, чем другой, который решил 100 разных задач. Потому что (сюрприз) повторение — мать учения.
- Коммуникации. Аутичных программистов больше не нанимают. Индустрия взрослеет, всё меньше стоящих дел можно сделать в одиночку.
- Смелость в принятии рисков.
- Лёгкость на подъём.
- Слепая печать :)
Все эти качества прокачиваются с практикой, так что дерзайте!
Читайте блоги Joel On Software, Coding Horror. Хороших русскоязычных блогов не могу назвать, разве что Левенчука, но он пишет совсем не для начинающих. Не забывайте про xkcd и Дилберта!
Если поставить себе цель и пытаться сделать себя лучше в профессиональном плане, то я бы посоветовал а) затеять свой проектик и б) влиться в какой-нибудь большой open source-проект, подписавшись на список рассылки.
Ставьте перед собой высокие, достойные цели. Практикуйтесь, тренируйтесь, каждый день. По утрам сразу после зарядки полчаса-час простого кодирования. Тщательно следите за здоровьем. Старайтесь не есть, не смотреть и не читать лишнего. Не делайте бесполезного.
Такие дела.