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

С тех пор я пересмотрел свое мнение по этому поводу.

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

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

Применимы ли какие-либо из этих навыков, скажем, к офисной работе?

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

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

То же самое и с кодированием.

Само по себе кодирование требует нескольких фундаментальных навыков, необходимых для эффективного программирования:

  • долгосрочное внимание и концентрация
  • моделирование и абстракция
  • логическое рассуждение и деконструкция

Перечисление этих фундаментальных навыков делает довольно очевидным, как они могут быть переданы во многих современных контекстах - от работы с автоматическими и механическими устройствами до навигации по бесчисленным абстрактным правилам и положениям. Интересно, что такая передача навыков происходит не так часто с причинными кодировщиками, как с профессиональными или опытными программистами. Так где именно падает эта конверсия и почему?

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

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

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

Или, может быть, вы пытаетесь направить газ в стакан из пенополистирола (подсказка: НИКОГДА НЕ ДЕЛАЙТЕ ЭТОГО).

Это случай неудачной передачи навыков.

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

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

Вернемся к программированию.

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

Такие вещи, как компьютерная грамотность, приходят бесплатно при обучении программированию. Вы разбираетесь в программном обеспечении. Вы знаете, что компьютер не просто «что-то делает» или «что-то случается». Рассуждения о сложных системах также являются полезным побочным эффектом, поскольку кодирование по сути моделирует реальность (или любую формально описываемую систему) в программном обеспечении. Это также позволяет вам вывести внутреннюю работу системы на основе ее поведения, построив ее ментальную модель и проследив логику.

Итак, я должен научиться программировать?

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

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

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

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

Если жажда знаний подпитывает вашу энергию, изучайте их. Вы не пожалеете.

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

Если вам нужно лишь немного кода для решения конкретной проблемы (например, установить плагин WordPress, настроить некоторые файлы Apache .htaccess или добавить виджет социальных сетей в шаблон), то вы обычно просто следуйте рецепту или набору инструкций, чтобы достичь своей цели после небольшого поиска в Google. Для выполнения этих задач вам не нужно знать кодирование.

Здесь есть одно заметное исключение.

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

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

Я говорю вам: изучите это.

И не останавливайтесь на достигнутом.