Почему разработчики-самоучки лучше

Большую часть времени

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

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

  • Выпускники школы кода
  • Выпускники колледжа
  • Тинкереры
  • Разработчики-самоучки

Это далеко не все руководство для разработчиков. Это просто общие тенденции, которые я наблюдал за годы разработки и управления. Давайте подробнее рассмотрим эти 4 типа.

Тинкерер

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

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

Выпускник школы кода

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

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

Выпускник колледжа

Большинство выпускников колледжей склонны считать себя лучшими из лучших только потому, что они пошли в [вставьте здесь случайное название колледжа]. Когда они начали учиться (обычно полны надежд и мечтаний о создании видеоигр), они были полны энтузиазма, творчества и оптимизма в отношении будущего.

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

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

Разработчик-самоучка

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

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

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

Подводя итог всему вышеизложенному:

Тинкер просто хочет строить случайные вещи или визуализировать сон.

Выпускник Code School наивен и полон надежд, ему обещали новую жизнь, но он только накормил ложью.

Выпускник колледжа просто хочет зарплаты и признания.

Разработчик-самоучка просто хочет создавать удивительные вещи и рад возможности сделать это.

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

Независимо от вашего опыта, чтобы стать хорошим разработчиком, вам понадобится ТВЕРДЫЙ фундамент в структурах данных и алгоритмах. Вы должны понимать шаблоны проектирования, однако шаблоны дизайна появятся естественным образом после достаточного количества лет опыта, никогда не помешает получить фору и всегда важное модульное тестирование. Модульное тестирование - это то, что большинство разработчиков ненавидит (в том числе и я), но то, что, если его не сделать, будет стоить вам сотни тысяч дополнительных долларов, на которые вам не нужно было тратить последнее при исправлении и поддержке вашего программного обеспечения. Но, самое главное, вам нужно быть независимым от языка.

Как разработчику вы должны уметь брать навыки, которые вы изучаете на одном языке, и сразу же применять их на любом другом. Программирование есть программирование. Не имеет значения язык, все равно. Может быть, здесь и там какой-то немного другой синтаксис, но все равно. (Чего-то 90% рекрутеров и менеджеров по найму не осознают). Да, у каждого языка есть свои нюансы, особые правила и библиотеки, но, как я уже сказал, программирование - это программирование, и вы все равно программируете их одинаково.

Лучшая книга, которую я когда-либо видел или читал по алгоритмам, включенным в эту ссылку: Введение в алгоритмы, 3-е издание (MIT Press).

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

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

Еще одна вневременная книга, в основном написанная на C ++, поэтому, если вы знаете только языки высокого уровня, такие как Ruby или JavaScript, меня будет трудно читать, но навыки, полученные в этой книге, бесценны и применимы к любому языку.

Для модульного тестирования я настоятельно рекомендую эту книгу: Освоение модульного тестирования с использованием Mockito и JUnit.

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

Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик