Для будущих программистов.

Привет! Я - разработчик с опытом работы чуть больше 5 лет, поэтому я нахожусь на золотой середине, когда я уже примерно понял, как все устроено, но еще не успел забыть трудности, которые испытывал, когда был новичком. За время работы у меня успел накопиться опыт, которым я хотел бы поделиться с теми, кто только думает о том, как именно начать карьеру программиста.

Эта статья - некий “ремейк” похожей статьи, которую я писал в 2022 году. Какие-то моменты я менять не стал, потому что моя позиция не изменилась. Какие-то - добавил(высшее образование)

В статье я постараюсь разобрать (опираясь на свои знания и наблюдения) одни из самых популярных вопросов, и ответить на них исчерпывающе.

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

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

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

Ну, поехали:

1. Скорее всего, вы сможете обойтись без платных курсов

Ты на следующий день после прохождения курса за 300 000 рублей
Ты на следующий день после прохождения курса за 300 000 рублей

Сейчас в интернете невероятное засилье различных курсов, которые обещают сделать из вас разработчика/тестировщика/2D или 3D художника, стоит всего лишь заплатить 300 000 продавцу этих курсов (а то и 500 000, как за один интересный буткемп). Я сторонник того, что делать этого не стоит, потому что единственный плюс такого обучения - взаимодействие с преподавателем и получение фидбека, однако подобные курсы зачастую ведут и проверяют люди далеко не самые профессиональные, поэтому здесь - кот в мешке, смотря кто попадется.

Минусов, на мой взгляд, намного больше:

  • Большая цена - здесь даже говорить не стоит. Обычно она компенсируется рассказами о том, что курс окупится за 2-3 месяца работы, однако это только в том случае, если вы куда-то устроитесь. Более того, можно получить те же знания бесплатно, тогда и окупать ничего не придется.
  • Преподаватели - как я уже написал, зачастую совершенно неясно, какой уровень у человека, который писал материал курса и человека, который преподает его. Как ни странно, доверие к людям с условного YouTube намного больше, так как их навыки подкреплены мнением людей, возможностью посмотреть историю канала и тем, что у них (зачастую) нет цели что-то вам продать. Конечно, обжечься о плохого учителя можно и здесь, но тут это хотя бы материально бесплатно.
  • Отсутствие гарантий - я знаю, что часть школ «гарантирует» ваше трудоустройство (там тоже есть свои подводные камни), однако это только часть, и достаточно малая. Большинство, по-прежнему, не гарантируют ничего, кроме невнятного сертификата при прохождении. А те, кто и гарантируют и имеют хорошую репутацию, берут очень много денег в абсолютном выражении.
  • В реальности, нужно учиться разбираться в непонятных вещах самому - если вы идете на курс по той причине, что вам нужен именно преподаватель, который разжует вещи понятным языком и забьет их вам в мозг, и не хотите разбираться сами, то такой курс - лишь временная панацея. Если вы хотите, чтобы вас вкатили в IT, а вы просто денег отдали - это мимо. Вся суть нашей работы в том, чтобы разбираться в чем-то, что не ясно изначально, и никто не будет тратить время и деньги на то, чтобы постоянно объяснять и делать что-то за программиста.Здесь речь не идет о трейни, с которыми рядом постоянно находится ментор и помогает разобраться в работе. В таком случае, трейни уже попал на работу, потому что разбирался и учился сам, а ментор нужен для того, чтобы человек быстрее вник в кодовую базу, предметную область и адаптировался внутри компании. Если трейни не захочет разбираться сам, то он очень быстро вылетит за борт.

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

Если преподаватель все-таки нужен и хочется в целом сократить себе путь, то я рекомендую найти себе ментора по направлению. Зачастую, их экспертиза подкреплена пруфами и отзывами учеников, а ценовая политика значительно более щадящая, чем у школ.

2. Английский необходим, но…

Окружаем себя английским языком
Окружаем себя английским языком

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

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

В нашем случае, две самых необходимых вещи это:

  • Умение формулировать мысли на английском (необязательно уметь правильно произносить их в слух) - этот навык напрямую влияет на то, сможете ли вы найти информацию по своему вопросу в интернете. На самом начальном этапе искать можно и на русском, но быстро станет ясно, что результаты крайне ограничены. А в наше дивное время LLM и замены ими гугла и StackOverflow, этот навык становится просто невероятно ценным.
  • Умение воспринимать информацию на английском языке - этот навык напрямую связан с первым, так как мало толку от умения найти информацию, если нет возможности понять то, что было найдено. Здесь речь идет и о тексте, и об аудио. Конечно, сейчас доступны переводы прямо в браузере, но проблема в том, что вы теряете устоявшиеся термины, которые в дальнейшем все равно придется употреблять и оперировать именно ими, а не переводом. Ну и картинки никто переводить не будет, а в документации они попадаются часто, поэтому вы рискуете оказаться в ситуации, когда в статье Deadlock был назван Взаимоблокировкой, а на картинке он все тот же deadlock
