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