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

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

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

1. Признание ошибок и незнания как части процесса

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

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

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

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

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

2. Разделяй и властвуй

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

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

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

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

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

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