РАЗВЕНЧИВАЕМ СТЕРЕОТИПЫ О ДИЗАЙНЕ КОДА И ДЕЛИМСЯ ЛАЙФХАКАМИ,КАК СДЕЛАТЬ КОД ПОНЯТНЫМ И НЕ УБИВАТЬСЯ НА ПРОЕКТЕ.

Коллеги из IT-среды уделяют много внимания качеству кода.

Код тщательно выписывают и переписывают, о его красоте заботятся, его дизайн обсуждают.

Тем не менее, скажем страшную вещь.

О красоте кода можно и нужно заботиться, только если это требования работодателя или у вас большая команда.

Если вы пишете аналитический код для расчетов своих продуктов - пишите так, чтобы лично вам было (а) удобно, (б) понятно, (в) быстро.

В школе все писали шпаргалки. Мелким почерком на крохотном листе бумаги могли уместить сразу многое. И всё было сразу понятно. Это работает и для кода в production.

Например, мы в Raisk не используем autopep8 и в целом PEP8, потому что нам не нравятся переносы строки. Наш код бывает грязен и отвратителен. Он нарушает примерно все принципы и паттерны проектирования: как писать интерфейсы, классы, модели, как они должны соотноситься друг с другом на Python и других языках программирования.

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

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

Такой подход позволяет нам вести десяток проектов и не тратить огромные (клиентские) средства на то, что прямо не приносит прибыль.

Самое интересное, что на github мы видим десятки (сотни?) очень красивых, “вылизанных” проектов, перспективных с точки зрения бизнеса, но просто заброшенных. Почему? Красоту сложно поддерживать, а костыль работает всегда!

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

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

Десять лайфхаков, чтобы ваш код был понятен и вам, и коллегам:

1. Активно используйте комментарии. Львиная доля трудозатрат - это работа с грязными данными, их особенностями либо скрупулезными пожеланиями клиента. Комментарии помогут вспомнить, что вы написали так, а не иначе, потому что отталкивались от исходных данных или требований. Или потому что не нашли другого способа.

2.Используйте системы версионирования кода (очевидно) и версионирования данных (нигде кроме как у нас не видели).

3. Мы также используем видео- и аудиокомментарии. Такого расширения для Visual Studio и Visual Code нет, но после записи мы вставляем ссылки комментарием туда, где они хранятся.

4.Не гонитесь за новыми технологиями. Если говорить о среде .Net, то смена фреймворка (например на .Core) часто означает иной способ работы кода или вовсе прекращение его работы))

5. Используйте протяжку кода в Excel. Например, на некоторых проектах мы не пользуемся Entity Framework и нам нужно довольно много кода с проверками данных, присвоением переменных, значений и проч. Мы делаем это в Excel, протягиваем код, копируем в Studio - и у нас получается та самая шпаргалка мелким почерком. Особенно это хороший совет для SQL-кода, но DBA со стажем, думаем, о нем знают.

6. Используйте решения с развитой экосистемой. Для малых команд разработки такие решения, как PostgREST и сходные, - очень достойный вариант.

7. Не сносите старые комментарии. Увы и ах, в наших решениях несколько страниц закомментированного кода, который работает, если его раскомментировать. Очень часто случается так, что он становится снова актуален, а искать его в ветках в гите довольно долго.

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

9. Избавьте клиента от лишних программерских вопросов. Большинство ответов на технические вопросы звучит так: "Мне все равно". Но для приличия клиент вникает и пытается дать лучший ответ. На самом деле лучший ответ - это то, что работает у вас, а время покажет, насколько вы были правы.

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

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

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

1111
19 комментариев

Комментарий недоступен

2
Ответить

Запятые тоже в межфирменной переписке не расставляем. что делать. Пусть лидеры рынка держат 3 редакторов только для VC + субподряд на фирме, а у нас двое на все каналы и оба еще клиентщики и пиарщики. У нас так еще говорили: у вас малый бизнес, теща должна быть на бухгалтерии, жена на кассе, а зять развозить заказы. жестко, зато реально. спасибо за внимание, всем добра!

2
Ответить

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

Ниже будет моё мнение, почему так (как написано в статье) не стоит делать.

Если бы такое "пособие" было по фотографированию, фотография вышла бы как у автора поста на аве. Не парьтесь про свет, просто фоткайте - всё равно в итоге будет фотография, на которой что-то видно.

Чистота и стандартизация кода нужны по всего одной причине. Это не красота и не выпендривание перед коллегами - это поддержка. Код надо писать так, как будто после вас его будет поддерживать психопат с ружьём, который знает где вы живёте (с).

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

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

1
Ответить

Это правильное замечание! Но есть нюансы: 1) на хабре в основном наёмные сотрудники, IT-профессионалы, а у них совсем другой взгляд, чем у владельца бизнеса, им платят за часы (условно). Они как раз и критикуют то что критикуем мы, бизнес позиция очень проста - платим за то, что работает, и за скорость прототипирования/воплощения в прод. 2) Представьте что этому фотографу поставили задачу сфотографировать количество крыш на заднем фоне за ограниченное количество времени. он со своей задачей справился?
Спасибо за коммент!!

1
Ответить

Увидеть бы этот код который вы описали

1
Ответить

Пишите ТЗ)

Ответить

Комментарий недоступен

Ответить