Каково это – быть разработчиком-самоучкой?

1
2239
views

Перевод статьи Ника Шоупа «What it means to be a self taught developer».

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

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

Но те из них, у кого нет системного образования в сфере информатики, столкнутся с определенным «набором» сложностей. И не важно, занимается человек фрилансом, работает в команде или просто подрабатывает созданием сайтов.

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

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

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

Программирование в команде

Работа в команде

Работа в команде с другими разработчиками (которые опережали меня на годы опыта), с применением подхода agile scrum, была для меня чем-то совершенно новым.

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

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

Другим важным аспектом работы в команде был процесс планирования, сопутствующий проектам по разработке. Мы работали с использованием методологии agile/scrum, так что процесс включал создание истории и определение свойств и задач.

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

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

Нахождение решений, когда нет точного ответа

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

По реальным проблемам, которые мы решаем, нет готовых примеров и руководств. Нужно держать сознание «открытым» и обращаться к окружающим.

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

Синдром самозванца

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

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

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

Как с этим справиться?

В такие моменты помогает настойчивость. Я продолжил попытки найти работу. Через некоторое время я прошел стажировку в отделе, где мог использовать свои знания географических информационных систем (моя специальность). Я смог применить на практике некоторые свои навыки работы с Python – это было классно. Также я получил опыт работы с реляционной базой данных (то, о чем не имел ни малейшего представления раньше). Спустя 6 месяцев я попал на другую стажировку, сходную с первой, но с долей веб-разработки.

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

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

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

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

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

Помощь членов команды

Понимание основ информатики

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

«Грокаем алгоритмы» – отличная книга, с которой стоит начать. Автор проделал прекрасную работу, поясняя концепции, которые могут быть довольно абстрактными и трудными для понимания.

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

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

Не сдавайтесь

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

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



1 КОММЕНТАРИЙ

  1. Хрень это все берешь и копируешь со стекпереполнентчкком бабло рубишь спинеры крутишь овец считешь знать ничего не нада.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here