Nikita Shmakov bio photo

Nikita Shmakov

Software Engineer

Twitter Facebook Google+ LinkedIn Github Last.fm Coursera

О несовершенном коде и демотивации

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

Вместо того, чтобы быстро разобраться, что делает тот или иной участок кода, ты невольно больше обращаешь внимание на его недостатки. Говоря о недостатках, я не имею в виду такие субъективные вещи, как красота и элегантность, а вполне конкретные характеристики, например, testability, скорость получения обратного ответа (насколько быстро ты можешь понять, что твой код работает?), смешение разных уровней абстракции в одной функции и прочие вещи в том же духе, описанные в клёвых книжках. И обо всём этом твой мозг ежесекундно сигнализирует, и поэтому примерно через 15-30 минут чтения такого кода, ты невероятно изматываешься. А когда ты понимаешь, что улучшение будет стоить тебе переписыванием почти всего модуля, у тебя просто опускаются руки.


Про вышесказанные характеристики можно рассказать более подробно.

Testability. Насколько просто писать юнит-тесты на этот код? Если сами классы и функции просто огромные, содержащие огромное количество зависимостей, а что еще хуже - содержащие скрытые зависимости (создаваемые в конструкторе или в самой функции), то testability очень быстро падает.

Скорость получения обратного ответа. Если для того, чтобы протестировать твой код тебе нужно прогонять тесты специальным скриптом(!), на каком-то сервере(!!) и подождать их прогона как минимум несколько минут(!!!), потому что запускаются только пачкой(!!!!), и все они - интеграционные(!!!!!), то код, который ты обычно пишешь примерно за час, начинает писаться часа за четыре, а может и еще больше… Количество восклицательных знаков - это уровень падения. Чем их больше - тем ниже Вы пали ;). Еще к данному пункту можно отнести невозможность задеплоить приложение на своей девелоперской машине.

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


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

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

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


comments powered by Disqus