Привет! Я - разработчик с опытом работы чуть больше 5 лет, поэтому я нахожусь на золотой середине, когда я уже примерно понял, как все устроено, но еще не успел забыть трудности, которые испытывал, когда был новичком.
За время работы у меня успел накопиться опыт, которым я хотел бы поделиться с теми, кто только думает о том, как именно начать карьеру программиста.
Здесь я постараюсь разобрать (опираясь на свои знания и наблюдения) одни из самых популярных вопросов, и ответить на них исчерпывающе.
Может показаться, что эта тема достаточно избита, однако написать статью меня подтолкнули заблуждения знакомых и то, что я вижу в интернете, а значит, что далеко не все люди осведомлены о рассматриваемых в статье темах.
Также, если у вас есть возражения насчет того, что я напишу ниже (или просто фидбек), выскажите их в комментариях, чтобы мы могли разобраться более подробно. Я открыт к любой конструктивной критике и уверен, что среди читателей есть множество людей, у которых опыта значительно больше, чем у меня, поэтому призываю вас поделиться им! :-)
И сразу обозначу свою позицию - я считаю, что каждый может стать программистом, и что эта профессия ничем не отличается от других. Никакой элитарности или невероятной сложности в этом нет, просто слегка отличается подход к обучению из-за большого количества материалов в открытом доступе.
Ну, поехали:
1. Скорее всего, вы сможете обойтись без платных курсов
Сейчас в интернете невероятное засилье различных курсов, которые обещают сделать из вас разработчика/тестировщика/2D или 3D художника, стоит всего лишь заплатить 300 000 продавцу этих курсов (а то и 500 000, как за один интересный буткемп). Я сторонник того, что делать этого не стоит, потому что единственный плюс такого обучения - взаимодействие с преподавателем и получение фидбека, однако подобные курсы зачастую ведут и проверяют люди далеко не самые профессиональные, поэтому здесь - кот в мешке, смотря кто попадется.
Минусов, на мой взгляд, намного больше:
Большая цена - здесь даже говорить не стоит. Обычно она компенсируется рассказами о том, что курс окупится за 2-3 месяца работы, однако это только в том случае, если вы куда-то устроитесь. Более того, можно получить те же знания бесплатно, тогда и окупать ничего не придется.
Преподаватели - как я уже написал, зачастую совершенно неясно, какой уровень у человека, который писал материал курса и человека, который преподает его. Как ни странно, доверие к людям с условного YouTube намного больше, так как их навыки подкреплены мнением людей, возможностью посмотреть историю канала и тем, что у них (зачастую) нет цели что-то вам продать. Конечно, обжечься о плохого учителя можно и здесь, но тут это хотя бы материально бесплатно.
Отсутствие гарантий - я знаю, что часть школ «гарантирует» ваше трудоустройство (там тоже есть свои подводные камни), однако это только часть, и достаточно малая. Большинство, по-прежнему, не гарантируют ничего, кроме невнятного сертификата при прохождении. А те, кто и гарантируют и имеют хорошую репутацию, берут очень много денег в абсолютном выражении.
-
В реальности, нужно учиться разбираться в непонятных вещах самому - если вы идете на курс по той причине, что вам нужен именно преподаватель, который разжует вещи понятным языком и забьет их вам в мозг, и не хотите разбираться сами, то такой курс - лишь временная панацея. Если вы хотите, чтобы вас вкатили в IT, а вы просто денег отдали - это мимо.
Вся суть нашей работы в том, чтобы разбираться в чем-то, что не ясно изначально, и никто не будет тратить время и деньги на то, чтобы постоянно объяснять и делать что-то за программиста.Здесь речь не идет о трейни, с которыми рядом постоянно находится ментор и помогает разобраться в работе. В таком случае, трейни уже попал на работу, потому что разбирался и учился сам, а ментор нужен для того, чтобы человек быстрее вник в кодовую базу, предметную область и адаптировался внутри компании. Если трейни не захочет разбираться сам, то он очень быстро вылетит за борт.
Трижды подумайте, прежде чем влезать в долги или кредиты ради получения работы под пальмой с ноутбуком 2 часа в день за $6000 в месяц, в реальности все не совсем так. Даже если я не смог переубедить вас покупать курсы, пожалуйста, сначала позанимайтесь сами хотя бы пару недель, чтобы понимать, на что вы идете.
Если преподаватель все-таки нужен и хочется в целом сократить себе путь, то я рекомендую найти себе ментора по направлению. Зачастую, их экспертиза подкреплена пруфами и отзывами учеников, а ценовая политика значительно более щадящая, чем у школ.
2. Английский необходим, но…
Очень часто вижу мнение, что программисту необходимо знание английского языка. Однако, зачастую никто не углубляется в то, что именно необходимо.
На мой взгляд, начинающему и среднему разработчику практически не нужен навык говорения, потому что он пригодится только в случае релокейта или работы с зарубежной фирмой напрямую. Однако, такие предложения обычно поступают очень опытным и востребованным разработчикам, и сопровождаются курсами за счет компании для обучения целевого языка. Помимо этого, совершенно не обязательно разбираться в грамматике (тонкости разных времен, артикли, исключения), потому что обычно то, что требуется понять, написано грамматически максимально просто.
В нашем случае, две самых необходимых вещи это:
Умение формулировать мысли на английском (необязательно уметь правильно произносить их в слух) - этот навык напрямую влияет на то, сможете ли вы найти информацию по своему вопросу в интернете. На самом начальном этапе искать можно и на русском, но быстро станет ясно, что результаты крайне ограничены.
А в наше дивное время LLM и замены ими гугла и StackOverflow, этот навык становится просто невероятно ценным.-
Умение воспринимать информацию на английском языке - этот навык напрямую связан с первым, так как мало толку от умения найти информацию, если нет возможности понять то, что было найдено. Здесь речь идет и о тексте, и об аудио. Конечно, сейчас доступны переводы прямо в браузере, но проблема в том, что вы теряете устоявшиеся термины, которые в дальнейшем все равно придется употреблять и оперировать именно ими, а не переводом. Ну и картинки никто переводить не будет, а в документации они попадаются часто, поэтому вы рискуете оказаться в ситуации, когда в статье Deadlock был назван Взаимоблокировкой, а на картинке он все тот же deadlock
Чтобы развить второй навык, я рекомендую начать потреблять весь контент на английском. Музыка, интерфейсы программ, сериалы, аниме, подкасты, ютуб, игры, статьи, книги. Практически каждую область потребляемого контента можно так или иначе «переключить» на английский, и чем раньше это сделать, тем проще будет в дальнейшем.
Первый навык подтянется сам по себе, если выполнять рекомендации для второго. Однако, можно ускорить его развитие несколькими способами, например, вести свой дневник на английском языке, переписываться на англоговорящих форумах по интересам, или общаться в специальных текстовых чатах, где люди также хотят научиться английскому языку.
Хочется сказать, что знание английского в современном мире не привилегия, а практически обязанность. До тех пор, пока машинные переводчики не научились работать идеально, знать этот язык необходимо, потому что он открывает огромную кладезь различной информации, ресурсов и возможностей.
3. Математика НЕ необходима, но…
И снова достаточно распространенное мнение, что «программисту необходимо знание математики» и в целом базы, однако здесь конкретику можно встретить еще реже. Я тоже не готов расписать, какая область математики где может пригодиться, потому что это больше зависит от предметной области, в которой вы будете работать, чем от стека технологий. Однако, здесьесть исключения. Например, считается, что в разработке игр математика — один из самых важных инструментов, но это не совсем так.
«Разработка игр» это слишком широкое понятие. Делаете визуальную новеллу на готовом фреймворке? Не нужна там математика. Собираете в хитром нодовом редакторе очередную казуалку? Тоже не нужна. И так далее.
Если упрощать, то математика(как и любое другое базовое знание) нужна там, где нужна, точка. Как понять это?
В требованиях к вакансии она будет в списке требований.
Если вы не можете писать код без использования математики, который решает поставленную бизнес-задачу и проходит код-ревью коллег, то тоже нужна.
Я сам сейчас нахожусь на стороне тех, кому математика в каждодневной работе не пригождается, поэтому не обладаю полным видением картины. Я не стремлюсь обесценить чьи-то знания здесь. Все, что я хочу сказать, это то, что если вы не знаете математику, и совершенно не хотите ее изучать, это не является поводом отказываться от идеи стать программистом. Скорее, это просто ограничит круг предметных областей, в которых вы можете работать. И возможно, в каких-то обстоятельствах, ограничит рост до самых высших позиций, но это не точно.
Что программисту действительно необходимо, так это способность разбить поставленную задачу на дискретное количество малых выполняемых шагов, и методично делать их один за другим. Такой тип мышления обычно отсутствует у людей по умолчанию, но развивается на протяжении обучения и работы.
Исторически, сама профессия имеет математические корни, и, фактически, появилась благодаря необходимости работать с калькуляторами, которые, в свою очередь, появились дабы решать математические проблемы. Соответственно, в прошлом, любой программист без исключения работал в предметной области, тесно связанной с математикой, поэтому ее знание и было необходимостью. В настоящем, как мы знаем, это совершенно не так, потому что программирование и автоматизация захватили все области жизни, а вот знание математики по-прежнему требуется только тогда, когда требуется работать в предметной области, с ней связанной.
4. Высшее образование НЕ необходимо, но…
Вот в этой статье на самом деле уже все сказано, и я бы не хотел сильно повторяться
От себя добавлю такую мысль - программирование давным-давно стало просто ремеслом(без негативного подтекста). Уровень решаемых задач зачастую достаточно тривиальный, как только ты ознакомился с кодовой базой, документацией и в целом приспособился на рабочем месте. Это я говорю по опыту коммерческого бэкенда и геймдева. Может, в других областях по-другому, но я сомневаюсь(мемы про покраску кнопок и перекладку json не просто так появились)
Зачем здесь высшее образование, чего ради? Это - огромная инвестиция, жизнь далеко не вечна, молодые годы тем более, да и денег оно зачастую стоит немало: даже если попали на бюджет, косвенные расходы, такие как съем квартиры, огромны.
Оно нужно, потому что пригодится когда-то потом, когда будут требовать решения настоящие задачи? А если не будут? А если можно справиться и без высшего образования? А что если научиться тому, чего задачи требуют тогда, когда задачи возникнут? Вы же не учите все технологии в мире в надежде на то, что когда-нибудь они обязательно пригодятся.
Ну и мы понимаем, что ВУЗ ВУЗу рознь. У меня есть высшее образование, но оно даже близко не может стоять с тем, что дают в топовых ВУЗах России. И со стажировками бигтехи приходят только в них.
В общем, здесь можно очень долго рассуждать, но я в целом считаю, что образование сейчас совершенно не работает так, как могло бы работать, какую пользу приносить.
Подробнее об этом я писал в своей предыдущей статье, поэтому тоже особо повторяться не буду
Резюмируя - я не хочу ничего обесценивать, если есть у вас высшее образование и оно пригождается в работе и жизни, то это прекрасно, значит инвестиция отбилась.
Моя позиция в том, что зачастую оно как раз не отбивается, и у нас есть просто ошибка выжившего, когда мы берем в расчет только лучшие ВУЗы страны и лучшие мозги страны. Сопоставляем это, видим что лучшие мозги страны закончили лучшие ВУЗы страны, экстраполируем это, отметая генетику, случайность и миллион других факторов, и говорим что высшее образование обязательно нужно.
Это не так, давайте не забивать себе голову разными когнитивными искажениями.
5. Семь раз отмерь, один раз отрежь
Здесь я употребил знаменитую пословицу не совсем в том смысле, в котором она применяется обычно. Я хочу сказать, что сейчас в программировании очень много областей, которые кардинально отличаются друг от друга и имеет смысл не пытаться сразу же углубиться в одну, а поверхностно изучить множество, и только после этого выбрать то, что вам пришлось по душе, опираясь на приобретенный опыт.
Часто бывает так, что люди приходят в программирование, услышав о каком-то конкретном направлении, желая работать только в нем. Раньше, это была автоматизация математических вычислений, затем - игры, после этого - веб, потом в тренды попали нейросети, после - блокчейн технологии, а сейчас снова нейросети, потому что потребители узнали про LLM (если мейнстрим на момент прочтения успел измениться, то это не важно и лишь подтверждает то, о чем я говорю).
Если вы хотите стать программистом в одной конкретной области, потому что она кажется вам перспективной/интересной/прибыльной, но вы при этом не рассматривали ни одну другую, то это рискует стать ошибкой, потому что огромен шанс того, что будет выбрано не самое лучше для вас направление.
Я понимаю, что время ограничено, и хочется стать профессионалом в одном деле, а не новичком во всем на свете, но призываю вас потратить немного времени, собрать небольшой список крупнейших областей, в которых вы могли бы работать и сделать по одному мини-проекту в каждой из них. Примерами областей могут быть: мобильная разработка, веб, десктоп, игры, Data Science, embed и так далее.
Когда вы определитесь с желаемым общим направлением, то я советую не останавливаться, а продолжать копать дальше.
Скажем, вы решили разрабатывать игры. Определите желаемую платформу: мобильные/десктоп/консоли/VR/…
После этого - 2D или 3D.
И так далее. Исходя из отсеянного направления сразу станет ясен и стек инструментов, которые необходимо использовать, в нашем случае — игровой движок и набор библиотек к нему. А если не станет, то решающим фактором будут такие вещи как используемый язык программирования, средняя зарплата, количество вакансий, интерфейс используемых программ, количество гайдов по ней и так далее.
Еще очень важный момент при отборе — это возможность пообщаться с другими людьми, которые уже работают в области, которую вы рассматриваете. Заходите в профильные чаты в телеграме, в профильные сабреддиты, на форумы и задавайте вопросы, даже если они кажутся максимально глупыми. Вас никто за это не осудит, люди в большинстве своем любят помогать и делиться знаниями. Ну и с GPT тоже можно поговорить, конечно. Он сможет дать неплохой совет, который будет лучше, чем ничего, если дать ему весь ваш контекст.
Главная мысль — не следуйте за мейнстримом при выборе области, в которой планируете работать многие годы. Потратьте пару-тройку дополнительных недель на фильтрацию выборки, дабы сэкономить себе годы в будущем.
P. S. Я не упомянул то, что таким образом вы станете намного более разносторонним разработчиком, и обретете, пусть и общее, но понимание множества дополнительных вещей, что очень ценится на работе.
P. S. S. Здесь я говорю в парадигме того, что у вас есть время всем этим заниматься. Иногда в индустрию люди идут просто потому что здесь хорошо платят и нужно разбираться с жизненными проблемами(долгами, ипотекой и так далее). В случае, когда времени нет, можно просто посмотреть по своим знакомым(есть ли программисты в какой-то области) и по количеству вакансий и средней зарплате на агрегаторах.
Заключение
Программирование - это ремесло, доступное каждому, кто готов приложить усилия и развивать свои навыки. Здесь особенно важны целеустремленность, готовность учиться новому и способность самостоятельно разбираться в сложностях.
Путь в профессию может быть разным: кто-то пойдет через платные курсы, кто-то будет учиться самостоятельно, кто-то найдет ментора, кто-то попадет на стажировку в бигтех из своего ВУЗа. Главное - осознавать свои цели, тщательно выбирать подходящие инструменты и подходы, и не бояться ошибок, ведь именно они часто становятся лучшими учителями.
Программистом становится не тот, кто знает все технологии, не тот, кто знает базу, и не тот, кто купил курс за пол миллиона, а тот, кто умеет адаптироваться, искать решения, мыслить дискретно и, самое главное, решать поставленные перед ним задачи.
Телеграм канал.
Обсуждаем новости IT, пишем статьи и подкасты, а также иногда разгоняем про философию, социологию и старые мультфильмы.
Комментарии (11)
Gabenskiy
21.01.2025 18:07По поводу курсов не соглашусь. Во-первых, преподаватель с курсов такой же человек из интернета как и в ютубе. Ну а самое главное в курсах - это проверка дз. Сам ты можешь писать код низкого качества, а ментор подскажет по форматированию, алгоритму и тд. Лучше учиться сразу писать чистый код. Другой вопрос, что ради этого курсы необязательно покупать, а можно где-то ментора найти, чтобы он твои реквесты смотрел.
dph
21.01.2025 18:07Если бы на курсах преподавали опытные специалисты - то утверждение было бы правильным. Но большинство курсов нанимает себе преподавателей за цену стажеров, так что надеяться на какую-то осмысленную обратную связь не стоит. В лучшем случае это будет какой-то миддл, да и то не факт.
Jijiki
21.01.2025 18:07те топовые видео которые давнешней давности это энтузиазм и просто воля и метод проб и ошибок, перекладывая на тему курсов тоже самое, только в одном случае есть мотивация получить знания, в другом от звонка до звонка, тут скорее всего на сколько преподователь вовлечен и видимо зависит от (нагрузки от учеников) предположу, но допустим пойти на курсы на дефолту с задней парты врятли поймешь как чтото сделать пока не вовлечешься, тоесть и от ученика зависит и от преподователя
Kriptman
21.01.2025 18:07Математика всё же нужна, но школьного уровня и далеко не вся. Самые основы теорвера тоже неплохо бы знать (хз есть ли это сейчас в школах, у меня было только в ВУЗе). Продвинутая математика уже специфичная для предметной области, но базовая нужна почти везде.
dkfbm
21.01.2025 18:07Программирование - это ремесло, доступное каждому, кто готов приложить усилия и развивать свои навыки.
Не то, чтобы это было неверно, но на мой взгляд, не отражает некоторых важных нюансов. Дело в том, что это вот "готов приложить и развивать" – отнюдь не разовое состояние, а по сути непрерывное, от начала и до самого конца карьеры. Иначе в лучшем случае получится плохой программист, в худшем – никакого. "Закончу курсы, научусь и буду много зарабатывать" тут не прокатывает – практически обязательной является какая-никакая склонность именно к этому виду деятельности, желание погружаться в тему глубже и глубже – причём процесс этот должен доставлять удовольствие. Иначе через некоторое время неизбежно начнутся модные охи и ахи про "выгорание", "галеры" и прочую ахинею – которые на самом деле свидетельствуют лишь о том, что человек занимается не свойственным ему делом, за которое взялся либо в силу моды, либо под давлением родителей, либо в надежде начать много зарабатывать при умеренных усилиях.
Wesha
21.01.2025 18:07Я - разработчик с опытом работы чуть больше 5 лет
Салабон!
Ты на следующий день после прохождения курса за 300 000 рублей
Cудя по картинке, за 300 000 рублей они меняют пол!
dph
21.01.2025 18:07Математика в ВУЗе (не всякая, не во всяком ВУЗе) кроме собственно "математики" очень сильно прокачивает умение работать со сложными формальными системами, с разными уровнями абстракции, с последовательным решением задач.
И, как ни странно, именно эти навыки нужны при разработке от миддла и выше. Да, есть и другие способы научиться работать со сложными системами, но математика в хорошем ВУЗе - один из самых простых и быстрых способов.
Так что математика - нужна. Но не сама математика, а то мышление, которое она тренирует.Germanets
21.01.2025 18:07То мышление, которое нужно программисту, лучше всего тренируется при программировании.
Есть такой давний прикол у тех, кто занимается спортом на любительском уровне - если ты хочешь начать хорошо подтягиваться, ты, конечно, можешь начать бегать, плавать, прыгать, тягать гири и т.п., и да, от этого ты действительно можешь начать лучше подтягиваться. Но чтобы хорошо подтягиваться нужно всё-таки подтягиваться.
Так и здесь - хочешь абстрактное мышление, хочешь лучше работать с разными уровнями абстракции - иди и работай с ними, будучи прораммистом, и программируя. И да, к тому времени, когда человек будет прогаммировать на джуна+ - мидла, ему уже будет чем развивать мозги в сторону абстракций непосредственно на работе.
Никакая математика для этого ему уже не нужна.
Jijiki
21.01.2025 18:07можно пойти дальше, и помимо математики и физики, правда это уже очень специфично выходит и на тему ремесла, поделать модельки
profFortran
21.01.2025 18:07В целом, всё верно.
Математика нужна, в основном, базовая школьная: начал анализа и основ матлогики вполне достаточно. Остальное - по необходимости, отталкиваясь от задач. Важно, чтобы базовых знаний хватило для понимания более глубоких тем. Главное, знать, от чего отталкиваться и где искать.
Разговорный английский не нужен, письменный почти не нужен. Исключение - контакты с иностранцами. Я вот сейчас по работе контактирую с китайцами, ни я, ни они английского не знают. Я пользуюсь DeepL Translate, мне хватает. Умение читать и переводить полезно, но и тут в сложных случаях выручает DeepL. А вообще, за почти уже 21 год в ИТ английский мне нужен был только для чтения технической документации и технической литературы.
Курсы вообще без надобности. Читайте книги, их всегда можно найти в свободном доступе. Сколько ни сталкивался со всякими курсами - ничему они не учат, только бестолковая трата денег.
Вышка... Ну, плюс-минус. Пригодится, когда будешь на работу устраиваться. Ну и для общего кругозора: бывают такие темы, в которые при самостоятельном обучении поленишься лезть, а в вузе тебе их дадут. Хоть поверхностно, но запомнишь, и если понадобится, будешь хотя бы примерно представлять откуда копать.
Jijiki
но... https://stackoverflow.com/questions/13788114/cross-product-in-c
всё таки есть нюансы математика пересекается с алгоритмами и может косвенно влиять на чтото, когда в лоб может не иметь сайд еффекта, потреблять например больше памяти, это тоже базовая математика