Как стать автором
Обновить

Комментарии 38

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

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

читабельный код

Это уже очень абстрактно. Одному читабельный, другому не читабельный.

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

Я так и делаю =)

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

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

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

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

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

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

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

Существует =)

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

IsThisStringHaveOneNumber(str)

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

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

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

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

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

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

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

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

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

Так не бывает. 

Общая теория систем.

Она исследует системы в общем, в отрыве от конкретизации систем.
так же и чистый код, можно рассматривать в отрыве от языка, используя общий какой то язык для описания. И такие есть.

Но правды ради сказать, для этого нужен формальный язык.
например у Уемова это язык тернарного описания.

> Кто эти мифические все? 
не мифические, а абстрактные.

Все кому это надо. Это дастаточно определенно. Что бы быть достаточным.

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

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

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

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

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

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

Это хороший код, но не идеальный.
Идеальный код, это код который идеально взаимодействует с кодом ещё других программ.

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

Ну почему ?
Например, есть функция, которая обрабатывает строки.

Во втором приложение нужна эта же функция, что бы обрабатывала числа.

пишется функция, которая обрабатывает и числа и строки.

Второй вариант более идеален, чем первый.

И нахрена это кому-то надо?


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

Как пример я знаю программистов, которые пишут лучше всех, но написать то то конкретное не могут.

Например на одной работе была такая последовательность действий.

* Дают задачу
* Описываешь как ты её будешь делать
* Апрувят описание
* Пишешь реализацию

Это достаточно хороший метод. Процентов 70 -80 ошибок исчезают на стадии описания.

Такие размышления дают четкое понимание, что такое хороший код.
Это уменьшает время разработки.
Если комманда из 5 чеовек точно знает одинакого, что такое хорошо, а что плохо, тогда код ревью будет занимать 1 минуту.

Да много где это требуется.
Можно конечно без этого. Будет все то же самое, но код будет развиваться в зависимости от чьего то мнения, которое может быть правильным, а может и не быть.

> у меня никогда не было такой потребности

А у меня небыло потребностей использовать матрицы или разыминование указателя...Но это не значит, что это бесполезные вещи.

> А раз вы не знаете, куда вы хотите попасть

Неправильно. Понимание куда хочется попасть есть. нет четкого пути для достижения этого.

Например у нас страна строила коммунизм 70 лет. Они знали что хотят, но не знали как к этому придти.

Это понятие идеала из эстетики.

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

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

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

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

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

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

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

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

А хорошо в статье минимум, и все по теме.

Эта тема очень близка к общей теории систем.
Если искать ответ на вопрос, что такое объект и что такой чистый код, Можно это попробовать сделать на основе трудов Уемова

Идеальный код -- не существует, но работает.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории