Здравствуйте, mgu, Вы писали:
mgu>И это печально. Странно, что программистов не интересует блестящий код. Если проблему не замечают, это не значит, что её нет.
А "блестящий код" -- это не синоним ли "сферического коня в вакууме"?
ИМХО, код можно поделить на следующие категории:
* плохой код. Не делает то, что от него требуется. Либо делает, но только когда повезет. Либо делает, но вообще не отвечает поставленным требованиям (по быстродействию, потреблению ресурсов, использованию сторонних библиотек и т.д.). Плохой код подлежит замене. По определению.
* так себе код. Делает то, что требуется. И более-менее в рамках требований. Но в котором есть хорошо заметные и объективные проблемы: игнорирование ошибок, злоупотребление копипастой, глубокие иерархии наследования, сильная связность, паттерны ради паттернов, и т.д., и т.п. Т.е. есть вполне понятные пути улучшения кода. Показанный в этой теме код от Marty попадает в эту категорию (он работает, но написан с использованием глобальных переменных и без контроля успешности выполняемых операций, поэтому понятно, как этот код можно улучшить). Так себе код может жить в проекте сколь угодно долго, накапливая технический долг. Ибо обосновать необходимость его улучшения получается далеко не всегда.
* нормальный (хороший код). Делает то, что требуется. Не содержит явных косяков. Понятен. Оставляет возможность развития со временем.
Ну и есть говнокод -- это нечто, что хз как и почему работает, что хз как поддерживать и развивать. И в который никто не хочет вляпываться.
При этом по мере развития проекта какие-то его куски могут переходить через все перечисленные выше градации (в любом направлении).
UPD. Люди с разным уровнем знаний, длиной опыта и шириной кругозора могут отнести один и тот же код к совершенно разным категориям.
Что такое блестящий код -- хз.
Еще можно понять, что такое "блестящее решение". Например, когда неожиданно применяется какой-то подход/алгоритм/структура данных для того, чтобы оптимально вписаться в имеющиеся ограничения. Решение, которое вызывает вау-эффект, которое не лежит на поверхности. Скажем, когда ради экономии каждого байта памяти список строят на XOR-е указателей. Только вот не обязательно "блестящее решение" будет воплощено в жизнь даже в виде так себе кода.
mgu>Так посмотрел же, сало как сало, ничего выдающегося.
Что означает термин "сало"?
mgu>У меня несколько другая сфера деятельности: я обычно не намолачиваю код, а делаю так, чтобы он быстро и надёжно работал. Время, конечно, ограничено, поэтому я успеваю пройти только часть пути, заказчика уже устраивает результат, а меня -- нет.
Ну прям униальная специализация. Если вас не устраивает то, что вы сами делаете, то это ваши личные заморочки. Которые, возможно, следует решать с помощью специалистов из области психиатрии.
Здравствуйте, sergey2b, Вы писали:
S>я видел хорошие примеры кода
Вот всегда так, кто-то видел, кто-то слышал, кто-то знает того, кто знает того, кто знает того, кто видел издалека того, кто пишет хороший код. Похоже на легенду: где-то далеко-далеко, на древнем дубе, висит ларец на урановых цепях, в ларце заяц, в зайце утка, в утке яйцо, а в яйце в заброшенном дата-центре есть комната, а в ней сервер, в нем флешка с идеальным кодом.
Вспомнилось: проскакивала такая статейка (перевод) — "Исключительная красота исходного кода Doom 3" https://habr.com/ru/post/166113/
Правда, я не плюсовик и не игродел, так что даже не читал.
Но, по крайне мере, кого-то когда-то какой-то код в восторг приводил — бывало.
Мне же кажется, что код может сильно впечатлить, только если увидишь в нем что-то новое и интересное, доселе неизведанное, если можно что-то почерпнуть в нем для себя. Получается, вероятность получить такие впечатления для программиста больше на заре его карьеры, а с приобретением знаний и опыта эта вероятность всё меньше и меньше.
Здравствуйте, so5team, Вы писали:
mgu>>И это печально. Странно, что программистов не интересует блестящий код. Если проблему не замечают, это не значит, что её нет.
S>А "блестящий код" -- это не синоним ли "сферического коня в вакууме"?
Ну, бывают же блестяшие стихи, хотя бы у Нашего Всего, хотя и у него много отходов.
S>ИМХО, код можно поделить на следующие категории:
S>* нормальный (хороший код). Делает то, что требуется. Не содержит явных косяков. Понятен. Оставляет возможность развития со временем.
S>Ну и есть говнокод -- это нечто, что хз как и почему работает, что хз как поддерживать и развивать. И в который никто не хочет вляпываться.
Хм... Получается, что такой код:
if (a)
return true;
else
return false;
...по вашей классификации нормальный, а по моей -- кусок кала.
S>UPD. Люди с разным уровнем знаний, длиной опыта и шириной кругозора могут отнести один и тот же код к совершенно разным категориям. S>
Естественно!
S>Что такое блестящий код -- хз.
S>Еще можно понять, что такое "блестящее решение". Например, когда неожиданно применяется какой-то подход/алгоритм/структура данных для того, чтобы оптимально вписаться в имеющиеся ограничения. Решение, которое вызывает вау-эффект, которое не лежит на поверхности. Скажем, когда ради экономии каждого байта памяти список строят на XOR-е указателей. Только вот не обязательно "блестящее решение" будет воплощено в жизнь даже в виде так себе кода.
"Блестящий код" -- частный случай "блестящего решения". К последнему, например, может относиться использование встроенной конструкции вместо аналогичного велосипеда.
mgu>>Так посмотрел же, сало как сало, ничего выдающегося.
S>Что означает термин "сало"?
Здравствуйте, kaa.python, Вы писали:
mgu>>>Так посмотрел же, сало как сало, ничего выдающегося.
S>>Что означает термин "сало"?
KP>Высококачественный жир тролля
Здравствуйте, Dym On, Вы писали:
DO>Здравствуйте, sergey2b, Вы писали:
S>>я видел хорошие примеры кода DO>Вот всегда так, кто-то видел, кто-то слышал, кто-то знает того, кто знает того, кто знает того, кто видел издалека того, кто пишет хороший код. Похоже на легенду: где-то далеко-далеко, на древнем дубе, висит ларец на урановых цепях, в ларце заяц, в зайце утка, в утке яйцо, а в яйце в заброшенном дата-центре есть комната, а в ней сервер, в нем флешка с идеальным кодом.
Да, чересчур много людей видели Ленина и дружили с Высоцким, однако они не мифические персонажи.
Здравствуйте, L_G, Вы писали:
L_G>Мне же кажется, что код может сильно впечатлить, только если увидишь в нем что-то новое и интересное, доселе неизведанное, если можно что-то почерпнуть в нем для себя. Получается, вероятность получить такие впечатления для программиста больше на заре его карьеры, а с приобретением знаний и опыта эта вероятность всё меньше и меньше.
Вероятность ниже, зато какой восторг! Если сравнить с биологами: "О, трилобит, прямо как в учебнике!" или "Да это же недостающее звено в эволюции! И притом живёт в наше время!!!"
mgu>Код обычный, не знаю, что в нём можно улучшить.
Да, код-то пованивает. И названия у пары переменных стремные, и смысл использования миллисекунд в этих расчетах ускользает, а никаких пояснений в коде нет. Не говоря уже о том, что сама суть существования поля "age" при наличии даты рождения ускользает. Уж не профессиональный ли вы говнокодер, батенька?
Здравствуйте, mgu, Вы писали:
mgu>Ну, бывают же блестяшие стихи, хотя бы у Нашего Всего, хотя и у него много отходов.
Как минимум, к стихам не предъявляют требований быть однозначно воспринимаемыми и пригодными к дальнейшей модификации.
mgu>Хм... Получается, что такой код:
mgu>
По-моему здесь недостаточно данных для классификации этого фрагмента, а именно:
* на каком ЯП он написан;
* в каком контексте он употреблен;
* что за тип у a;
* какой code style и code guidelines используется в проекте.
В зависимости от ответов на эти вопросы данный фрагмент может быть как нормальным, так и подлежащим замене на что-то из нижеследующего перечня (в предположении, что это код на C++):
return a;
if (a)
return status::in_progress;
else
return status::completed;
if (a != 0) {
return true;
}
else {
return false;
}
return (a != 0);
mgu>а по моей -- кусок кала.
А вас нужно лечить.
mgu>"Блестящий код" -- частный случай "блестящего решения". К последнему, например, может относиться использование встроенной конструкции вместо аналогичного велосипеда.
Т.е. вот это блестящий код:
for(auto & t : threads) {
deactivate(t);
}
а вот это уже нет:
for(threads_container::iterator it = threads.begin(), end = threads.end(); it != end; ++it) {
deactivate(*it);
}
Здравствуйте, so5team, Вы писали:
S>Да, код-то пованивает. И названия у пары переменных стремные, и смысл использования миллисекунд в этих расчетах ускользает, а никаких пояснений в коде нет. Не говоря уже о том, что сама суть существования поля "age" при наличии даты рождения ускользает. Уж не профессиональный ли вы говнокодер, батенька?
Очевидно же, что нет: у профессиональных говнокодеров всё на редкость тупо и понятно.