Аравийский полуостров сформирован донными отложениями древнего океана, то есть преимущественно из песчаных пород. В отличие от Манхэттена, где пригодный для высоких и тяжелых зданий скалистый грунт лежит близко к поверхности, здесь относительно твердые породы встречаются значительно реже. Этот фактор приходилось учитывать чикагскому архитектору Эдриану Смиту. Чтобы построить здание в 828 метров, в землю вкрутили 192 сваи диаметром полтора метра и длиной 45 метров (половина футбольного поля). Далее над ними надстроили бетонную плиту шириной 3,7 метра. Эта сложная конструкция и образует фундамент самого высокого здания в мире. Именно благодаря такой мощной базе проект был успешно доведен до конца и ежегодно притягивает сотни тысяч туристов.
Что является фундаментом для программиста в быстро меняющемся мире? Нужен ли вообще этот фундамент? Стоит ли строить его с помощью учебы в университете? А может, лучше выбрать хорошие курсы или самообразование? Обязательно ли учить математику? На эти фундаментальные вопросы я отвечу в следующей главе.
IT-фундамент
Поработав в разных отраслях, огромных корпорациях и маленьких стартапах, с умными и очень умными людьми, я сформулировал конкретный ответ: фундамент для программиста – это продвинутые базовые технические навыки в информатике, широкий кругозор и хорошая математика.
Базовые технические навыки в информатике – это структуры данных, базы данных, алгоритмы и низкоуровневый язык Си. Глубоко освоив эти вещи, можно будет без особых проблем выучить 80 % высокоуровневых языков и программировать на них так, чтобы было не очень стыдно показать другим людям. Не стоит в начале обучения гнаться за какой-то конкретной модной технологией, в некоторых отраслях тренды полностью меняются за пять-семь лет.
Когда я начинал заниматься веб-разработкой, главной библиотекой считалась jQuery (релиз в 2006 году), использовавшаяся для анимации и придания динамики сайтам. Мне казалось, что jQuery будет вечной, потому что ничего лучше придумать нельзя. В 2013-м Facebook опубликовал первую версию ReactJS для создания сайтов и веб-приложений. Эта библиотека полностью поменяла все парадигмы. Но если веб-разработчик хорошо разбирался в базовых технологиях браузера, то переучиться не составляло труда. Аналогии можно привести и в совершенно других областях. Например, если программист хорошо знает один из базовых языков – Java, – он может одинаково эффективно использовать серверную библиотеку Spring и писать программки для пластиковых карт с чипом NFC.
Наилучшим доказательством моих слов будут требования к кандидатам в больших компаниях, таких как Google, Amazon, Microsoft. За исключением узкоспециализированных вакансий (например, криптограф), знания требуются очень широкие и в то же время базовые (см. выше). Я дважды проходил собеседования в Google, по совокупности около четырнадцати испытаний – и второй раз даже успешно. Интервьюеров в первую очередь интересовали скорость мышления и знание основ. Причина таких требований состоит вот в чем: после выхода на работу новый сотрудник получает около трех месяцев на обучение конкретным технологиям для конкретного проекта. Считается, что при наличии соответствующей базы этого времени будет достаточно, и поначалу компания готова в него инвестировать.
Вторая важная составляющая IT-фундамента – широкий кругозор: история, география, литература, философия, экономика. Прошло то время, когда программисты работали поодиночке. Сейчас создание любого инновационного продукта – это долгая работа в больших командах под руководством эффективных менеджеров. Нельзя построить квантовый компьютер за полгода в гараже с друзьями.
Рабочие дни программиста – далеко не только сидение за компьютером. Вы выходите с кем-то из коллег пообедать, выпить кофе, общаетесь на отвлеченные темы. Умение работать и взаимодействовать в команде – такой же навык, как язык программирования. Чтобы с тобой хотели работать месяц, достаточно быть приятным в общении. Чтобы с тобой хотели работать годами, ты должен быть еще и интересным собеседником. Чтобы руководить и вести за собой коллектив, ты должен быть приятным, интересным и эффективным. Где эффективность – это профессионализм, помноженный на скорость.
Математика
Третий важный навык – математика. Математику не зря называют царицей наук. Она используется везде: в музыке, в автопилоте машин, при оплате покупок в магазине.
В музыке нотная грамота подчиняется строгим правилам сложения дробей. Если половина мелодии написана в размере 2/4, а другая половина – в 3/4, и все такты перемешаны вразнобой, то человеческое ухо быстро это распознает, такая музыка вызывает дискомфорт.