Programming

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

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

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

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

Надеюсь, это поможет!

Образ мышления

Сначала я влюбился в программирование. Моим главным усилием стало изучение программирования – это происходит, если программирование вам нравится, именно поэтому оно становится для вас интересным, ну или, вы понимаете, что, но полезно для вас (и это действительно так!).

Почему я в этом уверен? Я большой поклонник подхода «занимайся тем, что тебя увлекает». Да, выглядит как стандартное клише, но для меня это всегда срабатывало. И если вы начнете программировать, вам потребуется внутренняя мотивация. Страстное увлечение и любопытство помогают стать последовательным и дисциплинированным.

Помните: это не спринт. Это длинный марафон. Не ждите, что узнаете все в сразу. Так не бывает.

Освой C++ за 21 день

Совет номер два: постоянно учитесь

Одной из мои задач как инженера-программиста, всегда является отслеживает новых вещей, которые появляются в нашем мире: новые библиотеки, такие как ReactJS в 2013 году, веб-приложения, такие как SPA, PWA, технические тенденции, такие как Машинное Обучение, Искусственный интеллект, криптовалюты (Блокчейн Блокчейн Блокчейн!), и так далее.

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

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

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

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

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

Не сравнивайте себя с «опытными инженерами» или «кодером-гением» ‑ это совет №4. Во-первых, это неприемлемо. Во-вторых, вы еще только начинаете. Сосредоточьтесь на своем обучении.

Конечно легко сравнивать себя с вашими товарищами по команде или гением программирования, но это только снижает вашу самооценку и усиливает «синдром самозванца». Не позволяйте ему остановить вас.

Практика — это ключ. Найти способы изучить основные понятия и практиковаться в их использовании. Это совет № 5. Создание фундамента на основе концепций и теории важно, но оставайтесь практиком. Пытайтесь. Экспериментируйте. Мы рассмотрим это позже, но практика – ключевой момент!

Теория & Концепции

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

В свое время я учился в двух больших онлайн-курсах: Codecademy и CS50 в Гарварде.

Я узнал основы языка Python на Codecademy и языка C в CS50. Но мое мнение таково: вам нужно просто начать. Выберите один язык программирования и начните изучать основные понятия (переменные, if-else, циклы, структуры данных).

Возможно, когда вы выберете курс, вас научат определенному языку программирования. Но не волнуйся! Сосредоточьтесь на основных понятиях (и, возможно, полюбите этот язык программирования, как я полюбил Python и Ruby).

Почему я выбрал эти курсы?

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

David J. Malan определенно один из лучших мои профессоров. А Codecademy помогала мне в практике. Тренируйтесь, кодируйте все, что изучаете. Кодирование, кодирование и еще раз кодирование. Помните совет № 5? Найдите способы изучить концепции и практиковаться в их применении.

Другие ресурсы с великолепным контентом:

Введение в информатику (Computer Science) от Udacity. Он охватывает почти все, что вам нужно, чтобы разобраться в программировании. Курсы Udacity всегда отводят время на практику по каждой теории и концепции, которую вы изучаете.

Введение в алгоритмы от MIT научит вас алгоритмическому мышлению. Понимание алгоритмов и того, как они работают, — это самая важная вещь, которую вы должны изучить в начале своей карьеры программиста. Другими крупными ресурсами по этой теме являются такие книги как Введение в алгоритмы от CLRS и Алгоритмы Роберта Седвика (Robert Sedwick).

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

Тренировка, практика, кодирование, проектирование

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

Практика не только делает вас лучшим программистом, вы создаете уверенность в себе. Синдром самозванца – это вполне реальная вещь!

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

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

Еще одни превосходным сайтом является Hacker Rank. Этот веб-сайт предлагает множество вариантов для выбора языков программирования. Но не только это, вы также сможете выполнять упражнения и из других областей. Мне очень понравились упражнения по решению задач на Hacker Rank. Вы получаете много задач, а разработанный вами алгоритм должен пройти различные тесты.

Все треки на Hacker Rank

Еще одна вещь, которой я страстно увлечен, — спортивное (олимпиадное) программирование. Я занимался им два года в колледже, участвовал в таких соревнованиях, как ACM ICPC.

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

Я давний пользователь Quora, и однажды мне довелось прочитать замечательный ответ Veni Johanna о том, «Действительно ли спортивное программирование помогает улучшить знания и навыки разработчика?»

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

  1. Вы развиваете навыки преобразования / моделирования конкретной задачи в абстрактную.
  2. Вы накапливаете новые шаблоны проектирования и обогащаете ими свой арсенал разработчика.
  3. Вы умеете концентрироваться и работать под давлением.
  4. У вас есть понимание и уверенность в своих способностях и недостатках как программиста.
  5. Вы учитесь управлять временем, особенно с точки зрения навыков мышления и кодирования.
  6. Вы четко определяете и ставите задачи.
  7. Вы держите в уме одну цель.
  8. Вы можете застрять в режиме «решение задач».

Мне очень нравились ее комментарии, и я часто соглашался с каждым из них на все 100%. Взгляните на ее полный ответ. Очень советую. Это здорово!

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

  • Codeforces: это действительно хороший сайт для тренировки и обучения. Здесь есть куча задач. Редакторские заметки на сайте – это серьезный плюс (*Редакторские заметки: автор задачи пишет, как вы должны подходить к ее решению – какой алгоритм или структуру данных использовать).
  • Topcoder: этот сайт очень похож на Codeforces с точки зрения качества и редакторского подхода к задачам. Он также хорошо известен своими учебными материалами. Каждый материал (тьюториал) обучает некоторой технике, алгоритму или структуре данных.
  • Hacker Rank: как я уже говорил выше, на Hacker Rank имеется множество различных областей – алгоритмы, структуры данных, математика, языки программирования и т. д. Пользовательский интерфейс и средства предоставления информации для пользователей этого вэб-сайта являются преимуществом Hacker Rank, в результате он красиво оформлен и им легко пользоваться. Я использовал много Python Domain, чтобы выработать у себя хорошую основу навыков программирования на Python.
  • Hacker Earth и Code Chef – еще два очень хороших сайта.

Теперь вы можете выбрать веб-сайт и начать практиковать 🙂

Разработка проектов

Изучив основы, программируя и много практикуясь, я почувствовал, что застыл. Я начал искать возможности, чтобы подняться на новый уровень. Для меня это было разработкой проектов. Поэтому я изучил основы веб: HTML, CSS, Javascript и веб-фреймворки. Так я освоил Ruby on Rails (Ruby Web Framework) и Django (Python Web Framework).

Моим первым проектом стал мой собственный сайт. Затем я создал веб-сайт для ресторана моей мамы. Затем две игры: tic-tac-toe и snake. Все это были статические веб-сайты.

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

Примечание: CRUD – аббревиатура от слов create, read, update, delete, то есть создание, чтение, обновление, удаление.

Первым мои реальным продуктом, который я самостоятельно разработал, был веб-сайт, отвечающий требованиям Lavadeira. А сегодня я создаю веб-продукты Worldpackers и API для мобильных приложений для более чем 900 000 туристов и отелей, принимающих туристов во всем мире.

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

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

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

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

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

Сейчас Дуг работает как разработчик Android. У него есть два персональных проекта (мобильные приложения), которые публикуются в Play Маркете и входят в Worldpackers для Android.

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

•       Работайте над параллельными проектами.

•       Купите и прочтите книги по программированию.

•       Работайте над параллельными проектами.

•       Пройдите курсы по Computer Science.

•       Работайте над параллельными проектами.

•       Читайте блоги по программированию.

•       Работайте над параллельными проектами.

Прочтите его полную историю здесь!

Вот список проектов, которые вы можете выполнить

А теперь пришло время помочь вам с реальными проектами!

•       Если вы геймер, вероятно, вы можете начать с Tic-Tac-Toe, Su-doku или Flappy Bird.

•       Если вы любите данные, вы можете заняяться вэб-скрэпингом или работать с биржевыми API для построения и анализа биржевых диаграмм.

•       Если вы хотите лучше понять пользовательский интерфейс, создайте собственный веб-сайт / портфолио.

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

У этого списка нет конца. Вот еще один список, который поможет вам выбрать проект. Но я согласен с Feross, неважно, что именно вы разрабатываете, просто что-то выбирайте и приступайте. Начинайте разрабатывать! У вас возникнут проблемы, вы возможно застрянете. Но вы МНОГОМУ научитесь!

Я знаю, что очень сложно поддерживать свой проект.

Чтобы контролировать себя самого, я нашел интересный проект, которым вы можете заниматься ежедневно. Он называется «100 дней кода». Вот его шаблон. Вы просто пишете ежедневный журнал о своем прогрессе и мыслях о проекте, который вы разрабатываете.

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

В поисках 100-дневных историй я нашел историю Эмили (Emily) – «Как я программировала каждый день в течение 365 дней». Это очень вдохновляющая история о самодисциплине и готовности научиться программировать.

Очень клево то, как она пишет о своих проектах и о том, как она училась в течение года. Проекты выполнялись для приложений iOS с использованием языка программирования Swift, для веб-разработки, используя весь стек (HTML, CSS, JS, Flask — Python и вэб-фреймворки).Прочитайте полную статью.

Поддерживайте мотивацию, продолжайте разрабатывать, продолжайте программировать! 🙂

Несколько полезных ресурсов

Полезные вэб-сайты, статьи и видео:

Вэб-сайты

  • freeCodeCamp – отличный сайт о вэб-разработке и программированию на JavaScript. Полностью бесплатный(YEY!).
  • UdemyCodeSchool и Khan Academy предлагают очень похожие, но на Udemy есть платные курсы, Khan Academy бесплатна, а на CodeSchool есть как платные так и бесплатные курсы.
  • Не забудьте про MOOC’s: UdacityCoursera, и edX. Все эти сайты содержат замечательные курсы. Попробуйте их изучать! 🙂

Читайте Twitter

  • Если вас интересует машинное обучение, читайте Andrew Ng!
  • По прикладному программированию мне нравится читать твиты от DHH (создателя Ruby on Rails), Dan Abramov (соавтор Redux), Tracy Chou (бывший сотрудник Quora, Pinterest), Quincy Larson (создатель freeCodeCamp), Preethi Kasireddy(инженер Blockchain), Dan Bader (runs Real Python) и так далее.

Людей, которые описывают свой опыт в медиа

  • Как успешно учиться и как программировать от Lydia Hallie
  • Как я за 1 год из бывшей модели превратилась в программного инженера от Madison Kanna
  • Основы CS от Vaidehi Joshi
  • Вот почему изучать программирование так сложно от Kevin Kononenko
  • Я хочу изучить программирование, но не знаю с чего начать от Robyn Silber

Vlogs & каналы YouTube

Мне очень нравится смотреть vlogs и смотреть образ жизни людей на YouTube.

  • Fun Fun Function — этот канал поддерживается Mattias Petter Johansson, бывшим инженером Spotify. Он начал с JavaScript, но в последнее время много говорит о развитии в целом. Мне очень нравится, как он формулирует свои идеи и представляет каждую тему.
  • Mayuko — инженер-программист iOS, работающий в Patreon. Она также рассказывает об инженерии и образе жизни в целом.
  • CS Dojo сосредоточен на советах и интервью программировании, алгоритмах и структурах данных. Этот канал от YK Sugishita, бывшего инженера Google в Канаде.
  • Joma Tech — самый забавный и интересный канал YouTube среди всех. Jonathan Ma – научный сотрудник из Facebook. Он рассказывает о своей инженерной жизни, а также дает советы по программированию на основе своего опыта интервью сотрудников из группы технологических компаний.

Вот и все!

Надеюсь, эта статья поможет вам начать.

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

Получайте удовольствие! Продолжайте обучение и программируйте.

Надеюсь моя статья поможет вам начать.

Перевод статьи TK: Actionable advice to start learning to code