{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

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

Коллеги из 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 или угодить коллегам-программистам, а порадовать клиента или потребителя модели, то он гораздо больше обрадуется, что конечный продукт работает и все сходится с его расчетами. А когда он увидит счет - есть шанс, что он вас обнимет, пригласит на кофе или, что еще лучше, познакомит со своими бизнес-партнерами.

0
19 комментариев
Написать комментарий...
Game Topia

А ещё вам похоже пофигу ДО ЗАГОЛОВКА И НорМальНЫх КОВЕРОВ.

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

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

Ответить
Развернуть ветку
Game Topia

Д а неТ, и ТАк СойДЕt! Ч е Го уЖ.

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

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

Ответить
Развернуть ветку
RomanistHere

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

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

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

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

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

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

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

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

Ответить
Развернуть ветку
Game Topia

А каком бизнесе вы вот сейчас говорите? О финтехе или маркетинговых лендосиках и говно-сайтиках на cms? Я о том, что у разного бизнеса разные взгляды на создание продуктов. ПоЖалуйСтЫ!

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

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

в нашем случае, речь идёт о традиционном бизнесе - обслуживании клиентов, у которых есть запрос на внимательное отношение к данным и сложным расчетам.

Ответить
Развернуть ветку
Name

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

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

Пишите ТЗ)

Ответить
Развернуть ветку
Аккаунт удален

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

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

да, тут ругаются матом(( но обращают внимание на запятые...
мы стараемся не делать первого и второстепенное значение уделяем второму)

Ответить
Развернуть ветку
Аккаунт удален

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

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

вот и ваш тезка из Eggheads Solutions говорит, что прибыль не главное...

Какие у вас основные расходы?

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

Какая у вас EBITDA в %?

В % она сейчас не очень актуальна, потому что мы будем много инвестировать.

Ответить
Развернуть ветку
Аккаунт удален

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

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

нанять))

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор
Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

кстати-кстати

Ответить
Развернуть ветку
Raisk.ru (Владимир Козлов)
Автор

Вадим Кондратьев, друг! ты гений, что смог сделать сервис, о котором ты пишешь. но что мешало тебе довести до маркета? как считаешь, спустя 1,5 года - смог бы допилить до хотя бы 1 рубля выручки в одиночку? Спасибо что голосуешь за комменты.

Ответить
Развернуть ветку
16 комментариев
Раскрывать всегда