Что делать, когда пишешь код
21 марта 2018 года Мир eLearning
Автор онлайн-курса «Алгоритмы программирования и структуры данных» Максим Буздалов рассказывает, как справляться с типичными проблемами программистов и быть эффективным при написании кода.
Зачем пить очередную кружку чая, почему не нужна фоновая музыка и причём тут морфогенез, когда речь идёт о программировании?
Как начать писать код
У меня существует одна проблема: перед тем как приступать непосредственно к написанию кода — даже если идея того, что я собираюсь написать, кристально ясна — я начинаю выстраивать в голове способ наиболее эффективной реализации, изолированной за интерфейсом с наилучшей защитой «от дурака» (в том числе и от самого себя, разумеется). И если это нормальное явление при внесении изменений в уже хорошо отлаженный код, то при написании с нуля прототипа, в долгосрочном существовании которого не уверен, такие мысли, а тем более их реализация, почти наверняка являются напрасной тратой времени и сил.
Справиться с этой проблемой, однако, помогает простая мысль, изложенная ещё у Кента Бека в «Экстремальном программировании». Прототип можно начать писать почти как угодно плохо — главное, чтобы про его функциональность было написано достаточно много хороших тестов. Желательно, конечно, писать тесты до начала написания кода, но никто не бывает идеальным всегда. Если позволить себе написать «грязноватый» прототип с хорошими тестами, то его всегда можно выбросить (а тесты, естественно, оставить) и написать нормально с нуля, если станет понятно, что идея хороша. А если идея не заработает, то прототип можно просто выбросить, при этом на его написание будет затрачено гораздо меньше времени. При этом тесты выбрасывать не надо — могут пригодиться!
Как удержать все идеи в голове
Записать! Если идею можно записать в виде кода, записывайте в виде кода. Если этот код конкретный, сразу пишите тесты. Может оказаться, что эта идея — мираж, и тогда она развеется. Если этот код абстрактный, создавайте подпроекты, модули, интерфейсы, абстрактные классы — всё, что ваш язык даёт использовать для описания идей на высоком уровне. Это может занять не очень много времени, зато зафиксирует идею, а по дороге заставит о ней задуматься глубже.
Если идея не записывается в виде кода, записывайте её в виде документации. Эта документация может быть сама по себе достаточно абстрактной, вроде декларации о намерениях. Записывайте идеи либо как документацию для пользователя (который знаком с предметной областью, но совершенно незнаком с вашим проектом), либо как документацию для разработчика, который собирается что-нибудь дописать в ваш проект. Заодно посмотрите другими глазами на то, что собираетесь сделать.
Как перестать отвлекаться
Чтобы заставить себя перестать отвлекаться, можно воспользоваться «методом помидоров». Нужно работать промежутками фиксированной длины (45 минут), между которыми делать перерывы (15 минут). В рамках каждого промежутка надо фиксировать себя не на результате, а на процессе. Для того чтобы соблюдать регламент, можно использовать одно из многочисленных приложений, разработанных для этой методики.
Правда, я сам никогда не применял этот метод, потому что отвлекающие факторы у меня, как правило, долгосрочные и неотвратимые (дела по административной части, например). Однако я наблюдал, как его применяет жена. На её примере я и увидел его реальную эффективность.
Как быть максимально продуктивным
Довольно парадоксальное наблюдение: почему-то лучше всего получается программировать в состоянии лёгкой усталости. Лучшие результаты в топкодеровских раундах у меня были, когда раунд начинался в четыре утра. Видимо, в этом состоянии у мозга не хватает ресурсов на рефлексию («ах, что бы ещё такое улучшить или предусмотреть?»), и он начинает делать дело, не переключаясь на посторонние обстоятельства.
Обычно я пишу код (на самом деле, стук клавиш при этом раздаётся далеко не всегда — об этом немного ниже), пока не завершу работу над какой-то идеей или набором идей. Крайне не люблю прерываться, даже если на часах 22:00 и уже надо покидать рабочее место. Или если на часах 02:39 и надо бы уже ложиться спать. У меня обычно процесс заканчивается, если что-то наконец заработало, если стало понятно, что оно никогда не заработает, или если начинаю клевать носом в прямом смысле слова.
Как себя мотивировать
Людей моего склада ума, работающих в науке, мотивируют обычно дедлайны. Разница между студентом и научным работником нередко лишь количественная: задумываться о том, чтобы придумать что-то новое, начинаешь не за пару дней до сдачи курсового проекта, а за несколько месяцев. Но это совершенно не отменяет того, что в последние дни работаешь как угорелый. Впрочем, я думаю, что в других областях программирования и его приложений дело обстоит примерно так же.
На что делать перерывы от стучания по клавишам
Вся действительно интеллектуальная работа практически у любого программиста происходит именно тогда, когда он НЕ стучит по клавиатуре. Пока код пишется, сознание почти отключено (работает, быть может, единицы процентов времени, и то при смене контекстов), а подсознание обрабатывает картинку на экране и соотносит с разработанным ранее представлением о том, что должно быть. Программист думает, когда НЕ пишет код — эту мысль можно найти и в книгах. Многие сравнивают процесс программирования со сном, и я во многом с этой мыслью согласен.
Перерывы нередки. Сделать себе ещё одну кружку чая (которых за день может выйти и десяток), просто походить по комнате кругами. Все эти перерывы на самом деле — на «подумать». Расширенный вариант таких перерывов — чтение литературы (причём не только «кодерской»; философская, например, тоже заходит на «ура»). Это во многом поиск неожиданных поворотов мысли или даже просто «случайных» входных данных. Всё это может дать непредсказуемый пинок в правильном направлении.
Как справляться с трудностями
В последнее время слишком часто обнаруживаю, что быстрый код не всегда является хорошо понятным, и наоборот. Чаще справляюсь путём анализа того, что можно обобщить и вынести в отдельные процедуры с понятным смыслом, при этом не навредив производительности. Иногда помогает, причём с улучшением по обоим параметрам.
Как выйти из тупика
Если в вашей программе ещё не все работает корректно, начните разбираться, что не работает — обычно эта деятельность затягивает. Если всё работает, можно писать тесты. Можно проверять производительность на разных наборах данных. Если занимаешься наукой, можно добыть статью конкурентов, в которой разработан хороший алгоритм для решения похожей задачи, и реализовать его — наверняка по дороге придёт идея о том, что улучшить у себя. Если занимаешься разработкой приложений, аналогичный совет тоже вполне остается в силе. Чтобы набраться новых идей для своего проекта, можно начать читать о том, как функционирует морфогенез в живых организмах, или о регуляторных сетях. Это вещи такой потрясающей сложности, до которой обычному программисту далеко как до Луны. Программисту у природы, как правило, есть чему научиться!
Какую музыку слушать во время написания кода
Так как я ещё и немного музыкант, прослушивание музыки для меня — достаточно серьёзная работа. Фоновую музыку я не признаю. Если я что-то слушаю, значит, я ничего не пишу. Подсознание при этом, конечно же, работает, и иногда выдаёт ответы на долго мучившие вопросы (чаще всего это, конечно, жалкие подобия ответов).
Источник: https://vk.com/@openeduru-chto-delat-kogda-pishesh-kod