Как на самом деле стать программистом

По многочисленным просьбам. Скорее всего описанное ниже не обрадует, поскольку сильно отличается от популярной картинки «успешного успеха» и «вкатывания в ИТ за пару месяцев». Зато это правда и следуя таким рекомендациям у вас действительно получится стать программистом. Если выживете.

431ca20409287677a84a7cc253528cf4.jpeg

Вводная

Скажу сразу, речь пойдет о полноценных программистах — о тех кто занимается именно разработкой ПО и непосредственно пишет код.

Весь «обслуживающий персонал» в виде менеджеров, аналитиков и тестировщиков с девопсами сегодня идут мимо. Со всем уважением к их сложным профессиям — дело делают не они.

Ниже по шагам и на полном серьезе я расскажу как действительно можно стать самым настоящим программистом, причем так чтобы у вас никогда не было проблем с работой.

Правда могут появиться определенные проблемы с головой, но ничего не поделаешь — без жертв успеха не бывает, увы.

«No pain, no gain» (ц) Джейсон Стетхем.

Если вы сможете пройти все описанное до конца — если уж не в Гугл с Яндексом, то в чуть менее пафосные места вас с радостью возьмут, поскольку станете на голову выше публики, которая обычно шастает по собеседованиям.

Еще описанное основано на личном опыте, как-то так я и учился.

f80f09f9b9cbbb3f4918905b6e91631d.jpeg

Необходимые жертвы

Начнем с самого сложного и жестокого:

Вам нужен минимум один год чистого времени, без каких-либо отвлечений. Вообще и совсем.

Все прекрасно понимаю: «дом‑жена‑дети‑служба‑учеба‑ипотека», все это слышал, неоднократно. Но оно вот так и по‑другому не бывает — у всего есть цена.

Не можете себе позволить?

Не готовы?

Тогда дальше можете не читать, дальше будет еще жесче:

помимо траты самого драгоценного ресурса — вашего времени, еще нужно получить две самых редких вещи в современном мире: тишину и покой.

Нужно сделать так, чтобы вас целый год никто не отрывал от процесса обучения. И сделать это в 21 веке будет невероятно тяжело.

Нет, места заключения не подойдут — там компьютеры запрещены.

Самое крутое это поселиться на год в монастыре, но не уверен что вам разрешат. Поэтому есть более реалистичный вариант — старая дедушкина дача в какой‑нибудь очень далекой деревне.

Под полным запретом на весь год:

социальные сети и компьютерные игры — мало того что они отнимают нереальное количество времени так еще и сильно отупляют, а вы должны быть в максимальном фокусе.

алкоголь и стимуляторы — очень сильно бьет по концентрации и вниманию, не сможете ясно мыслить.

Смысл всей этой жести в том чтобы создать своеобразный кумулятивный снаряд, для пробивания «каменной стены непонимания», разделяющей обычного человека и программиста.

У вас должны сформироваться нейронные связи в мозгу, отвечающие за «связное изложение мысли в виде кода».

Да да, именно так это и просходит: программисты действительно не просто «чего‑то там пишут в редакторе», а выражают мысли с помощью кода.

Чем вы должны заниматься:

вы не читаете новости, не сидите на форумах, не участвуете в интернет-дискуссиях, не делитесь прогрессом обучения, не смотрите сериалы и котиков — вы пишите код, учитесь писать код, скачиваете примеры кода и гуглите решения проблем со сборкой этого кода.

Интернет должен быть либо медленный и плохой либо вообще отключенный — самый идеальный вариант.

Теперь, когда у вас прошел первоначальный шок, немного расскажу зачем все это надо. Дело в том, что программист это такой специальный человек, который в первую очередь пишет код.

Не рассуждает о том как он пишет код, не смотрит видео, где кто‑то другой пишет код, не учит других писать код и не ставит задачи как писать код.

Все вдруг успели забыть, что программирование это вообще‑то творческий процесс. А любой творческий процесс требует серьезной концентрации и внимания.

Что будет если вы например попробуете постоять рядом с художником и указывать ему как рисовать? — Получите по лицу мольбертом, как минимум.

Тут ровно тоже самое: чтобы научиться нормально программировать, крайне необходимо чтобы вас не отвлекали и не отрывали. Ни по какому поводу.

Поэтому собираете рюкзак, берете ноутбук, набиваете диск исходниками и техническими книжками с примерами и отправляетесь в путь в деревню к дедушке.

ca44194056372c24b70d37e52939ac0b.jpeg

Что и как учить

Считаю самый разумный выбор в качестве первого языка это Java.

Cамый лучший язык программирования на свете это разумеется Си, но к сожалению в современных реалиях начинать с него будет слишком тяжело.

Объясняю почему.

C# и .NET привяжет вас к Windows и надолго, еще и неотвратимо повредит мозг особенностями разработки под эту платформу: «недокументированные» функции, хаки, костыли и подпорки, а также реалии большого коммерческого софта. Сразу и с самого начала это точно не надо, успеете потом насладиться на работе.

Node.js, Javascript/Typescript и все веб‑технологии вообще — отдалят понимание внутренних процессов и принципов разработки. Не сможете мыслить как инженер, потому что нельзя изучать асинхронное программирование без основ многопоточности, а многопоточность — без основ самого программирования.

Python — в настоящее время этот язык стал слишком узкоспециализированным и чаще всего применяется для работы с нейросетями, Big Data, AI и подобными научными вещами. Начнете с него — утонете в прикладной информатике, причем без особых перспектив, поскольку одного года на нейросети не хватит никак.

Так что нужна именно Java.

Единственное что Java от вас скроет это работа с памятью, но для современной разработки это не очень важно. Второй хороший вариант это C++ (по тем же причинам), но будет чуть сложнее и дольше в изучении.