Скриншот из документации Microsoft с машинным переводом
Скриншот из документации Microsoft с машинным переводом

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

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

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

3. Математика НЕ необходима, но…

Как проинтегрировать этот проклятый .json??
Как проинтегрировать этот проклятый .json??

И снова достаточно распространенное мнение, что «программисту необходимо знание математики» и в целом базы, однако здесь конкретику можно встретить еще реже. Я тоже не готов расписать, какая область математики где может пригодиться, потому что это больше зависит от предметной области, в которой вы будете работать, чем от стека технологий. Однако, здесь есть исключения. Например, считается, что в разработке игр математика - один из самых важных инструментов, но это не совсем так. “Разработка игр” это слишком широкое понятие. Делаете визуальную новеллу на готовом фреймворке? Не нужна там математика. Собираете в хитром нодовом редакторе очередную казуалку? Тоже не нужна. И так далее.

Если упрощать, то математика(как и любое другое базовое знание) нужна там, где нужна, точка. Как понять это?

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

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

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

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

4. Высшее образование НЕ необходимо, но…

Ну вот, теперь в магистратуру на пару лет, а потом кааак в IT влечу с двух ног
Ну вот, теперь в магистратуру на пару лет, а потом кааак в IT влечу с двух ног

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

От себя добавлю такую мысль - программирование давным-давно стало просто ремеслом(без негативного подтекста). Уровень решаемых задач зачастую достаточно тривиальный, как только ты ознакомился с кодовой базой, документацией и в целом приспособился на рабочем месте. Это я говорю по опыту коммерческого бэкенда и геймдева. Может, в других областях по-другому, но я сомневаюсь(мемы про покраску кнопок и перекладку json не просто так появились)

Зачем здесь высшее образование, чего ради? Это - огромная инвестиция, жизнь далеко не вечна, молодые годы тем более, да и денег оно зачастую стоит немало: даже если попали на бюджет, косвенные расходы, такие как съем квартиры, огромны.
Оно нужно, потому что пригодится когда-то потом, когда будут требовать решения настоящие задачи? А если не будут? А если можно справиться и без высшего образования? А что если научиться тому, чего задачи требуют тогда, когда задачи возникнут? Вы же не учите все технологии в мире в надежде на то, что когда-нибудь они обязательно пригодятся.

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

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

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

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

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

5. Семь раз отмерь, один раз отрежь

Все дороги ведут в Bockend
Все дороги ведут в Bockend

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

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

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

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

Я понимаю, что время ограничено, и хочется стать профессионалом в одном деле, а не новичком во всем на свете, но призываю вас потратить немного времени, собрать небольшой список крупнейших областей, в которых вы могли бы работать и сделать по одному мини-проекту в каждой из них. Примерами областей могут быть: мобильная разработка, веб, десктоп, игры, Data Science, embed и так далее.

Когда вы определитесь с желаемым общим направлением, то я советую не останавливаться, а продолжать копать дальше.
Скажем, вы решили разрабатывать игры. Определите желаемую платформу: мобильные/десктоп/консоли/VR/…
После этого - 2D или 3D.

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

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

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

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

P. S. S. Здесь я говорю в парадигме того, что у вас есть время всем этим заниматься. Иногда в индустрию люди идут просто потому что здесь хорошо платят и нужно разбираться с жизненными проблемами(долгами, ипотекой и так далее). В случае, когда времени нет, можно просто посмотреть по своим знакомым(есть ли программисты в какой-то области) и по количеству вакансий и средней зарплате на агрегаторах.

Заключение

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

Путь в профессию может быть разным: кто-то пойдет через платные курсы, кто-то будет учиться самостоятельно, кто-то найдет ментора, кто-то попадет на стажировку в бигтех из своего ВУЗа. Главное - осознавать свои цели, тщательно выбирать подходящие инструменты и подходы, и не бояться ошибок, ведь именно они часто становятся лучшими учителями.

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

Желаю успехов в освоении одной из самых увлекательных профессий современности!

Телеграм канал - https://t.me/artem_ovchinnikov_palace.
Обсуждаем новости IT, пишем статьи и подкасты, а также иногда разгоняем про философию, социологию и старые мультфильмы

22
9
30 комментариев

Комментарий удалён модератором

для прогромистов это нормально, поверь мне я знаю о чем говорю

я, после того, как купили мой курс за 300к

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

5
1

Кожаная куртка говорит что через пару лет программисты будут уже не нужны))