software-development
April 23, 2023

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

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

Из предыдущего:

Про «вкатунов» в ИТ, про то как работают программы, про исходный код, про фреймворки, про говнокод, про микросервисы, про рефакторинг, про выбор языка программирования, про нейросети.

Вы твердо решили залезть в это дерьмо

И конечно мне вас не переубедить.

Нет даже смысла спрашивать «зачем» — деньги, престиж и телочки, это же очевидно. Вы же видели в кино, у всех программистов это есть. Кто от такого откажется.

Ну ладно, вы сами напросились.

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

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

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

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

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

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

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

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

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

Но оно вот так и по-другому не бывает, потому что у всего есть цена.

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

Не готовы?

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

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

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

Сделать это в 21 веке будет невероятно сложно.

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

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

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

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

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

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

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

Да да, именно так это и просходит:

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

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

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

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

Немного опишу зачем все это надо.

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

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

А любой творческий процесс требует серьезной концентрации и внимания.

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

Вот тут тоже самое.

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

Вообщем собираете рюкзак, берете ноутбук, набиваете стопку дисков исходниками и техническими книжками с примерами.

И отправляетесь в путь.

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

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

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

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

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

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

Python — в настоящее время он стал слишком узкоспециализированным, чаще всего применяется в качестве движка для работы с нейросетями, big data, AI и подобными полу-научными вещами. Начнете с него — утонете в прикладной разработке, причем без особых перспектив — одного года на нейросети не хватит никак.

Поэтому нужна именно Java.

Единственное что Java от вас скроет - работа с памятью, но для современной разработки это на самом деле не очень важно.

Второй хороший вариант это C++, по тем же причинам. Но он будет чуть сложнее в изучении.

Отдельно про т. н. «frontend developers»:

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

Не надо вообщем с этого начинать.

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

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

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

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

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

  1. Примеры из книг и упражения
  2. Тестовые доработки открытого софта

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

Сами книги по программированию лучше всего выкачивать массово из торрент-трекеров или телеграм каналов. Покупать - никаких денег не хватит.

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

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

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

книги по программированию torrent

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

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

github book code samples

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

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

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

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

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

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

Eclipse Jetty - сервлет-контейнер

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

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

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

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

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

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

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

Причем как в СНГ так и зарубежом.

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

Ярчайший пример.

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

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

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

Вообщем это такая особенность профессии программиста:

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

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

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

Знания?

Да, вы их получите, чему-то научитесь, но и только.

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

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

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

Что ключевое для программиста.

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

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

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