Pull to refresh

Comments 38

Чистый код — это примерно такой же розовый пони, как ISO OSI. Прекрасно подходит для теоретического описания чего бы то ни было, но будучи воспринятым литерально порождает чудовищ.

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

UFO just landed and posted this here

Часто слышу такое мнение в англоязычном комьюнити. В целом мысль понятна, но это какое-то обобщенное утверждение. Что-то сродни «все субъективно».

Имхо, читабельный код – это скорее составной феномен. Поэтому и критерии ему дать сложно. Кто-то даже пытается с условным cognitive complexity анализом, но многим он не нравится. И не без причин.

Но я тут в особого умника играть не буду, так как сам для себя еще в этом вопросе не определился :)

Читабельный по мне - это стремление к простоте, чтоб тебя и студент и гуру понимали, и старпер и суперстар на острие, а если начинаются навороты с алгоритмами или переподвывертом новых технологий - то бывает и очень красиво, и элегантно, и "браво" хочется крикнуть, но у половины команды ужас в глазах :-D.

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

А то так можно до абсурда довести - код должен быть понятным даже тому, что читать не умеет - т.е. в виде комиксов.. правда комиксы тоже читать надо уметь..

Есть притча, что когда покупают дом - в первую очередь приобретают соседей. Поэтому, и фундамент будет хорошим и строители все сделали правильно, но жить невозможно. Так и с кодом.

UFO just landed and posted this here

Очень помогает возвращаться к своему коду двух-трехлетней давности. Я фрилансер, так сказать, "в одно лицо" программирую. И то бывает мурашки по коже, когда читаешь своей старый код. Первая мысль - "ну какой дебил это писал вообще!". Прямо хорошо помогает сравнивать итерации в типовых задачах и совершенствовать их, добиваясь близости к идеалу. А "белоснежный код" есть. Это тот код который написали, но ни разу не запускали. Вещь в себе. Идеальная. Само совершенство.

Это тот код который написали, но ни разу не запускали. 

Ну да, никому не нужный )

Кстати некоторый левелап был когда я понял, что от старого кода перестало воротить.

Ну то есть всратенький, но ок, понять можно

Возможно конечно просто перестал расти, как минимум в этом направлении

Вот последние лет 15 уже на плато восприятия. Временами даже с цитатами из Уэллса: "Шесть, маленькое два сверху, крестик и закорючка. Господи, вот голова была!"

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

После этих изысканий у меня нет чувства что мой старый код воняет, но соблюдение стиля в итоге превращается в рутину. Я просто хочу написать класс обёртку, а в итоге надо прописать все мета-свойства явно, указать где какие конструкторы-операторы, а лишь потом написать int x; int y;//members

ЗЫ а чистый код, о котором любят говорить, не существует. Если ты пишешь чисто, то значит что в 70% этот код нельзя расширить, в итоге надо либо переписывать либо фигню поверх писать. Есть практики пилить на всё подряд функции, но это превращается в итоге в IsThisStringHaveOneNumber(str), рано или поздно.

А мне больше нравится как вы сказали

IsThisStringHaveOneNumber(str)

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

Скорее это код, который Не написали. Он чистый и прозрачный :)

Показываю код Codemium, и прошу объяснить, что там происходит. Если описывает в терминах доменной области, а не в терминах функций, переменных и их манипуляций, то ок =)

Я попытаюсь разобраться в том, что такое чистый код сам по себе, в отрыве от языков, парадигм и сфер применения. 

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

Это то, что все ищут, но никто не может найти.

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

иногда получается понятным, простым, а иногда - нет?

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

UFO just landed and posted this here

Все кому это надо.

И нахрена это кому-то надо? Понимаете, недостаток данной статьи именно в том, что не указано, что за проблему автор пытается решить. И вы ее тоже не сформулировали. Зачем вам чистый код? Чтобы что?

Поэтому я и говорю, что на практике у меня никогда не было такой потребности - получить чистый код. И я такой не один.

А раз вы не знаете, куда вы хотите попасть, то вам все равно, в какую сторону пойти (почти цитата).

Зачем вам чистый код? Чтобы что?

Чтобы реализовывал ровно то, что описано в ТЗ и делал это рационально. Чистый код - это код, в который нечего добавить, и нечего исправлять.

UFO just landed and posted this here

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

UFO just landed and posted this here
UFO just landed and posted this here

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

Слово «код» по определению подразумевает использование конкретного языка программирования. Собственно, вы и сами пишете, что для рассмотрения системы в отрыве от языка нужно использовать... другой язык. То, что этот язык не используется непосредственно программистами для написания программ, ничего не меняет.

Это то, что все ищут, но никто не может найти.

Я не ищу чистый код. Ищу внятную доку или хорошие комментарии. А если все работает, стараюсь не лезть по капот.

что такое чистый код сам по себе, в отрыве от языков

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

Отсюда я делаю вывод что красиво писать - про язык, про наличие гайдов в публичном доступе на тему «как правильно».

Мне статья не понравилась, вода водой, про высокие материи и без понимания предмета

UFO just landed and posted this here

Белоснежно чистый код - это настоящий код. Код выгодный компьютерам и пользователям. Пример кода https://github.com/arvidn/libtorrent

И ещё есть говнокод. Думаю, вы знаете.

И корпоративный код - код выгодный предприятиям.

Возможно есть что-то ещё. Но эти три вида кода - база.

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

Для поиска оптимального решения, нужно сделать сразу несколько решений:

1) С минимальным изменением кода и с костылями. Такие решения допустимы во время хотфиксов, но вещает тех.долг. На практике такое решение потребует значительно больше времени даже чем другие.

2) Идеальное решение. Решение по правилам чистого кода, без костылей с неограниченым рефакторингом и времени, либо решение согласно пейперу.

3) Гениальное решение. Решение с минимальными изменениями, после которого кода становится меньше чем было. Быстрое и простое, которое одновременное решает множество проблем.Такое решение теоритически существует всегда.

4) Ленивое решение. Решение ничего не делать, задача решиться сама собой. На удивление , это самое частое решение, если гениальные решений были до этого.

Комбинация из 4-х решений и даст оптимальное решение. Грязный код не позволит сделать 2, 3 4, в нем возможно только решение 1.

ЧК - это очень субъективное дело, сложно договориться что является им, а что нет. Зато вот грязный код обычно легко распознается, и по нему разногласий меньше. Самое забавное, что грязный код очень часто является результатом фанатичной погони за чистотой кода. Когда на ровном месте начинают лепить в код паттерны десятками, связывают все это какими-то лишними абстракциями, навернутыми чисто с мыслью "а вдруг потом пригодится", получается именно он - грязный код.

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

Ощущение, что текст сгенерирован нейросетью.

Пожалуй, поддержу. И не только статья, но и часть комментариев. Удивительно, но почему не затронута одноименная с темой книга. (Роберт Мартин - Чистый код), там довольно хорошо раскрыта тема. З. Ы. Даже если примеры противоречат, скажем так, идеологии других ЯП

Мне больше нравится писать красивый код. Далеко не всегда получается, правда :-)

Sign up to leave a comment.

Articles