au>> Хороший программист пишет хороший код — это единственный критерий оценки.Balancer> Именно так. А вот критерий «хорошего кода» уже далеко не однозначен (не путать с «идеальным кодом»).
Однозначен
Хороший код — это код, который удовлетворил заказчика кода. Для АМС это надёжность. Для игры-однодневки это что-то совсем другое. Но в любом случае заказчик говорит "хорошо" или нецензурно — это момент однозначности.
С заказчиком тоже не всё просто, он обычно не знает чего вообще хочет, но зафиксировать требования — вопрос контрактных отношений, а не программирования или любой другой работы. Никто из разработчиков не примет требования "сделать мост на 30% длиннее", когда он уже строится. У программистов с этим трудно, особенно трудно с этим у дебилов из отделов продаж, маркетинга и прочих передовиков дэволюции.
Balancer> Код в общем случае не может быть правильно работающим, быстрым, красивым внутри и снаружи (в виде программы), понятным, легко поддерживаемым и быстро пишущимся.
В такой форме утверждение справедливо. Но почему он должен быть красивым внутри и быстро пишущимся? Я вот ставил требования, мне сказали что сделают за пять недель. Сделали за пять месяцев, причём ТЗ менялось только в сторону упрощения (блоками работы) и до того как эти части начинали разрабатываться. И всё равно вот так получилось. Что с ними делать? Спрос превышает предложение, так что никакого стимула и дисциплины у них нет.
А насчёт интерфейса, во-первых он нужен далеко не везде, но его везде зачем-то впихивают. Помнишь типичный интерфейс поисковика? Куча всевозможной фигни, от которой глаз уворачивается. А потом дизайнер всея руси сделал ya.ru. А теперь я вообще пишу в строку броузера "g ищу тот-то", и не хожу ни на какие страницы поисковиков. Вот она, красота.
Balancer> — Пишем высоко надёжный код и он оказывается недостаточно эффективен в рамках имеющейся аппаратуры.
Добавить цилиндров, но не в последний день, а в самом начале. Заложить запас 100% по основным параметрам: скорости, памяти, портам, чему угодно. На тупые вопросы ответ один: нужно столько.
Balancer> — Делаем высокую оптимизация и получаем плохо расширяемый код, на котором при последующей модификации зевнём хитрую ошибку
Замораживать дизайн. Расширять только блоками расширения, пока не достигнут предел. То что написано и работает, не трогать уже никогда.
Balancer> — Пишем наглядный документированный код и не укладываемся в сроки разработки
Заложить запас 100% по срокам.
Balancer> И так далее, и тому подобное.
И так далее
Разве это трудно?
Balancer> А ошибки в нормальном ответственном проекте, кстати, вообще не программист должен ловить. Построение модели функционирования, разработка и написание тестов покрывающих её — это, вообще, работа целого отдельного коллектива. Который ничем, кроме тестов заниматься не будет.
До определённого предела это так. Но если программист делает одни лишь ошибки, так что целая группа их за ним ловит и исправляет, программиста надо просто заменить, он дефектный. Если ошибок одна на 100 линий кода, тогда по-твоему, и будет хорошо. Примерно такая цифра достигается через Ravenscar и его методы — на порядок меньше ошибок, меряли.
Balancer> И в итоге программист зевнёт дедлок при редком сочетании параметров, тестировщики не предусмотрят один из выходов за пределы оптимальных параметров, разработчики железа не предусмотрят аппаратного ограничения, а корабль запустят с небольшими отклонениями от заданных параметров. И система навернётся. Кого потом винить в этом?
Всех перечисленных без разбора. Это результат их коллективного труда.