Размышления о 20+ годах.
Я собираюсь указать здесь свой возраст, но свою первую строчку кода я написал на Commodore Pet Computer еще в 1980 году (-иш). Я прошел несколько курсов и даже пошел в среднюю школу, чтобы больше узнать о программировании и компьютерных технологиях. На самом деле, почти все, что я знаю о программировании, я получил из школы тяжелых ударов - мне пришлось учиться самому.
Меня впервые наняли в качестве профессионального разработчика в 1999 году, и я занимаюсь этим до сих пор. Каждое задание представляет собой новую возможность узнать что-то больше или глубже погрузиться в концепции, о которых я, возможно, слышал.
На протяжении всей своей карьеры я изучал Шаблоны проектирования, Контроль версий, Структуры данных и алгоритмы, бизнес-логику, модульный дизайн, проектирование / администрирование баз данных, системное администрирование, почтовые системы, сетевое проектирование, безопасность и многое, многое другое. более. У меня была возможность глубоко погрузиться в большинство из этих областей - в какой-то момент я мог рассказать вам структуру пакета IP-дейтаграммы из памяти или протокола SMTP. Я могу поддерживать отношения с самыми опытными разработчиками и иметь промежуточные знания по большинству тем программирования. Я даже преподавал некоторые из этих тем как формально, так и неформально.
Я до сих пор очень страдаю синдромом самозванца.
Я часто сомневаюсь, что я достаточно хорош, что приводит к тому, что я узнаю следующую вещь достаточно подробно, чтобы с комфортом использовать ее для решения проблем кодирования. Но иногда мне кажется, что я догоняю «настоящих экспертов».
Однажды я построил систему для «игры на фондовом рынке». Это был исследовательский проект, чтобы научить меня а) более детально как работает фондовый рынок и б) глубже изучить ряд методов программирования. Система не смогла заработать мне миллионы. Однако я изучил более сложные методы программирования.
Я создал инструмент фондового рынка с помощью PHP примерно 15 лет назад. Позже, когда я решил изучить AI и Machine Learning (ML), я переделал тот же инструмент на этот раз с Python. Однако на этот раз целью было узнать об искусственном интеллекте и машинном обучении - аспект фондового рынка был всего лишь примером проблемы, в которой могут быть применены ИИ и машинное обучение. Я узнал, что такое машинное обучение и искусственный интеллект в наши дни, по крайней мере, достаточно хорошо, чтобы понять ограничения и способы их реализации, если они когда-либо понадобятся. В будущем я займусь нейронными сетями более подробно.
Сегодня я ловлю себя на том, что в свободное время берусь за проект за проектом, чтобы научиться новой теме. Я изучил Docker, успешно пытаясь создать более быстрый способ установки платформы разработки PHP. Я изучил Node.JS частично в процессе работы, а частично, пытаясь создать систему типов Laravel на основе Node. При этом я узнал, что Node не нужна система, подобная Laravel. В Laravel есть несколько отличных приемов, которые применимы (миграция базы данных, инструменты командной строки и т. Д.), Но Node служит другой цели, чем Laravel. Мои усилия окупились и многому меня научили в Node.
Мне, как программисту-самоучке, очень сложно найти работу. Я проходил через этот процесс несколько раз и каждый раз сталкивался с одними и теми же проблемами. Как вы можете превратить 20-летний опыт разработки в потребность в высшем образовании? Некоторые сообщения предлагают «или эквивалентный опыт», но не все. Или сообщения очень конкретны - если вам никогда не приходилось работать с рассматриваемым языком или платформой, вы автоматически не подходите для этой роли. Даже если у вас есть все возможности выучить этот язык или платформу в короткие сроки.
Если вы являетесь самоучкой, вы можете запутаться в некоторых вопросах академического типа. Однажды меня вызвали на второе собеседование с техническим директором. Он спросил об алгоритмах сортировки. Я был немного сбит с толку, потому что роль, на которую я думал претендовал, заключалась в внешнем интерфейсе, вызывающем вызов существующего API. Насколько я понимаю, процедуры сортировки на основе родного языка будут самыми быстрыми / эффективными. В конце концов, они выводили вывод в браузер - тяжелая работа должна была быть сделана до этого момента. На меня больше давили, и мне пришлось объяснять, что пузырьковая сортировка логически довольно проста и может быть закодирована за несколько минут, более эффективный поиск будет чем-то вроде быстрой сортировки. Все еще не об этом спрашивали. Меня спросили, что такое САМЫЙ БЫСТРЫЙ алгоритм сортировки, и у меня сложилось четкое впечатление, что мои возможности с ними иссякли, когда я не мог ответить на этот вопрос в голове. Минута с Google позже показала, что мои инстинкты были правильными, и Quicksort был (и остается) самым быстрым алгоритмом сортировки. Я не уверен, что он там искал, но просто списал это как одну из тех вещей, которые я бы знал, будь у меня традиционное академическое образование.
ПРИМЕЧАНИЕ. Есть моменты, когда собственных процедур сортировки недостаточно. По моему опыту, это обычно происходит, когда вы имеете дело с автономными возможностями, и вам нужен браузер для выполнения тяжелой работы с большими наборами данных. В этих (редких) случаях имеет смысл применять соответствующие структуры данных на стороне клиента.
Игра о людских ресурсах продолжает преследовать меня и в других отношениях. Глупые игры, такие как « проблема FizzBuzz » или тесты кодирования, расстраивают меня, потому что они являются поверхностными доказательствами. В моем резюме ГОД опыта, но меня все еще просят подтвердить свой уровень навыков. Как будто мои репозитории на GitHub или фрагменты кода из предыдущих проектов не дают никаких указаний на то, что я утверждаю. Честно говоря, кадровый эксперт НЕ является экспертом по кодированию и ему нужен какой-то способ отбирать жизнеспособных кандидатов из тех, кто только знает, как пройти сертификационные тесты. Я чувствую, что если у меня негативный опыт собеседования, я сомневаюсь, что это из-за отсутствия академической подготовки или просто неподходящего.
На протяжении многих лет я работал с некоторыми замечательными людьми и смог отстоять свои отношения с людьми с традиционным образованием. «Делать это» часто превосходит изучение книги. Понимание, ПОЧЕМУ в книге говорится, что нужно делать именно так, так же важно, как и знать, что такое правильный путь. Также важно знать, когда книга не подходит для вашей конкретной ситуации. Иногда этот ярлык является правильным ответом, независимо от того, что говорится в учебниках. На мой взгляд, лучше всего научиться на собственном опыте, имея опыт объяснения плюсов и минусов «взлома» по сравнению с «академически правильным способом».
Традиционная академическая подготовка имеет большое значение для освоения профессии. Я ничего не могу поделать, но думаю, что он всегда будет устаревать (за исключением специальных курсов для исследований). Университеты и колледжи сосредотачиваются на инструментах, которые используют компании. Это означает, что эти инструменты существуют уже некоторое время и получили некоторое признание в отрасли. Затем кто-то разработал курс по этим инструментам и начал его преподавать. Таким образом, ученики этого класса осваивают важные навыки, которые могут оказаться устаревшими в момент выхода на рынок.
Самоучка означает, что мне пришлось довольно внимательно следить за приливами и отливами в отрасли. Иногда я играю в догонялки, а иногда я играю с кодом, который настолько нов, что лишь горстка людей (образно выражаясь) знает о нем. Laravel был для меня одним из таких фреймворков. 5 лет назад я довольно часто использовал Laravel, но на рынке труда это не нашло большого признания со стороны корпораций. Сегодня, когда я смотрю сообщения PHP, я вижу большой интерес к Laravel. Вы никогда не сможете предсказать, какие технологии будут приняты в долгосрочной перспективе. ЭТО проблема самоучки, но это также и величайшая сила самоучки. Попытка быть в курсе технологических тенденций быстро расширяет ваши навыки, и вы начинаете видеть, как одни и те же методы используются снова и снова.
Я профессионально пишу код более 20 лет. Я научился большей части того, что знаю. Я написал Assembler, C / C ++, Java, Cold Fusion, Visual Basic, C #, JavaScript, PHP и другие. Некоторые из них - далекие воспоминания, но они помогли мне расширить мои основы. Я с удовольствием обсудю эти темы со своими коллегами и успешно напишу код для решения возникшей проблемы.
Рассмотрим разработчика, получившего образование в университете. Как только они попадают в рабочую силу, у них появляется фундамент, на котором можно опереться. Но с этого момента они должны поддерживать этот фундамент в актуальном состоянии и дополнять его. Единственная разница между этим разработчиком и разработчиком-самоучкой - это объем начального фундамента и лист бумаги. В любом случае разработчик должен продолжать работать над своим фундаментом. Неспособность сделать это означает застой и потерю работы.
Так я действительно самозванец?
Я полагаю, что нет, и продолжаю. Благодаря такому подходу у меня до сих пор была хорошая карьера, и я буду продолжать смотреть в будущее.