Что делать, если вам случилось застрять

0
987
views

Перевод статьи Софи ДеБенедетто «How to Get Un-Stuck».

Что делать, если случилось застрять

Я застрял!

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

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

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

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

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

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

Руководство по «саморазблокировке»

  1. Изолируйте проблему
  2. Поэкспериментируйте
  3. Определите свои ожидания
  4. Задавайте вопросы
  5. Расскажите все уточке
  6. Сделайте перерыв

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

Изолирование проблемы

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

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

Код, который приводил к этой ошибке, отвечал за две вещи:

  1. соединение с удаленным сервером;
  2. передачу файлов на этот сервер.

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

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

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

Поэкспериментируйте

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

Недавно один из моих студентов обратился ко мне с проблемой с CSS. Он пытался изменить на своей странице цвет шрифта и заголовка. Мне был представлен CSS-файл. Код со стилями заголовка мне казался совершенно правильным. И тем не менее, эти стили не отображались на странице. Я понятия не имела, почему так происходит!

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

Цвет фона вообще не менялся. Это выявило реальную проблему: на странице не отображались никакие CSS-стили. Это заставило нас задуматься, а знает ли наш HTML-код о существовании CSS-файла? Ответ на этот вопрос был простым: НЕТ. Мы забыли включить тег <link> в <head> HTML-документа для привязки CSS-файла. Проблема была решена!

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

Определите свои ожидания

Один из способов упростить сложную проблему это определение ожидаемого поведения. Спросите себя: «Почему это – проблема? Что конкретно я вижу такое, чего видеть не должен? Чего я не вижу, а оно должно быть?»

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

Задавайте вопросы

Задавайте вопросы

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

Но есть ресурсы, доступные всем:

  • Загуглите! Разработчики всех уровней делают это ежедневно. Это по-настоящему ценный навык, нужный в программировании, и не нужно его стесняться.
  • Задайте вопрос на форуме вроде Stack Overflow. Stack Overflow существует, потому что люди хотят помочь вам в решении вашей проблемы. Воспользуйтесь этим!
  • Сходите на митап. Для начинающих программистов проводят отличные митапы, кроме того, некоторые митапы действуют в качестве учебных групп, где волонтеры отвечают на вопросы и помогают желающим. Сходите туда и познакомьтесь с другими программистами!
  • Спросите у друга или сокурсника. Если вы проходите какой-то курс (не важно, онлайн или в классе), поговорите с какими-нибудь людьми, изучающими программирование вместе с вами. Они почти наверняка вас не укусят и скорее всего у них самих тоже найдется, что спросить у вас.

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

Расскажите все уточке

Вам случалось начать что-нибудь спрашивать у товарища, коллеги или учителя – и остановиться на полуслове, когда осознали, что уже и сами все поняли?

Что ж, в программировании для этого есть название: Rubber Ducking (метод утенка).

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

Для применения этого метода есть много способов.

  • Расскажите другу или соседу по комнате. Ему вообще не обязательно знать что-либо о программировании, нужно только согласие послушать:)
  • Расскажите коллеге или сокурснику.
  • Расскажите неодушевленному предмету – собственно, резиновой уточке!

Главное – сделать шаг назад и проговорить проблему вслух, чтобы посмотреть на нее под другим углом.

Расскажите все резиновой уточке

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

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

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

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

Не сдавайтесь

Человек, который застрял, чувствует себя ужасно. В лучшем случае это отбирает время и силы, а в худшем – заставляет вас сомневаться в своих способностях развиваться как программисту. Но, если вы разработчик, то вы довольно часто переживаете состояния «застревания». Этого не нужно бояться. Применив изложенные в этой статье советы, вы не останетесь в застрявшем состоянии надолго.



ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here