Как научиться программировать, чтобы стать программистом

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

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

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

Причина, по которой я пишу эту статью, заключается в том, что у меня был очень нетрадиционный путь становления разработчиком. У меня нет степени CS (пока) и меня не наняли инженером-программистом. Я начинал как технический консультант, пишу код на VBA для макросов, но я сам научился почти всему, что знаю, и при этом научился достаточно, чтобы заняться программным проектом на работе, который занимает все мое время. Так что да, я все время программировал, но любой, кто занимался VBA, знает, что он абстрагируется (или не имеет) всего остального, например обработки ошибок, контроля версий, пользовательского интерфейса и т. д.

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

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

  1. Язык программирования. Да, вы, наверное, видели, что это приближается, да? :) В частности, изучите язык объектно-ориентированного программирования (ООП), который использует строгую типизацию, такой как Java, C# и т. д. Причина критериев ООП заключается в том, что объектно-ориентированное программирование огромно по причинам, которые вы скоро узнаете после изучения язык ООП. Существует также функциональное программирование (ФП), которое является более новым и распространенным в таких языках, как Scala, но фокусируется на ООП и не теряется в сорняках на ФП. Как только вы выучите язык и станете опытным в написании простых консольных приложений на этом языке, вы можете перейти к пункту 2. Если вы сильно интересуетесь наукой о данных, я бы порекомендовал Python, а для проектирования данных — Scala или Python.
  2. Структуры данных и алгоритмы (DS&A). Как только вы выучите язык, скажем, C#, что вы собираетесь на нем создавать? Вероятно, что-то, что будет хранить данные для использования, верно? Может быть, игра, в которой хранится счет игрока, или корзина покупок, в которой хранится список товаров. Как бы вы сохранили эти данные? В какой структуре данных? Какая структура данных будет наиболее эффективной для этих данных? Какой алгоритм вы бы использовали для сортировки данных, поиска и т. д.? Эти вопросы не имеют значения, если у вас есть 10 пользователей, потребляющих данные, или данные очень малы, но вы, вероятно, не хотите работать в компании, где всего 10 пользователей, верно? Структуры данных и алгоритмы отвечают на все эти вопросы. Они также очень тщательно проверяются на собеседованиях во всех крупных технологических компаниях, потому что возможность масштабировать свое решение проблемы важно для такой компании, как Amazon, у которой тысячи пользователей запрашивают данные каждую секунду.
  3. Как только вы научитесь программировать и разберетесь в DS&A, вы должны научиться сохранению данных. Если вы умеете программировать, вы можете создать программу. Если вы знаете DS&A, вы знаете оптимальный способ хранения этих данных… поэтому следующим логическим шагом будет изучение операций CRUD (создание, чтение, обновление, удаление) для данных, чтобы данные могли сохраняться, даже когда ваша программа не запущена, следовательно почему это называется сохранением данных.
  4. Когда вы знаете, как программировать, знаете DS&A и постоянство данных, здесь все немного расходится. Если вы заинтересованы в веб-разработке, вам также следует изучить язык сценариев. Самый распространенный, а может быть, и единственный распространенный — это JavaScript. Существует вариант, который называется TypeScript, но для новичка, я думаю, это еще одна возможность заблудиться в сорняках, которой вам следует избегать. Если вы заинтересованы в мобильной разработке, вам может понадобиться JavaScript, а может и не понадобиться, в зависимости от того, хотите ли вы идти по пути React Native или нет. Если вы планируете заниматься нативной разработкой для iOS или Android или Flutter, то язык сценариев вам не поможет. Хотя для веб-разработчика это критично. Я не знаю, используется ли он во встраиваемых системах, скорее всего, нет, но я не работаю во встраиваемых системах, поэтому вам нужно провести исследование, если это то, к чему лежит ваше сердце. Кроме того, без диплома крайне сложно заниматься чем-либо помимо веб-разработки или мобильной разработки.
  5. Наконец, после того, как вы изучите все, что я упомянул выше, вы должны изучить фреймворки, технологии и инструменты. Для управления версиями наиболее популярен Git, и, вероятно, это то, чему я бы научился в первую очередь, поскольку он создает неограниченное количество копий и версий вашей работы, что очень удобно, когда вы что-то напортачили и вам нужно вернуться к более ранней версии. GitHub — это также самый простой способ создать портфолио проектов для потенциальных работодателей, чтобы доказать, что вы знаете, что делаете, или просто сохранить свою работу и получить к ней доступ из любого места. Вы можете просто использовать Git локально на своем компьютере, но если, скажем, ваша кошка опрокидывает ваше пиво на MacBook и убивает его, хорошо, что локального Git больше нет, так что вам не повезло. Если вы занимаетесь веб-разработкой, следующим шагом будет хороший интерфейсный фреймворк, такой как React (предпочтительный интерфейсный фреймворк, последний раз, когда я проверял, на него приходилось около 85% рынка интерфейсных фреймворков). Также критически важным будет изучение серверной среды, которая соответствует изучаемым вами языкам программирования и/или скриптам. Express — популярный выбор для JavaScript, Django и Flask для Python и т. д. Изучите свои инструменты. Для мобильных разработчиков это очень важно, так как Android Studio и Xcode позволяют вам делать все возможное для мобильных разработчиков… что может стать для новичка довольно крутым подъемом. Также научитесь пользоваться редактором. Дешевый и хороший вариант — Visual Studio Code. Другими популярными бесплатными вариантами являются Atom и Eclipse в целом, Visual Studio Community Edition для разработки на C#/.NET и JetBrains PyCharm Community Edition для разработки на Python.

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

Прямо сейчас вы, вероятно, задаетесь вопросом: «Отлично, так где я могу узнать все это?» Не волнуйся, я не забыл. Ваш лучший выбор — хорошая программа CS или учебный лагерь. Я говорю это потому, что самоучка не вызывает у работодателей такого доверия (хотя многие работодатели относятся к выпускникам буткемпа негативно или так же, как к самоучке) и потому что важна мотивация. Продолжать учиться легче, когда тебя окружают одноклассники, которые занимаются тем же.

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

  1. Языки программирования: это категория на Udemy, и лучшие курсы, как по моему опыту, так и из разговоров с другими, преподают Тим ​​Бучалка, Эндрю Мид, Кольт Стил, Анджела Ю, Академинд, Хосе Портилья и Стивен Грайдер. Их курсы стабильно не ниже 4.4/5. Как только вы решите, что вы хотите узнать, я бы сузил это оттуда. Например, у Тима Бучалки есть исключительный класс Java. Хосе Портилья — эксперт по науке о данных, поэтому у него очень хороший курс Python и т. д. Одно предостережение. Если вы сейчас решили заняться мобильной разработкой, то многие из этих вакансий являются нативными для iOS или Android, а это означает, что вы не используете кроссплатформенный инструмент, а используете только Swift (язык) и Xcode (инструмент) для iOS и Java/ Kotlin (язык) и Android Studio (инструмент) для Android. Подумайте об изучении Java, если вы хотите стать разработчиком Android. Kotlin новее и, по-видимому, с ним легче работать, но Java используется очень многими компаниями, помимо мобильных разработчиков, и для веб-разработки (Java Spring — очень популярный серверный веб-фреймворк), поэтому Java — отличный навык, в то время как Kotlin не в почти такой же спрос. Если вы хотите стать разработчиком iOS, у Анжелы Ю есть курс iOS с очень высоким рейтингом, и вы можете использовать его для изучения Swift в качестве языка программирования.
  2. Структуры данных и алгоритмы: это чепуха. Прости. Опять же, у Udemy есть несколько курсов, но нет действительно отличных отзывов. У Coursera есть специализации Стэнфорда и Принстона, которые очень академичны и охватывают DS&A. Лучше всего подойдет местный колледж/университет. На Codewithmosh.com есть курсы DS&A либо по Java, либо по JavaScript, я забыл, что именно, и они были неплохими. Тем не менее, все учебные курсы Udemy, на которые я смотрел, преподают достаточно DS&A, чтобы начать создавать проекты. За исключением Coursera, эти ресурсы, возможно, недостаточно подробны, чтобы проводить собеседования с крупными технологическими компаниями, но достаточны, чтобы вы начали строить.
  3. Сохранение данных: я купил его, но еще не брал, так что отнеситесь к этому с недоверием. Хосе Портилья прошел учебный курс по SQL на Udemy с оценкой 4,7/5. Многие учебные курсы веб-разработчиков и курсы мобильных разработчиков научат вас, как использовать базу данных для сохранения данных.
  4. Разнообразие: То, что вы хотите сделать, повлияет на мой ответ. Веб-разработчик? Изучайте JavaScript. JavaScript будет преподаваться как часть любого курса веб-разработки, или, если вы действительно хотите изучить его глубже, вы можете пройти курс JavaScript. У Colt Steele есть совершенно новый учебный курс JS 2020 года. Просто убедитесь, что вы изучаете JavaScript ES6, что в двух словах означает, что вы изучаете современный JavaScript со всеми прибамбасами. Для мобильных разработчиков у Анжелы Ю есть отличный курс по iOS. Я уверен, что вы также можете найти отличные курсы по Android и Flutter на Udemy. Я прохожу курс React Native от Academind, и мне это нравится.
  5. Фреймворки/технологии: Опять же, я думаю, что Udemy лучше всего здесь, поскольку курсы Coursera, как правило, устаревают, поскольку они создаются университетом и должны пройти процесс утверждения. Например, у меня был отличный курс по Bootstrap на Coursera, который я прошел. Я никогда не использую Bootstrap. Bootstrap упрощает создание стилей CSS, но есть и более современные CSS-фреймворки, которые можно использовать в зависимости от того, какой интерфейсный фреймворк вы изучаете. Любой курс в стиле буткемпа будет охватывать все основные фреймворки/технологии, которые вам необходимо знать.

Вы, наверное, заметили, что я большой сторонник Udemy, особенно курсов «учебного лагеря». Это потому, что вы получаете весь материал, которому вас научат в учебном лагере, за 10 долларов, и вы можете делать это в своем собственном темпе. Однако вы не получаете ничего особенного ... причина, по которой учебные лагеря стоят более 10 000 долларов, заключается в том, что Udemy не собирается иметь под рукой учителя, который будет отвечать на вопросы за вас, или зажечь огонь под вами, чтобы выполнить работу. Тем не менее, курсы любого из авторов, которых я перечислил, стоят 10 долларов, которые они будут стоить. Иногда они будут показаны по прейскурантной цене, но как новый пользователь вы получите скидку, и они проводят распродажи так часто, что это похоже на розничную продажу в том смысле, что вы никогда не должны платить цену стикера.

Тем не менее, есть бесчисленное множество ресурсов, таких как Free Code Camp, Codeacademy, edX и т. д. В какой-то момент, когда вы узнали достаточно, чтобы создавать проекты, если вы решите не идти на степень CS (чего я не советую из-за того, что конкурсный вход уровне программных должностей, которые нужно получить в 2020 году), вы должны изучить основы, перечисленные на https://teachyourselfcs.com. Еще один хороший ресурс для изучения эквивалента степени CS находится по адресу https://github.com/ossu/computer-science. Очевидно, что вы не получите степени, чтобы показать работодателям за ваши усилия. Если степени CS нет в планах, по крайней мере, подумайте об авторитетном учебном лагере, но знайте, что это не принесет вам уважения в приличном количестве компаний. При этом, насколько мне известно, всем ведущим технологическим компаниям и многим стартапам наплевать, прошли ли вы учебный лагерь, получили ли вы степень в области информатики и т. д. Им просто нужны люди, которые действительно хороши в разработке.

Вау! Наконец мы закончили. Как только вы изучите основы, приступайте к созданию вещей! Серьезно, не изучайте каждый маленький трюк из каждой мелочи, которую я упомянул. Хотите заниматься мобильной разработкой? Пройдите учебный курс по мобильной разработке. Хотите заняться веб-разработкой? Пройдите учебный курс по веб-разработке. Изучите учебники, придумайте идею (вы можете поискать идеи проекта в Google, если вы зашли в тупик), а затем создайте ее. Гуглите вопросы по мере их появления при создании проекта. Гугли все. Если вы хотите изучить React, погуглите «react tutorial». Если у вас есть сообщение об ошибке, скопируйте и вставьте его в Google и посмотрите, что люди с той же проблемой разместили на StackOverflow, репозитории вопросов и ответов для разработчиков. Официальная документация всегда лучше с точки зрения результатов поиска. Следующим будет MDN для Интернета. StackOverflow, безусловно, лучший для вопросов и ответов.

Ладно, наверное, я написал достаточно для книги. Идите вперед, создавайте свои проекты, отправляйте их на GitHub (нет слишком маленьких коммитов, но многие коммиты слишком велики) и получайте удовольствие!