Комментарии 39
Меня зовут Маша, я автор курса по С++ в Яндекс Практикуме.
Дальше не читал.
Возможно, из-за следования критерию отбора статей для прочтения.
> С++
> МАША
Вот если бы автора звали Брайан, Деннис, Бьярне, или, на худой конец, хотя бы Герберт…
Хорошая статья для начинающих. Спасибо за плагин!
Почему-то само выражение "красивый код" коробит, выглядит очень субъективным. Хотя адекватную альтернативу предложить не могу.
Есть хороший термин — clean code.
Собственно "там" никто не скажет nice\pretty\beautiful code.
Познакомился с темой clean code в англоязычной литературе и чтобы сохранить фонетику аббревиатуры начал мысленно переводить как красивый код (Клин Код -> Красивый Код).
Но потом в русском языке clean code превратилось в чистая архитектура, и теперь термин "красивый код" трудно защищать, так как выглядит субъективно, а апеллировать к авторитетным источникам нельзя.
Внутренне обрадовался, что кто-то ещё использует такой термин. Но статья про clean code.
"Оставляйте время для рефакторинга" — обычно это заканчивается на очередной планерке… Да, надо бы (перечень правильных работ)… А после начинается очередная итерация "надр сделать еще вчера"…
Какой там ревью и прочий девопс… Фигачим на прод
Нет акцентов на типичных недостатках. Пока не прочитаешь разъяснения автора к приведенному коду — не понимаешь на что обратить внимание, почему этот код «вонюч». По идее наоборот сначала перечисляются типичные упущения, а затем предлагается пример для демонстрации.
Или вот взять пример функции IsOKPressed. С этим примером всё в целом неплохо, кроме того, что функция IsOKPressed имеет побочный эффект. Это какая-то местечковая функция, об особенностях которой должен догадываться читатель?
Несвоевременный вызов может привести к тому, что действия, которые необходимо сделать до показа нового экрана пользователю, сделаны не будут.
Ну и ряд прочих моментов.
Спасибо автору за попытку, но над структурой подачи надо поработать.
вы вообще пробовали изучать другие языки?
Ведь наш Цезарь — он прекрасен.
Да, он не какая-нибудь красота, не
просто красота, это — сама красота в апогее!
/Астерикс на Олимпийских играх/
Языки изучают не за красоту, а ради применения в качестве рабочего инструмента. А красота — понятие субъективное. Особенно среди высших приматов.
Какие проблемы конкретно с С++ вы видите?
Надо ли его рефакторить и если да, то как потом его апгрейдить из тех же сторонних источников.
А если нет, то как вы боретесь с когнитивным диссонансом, когда в вашем проекте столько «вонючего кода»?
поэтому я не буду задавать риторические вопросы из серии «зачем вы используете такой код». вероятно, это не ваше решение и не ваша ответственность. и может быть в момент принятия этого решения, оно было верным в тех условиях.
я не думаю, что рефакторить внутри своего проекта чужой код, который вы берете из обновляемого опен сорса, — хорошая идея. опять же, если мы про «сферического коня», то можно вложится и порефакторить их опен сорс, делать пулл реквесты и прочее. но я так понимаю, что это тоже маловероятно. только если на досуге.
то, что делаем мы, это просто стараемся писать нормальный код в той части проекта, за которую отвечаем мы. изолируем чужой код, как можем, и стараемся туда не лезть.
я не буду задавать риторические вопросы из серии «зачем вы используете такой код». вероятно, это не ваше решение
Ну это просто данность. Скажем BSP от производителя с его же SDK.
В книгах так хорошо пишут о том как избегать цикломатичности, но что-то умалчивается о проклятии макросов.
Тексты BSP наводнены макросами условной компиляции чтобы быть портируемыми под все семейство чипов производителя или под 3-4 е типа сред разработки. Мусор макросов (поскольку это вставки не относящиеся ни к проекту, ни к целевому чипу) загромождает поле зрения, не дает понять логику, утомляет.
И это точно никто не собирается исправлять или делать «красивее»
Огромные HAL-ы, именования в которых никак не коррелирует с именованиям в мануалах на чипы. Вынуждающие делать двойную работу по изучению платформы разработки.
Или вот в последнее время началось применение текстов автосгенерированных в Matlab-Simulink-Stateflow. Там цикломатичность в принципе не соблюдается никак.
По моему битва за «красоту» уже проиграна. Что толку если только 10% текстов будут красивыми?
У вас какой язык используется С++17?
А вот если у вас в коде комментарий к каждой строке, без которого непонятно, что происходит — это повод задуматься.
Я, как человек, унаследовавший многие тонны дремучего легаси могу сказать, что меня совершенно не интересует, что вот именно вот здесь происходит — это я уж как-нибудь разберусь. А вот зачем это происходит — иной раз неподвластно в принципе, и какая бизнес-логика (и бизнес ли) сюда привела — не знает никто. И на разматывание вот этого всего уходит куда больше времени, чем на понимание «что здесь происходит без комментариев».
Это не просто легаси, это еще и хреново написанный код. Сам поддерживал огромную кодовую базу, насмотрелся на эти потайные ходы и граблями и наскальными рисунками описывающими как это работает.
Всегда одни проблемы:
Нужен рефакторинг, но нет никакой возможности покрыть тестами код (иногда даже технической), и выделить ресурсы под этот рефакторинг, потому что нет средств.
И второе, это команда. Если этот код написала текущая команда, без изменения состава команды чтобы поднять экспертизу почти нет шансов это выправить, потому что получится в очередной раз ботва, а не код.
Поэтому часто требуются значительные меры чтобы оживить проект, но лидам страшно этим заниматься (тесты, управление, рефакторинг, риски, прочее), и это третья проблема, которая делает код еще больше легаси, и бородой.
Вобщем, замкнутый круг, который надо разрывать, но делают это совсем немногие.
Я всегда такой совет даю:
Код это книга. Если вы не можете её прочитать, не понимаете её, или ломаете язык при чтении, значит есть проблемы.
Ребята пишут по-разному. У первых архитектура страдает, у вторых кодирование, у третьих наименования, у четвертых всего понемногу, и этот совет выше, вероятно, помогает во многих случаях.
https://www.sonarsource.com/docs/CognitiveComplexity.pdf
Вот полезная не большая книжка, с примерами
Code smells обычно переводят мягче, например как "код с душком".
Вот еще полезный ресурс от Страуструпа по С++
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-introduction
о каких кодогенераторах идёт речь?
Если вопрос про конкретный софт, то лично мне по душе SAP PowerDesigner. Там, конечно, много ограничений накладывается, но для описания своей ни на чем не завязанной библиотеки вполне приличное решение.
Если совсем базово, то можно выделить три уровня красоты кода:
И ни один из них к красивому коду никакого отношения не имеет. Замечательно.
Что такое красивый код и как научиться его писать