Ранее в этом месяце я получил сообщение в LinkedIn:

Привет, Джеймс,

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

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

С чего бы мне начать?

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

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

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

С какого языка мне начать?

Вот основные критерии, которые я бы предложил при выборе вашего первого языка:

  • Простота установки (это уже доступно в моей операционной системе? Иначе легко ли установить?)
  • Уровень абстракции (нужно ли мне беспокоиться об управлении памятью?)
  • Доступные учебные ресурсы (достаточно ли руководств, статей и курсов?)
  • Сообщество (есть ли форумы, через которые я могу общаться с более опытными разработчиками?)
  • Принятие (широко ли это используется в отрасли? Это не помеха в процессе обучения, а помогает с переходом к реальной роли)

Поэтому я рекомендую в произвольном порядке использовать следующие языки в качестве первых:

  • Рубин
  • JavaScript
  • C#
  • Джава
  • Python

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

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

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

Если вы выполнили одно из них, продолжайте практиковаться, создавая небольшие программы. Напишите текстовую приключенческую игру. Разработать сайт по серверной технологии и развернуть. Найдите HTTP API и обработайте его данные. Внедрить калькуляцию на основе пользовательского интерфейса r. Находите задачи, которые вызывают у вас интерес, и решайте их с помощью постоянно улучшающихся навыков программирования. Изучите другой язык, в идеале с другой парадигмой набора текста; сравните различия между этим новым языком и вашим родным языком.

Примечание о фреймворках

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

Так что я могу писать программы. Что теперь?

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

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

Важность чистого кода

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

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

Программное обеспечение для структурирования

Есть два конкретных типа паттернов, которые помогут при создании решения:

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

Программное обеспечение для тестирования

Сторонние разработчики программного обеспечения могут представить себе тестирование проекта следующим образом:

  • Полностью ручной
  • Выполняется в один большой этап после завершения кода

Такой подход приводит к:

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

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

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

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

Управления источником

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

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

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

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

Алгоритмы

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

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

Структуры данных

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

Другие подходящие вводные структуры данных включают:

Парадигмы программирования

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

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

Продолжай читать!

Мой любимый аспект разработки программного обеспечения - это то, что всегда есть новые концепции, которым нужно учиться. Ресурс, который я нашел наиболее полезным, - это / r / programming subreddit. Это не всегда гостеприимная обстановка, но она познакомила меня с бесчисленным множеством концепций и техник, которые повысили мою компетентность.

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

Специализация

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

  • Фронтенд веб-разработка (HTML, CSS, JS, манипуляции с DOM, React)
  • Backend разработка (Node.js, (ASP) . NET, Java, Go, базы данных)
  • Полная разработка (комбинация двух)
  • Родное ПО (Android, iOS, Windows)
  • Встроенное программное обеспечение (разработка для нетрадиционного оборудования, как правило, с жесткими, но рациональными ограничениями производительности и мощности)

Что ж, переваривать было много. Как мне устроиться на работу?

С умением приходит потенциальный спрос со стороны рынка и работодателей. Однако ваши навыки бесполезны, если вы не можете продемонстрировать, как их применять.

Публикуйте свои собственные проекты как программное обеспечение с открытым исходным кодом и вносите в него свой вклад

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

Опубликовать портфолио в Интернете

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

GitHub Pages предоставляет простые средства публикации статических веб-сайтов с поддержкой TLS и пользовательских доменов.

Волонтер

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

  • Code Your Future - школа веб-разработки для беженцев
  • Black Girls Code - школа программирования для молодых чернокожих женщин.

Сеть

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

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

Внештатный

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

Найти стажировку

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

Измените роль в вашей нынешней компании

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

Управляйте ожиданиями

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

Не сдавайся

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

Это утомительно

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

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

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

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

✉️ Подпишитесь на рассылку еженедельно Email Blast 🐦 Подпишитесь на Codeburst на Twitter и 🕸️ Изучите полную веб-разработку .