Как на самом деле стать программистом
По многочисленным просьбам. Скорее всего написанное вас ужаснет, вгонит в депрессию и разочарует — вообщем сильно не понравится, я предупредил.
Про «вкатунов» в ИТ, про то как работают программы, про исходный код, про фреймворки, про говнокод, про микросервисы, про рефакторинг, про выбор языка программирования, про нейросети.
Вы твердо решили залезть в это дерьмо
И конечно мне вас не переубедить.
Нет даже смысла спрашивать «зачем» — деньги, престиж и телочки, это же очевидно. Вы же видели в кино, у всех программистов это есть. Кто от такого откажется.
Ну ладно, вы сами напросились.
Скажу сразу, что речь пойдет о нормальных программистах — тех кто занимается именно разработкой софта и пишет код.
Всякий подзалупный творожок вроде менеджеров, аналитиков или тестировщиков с девопсами идут лесом. Со всем уважением к их сложным профессиям — дело делают не они.
Ниже я по шагам и на полном серьезе расскажу как действительно можно стать настоящим программистом, причем так чтобы у вас никогда не было проблем с работой.
Если вы сможете пройти все описанное до конца — если уж не в Гугл с Яндексом, то в чуть менее пафосные места вас с радостью возьмут, поскольку вы будете на голову выше всей той шелупони, что обычно шастает по собеседованиям.
Еще описанное основано на личном опыте, как-то так я и учился.
Необходимые жертвы
Вам нужен минимум год чистого времени, без каких-либо отвлечений. Вообще.
Все прекрасно понимаю: «дом-жена-дети-служба-учеба-ипотека», все это слышал неоднократно.
Но оно вот так и по-другому не бывает, потому что у всего есть цена.
Тогда дальше можете не читать, дальше будет еще жесче.
Потому что помимо траты самого драгоценного ресурса — времени, вам еще нужно получить две самых редких вещи в современном мире: тишину и покой.
Нужно сделать так, чтобы вас целый год никто не отрывал от процесса и вам не мешал.
Сделать это в 21 веке будет невероятно сложно.
Нет, места заключения не подойдут — там компьютеры запрещены.
Самое крутое это поселиться на год в монастыре, но не уверен что вам разрешат. Поэтому более реалистичный вариант: старая дедушкина дача в какой-нибудь очень далекой деревне.
Под полным запретом на весь год:
любые социальные сети и тем более компьютерные игры — они мало того что отнимают нереальное количество времени так еще и отупляют, а вы должны быть в максимальном фокусе.
бухло и любая дурь — очень сильно бьет по концентрации и вниманию, не сможете ясно мыслить.
Смысл всей этой жести в том чтобы создать своеобразный «кумулятивный снаряд», для пробивания каменной стены непонимания, разделяющей обычного человека и разработчика.
У вас должны сформироваться нейронные связи в мозгу, отвечающие за «связное изложение мысли в виде кода».
Да да, именно так это и просходит:
программисты действительно не просто чего-то там пишут, а выражают мысли с помощью кода.
вы не читаете новости, не сидите на форумах и не участвуете в интернет-срачах, не делитесь прогрессом обучения, не смотрите сериалы и котиков — вы пишите код, учитесь писать код, скачиваете примеры кода и гуглите решения проблем со сборкой этого кода.
Интернет должен быть либо медленный и плохой либо вообще отключенный — самый идеальный вариант.
Немного опишу зачем все это надо.
Программист это человек который в первую очередь пишет код. Не рассуждает о том как он пишет код, не смотрит видео где кто-то другой пишет код, не учит других писать код и не ставит задачи как писать код.
Как-то так получилось, что все вдруг успели забыть что программирование это вообще-то творчество, творческий процесс.
А любой творческий процесс требует серьезной концентрации и внимания.
Что будет если вы например, попробуете стоять рядом с художником и указывать ему как рисовать? — Получите по #блу мольбертом, разумеется.
Чтобы научиться нормально программировать, нужно чтобы вас не отвлекали и не отрывали.
Вообщем собираете рюкзак, берете ноутбук, набиваете стопку дисков исходниками и техническими книжками с примерами.
Что и как учить
Считаю что самый разумный выбор в качестве первого языка это Java.
Cамый лучший язык разумеется Си, но к сожалению в современных реалиях начинать с него будет слишком тяжело.
C# и .NET привяжет вас к Windows надолго, еще и неотвратимо повредит мозг особенностями разработки под венды: всякие «недокументированные» функции, хаки, костыли и подпорки, а также ужасы обратной совместимости и реалии большого коммерческого софта. Сразу и с самого начала это не надо.
Node.js, Javascript/Typescript да и все веб-технологии вообще — отдалят понимание внутренних процессов. Будете мыслить как долбо#б, а не инженер. Просто потому что нельзя изучать асинхронное программирование без основ многопоточности, а многопоточность — без основ самого программирования.
Python — в настоящее время он стал слишком узкоспециализированным, чаще всего применяется в качестве движка для работы с нейросетями, big data, AI и подобными полу-научными вещами. Начнете с него — утонете в прикладной разработке, причем без особых перспектив — одного года на нейросети не хватит никак.
Единственное что Java от вас скроет - работа с памятью, но для современной разработки это на самом деле не очень важно.
Второй хороший вариант это C++, по тем же причинам. Но он будет чуть сложнее в изучении.
Отдельно про т. н. «frontend developers»:
Не считаю разработчиков фронтэнда за нормальныхлюдейпрограммистов, несмотря на всю сложность современной фронтэнд разработки. Браузер — сильно изолированная и ограниченная среда выполнения, заниматься только такой работой это примерно как постоянно ходить в бар, пить там только безалкогольное пиво и считать себя алкоголиком.
Не надо вообщем с этого начинать.
Процесс обучения
У вас должна формироваться связь в нейронах мозга между описанием задачи, способом реализации и написанием.
Вы надо делать два типа задач:
Примеры из книг и упражения
Сами книги по программированию лучше всего выкачивать массово из торрент-трекеров или телеграм каналов. Покупать - никаких денег не хватит.
Если владеете английским — ищите и скачивайте сразу оригинал на английском, не тратьте время на перевод.
Часто народ собирает и выкладывает огромные коллекции книг — для вас это самый оптимальный вариант, поскольку нужны будут сотни и сотни книг, не единицы или десятки.
Найти их можно вот таким запросом в поисковиках:
книги по программированию torrent
С каждой нормальной книгой по программированию обязательно идут примеры, чаще всего они выкладываются в свободный доступ на github.
Найти их можно вот таким запросом в поисковых системах:
github book code samples
Эти примеры чаще важнее чем сама книга, поэтому в первую очередь стоит собирать и скачивать именно их.
Тестовые доработки открытого софта
Примеры и упражения из книг это конечно замечательно, но их одних не хватит. Поэтому параллельно вам нужно учиться задачам, приближенным к боевым.
Самый лучший вариант это взять несколько популярных проектов с открытым исходным кодом и пробовать их переделывать: отключать какие-то ветки логики, переименовывать текстовые вставки, отключать какие-то управляющие кнопки и так далее.
Apache Netbeans - универсальная среда разработки на Java
Eclipse Jetty - сервлет-контейнер
JBoss Wildfly - сервер приложений
Все эти проекты собираются в один шаг, одной командой, без необходимости установки каких-то дополнительных нативных библиотек или средств разработки.
Да, они все большие и сложные, при первой сборке будут выкачиваться очень много зависимых библиотек, да и врядли хоть что-то там будет понятно сразу.
Но такая работа строго необходима, потому что большую часть времени вы будете работать с большим количеством уже написанного чужого кода.
Ковыряние всех этих проектов, плюс примеры из книг — по 10 часов в день в течение года как раз и дадут нужный кумулятивный эффект, чтобы получить какое-то начальное понимание о профессии.
Менторство, ютуб и онлайн-курсы
Наверное процентов так 90 от всех виденных мною серьезных программистов за всю жизнь были самоучками.
Причем как в СНГ так и зарубежом.
Большинство из них конечно где-то когда-то учились, кто-то заканчивал и получал диплом о высшем образовании, кто-то бросал, не закончив. У некоторых не было даже законченного ПТУ, а у пары особо ярких деятелей — лишь 8 классов школы и коридор.
Ярчайший пример.
И все это никак не мешало им хорошо работать.
У меня самого достаточно редкая ситуация для моих лет — профильное высшее образование, а в дипломе от 2005го года прямо так и написано: инженер-программист.
Что характерно, даже наличие диплома о ВО никто никогда не спрашивал при собеседовании. Нельзя сказать что профильная вышка совсем уж ничем мне не помогла, но основные свои знания и навыки я получал сам и отнюдь не в стенах учебного заведения.
Вообщем это такая особенность профессии программиста:
обязательная необходимость учиться самостоятельно и постоянно.
Напрямую связанная с тем самым навыком «изложения мысли в виде кода», который я выше описывал.
Концепция менторства, наставничества, всех этих видеокурсов напрямую противоречит идеи самообучения, поэтому и не дает необходимого результата — у вас банально не формируется необходимый для работы навык.
Да, вы их получите, чему-то научитесь, но и только.
К реальной работе это вполне может не иметь отношения вообще. И дело даже не в объеме учебного материала или часов практики а в самом подходе.
Закрепление и результат
По итогам такого марафона, у вас должны выработаться реальные навыки разработки, сборки, доработки и отладки приложений, но повторюсь — самое главное что должен выработаться навык выражения мысли с помощью кода.
Что ключевое для программиста.
Возможно также, что вы поймете — программирование не для вас и пойдете заниматься чем-то другим.
Сложно сказать, хватит ли одного года, даже с такой интенсивностью для того чтобы вас сходу взяли на хорошую должность, но любых современных «джуниоров» вы обойдете на голову.
Ну и с нетерпением жду комментов про то что «все не так», «я сам вкатился на изи за полгода х#епинания», «смотри видеокурсы на ютубе» и подобного — расскажите папе как детей делать, ага.