программистское: о красивом коде
Aug. 3rd, 2007 01:08 pmПрочитайте вот это, коллеги.
Там - Горькая Правда.
(но стоит прочитать полностью)
Там - Горькая Правда.
A lesson I have learned the hard way is that we aren’t smart enough. Even the most brilliant programmers routinely make stupid mistakes. Not just typos, but basic design errors that back the code into a corner, and in retrospect should have been obvious. The human mind can not grasp the complexity of a moderately sized program, much less the monster systems we build today. This is a bitter pill to swallow, because programming attracts and rewards the intelligent, and its culture encourages intellectual arrogance.
(но стоит прочитать полностью)
no subject
Date: 2007-08-03 10:20 am (UTC)no subject
Date: 2007-08-03 11:07 am (UTC)no subject
Date: 2007-08-03 10:33 am (UTC)Без сверхинтеллектов ничего не получится.
no subject
Date: 2007-08-03 11:50 am (UTC)Профессия "программист-археолог", например. Специалист по добыванию знаний из уровней системы, написанных сотню и более лет назад. Вроде бы все исходники есть, вся документация наличествует. Но профессия, тем не менее, важная :)
no subject
Date: 2007-08-03 10:40 am (UTC)no subject
Date: 2007-08-03 11:43 am (UTC)Потом выясняется, что в похожих ситуациях мы вынуждены писать одно и то же. Почти copy-paste (а иногда и не "почти"). Досадно, но оказывается, что таких ситуаций примерно миллион.
Чтобы писать такие места быстрее и с меньшим числом опечаток, мы объединяем часто встречающиеся последовательности и выносим общую функциональность в отдельные сущности (функции, классы, макросы, шаблоны, generic'и, или даже тьфу-тьфу не дай бог аспекты).
И тут выясняется, что каждый такой конструкт первого порядка хочется потом fine-тюнить. Потому что вот в этом интерфейсе теперь надо показывать пункты не выпадающим списком, а плоским. А вот эта надпись должна быть полупрозрачной. Что значит "нельзя"? Какая-такая "архитектура"?
Появляется некоторый язык настройки этих сущностей второго рода. Аггрегация вместо наследования, декораторы, общие интерфейсы вместо общего предка.
Тут в проект приходит новый программист, и...
no subject
Date: 2007-08-03 06:58 pm (UTC)no subject
Date: 2007-08-06 07:04 am (UTC)no subject
Date: 2007-08-03 10:46 am (UTC)и наповал убивают фразы пользователей типа "мы же знаем, это можно сделать!"... специалисты, блин...
а в области программирования столько напридумывали за последние 30 лет, что разобраться в этом одному человеку просто физически невозможно... только в маленькой части всего этого бардака...
no subject
Date: 2007-08-03 05:18 pm (UTC)и наповал убивают фразы жильцов типа "мы же знаем, это можно сделать!"... специалисты, блин...
а в области сантехники столько напридумывали за последние 30 лет, что разобраться в этом одному человеку просто физически невозможно... только в маленькой части всего этого бардака...
no subject
Date: 2007-08-03 07:11 pm (UTC)(no subject)
From:no subject
Date: 2007-08-03 11:10 am (UTC)1) Я не совсем понял, откуда возникает противопоставление "beauty vs straightforwardness and conventionality". Дизайн imo красив именно тогда, когда не переусложняет систему неоправданно, и не дает возможности "глупо ошибиться". Собственно, когда соблюден баланс coupling vs cohesion, и хороша система раннего обнаружения ошибок (строгая типизация, testability и тп).
2) Но этого совсем недостаточно; надо еще и формулировать требования к системе в такой форме, и таким способом, чтобы излишняя сложность не была заложена в самих исходных требованиях.
У нас в программировании игр второй пункт в разы важнее первого, хотя без первого тоже нельзя.
Я об этом как-то написал статью для гейм-дизайнеров (это аналог аналитиков в разработке игр). Некоторые люди, которые ее потом перепечатывали, писали, что область ее применимости шире, чем я думал.
С добрым утром!
Date: 2007-08-03 11:40 am (UTC)Re: С добрым утром!
Date: 2007-08-03 11:46 am (UTC)Re: С добрым утром!
Date: 2007-08-03 12:01 pm (UTC)no subject
Date: 2007-08-03 11:59 am (UTC)Камон, 18-й век уже окончился, сложные технические проблемы решают путем декомпозиции и использования процессов, а не раскалыванием бриллиантовой головой гения
no subject
Date: 2007-08-03 12:15 pm (UTC)От магического слова "декомпозиция" вся сложность проблемы съеживается и улетучивается, а если его повторить три раза, с использованием процессов, так просто тридцать три богатыря выходят из моря и все делают за полчаса.
no subject
Date: 2007-08-03 12:39 pm (UTC)Сложность проблемы от декомпозиции не съеживается, а скорее наоборот, раздувается. Просто ее становится возможным grasp. Вот и все. Остается декомпозицию из магического слова превратить в обыденный инструмент software development
Опять же, автомобилестроение прошло этот путь в обозримом прошлом - от какого-нибудь гениального
August Horch, в одиночку проектировавшего автомобили, до современных платформ и компонентов
(no subject)
From:no subject
Date: 2007-08-03 01:00 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-08-03 12:21 pm (UTC)в программировании — от силы тринадцатый: по каким именно границам декомпозицию производить не всегда понятно,
а большая часть процессов недалеко ушла от камлания.
сараи для дров строить уже научились, впрочем. и тачки.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-08-03 05:57 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-08-03 03:31 pm (UTC)Написанная видавшим жизнь прагматиком, этаким Экклезиастом software engineering:)
no subject
Date: 2007-08-03 09:41 pm (UTC)(Приятно и то, что по крайней мере три автора работают прямо под боком :)
no subject
Date: 2007-08-06 12:02 pm (UTC)Ну это все Лем хорошо описал.