image


Я прекрасно в курсе, что далеко не первая, у кого путь в разработке начался не сразу — просто потому, что толком не понимала, с чего вообще начать.

Огромное количество вариантов, с одной стороны, даёт богатые возможности, а с другой — может и отпугнуть с самых первых шагов. Для тех, кто пока только обдумывает в каком направлении двигаться или тех, кто даже начал уже ковылять потихоньку — вот 10 вещей, которые я хотела бы знать до того, как начать свой тернистый путь.
EDISON Software - web-development
Статья переведена при поддержке EDISON Software.

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

Первое. Важно правильно выбрать язык.


Языков программирования много. У каждого сильные и слабые стороны, а также свои сферы применения.

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

Простота программирования — это то, на что, безусловно, следует обратить внимание. Будьте честны сами с собой — уверенно с этим языком себя чувствуете или не очень? Неудачный выбор сложного языка в конечном итоге приведёт к потере времени. Может, лучше выбрать то, что попроще и на чём будет программировать приятнее?

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

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

Второе. Всегда помним, что есть официальная документация (спасибо, Кэп!).


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

  • Python.org
  • RubyOnRails.org
  • ReactJS.org

Третье. Google это твой самый лучший друг.


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

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

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

Четвёртое. Никакой магии — только осознанные решения проблем.


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

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

Пятое. Никому не объять необъятное.


Вы никогда не узнаете всего, что нужно знать о разработке ПО. Более того — Вы даже не постигнете всего о каком-либо одном языке программирования.

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

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

Вновь и вновь возникающие изменения и непрекращающееся развитие — это и всё, что постоянно в разработке. И чем раньше это принять, тем лучше.

Шестое. GitHub — это сила!


GitHub — удаленная система контроля версий, которая работает с Git, локальной системой контроля версий.

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

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

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

Git позволяет проверить разные способы решения проблемы, и тестовые версии будут отдельно сохранены. И пока для выбранной ветки не сделаете git commit, изменения не будут сохранены в Git.

GitHub — это просто система удаленного хранения ваших локальных репозиториев Git (это также означает, что для каждого проекта понадобится локальный репозиторий Git и репозиторий GitHub). Представьте, что это DropBox для программного кода. Чтобы ни стряслось с компьютером, драгоценный код будет в целости и сохранности.

Седьмое. HackerRank, LeetCode и CodeWars


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

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

Лично я люблю LeetCode. Там реальная обратная связь о качестве Ваших решений, а не просто сообщается, сделали или нет. Также часто использую HackerRank, просто потому, что нравятся тамошние задачи.

Восьмое. Практика делает программиста совершеннее. Или, как минимум, способнее.


Совершенным не стать и всего не постичь. Но важность практики, практики и еще раз практики переоценить невозможно.

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

Девятое. Языки — не фреймворки, а фреймворки — не библиотеки.


Термины «язык программирования», «фреймворк» и «библиотека» используются в схожих ситуациях, но это разные вещи. Язык — это программирование в его изначальной форме (тут не речь о машинном коде, конечно же). Это то, что в конечном итоге компилируется в двоичный код. Примеры языков: Ruby, Java, Python и JavaScript.

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

Что до библиотек, инженер-программист сам решает, где именно их использовать, контролируя сборку приложения. Примеры: React.js и Redux, являющиеся библиотеками JavaScript. Фреймворк предопределяет архитектуру приложения. Rails — это самый распространённый фреймворк для Ruby, как и Django для Python.

И, наконец, десятое. Знание языка не ограничивается знанием его синтаксиса.


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

Желательно не только видеть, что a + b = c, но и чётко осозновать почему a + b = c. Если не вникать в саму суть, однажды при сложении a и b вместо c получится d. И не будет ни должного пояснения такого результата, ни инструментария, чтобы выяснить причину.

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

Комментарии (0)