Не стоит начинать изучение программирования и с мобильной разработки — утонете в деталях реализации, которые вам точно не нужны на начальном этапе.

3a26768b66e1382b817a82ac7110b342.jpeg

Процесс обучения

Самое главное:

вы должны непрерывно и постоянно писать код, не отвлекаясь.

Чтобы происходило формирование нейронных связей между описанием задачи, способом реализации и непосредственно написанием.

Вы надо делать два типа задач:

  • Примеры из книг и упражения

  • Тестовые доработки открытого ПО

И делать это надо непрерывно.

Примеры из книг и упражения

Книги по программированию лучше всего выкачивать массово, в виде коллекций и подборок.

Нужны будут сотни (если не тысячи) книг — работа с технической литературой отличается от обычного чтения запоем художественной литературы, техническая книга это в первую очередь справочник, к которому вы будете обращаться адресно для решения какой‑то конкретной проблемы.

Так что «прочитать от корки до корки» — не про техническую литературу.

Если только это не божественный SICP, который я все же настоятельно рекомендую читать целиком и с молитвой.

Если владеете английским — ищите сразу оригинал на английском, не тратьте время на перевод.

С каждой нормальной книгой по программированию обязательно идут учебные примеры, чаще всего они выкладываются в свободный доступ на Github или на сайте автора книги.

Найти их можно вот таким запросом в поисковых системах:

github "название книги" code samples

Эти примеры важнее чем сама книга, поэтому в первую очередь стоит собирать и скачивать именно их.

Тестовые доработки открытого ПО

Примеры и упражения из книг это конечно замечательно, но их одних не хватит для полноценного обучения. Поэтому параллельно нужно учиться задачам, «приближенным к боевым».

Самый лучший вариант это взять несколько популярных проектов с открытым исходным кодом и пробовать их переделывать: отключать какие‑то ветки логики, переименовывать текстовые вставки, отключать какие‑то управляющие кнопки и так далее.

Это крайне эффективный способ обучения, который сразу же приблизит вас к реальным задачам программистов, за которые их отлавливают нанимают и платят деньги.

Для примера можно взять:

Apache Netbeans — универсальная среда разработки на Java,

Eclipse Jetty — сервлет‑контейнер,

JBoss Wildfly — сервер приложений.

Все эти проекты собираются в один шаг, без необходимости установки каких-то дополнительных библиотек или средств разработки.

Да, все они большие и сложные, при первой сборке будут выкачиваться сотни зависимых библиотек и врядли что-то будет понятно с первого раза.

Но такая работа необходима, потому что на реальных задачах большую часть времени вы будете работать с большим количеством уже написанного чужого кода.

Ковыряние всех этих проектов, плюс примеры из книг — по 10 часов в день в течение года дадут нужный кумулятивный эффект и начальное понимание профессии.

73d40df014f96d42b0365a096cb3f7e6.png

Менторство, ютуб и онлайн-курсы

Наверное процентов так 90 от всех виденных автором за жизнь серьезных программистов были… самоучками.

Большинство конечно все равно где‑то когда‑то учились, кто‑то заканчивал и получал диплом о высшем образовании, кто‑то бросал. У некоторых не было даже законченного ПТУ, а у пары особо ярких деятелей — лишь 8 классов школы и коридор.

И все это никак не мешало им хорошо работать.

У самого автора достаточно редкая ситуация для тех лет — профильное высшее образование, в дипломе от 2005 го года так и написано: инженер-программист.

Что характерно, за все время работы в качестве наемного сотрудника, наличие диплома о профильном образовании так никто ни разу и не спросил. Нельзя сказать что «вышка» совсем уж ничем не помогла, но основные свои знания и навыки автор получал самостоятельно и отнюдь не в стенах учебного заведения.

Поэтому фетишировать наличие ВО и образования вообще не стоит, несмотря на все кризисы — «корочки» все также не являются определяющим фактором для найма.

Резюмируя, есть важная особенность профессии программиста:

необходимость учиться самостоятельно и постоянно.

Напрямую связанная с тем самым навыком «изложения мысли в виде кода», который я описал выше.

Концепция менторства, наставничества и всех этих видеокурсов напрямую противоречит идее самообучения, поэтому не дает необходимого результата — у вас банально не формируется необходимый для работы навык.

Практические знания?

Да, вы их получите и в большинстве случаев чему‑то научитесь, но не более того. К реальной работе это может не иметь отношения вообще и дело тут не в объеме учебного материала или часов практики, дело в самом подходе.

Закрепление и результат

По итогам такого марафона, у вас должны выработаться реальные навыки разработки, сборки, доработки и отладки приложений, но повторюсь:

самое главное что должен выработаться навык выражения мысли с помощью кода — ключевой для любого программиста.

Также возможно вы поймете и убедитесь, что программирование — не для вас и это не тот вид деятельности, которым вы бы хотели заниматься.

Это нормально, поскольку программирование действительно не для всех.

Но год интенсивных занятий с полной фокусировкой на конкретной задаче и непрерывные упражнения на логику точно поставят вашу голову на место, заодно научив дисциплине, если у вас были с этим проблемы.

А дисциплина (если вы вдруг не знали) — царица любых достижений и побед.

Сложно сказать, хватит ли одного года, даже с такой интенсивностью для того чтобы вас сразу взяли на хорошую должность, но любых современных «джуниоров» вы точно обойдете на голову.

P.S.

Это доведенная до ума, вычищенная и облагороженная версия статьи, оригинал которой находится в нашем блоге. Статья в свое время вызвала живейший интерес и дискуссию, в том числе на сторонних ресурсах, так что повод для ее повторной выкладки на Хабре точно есть.

© Habrahabr.ru