Kitobni o'qish: «IT Компас: как правильно программировать IT-карьеру»
Copyright © 2024 Илья Кырчумару
Все права защищены. Ни одна часть данной публикации не может быть воспроизведена, распространена или передана в любой форме или любыми средствами, включая фотокопирование, запись или другие электронные и механические методы, без предварительного письменного разрешения автора, за исключением коротких цитат, включенных в критические обзоры и определенные другие некоммерческие использования, разрешенные законом об авторском праве.
Для запросов на получение разрешения, пожалуйста, свяжитесь с автором по адресу: circiumaru.ilie@gmail.com
Дисклэймер. Взгляды, мысли и мнения, выраженные в этой книге, принадлежат исключительно мне и не обязательно отражают взгляды, позиции или политику моего работодателя.
Ссылки перепечатаны с разрешения IBM Corporation © (2024)
Предисловие
«Фg7 (ферзь g7) – мат» – оппонент с явным удовлетворением поставил точку в заслуженно выигранной партии. Последний аккорд на чемпионате Европы по шахматам в Батуми вышел таким же минорным, как и предыдущие восемь из десяти. После этой, девятой по счету, проигранной партии стало понятно, что карьеру в шахматах мне не сделать. В тот раз я не просто плохо сыграл – это был турнир, который однозначно показал, что в свои шестнадцать я уже слишком сильно отстал от лучших шахматистов континента.
С одной стороны, одиннадцать лет ежедневных тренировок и статус вполне перспективного юниора в Молдове. С другой стороны, турнир сомнений не оставил: успешная международная карьера мне не светит. Стоит ли бросить шахматы и заняться чем-то другим?
Над этим вопросом я раздумывал во время финальной партии. Пожимая руку противнику, я уже знал ответ: «Шахматы останутся в прошлом».
Через несколько месяцев я начну делать сайты (за которые мне до сих пор стыдно). Именно так начался мой путь в программировании.
За четырнадцать лет (с 2010 по 2024 год) я прошел путь от программиста-фрилансера, занимающегося созданием маленьких сайтов в Кишиневе, до архитектора информационных систем в IBM Research в Цюрихе. Это не самый легкий вариант построения карьеры, но и невыполнимым его тоже не назовешь. Профессиональное развитие похоже на длинную дорогу, на которой путника непременно поджидают всевозможные приключения и опасности. В моем случае это был крайне интересный, полный риска и удачи путь, пролегающий через маленькие фирмы Молдовы к таким гигантам финансового и технологического мира, как Credit Suisse и Amazon.
Эта книга для тех, кто делает первые шаги в профессии (или только планирует их сделать). Хочется поделиться личным опытом и советами блистательных коллег, которые меня многому научили, развенчать некоторые мифы о науке, работе в корпорациях и собеседованиях в Google. Вместе с читателем мы порассуждаем о важности фундаментального образования и попробуем заглянуть в будущее глазами работника лаборатории, где одновременно разрабатывают магнитные ленты (ага, те самые, с которых мы когда-то слушали музыку), искусственный интеллект (эра LLM уже началась) и квантовые компьютеры.
Мне часто задают вопросы: «Как попасть в программирование? Что лучше: университет или самообразование? Какую специальность и специализацию выбрать? Работать в большой или маленькой фирме? Как продвигаться по карьерной лестнице и управлять командами? Где лучше работать, чтобы зарабатывать много?» Постараюсь дать глубокие и подробные ответы на эти и другие вопросы. Так как я не планирую останавливаться на достигнутом, а технологии совершенствуются с космической скоростью, моя книга будет также развиваться: устаревшую информацию со временем заменят свежие взгляды и идеи.
Книга разделена на две части: «Дебют» и «Миттельшпиль». Их можно читать друг за другом или по отдельности. Каждая глава в «Миттельшпиле» раскрывает отдельный аспект IT-сферы.
В «Дебюте» я расскажу о своей карьере, о дилеммах, которые возникали, и принятых решениях. Безусловно, тут не обошлось без тщательного описания и анализа допущенных ошибок.
В «Миттельшпиле» я систематизирую свой профессиональный опыт. «Консалтинг, продукты или наука?» – вместе с читателем мы рассмотрим особенности работы в каждой из этих областей, проанализируем разные направления информатики и их перспективность в мире, где искусственный интеллект с каждым днем становится все большим конкурентом для программистов. Порассуждаем о мотивации команды, роли тимлида и о том, в каких направлениях предпочтительнее развиваться, чтобы зарабатывать много. Ведь делать мир лучше – это прекрасно, но хотелось бы в этом улучшенном мире иметь возможность слетать на отдых и реализовать свои мечты.
P. S.: Эта книга не учебник по программированию. Это – мой личный опыт, размышления о жизни, технологиях и карьере в IT. Мною руководила искренняя заинтересованность в том, чтобы Вы, дорогой читатель, сделали классную IT-карьеру!
Часть 1. «Дебют»
Первые шаги в программировании: HTML для чайников
«Что делать дальше? А самое главное, как зарабатывать деньги?» – эти два вопроса возникли сразу после того, как я в 16 лет решил оставить шахматную карьеру. Я по-прежнему учился в школе и делал это хорошо, особенно силен был в математике, физике и истории. Без ложной скромности скажу, что был одним из лучших и в таком предмете, как физкультура. Школа и родители привили мне любовь к спорту, ведь «жизнь слишком коротка, чтобы быть не в форме».
Профессиональные шахматисты уделяют много времени здоровью, и я всегда отличался высокой самодисциплиной в этом вопросе. Поскольку свободного времени стало больше, решил подкачать тело и мозг: отправился в тренажерный зал и занялся немецким. Забегая вперед, скажу, что в будущем это добавит мне огромное количество бонусных баллов как на работе, так и в личной жизни.
И все же, как зарабатывать деньги? Начал я с уроков шахмат для детей. Мне повезло: в нашем многоквартирном доме несколько лет назад случился беби-бум, и новым детишкам как раз исполнилось по три-четыре года. Мое вознаграждение составляло 1–2–3 доллара в час плюс огромное удовлетворение от проделанной работы. Именно тогда я понял, как сильно мотивирует конкретный результат своих усилий. Когда мой пятилетний ученик впервые участвовал в соревнованиях, у меня аж живот от нервов сводило. Зато когда он выиграл свой дебютный турнир и получил четвертый разряд, счастью не было предела. Тогда я осознал, как радовались и переживали мои тренеры. Как они искренне болели за нас и расстраивались, когда мы упускали призовые места на последних ходах.
Обучая детей премудростям шахматной игры, я понял, что хорошее объяснение требует особого подхода. Лучше всего, если оно будет в форме сказки или увлекательного рассказа. В любую секунду ученик может забыть предыдущую информацию, и тогда следует спокойно ее повторить и отработать на практике. Впоследствии оказалось, что общение с детьми почти не отличается от профессионального взаимодействия с клиентами и младшими коллегами. Клиент тоже любит подзабыть обговоренную ранее деталь, а коллега легко перепутает очередность скриптов в командной строке. Тут не стоит нервничать, даже если это произошло далеко не в первый раз, надо просто повторить и снова попрактиковаться. Помните, что усвоение материала требует времени.
Шестнадцать лет – чудесный возраст, ведь все самое интересное только начинается. Но, как правило, это интересное требует каких-то дополнительных денег, а родители могли обеспечивать только базовые потребности. Шахматное тренерство приносило небольшие деньги, но на новые интересы и желания их не хватало. Например, я хотел заниматься большим теннисом и музыкой, а еще надо было начинать приглашать девочек в кино, покупать им цветы. По-честному, девочки, конечно, были приоритетнее, чем гитара или пианино.
В этот момент мама рассказала, что сын ее подруги делает сайты и хорошо зарабатывает. В школе у меня была информатика, мы учили Паскаль. Я ничего в этом не понимал и имел среднюю оценку 7 (из 10).
«Ладно, если попробую, ничего не потеряю», – решил я. Вычитал в Википедии, что сайты состоят из HTML, CSS и чего-то там еще, и так как ничего не знал об этом, то вбил в Google: «HTML для чайников». Этот поисковый запрос я считаю началом своей IT-карьеры.
HTML оказался не самой сложной технологией (во всяком случае, понятнее, чем Паскаль), было интересно, но как-то скучновато. Я старательно изучал инструкции из книги по HTML, но далеко не все получалось с первого раза. Да даже со второго не получалось. Сейчас-то я точно знаю, что поиск ошибок – debugging – это неотъемлемая часть жизни программиста, поэтому надо быть готовым заниматься скучной и методичной работой. К счастью, профессиональный спорт научил, что без упорного труда успеха не добиться. Поэтому я вдумчиво изучил HTML, затем CSS и, наконец, дошел до JavaScript. Тогда сайты приобрели динамику и стали похожи на те, которыми я пользовался. Появилось некоторое удовлетворение от проделанной работы: «Теперь я что-то да могу».
Обычно так и бывает: чтобы выйти на новый уровень развития в какой-то области, надо приложить определенные усилия, поначалу это неприятно и немного страшно. Если усилий будет достаточно и обстоятельства сложатся удачно, придет результат, а с ним и удовлетворение. Сверхспособности и гениальность не гарантируют успеха: без упорного труда не получится достичь больших высот в профессии. Даже Моцарт потратил тысячи часов на обучение музыке, а историки утверждают, что ноты он выучил раньше букв.
Более-менее освоив HTML, CSS и JavaScript, я наивно решил, что готов к работе. Как раз в это время подвернулась возможность сделать сайт для стоматологической клиники, в которой я проходил лечение. Жизнь часто подбрасывает шансы проявить себя, важно уметь их замечать. В общем, мы договорились о небольшой цене за сайт, и я приступил к работе. На тот момент я обладал примерно половиной знаний, необходимых даже для такого маленького проекта, но моя сила была в том, что я этого не осознавал и был готов работать над сайтом, пока он не запустится.
Это был своего рода процесс Learning by Doing (изучение во время исполнения). Оказалось, что, помимо непосредственно разработки, надо зарегистрировать доменное имя (название сайта), где-то этот сайт развернуть, соединить доменное имя с физическим сервером и предоставить клиенту возможность редактировать данные. А для этого их надо хранить в базе данных, а для этого нужно… еще то, это, пятое, десятое. Подобно матрешке, большая и вроде бы понятная задача распадалась на множество мелких, решение которых уже не было столь очевидно новичку. Никакого ChatGPT тогда не было, всю информацию я получал в основном из книг и своих ошибок.
Получилось ли у меня в итоге выполнить работу? Конечно. Понравился ли клиенту сайт? Несомненно. Понравился ли сайт мне? И да, и нет. Он точно был неидеален, но я вложил в него всю душу.
Три урока было усвоено:
1. Чтобы сделать проект, не обязательно знать все необходимое на старте. Многие вещи можно будет доучить позже при наличии готовой базы.
2. Если клиенту все нравится, не стоит его в этом переубеждать. В будущем я узнаю, что это является одной из заповедей консалтинга.
3. Прыгать в незнакомые воды страшно, но это самый быстрый путь к получению знаний и навыков. Финансовая и личная ответственность в сто раз сильнее мотивирует к действию, чем самодисциплина. Правда, такая ответственность заставляет по-настоящему нервничать и легко вгоняет в стресс.
Стресс – неотъемлемая часть жизни. Чем выше уровень, тем больше будет стресса. Создание сайта за 150 долларов не сравнится по силе нервного напряжения с разработкой системы за десять миллионов долларов. Необходимо учиться самоконтролю, это позволит проживать сложные рабочие моменты без потерь для здоровья. Чтобы творить всю жизнь и делать классные проекты, нужно найти собственные приемы для восстановления. Я борюсь со стрессом с помощью музыки, чтения, танцев и спорта. Особенно хорошо подходит теннис: тут и гимнастика для глаз (фокус переключается с мяча вблизи и на сторону противника вдалеке), и психологическая разрядка (во время удара ракеткой можно представлять, что бьешь особенно раздражающего клиента или своего рассеянного коллегу). Великолепно работает, когда именно с таким коллегой и играешь.
Итак, первый сайт запущен, первые деньги на этом заработаны, но теперь хочется большего. Работая над тем проектом, я осознал, что мне не хватает глубокого понимания технологий. Поэтому первый гонорар был реинвестирован в себя. Я записался на курсы по веб-разработке. Это было правильное решение: за пятнадцать учебных часов с преподавателем я получил столько знаний, на самостоятельное освоение которых понадобилось бы минимум в десять раз больше времени. Когда есть возможность, фундамент надо строить с профессионалом. Это касается любой области, будь то музыка или стендап-выступления. Так вы потратите меньше времени и сразу научитесь делать правильно. Зачастую переучиваться куда сложнее, чем учиться.
Что есть фундамент в IT? На этот вопрос нет однозначного ответа. Математика или низкоуровневый язык программирования? А может, достаточно новомодного Питона и пары библиотек искусственного интеллекта? Я ответил бы на этот вопрос так: фундамент – это навыки и знания, которые позволят на протяжении всей карьеры изучать, применять и создавать новые технологии.
Где и как построить IT-базу? Тут можно вести долгие дискуссии относительно необходимости высшего образования, преимуществ онлайн-курсов и реальной практики. Я же в этом вопросе категоричен: надежный IT-фундамент можно создать только одним способом. В университете.
Университет
Собираясь поступать в университет, я, честно говоря, не мыслил сложными категориями. Мне исполнилось 18, я окончил школу и успешно сдал выпускные экзамены. Это был первый год проведения экзаменов с видеонаблюдением, и списать было очень сложно. Все были в шоке, когда оказалось, что больше половины учеников не сдали минимум один предмет. Я же, сильно потея и много шутя, уверенно сдал все предметы со средним баллом 9,2 (из 10) и с оптимизмом смотрел в будущее. Поэтому в июне 2013-го настало время решить, что учить и где учиться дальше.
Вопроса «Стоит ли идти в университет?» у меня не было. Все мы помним истории Билла Гейтса и Марка Цукерберга, которые в свое время ушли из университета и основали великие компании. Но они-то учились в Гарварде. Я же на Гарвард явно не тянул. Мне куда ближе была история Сергея Брина и Ларри Пейджа, которые написали первую версию поисковика Google в качестве исследовательской работы на степень PhD, то есть базируясь на знаниях, добытых в университете.
Еще в апреле я дважды сдал SAT (американский экзамен для школьников), планируя поступить в американский университет в Болгарии. Но результатов SAT хватило только на скидку в 50 %, что требовало бы где-то 10 000 долларов в год на обучение. Такая сумма была нам с родителями не по карману, и эта опция отпала сама собой.
У меня были хорошие шансы воспользоваться квотой для молдаван на обучение в России. Молдова – это двуязычная страна, мы все (почти) говорим на русском и молдавском языках. Был вариант попробовать поступить в Московский государственный университет – МГУ, самый престижный вуз России. Но жизнь в мегаполисе – это пробки, загрязненный воздух и студенческое общежитие. Поэтому я решил, что лучше эти два-три часа в день использовать на обучение, чем тратить их на стояние в пробках и долгие перемещения по большому городу. Мне казалось, не столь важно, в каком именно университете учиться. Оглядываясь назад, я вижу, что был крайне наивен в своих представлениях о жизни вообще и об образовании в частности.
Решив учиться в Молдове, я колебался между информатикой, математикой и физикой. Математику я знал лучше всего, но тогда она казалась мне бесперспективной. «Что с ней потом делать, кому она будет нужна в каком-нибудь, условно, 2020 году?» – спрашивал я себя. «Ведь есть же компьютеры, они все прекрасно считают», – соглашалась со мной мама. Сейчас, ежедневно работая с криптографами, я мысленно возвращаюсь в 2013 год, чтобы сказать себе: «Илюша, если не специализируешься на математике, хотя бы учи ее серьезно!»
В школе мне нравилась физика. Я принимал участие в школьных олимпиадах по математике и физике, занимал места на региональных соревнованиях. Но что делать с физикой после университета конкретно в Молдове, было неясно. Конструкторских бюро или больших заводов в стране нет, а уезжать мне не хотелось. Поэтому, взвесив все за и против, я решил учиться информатике. Это было крайне прагматичное решение: рынок IT в Молдове ежегодно увеличивался, что давало высокие шансы найти работу после университета. Сейчас могу сказать, что из всех моих выводов, догадок и умозаключений правильным оказалось только одно: найти работу в IT в Молдове было действительно легко.
Даже имея опыт создания сайтов, я плохо понимал школьную информатику и из точных наук знал ее хуже всего. К тому моменту я сделал и запустил два небольших сайта для клиентов, поэтому мог смело сказать, что обладаю опытом в веб-разработке. Первые заработанные деньги мотивировали дальше развиваться в этом направлении. Однако я интуитивно чувствовал, что только курсов и самообучения будет недостаточно. Поэтому решил учиться в местном университете на факультете математики и информатики – в конце концов, если не понравится, всегда можно уйти. На следующие пять лет моей альма-матер стал Молдавский государственный университет. По иронии судьбы, тоже МГУ. Позже я приду к выводу, что сходство между Московским и Молдавским университетами кроется только в аббревиатуре, во всем остальном мой МГУ, к сожалению, значительно уступает российскому тезке.
Первый курс мне очень понравился, мы изучали основы программирования и математики: низкоуровневый Си, который является базой для 80 % современных языков, базы и структуры данных, дискретную математику и логику. С одной стороны, я был классическим ботаником: выполнял все домашние задания и тянул руку на семинарах и лекциях, с другой стороны, продолжал работать над заказами и пытался применять изученные вещи на практике. На удивление, искать клиентов мне не пришлось: они приходили сами либо по рекомендациям от предыдущих клиентов, либо через знакомых. Два моих самых больших проекта пришли через игру в футбол (мы тогда собирались любительской командой, арендовали поле). Правильное поведение в спорте обычно помогает расположить людей к себе: если с тобой хотят играть в одной команде, то, скорее всего, захотят и работать.
Дебютный учебный год прошел быстро и в удовольствие. Уже во втором семестре я стал лучшим на факультете по среднему баллу и занимал первую строчку следующие четыре с половиной года, до окончания бакалавриата и магистратуры. Но к концу первого курса стала очевидна следующая проблема: учиться было слишком легко. И причина была отнюдь не в моей гениальности, а в малом количестве учеников и их плохой подготовке. Это был год, когда половина школьников не сдала выпускные экзамены, а значит, автоматически лишилась шанса поступить в университет. Информатика и до этого не пользовалась огромной популярностью, что странно, учитывая зарплаты в несколько раз выше, чем в остальных секторах. Но реальность была такова: нас было мало, около двухсот на потоке, четверть попала туда случайно, еще четверть отправили родители. «Если двойки стоят в линию, это проблема ученика, а если в колонку – проблема учителя» – эта логика заставляла преподавателей снижать требования, объяснять меньше, чем они хотели бы, и упрощать экзамены, чтобы большинство смогло пройти дальше. Иначе студентов нужно было бы отчислять, а это чревато закрытием групп и потерей работы.
По опыту шахматных уроков я знал, что нет ничего лучше для учителя, чем ученик, который стремится к большему. Поэтому порой буквально заставлял преподавателей давать нам опциональные усложненные задания и настаивал на том, чтобы сложные темы подробно разбирались на занятиях. Преподаватели с огромной радостью шли мне навстречу, чего нельзя сказать о большинстве моих одногруппников. «Ботаник, выскочка, зубрила» – так думала обо мне половина факультета. Это абсолютно нормально, если достигаешь успеха и чем-то выделяешься, найдутся те, кто будет тебя осуждать. Зависть, непонимание и еще тысяча причин, по которым одни люди обсуждают других. Так было, есть и будет. Лучшее, что тут можно сделать, – просто заниматься своими делами, не пытаясь что-то кому-то доказать.
В библиотеке я отыскал монографию Дональда Кнута «Искусство программирования». Четыре тома о базовых алгоритмах, структурах данных и теории информатики. Читая книгу, я был поражен, насколько огромен и сложен этот мир. Особенно удивила именно сложность, так как уже к сотой странице я окончательно перестал понимать, о чем речь. В этот момент все большую популярность начинала приобретать Coursera – онлайн-платформа с курсами по разным направлениям. Coursera стала для меня дополнением к университету, там была возможность глубже погрузиться в темы, которые меня интересовали. Где-то я прочитал, что на собеседованиях в Google задают вопросы по структурам данных, поэтому в первую очередь выбрал курс «Алгоритмы» (англ. Algorithms) от преподавателей Принстона Роберта Седжвика и Кевина Уэйна. Мне понадобилось три попытки (и два года), чтобы пройти и полностью осознать этот курс.
С наступлением трехмесячных летних каникул человек сорок с факультета уехали работать в США по программе Work and Travel. Это был отличный способ скопить две-три тысячи долларов, работая официантом или кассиром. Средняя зарплата в моем городе была около четырехсот долларов в месяц, поэтому две тысячи долларов были большой суммой для студента. Моего английского было достаточно для такой работы, но я решил мыслить стратегически, как меня учили в шахматах.
Если представлять карьеру как шахматную партию, то время в университете – это дебют (начало партии). Главная задача дебюта – развить свои фигуры и получить хорошую позицию для осуществления главного плана на игру. Поэтому я пожертвовал потенциальными двумя тысячами долларов и устроился на лето в небольшую фирму Deeplace, заниматься веб-разработкой за двести долларов в месяц. «Главная задача на ближайшее время – развитие своих фигур (навыков), а деньги не главное», – решил я перед началом работы. Этим принципом я руководствовался следующие десять лет.
Мне повезло, у нас были классная команда и очень опытный руководитель. Мы делали сайты для государственного сектора, и мне даже удалось поработать над новым сайтом Национального банка Молдовы. В первую же неделю я почти положил наш локальный сервер, случайно отправив на него пару миллионов электронных писем. За три месяца я поучаствовал в пяти проектах, поговорил со всеми менеджерами продаж и даже один раз присутствовал на переговорах с клиентом. Это был отличный опыт: я научился работать с Линуксом, что должно входить в базовый набор любого программиста; поэкспериментировал с базами данных и посмотрел, как организовывается работа проектов, когда участников больше, чем два человека. В конце лета мне предложили остаться и работать дальше на полставки, чтобы я мог совмещать работу и учебу.
Предложение было заманчиво, зарплата со временем увеличивалась бы, но разве информатика и IT-мир крутятся только вокруг сайтов? Конечно нет! Кто-то ведь проектирует программное обеспечение для самолетов, операционные системы для компьютеров и логику для кредитных карт. Я доверился интуиции, которая подсказывала, что пока стоит отказаться от работы. Надо копать глубже, строить фундамент шире, дебют только начинается. Говоря шахматным языком, я разыграл гамбит: пожертвовал пешкой сейчас, чтобы в будущем получить инициативу и выиграть партию.
Тогда я не осознавал правильности и важности решения, это действительно была интуиция. В то же время, в свои восемнадцать лет, выбирая, где учиться, я еще наивно полагал, что особой разницы между двумя МГУ (Молдавским и Московским) нет. Всего через год, в девятнадцать, я уже четко понимал: неизвестно, что может потребоваться в большом мире информатики, поэтому надо стремиться получить как можно больше знаний и навыков – сформировать фундамент, а потом принимать важные решения.
Весь второй год в университете я занимался построением фундамента и развитием своих фигур в дебюте. Старался поглубже вникнуть в разные области информатики и немного халтурил на математическом анализе (ошибка, ошибка, ошибка). Изучал основы философии и экономики. Определенно, они не были в числе любимых предметов, но благодаря урокам философии я впоследствии здорово удивлял старших коллег, приводя цитаты из сочинения Платона «Пир» во время наших обсуждений ЛГБТ-процессов в обществе.
Возможно ли изучить все это или хотя бы понять, что надо изучать, самостоятельно? Мой ответ – однозначно нет. Четкая программа, грамотные преподаватели, правильная атмосфера и понятная мотивация – лучшее, что может дать университет. Поэтому я твердо уверен, что решение учиться в университете было правильным.