Следующий вопрос, который пришел от читателей моего сайта или зрителей моего канала (не помню точно источник) - начинающий программист - junior против уже полноценного программиста. Я понимаю, что звучит вопрос немного странно. А начинающий программист разве какой-то неполноценный?
На самом деле все полноценные программисты, просто в данном случае автор вопроса не смог придумать хорошую формулировку, а здесь наверно должно было использоваться слово «продвинутый».
Для начала, как определить эту грань между начинающим и продвинутым программистом? Очень часто это достаточно сложно сделать, потому что в одной компании начинающим будет тот, кто знает только язык разметки, а в другой компании это может быть кто-то, кто уже самостоятельно может писать достаточно сложный код.
У нас в компании нет такой мелкой градации – ты просто программист или Senior. Я не знаю точных причин, почему нет этих градаций званий, но лично я поддерживаю это. Какая разница, какое звание тебе дали, потому что оно совершенно не влияет на последующие трудоустройства и заработную плату. Я в Klick Health прошел Software Developer -> Senior Software Developer -> Technical Architect -> Solution Architect. А потом уволился из клика и перешел работать в нынешнюю компанию в качестве простого Senior Software Developer. И несмотря на понижение в звании у меня зарплата стала выше, чем была в должности Solution Architect. Просто в новой компании не раздают звания архитекторов, их просто нет.
Вот если я сейчас посмотрю на команду, в которой сейчас работаю, то лично я не смогу сказать, кто из них реально начинающий, а кого уже можно назвать продвинутым, они все продвинутые, потому что могут писать хороший код и решать любые задачи. Не всегда выбирают хорошее архитектурное решение или эффективность, но в целом все же их код достаточно продвинут.
Скоро у нас в команде начинает работать новый паренек, который идет на должность начинающего, потому что он только выпустился из университета и у него даже нет хороших знаний JS. Да, он неплохо решил задачу на C#, которую у нас нужно решить при поступлении. У него есть пробелы в SQL и в JavaScript и поэтому его можно точно записать в начинающие Junior. Но когда он подтянется в обоих технологиях, я не уверен, что продолжу его считать начинающим.
Грань между начинающим и продвинутым очень тонкая и разная для каждого человека.
Если попытаться найти какие-то общие правила – это точно будет человек, который еще только учит язык. Даже если этот человек опытный в другом языке программирования. Например, если я сейчас пойду устраиваться на работу в компанию на должность Java программиста, то меня скорей всего возьмут как начинающего, потому что мои знания этого языка сейчас на уровне базового синтаксиса. Базовые вещи Java невозможно забыть, потому что у него стиль все же C++, но все, что дальше, придется учить заново.
Никто не возьмет меня на позицию Синьера Java программиста за заслуги перед другими языками.
Только единичные компании типа Google или Amazon нанимают вне зависимости от знания языка, который придется использовать. Если вы умеете программировать и знаете хотя бы один популярный язык, то эти компании наймут вас даже на очень высокую позицию. В остальных случаях придется начинать с нуля. По крайней мере из того, что я видел.
К чему я это? Знание конкретной технологии и языка так же может повлиять на звание.
Но на сколько важно это звание?
Давайте теперь поговорим о знаниях – когда человек перестает быть Junior программистом. В моем видео Программистское чтиво я говорил о книгах, которые я рекомендую прочитать на пути становления программистом. Так вот, после первой базовой книги как раз становятся начинающим или Junior программистом. На этом этапе обычно люди пишут говнокод. Качество кода очень низкое, редко создаются какие-то классы, не используются шаблоны (о них просто не знают).
А вот после прочтения следующих двух книг – чистый год и паттерны, такие люди уже начинают писать более осмысленные вещи и не решают задачи одним большим классом с тысячью методов. По крайней мере должно так происходить. Далеко не каждому этого достаточно. Бывает, что необходим еще больший опыт.
Все приходит с опытом, когда уже начинаешь понимать и чувствовать, как строить программу и кому-то на это нужно год, кому-то нужно два года и более.
Как только программист начинает писать осмысленный код самостоятельно, понимает какие классы ему нужны, как будет происходить взаимодействие с другими модулями – это уже продвинутый программист. И пусть не все решения будут идеальны, пусть будут проблемы. На помощь продвинутым программистам обычно приходят архитекторы, которые должны помогать с выбором архитектуры, паттернов, помогать с оптимизацией и безопасностью.
Следующим этапом будет уже умение видеть архитектуру в более общем виде. Не просто маленькие задачи, а умение видеть решения для всего приложения или для большой составляющей модуля, уметь продумывать детали и писать уже не просто чистый код, но еще и оптимизированный. А для этого нужно знание алгоритмов, понимание того, как работают внутренности, а не просто знать, как что-то работает и т. д.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку уже лайкнули 1 человек
Даже если хорошо знаешь язык и делал на нем не плохие проекты, то можно оказаться в положении начинающего, ведь еще важно разбираться в предметной области, а она в каждой отрасли своя.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.