Итак, у вас есть проблема и вы застряли. Что делать?

Перевод статьи Исаака Лимана “So you’re stuck”.

Проблема и поиск ее решения

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

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

Большинству программистов (я так думаю) знакомо глубокое, горячее, сокрушительное чувство отчаяния, появляющееся после многочасовой работы над проблемой без всякого прогресса. Вот твит по этой теме от парня, создавшего Stack Overflow:

«Люди думают, что программирование это чистое логическое мышление, в то время как оно почти на 99% состоит из битья головой об стену, пока стена не поддастся».

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

1. Прислушивайтесь к себе

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

В идеале, приступая к работе, вам следует быть в умиротворенном состоянии. Тогда в случае срыва планов вы можете обозначить проблемы («Я застрял»), глубоко вдохнуть и начать работать над ее решением.

2. Выделите себе время на поиск решения

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

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

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

Метод утенка

3. Используйте метод утенка

Объясните проблему воображаемому коллеге. У вас есть резиновая уточка или набивная игрушка? Так даже лучше. У меня на столе всегда был Перри-утконос. Объясните, в чем у вас загвоздка, как можно более детально; представьте, что ваш коллега не знаком с кодом, о котором вы ему говорите.

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

4. Нарисуйте это

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

5. Сделайте перерыв

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

6. Попросите о помощи

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

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

7. Изолируйте проблему

Если вы все еще в застрявшем состоянии, время начать с наброска. Создайте маленький Git репозиторий или Codepen и посмотрите, можете ли вы добавить только абсолютно необходимый код, воспроизводящий проблему. По кусочку за раз повторите окружение и код, касающийся проблемы, пока не увидите, что она начала проявляться. Затем попробуйте удалять различные кусочки, по очереди, чтобы убедиться, что не включили что-то ненужное. В конечном итоге у вас должен остаться наименьший возможный экземпляр проблемы (MCVE), что облегчит задачу кому-нибудь, кто захочет вам помочь. Проверьте этот код вместе с тем человеком, которого вы просили о помощи на предыдущем этапе.

8. Запишите

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

Попросите о помощи

9. Возьмите с собой товарища и задайте вопрос в интернете

найдите приятеля (возможно, человека из п.6) и попросите прочитать, что вы написали (п.8), чтобы убедиться, что там все в порядке. Затем опубликуйте это в интернете. Stack Overflow и другие подобные сайты (Server Fault, Software Engineering или Database Administrators) – ваш лучший выбор для скорого получения ответа на ваш вопрос. Но сообщества на этих сайтах могут быть недружелюбными к спрашивающему, поэтому не идите туда в одиночку: попросите товарища поддержать ваш вопрос и помочь вам защищаться от грубых комментаторов или голосов за закрытие вопроса. Если повезет, за день-два вы получите хорошие отклики и идеи.

10. Найдите обходное решение

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

Итог: документируйте решение

Когда решите свою проблему, запишите свое решение, чтобы избавить других людей от подобных огорчений. Это может быть комментарий в коде, страница во внутренней документации вашей компании, email, пост в вашем блоге или на dev.to, ответ на собственный вопрос в Stack Overflow.

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


[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх