еще не постили? )
Идеальный код должен легко читаться, максимально просто меняться, требовать минимума времени на первичное написание и при всём при этом ещё и никогда не глючить при исполнении. Если хоть одним свойством код не обладает, то он как минимум не идеален. Не можешь достичь идеала на большом сложном проекте? Эйси. Хотя бы стремись к идеалу, чем ближе твой код к нему будет, тем, соответственно, он будет дальше от дряни. Ну а проекты уровня
10 INPUT "x=";x 20 LET y=SIN(x) 30 PRINT "y=";y 40 GOTO 10
Kartonagnick
> А вот если бы вы разрабатывали его полностью с нуля
Наверное да
Дык в этом и прикол - не был бы я директором и не стоила бы ничего наша команда - если б у меня не было коллосального опыта в системах безопасности :)).
Моя идея проста:
1) разрабатываем общую арх. приложения.
2) декомпозируем задачу на мелкие
3) раздаем народу по задачке
4) все начинают писать - причем чем быстрее тем лучше(пофиг на говнокод)
5) как основные вещи готовы - пытаемся собрать лего
6) тестирование внутри отдела разработки
7) отдаем тестировщикам
8) правим критичные баги - на некритичные забиваем
9) тестируем ещё раз
10) сборка дистрибутива
11) документация (паралельно со свеми пунктами - например пишут тестировщики в свободное от тестов время)
12) релиз 1.0
13) продажи :))
14) делим команду на багеров и фичеров
15) фичеры дальше говнокодят новые задачи
16) багеры на тех поддержку - и в фоне рефакторят говнокод....
....
....
....
N) Релиз 2.0 или хотябы 1.1
....
....
....
N+100500) Утопия, светлое будущее и свет в конце тоннеля - продукт хорошо продается и совсем без говнокода :)))))))))))))))
это конечно оочень грубо и многие моменты пропущены - но как-то так.
Xunter
> еще не постили? )
Во! Вотафаки-в-минуту - самое оно для измерения говнистости кода!
killbot [Mike P]
> Вотафаки-в-минуту - самое оно для измерения говнистости кода
Кармаковский глядел?
там даже в комментах не редкость : )
я всё-таки придерживаюсь мнения, что говнокод это не то, что непонятно рядовому программасту (читай другому говнокодеру), а то, что несоразмерно оптимальному решению задачи, как по количеству кода, так и по быстродействию, а то бывает, что много "говнокода" работает быстрее, нежели очень заумное ООП
fsmoke испортил мне настроение.
Кажется придётся всю жизнь ездить на триальном моде вместо спорткара и писать говно.
Division
> Кажется придётся всю жизнь ездить на триальном моде вместо спорткара и писать
> говно.
«Тебе нужно бежать изо всех сил, чтобы оставаться на том же месте. Если ты хочешь получить что-нибудь еще, то ты должна бежать в два раза быстрее»
Л. Кэрролл «Алиса в стране чудес»
Никто не сказал про одну вещь, которой обладает хороший код - симметрией. Соот-но, плохой код - ассиметричен.
Симметрия, про которую я говорю, заключается в поиске и приведении различных частей кода к максимальному подобию, так чтобы контрастно подчеркнуть имеющиеся в нем различия.
Самый простой пример функции InsertBefore/InsertAfter. Каждую можно сделать разными способами, но фишка в том, чтобы сделать обе идентичными между собой, а вариантами только в значениях выражений, а структура (топология) кода была одинакова. Но это очевидный пример, а есть множество других, где симметрия не так очевидна, ее сложно найти, но если нашел, то код становится намного проще и читабельней. Менее очевидным примером является оператор switch. В чем там симметрий ? В том, что условие case всегда - const int, а в if может быть все что угодно. Соот-но case-блоки обладают большей симметрией, более аналогичны и потому легче читаются.
Маг
> а вариантами только в значениях выражений, а структура (топология) кода была
> одинакова
это следствие ограниченности языка, в котором нельзя выделить "топологию кода" для повторного использования.
в идеале любые "симметрии" и подобия должны выражаться в чистом виде в терминах языка.
вообще http://en.wikipedia.org/wiki/Don't_repeat_yourself
- а самоповторения - это либо ограниченность средств языка, либо как раз признак говнокода.
идеальный код - "несжимаемый".
Barabus
У меня аналогичная ситуация - конвертер форматов моделей. Нагородил крутой ООП а потом стало понятно, что это притянуто за уши.
Программа слишком мала, достаточно языка С.
Гавнокод - код, который работает.
Хороший код - код, который вы собираетесь написать.
Pokimon
Любой код работает. Говнокодистость проявляется при попытке развивать или сопровождать код.
fsmoke
> 4 года назад группа гуру из бауманки пыталась повторить успех
"Cемён-на, мне вчера дед секис показывал под забором, так фигня он, секис этот."
Xunter
> это следствие ограниченности языка, в котором нельзя выделить "топологию кода" для повторного использования.
Извини, но ты, видимо, не совсем понял идею. Вот тебе пример кода, который я на днях написал:
Маг
Мерзость! Мерзкий код! Фу! Фу! Фу! Текст вообще не читабельный! Логика ветвлений вообще никак не очевидна!
Сразу чувствуется богомерзкое сишное наследние: фигурные скобки через жёпу, так, что бы без 100 грамм было не ясно, где блок начинается, а где заканчивается.
На что должны реагировать блоки, код - не документирует.
Вот тебе пример хорошего кода:
Тема в архиве.