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

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

1. Изучите основы программирования.

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

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

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

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

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

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

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

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

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

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

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

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

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

2. Изучите схему.

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

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

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

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

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

Простая схема Брайана Харви и Мэтью Райта - еще одна замечательная книга: в ней масса практических задач и ясные объяснения. Лаборатория 10 из превосходного курса Беркли CS 61A: Структура и интерпретация компьютерных программ - отличный способ получить дополнительную практику работы со Scheme.

3. Решайте математические задачи.

Когда я только начинал работать в этой области, я задал опытным программистам вопрос: «Что бы вы сделали по-другому, если бы снова начали свой путь программирования?»

Ответ, который я получал не один раз, был таким: «Я бы тратил больше времени на изучение математики».

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

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

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

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

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

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

4. Изучите чужой кодекс.

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

Есть много отличных программистов, у которых мы можем учиться. И в процессе вы:

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

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

Вот как работает метод Франклина в применении к программированию:

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

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

5. Платите вперед.

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

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

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

Все еще учусь программировать

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

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

Программист и писатель: amymhaddad.com | Programmerspyramid.com | Я пишу в Твиттере о программировании, обучении и продуктивности @amymhaddad

Первоначально опубликовано на amymhaddad.com.