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

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

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

История Билла и Дональда

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

Давайте сравним это с более распространенным подходом, который, кажется, используют новички. На этот раз Дональд - новичок в нашей истории. Он создает бесплатную учетную запись на одном из многих веб-сайтов онлайн-курсов и записывается на курс. Он смотрит видео, где люди объясняют вещи так, чтобы он чувствовал себя умным. Дональд пишет несколько строк кода в контролируемой среде без препятствий реального мира. Он заканчивает уроки и чувствует себя готовым столкнуться с реальными жизненными проблемами программирования. Затем он понимает, что в реальной ситуации сложно написать одну строчку кода и что он не может правильно структурировать свои мысли. Без онлайн-курса все кажется намного сложнее. Дональд обращается к руководствам, в которых объясняется, как решить проблему, аналогичную той, что требуется его коду. В этом нет ничего плохого, и в итоге он получает рабочую программу. Хотя в случае с Дональдом, несмотря на то, что написанное им программное обеспечение работает, он почти не понимает, «почему» и «как» оно работает. Следующим шагом будет прохождение еще одного онлайн-курса, на котором он вновь обретет чувство доверия к себе, а после этого он перейдет к новому проекту. Этот проект будет завершен с помощью еще нескольких копий, вставленных из руководств и stackoverflow.com, промойте и повторите.

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

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

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

Практика, практика… и еще раз практика

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

Руководства

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

Онлайн-курсы

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

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

Как это применимо к онлайн-курсам? Такой курс заставляет вас играть в песочнице. У вас есть несколько простых вопросов, ответ на которые был представлен в 5-минутном видео, которое вы только что посмотрели. Иногда вы получаете задание по программированию, но оно тоже довольно простое и близко к тому, что вы только что выучили. Если становится немного сложнее и у вас нет решимости разобраться с проблемой, вы обычно сразу переходите к ответам. По окончании одного из этих курсов вы чувствуете себя прекрасно и представляете себя программистом. Затем вы пробуете применить в реальном мире то, что вы только что узнали. Обычно вы делаете это после 2–3-недельного перерыва после окончания курса. К своему удивлению, вы обнаруживаете, что едва ли знаете 10 процентов того, что, как вы думали, вы делаете. Вы также обнаруживаете, что в реальном мире все идет не так, как планировалось, начиная с инструментов и заканчивая проблемами программирования, которые вы пытаетесь решить. Следующая фаза - это форма депрессии, как в случае с книжкой самопомощи. Что произойдет дальше? Вы догадались, записывайтесь на другой онлайн-курс. Большинство людей, которые этим занимаются, обычно бросают программирование примерно через год.

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

Статьи

Статьи могут предложить читателю отличные знания, но обычно вы должны быть достаточно опытными, чтобы извлечь из них какую-то пользу. Есть отличные статьи о модульном тестировании, архитектуре, шаблонах проектирования, функциональном программировании, последних технологических тенденциях, а также множество исследовательских работ по различным темам, таким как архитектура операционной системы, обнаружение столкновений в видеоиграх и т. Д. Как я уже сказал вам вы можете многому у них научиться, но вы должны быть достаточно опытными, чтобы понять их. Есть также много статей, которые могут быть пустой тратой времени, и я лично считаю, что их можно включить в категорию журналов сплетен. Обычно у них есть такие названия, как «10 самых сложных языков программирования», «Почему язык X намного лучше, чем язык Y», «Язык программирования X мертв», «Будущее программирования за X, так что вам лучше…». Не читайте такие статьи.

Книги

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

Прямая трансляция

Я добился больших успехов в своем программировании, просто следуя за опытными программистами, которые транслируют онлайн. Лучшим примером этого может быть серия «Герой ручной работы» Кейси Муратори. Он транслирует его в прямом эфире на Twitch, но вы также можете найти его на YouTube. В своем потоке он учит вас, как создать видеоигру с нуля на C / C ++ без помощи каких-либо библиотек. Помимо изучения тонкостей программирования видеоигр таким способом, я получил большую ценность, просто наблюдая за опытным программистом в его мастерстве. Я просто становился лучше и быстрее, даже не осознавая этого. Есть и другие отличные стримы, но Кейси - это то, что я считаю лучшим для меня.

Заключение

Лучший способ стать лучше - много практиковаться. Это, безусловно, то, что приближает вас к тому, чтобы стать лучшим программистом. Учебники хороши, если вы хотите решить что-то быстро (и обычно грязно). Правильные статьи могут научить вас новому, но вы должны иметь некоторый опыт. Онлайн-курсы похожи на школу без оценок и могут принести отличные знания, если вы в них работаете. Прямые трансляции могут в основном помочь вам получить опыт у опытных программистов. Книги научат вас большему в удобном для вас темпе.

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