1 Перестаньте жаловаться. Готовьтесь к долгому пути или просто отложите это и займитесь наблюдением за птицами.
Для тех, кто действительно хочет стать отличным программистом, хочет стать экспертом, хочет стать лучшим из лучших, если это действительно стоит делать, то вложить в это десять лет — ничто, верно?
Первый шаг — стиснуть зубы. Смиритесь с тем, что этот процесс займёт более десяти лет, — это дело всей жизни. Занимайтесь этим только потому, что хотите этого. Если человек не хочет что-то делать, он никогда не станет в этом экспертом.
2 Пишите много-много кода
В то же время пишите много-много кода. Он не обязательно должен быть хорошим кодом. Долгое время код, который вы пишете, не будет хорошим кодом. Хороший код, хороший вкус требуют много практики, чтобы их развить. Всякий раз, когда вам интересен новый инструмент, новый алгоритм, новая задача или когда вы сталкиваетесь с проблемой, пишите код, чтобы практиковаться в этом, и старайтесь использовать это как можно больше.
Процесс обучения никогда не останавливается. Если вы учитесь с установкой узнавать как можно больше каждый день и получать максимальный «пробег», вы далеко пойдёте. Войдите в состояние, когда любой день/неделя/месяц без изучения чего-то интересного считается неудачей. Каждый день вас ждёт множество классных, интересных вещей для изучения. Даже если вы учитесь уже 15 лет, хотя их становится труднее найти, их всё ещё можно найти. Никто не может овладеть всеми знаниями в мире программирования, поэтому если вам кажется, что учиться больше нечему, найдите новый проект и напишите больше кода.
Занимаясь этим, будьте внимательны: ищите закономерности во всём этом — вещи, которые можно автоматизировать для полезной работы, или код, который вы написали так много раз, что его можно вынести в общую библиотеку, или другие места для централизации. Ищите языки программирования, которые просты для конкретных задач. Выясните, какие языки программирования плохо подходят для тех же задач, и подумайте, почему одни языки продуктивнее других для этих задач.
Но самое важное — писать много-много кода. Но помните: если то, что вы делаете, больше не интересно, нет необходимости продолжать это делать, если вы не можете получать удовольствие от процесса по пути.
3 Читайте больше кода
Когда вы накопите некоторое количество проектов, начните читать чужой код. Поначалу это очень трудно. В нём делают много такого, чего вы никогда не делали, или используют стили, к которым вы не привыкли, или даже языки программирования, которые вы не учили. Если вам это интересно, читайте как можно больше такого кода. Не беспокойтесь о глубоком анализе кода какого-либо конкретного проекта, по крайней мере поначалу.
Чтение нового кода может показать вам новые способы мышления, что помогает расширить ваш кругозор. Расширение кругозора очень важно для поддержания прогресса. Это помогает гарантировать, что, двигаясь вперёд, вы сможете продолжать открывать новое для изучения.
Обязательно общайтесь с другими программистами. Спросите их, как и почему они делают те или иные вещи, подходят ли они к вещам под другим углом, и спросите, есть ли у них советы по поводу вашего кода. Будьте вежливы, потому что старшие программисты очень заняты. Уважение приведёт вас далеко. Это тесно сплочённая индустрия, и репутация имеет значение.
4 Изучите много языков программирования. Станьте экспертом в некоторых из них
У вас на самом деле не будет много свободного времени, по крайней мере недостаточно, чтобы учить много языков одновременно, если только вам исключительно не повезёт. Поэтому вы можете изучать много языков программирования на более поверхностном уровне — достаточном, чтобы понять, что делает их популярными, что делает их хорошими в областях, где их обычно используют, и в чём их недостатки. Расширение важно. Не ограничивайтесь одним типом языка, например императивными или объектно-ориентированными языками; выйдите за рамки и изучите несколько функциональных или декларативных языков.
Изучите диалект Lisp. Вы не будете использовать его в повседневном программировании. Но его изучение и практика сделают вас более глубоким мыслителем, и вы глубже оцените очарование простых рекурсивных систем. Продолжайте изучать и практиковать его до того момента, когда вы не сможете не воскликнуть «Ага!». До этого момента он будет казаться вам странным набором синтаксиса и неуклюжим использованием. На протяжении всей остальной карьеры он станет одной из самых захватывающе элегантных концепций, когда-либо придуманных человечеством.
После этого изучите чисто функциональный язык. Я рекомендую Haskell. Он заставляет вас мыслить чисто функционально так, как этого не делают другие функциональные языки, включая диалекты Lisp. Как только вы поймёте цель, стоящую за проектированием монад, или переживёте другие «ага»-моменты, вы выйдете на более высокий уровень мыслительных способностей и проектирования элегантных систем.
Наконец, изучите декларативный язык. SQL тоже подойдёт, хотя он относительно слаб. Часто рекомендуют Prolog. Также XAML, XSLT и XQuery. Декларативный язык — это язык, на котором вы сообщаете компьютеру, что вы хотите, чтобы он сделал, а компьютер сам решает, как это сделать; императивный язык — противоположность: вы сообщаете компьютеру, как что-то сделать, и надеетесь, что он правильно сделает то, что вы хотите; в функциональном языке вы описываете, как преобразуются данные и типы.
5 Создайте свой собственный язык программирования
Он не обязан быть сложным, продвинутым или даже особенно элегантным. Ему даже не нужно быть оригинальной идеей. Я часто рекомендую написать интерпретатор Lisp (ещё лучше, если он написан на диалекте Lisp). Это отличный способ изучить основы. Фактически, вы сможете хорошо прочувствовать основы проектирования языков программирования: лексический анализ, синтаксический анализ, компиляцию, интерпретацию, виртуальные машины и то, как базовые проектные решения влияют на практичность языка в различных областях.
В процессе вы получите следующие 3 вещи:
1) Вы глубже поймёте, как работают выбранные вами инструменты, и сможете писать более эффективный код.
2) Вы начнёте понимать причины, стоящие за дизайнерскими решениями мейнстримных языков и инструментов. Это поможет вам более эффективно выбирать используемые инструменты.
3) Вы получите представление о неоткрытых возможностях, которые всё ещё существуют в инструментах и языках, расширите свой кругозор и сможете открыть новые, интересные, классные вещи для изучения и экспериментов.
6 Изучите то, чего не изучал никто другой
Это самый сложный и последний шаг. Ещё десять лет. Сохраняйте интерес и делайте интересные вещи; оставьте позади то, что не приносит вам удовольствия.
Источник на английском:become-a-good-programmer-in-six-really-hard-steps/