В разработке ПО требуются не только навыки программирования, но и умение фиксить. Разбираемся, что делать при возникновении проблем.
Поиск проблем при разработке ПО
Для решения проблем, которые появляются при разработке ПО, можно выделить четыре этапа:
- Определение проблемы.
- Сбор информации.
- Поиск потенциального решения.
- Проверка решения.
Определение проблемы
Если мы говорим о затруднении, возникшем при разработке ПО, будем подразумевать проблему любого масштаба:
- Вы делаете что-то очень специфическое и не можете заставить часть кода работать так, как вы хотите.
- Отладчик выдает странные ошибки, вы понятия не имеете что может быть не так.
- Вы пытаетесь разобраться со старым кодом, о принципах работы которого знал только разработчик, который давно уволился.
- Вы видите приложение в целом, но не представляете, как должна происходить разработка в деталях, не можете увидеть компоненты приложения по отдельности.
- Вы решаете, какой набор фреймворков/программ использовать для разработки проекта, но не можете выбрать лучший.
- Вы знаете, что есть функция, которая может сделать то, что вам нужно, но не можете вспомнить как она называется.
В одних случаях понять и определить проблему проще, чем в других. К примеру, иногда ошибка простая – вы сразу понимаете, что допустили опечатку в синтаксисе. А иногда ошибка полностью выбивает из колеи: программа просто делает не то, что вы от нее ожидаете.
Даже в особо тяжелом случае, попробуйте сформулировать проблему более точно, задав себе наводящие вопросы:
- Что я пытаюсь сделать?
- Что я уже сделал?
- Что по моему мнению должна делать программа?
- Что она на самом деле делает?
Сбор информации
Иногда люди пропускают первый этап и сразу переходят ко второму:
- Ищут решение на StackOverflow.
- Копируют решения со Стека или какой-либо литературы, не понимая, что делает этот код.
И это не плохо, иногда такой способ решения проблем допустим. Но он должен быть лишь одним из инструментов в вашем ящике, а не единственным используемым решением.
Что еще должно быть в вашем наборе для решения проблем? Подумайте о той информации, которую вы ищете:
- Если вы точно знаете, какую функцию, класс или метод API вы используете, сначала посмотрите, что пишут в соответствующей документации, чтобы понять, правильно ли вы это делаете.
- Если у вас возникли проблемы при использовании ПО с открытым кодом, загляните в исходники и посмотрите, как описана проблемная функция: возможно, вы все-таки используете ее неправильно.
- Чтобы получить общее представление о новой библиотеке или фреймворке, найдите подходящий туториал/краткое руководство.
- Если вы не понимаете, почему часть кода написана конкретным образом, попробуйте заглянуть в историю коммитов – прошлые изменения или комментарии могут прояснить картину.
- И, конечно, гуглите. Иногда вы точно знаете, что вам нужно, но не можете сформулировать это в виде названия метода или функции, либо не можете вспомнить какие точно они принимают аргументы. В такой ситуации поисковик может оказаться лучшим решением, которое даст необходимую подсказку.
Если один из методов долгое время не помогает, переключитесь на другой. Многие разработчики сразу переходят в поисковые системы, но использование различных методик поиска информации поможет расширить кругозор и лучше понимать эту и будущие проблемы.
Поиск потенциального решения
Если вы застряли, начните с чего-нибудь, с чего угодно. Если конечный результат при этом изменился – это успех. Продолжайте менять код до тех пор, пока не придете к подходящему решению.
Если вы разбираетесь с незнакомым кодом, попробуйте менять его понемногу. Выводите результат работы функций и переменные в консоль, чтобы понять, как именно код будет работать при тех или иных изменениях.
Проверяйте работу кода как можно чаще. Да, вы будете отвлекаться на это и тратить время, но это намного лучше, чем писать часть программы много часов без тестов, а потом узнать что она не работает, и неизвестно почему происходит краш.
Проверка решения
Когда все работает, проверьте, насколько хорошо. Это можно сделать вручную: попробуйте подстроить условия выполнения таким образом, чтобы воспроизвести баг, от которого вы избавились. Подумайте, как ошибка может проявиться еще, и поменяйте соответствующим образом код, чтобы убедиться в его исправности.
Этот процесс можно автоматизировать. Добавление автоматического теста, который подтвердит, что функция работает, как и задумывалось, или что ошибка больше не возникает, поможет избежать непредвиденных проблем.
На основе тестов существует целый подход к разработке – разработка ПО через тестирование. Под каждое изменение, которое планируется в проекте, сначала пишется тест, который покрывает возможные сценарии работы программы.
Комментарии