программистское: о красивом коде
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 10:33 am (UTC)Без сверхинтеллектов ничего не получится.
no subject
Date: 2007-08-03 10:40 am (UTC)no subject
Date: 2007-08-03 10:46 am (UTC)и наповал убивают фразы пользователей типа "мы же знаем, это можно сделать!"... специалисты, блин...
а в области программирования столько напридумывали за последние 30 лет, что разобраться в этом одному человеку просто физически невозможно... только в маленькой части всего этого бардака...
no subject
Date: 2007-08-03 11:07 am (UTC)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)no subject
Date: 2007-08-03 11:43 am (UTC)Потом выясняется, что в похожих ситуациях мы вынуждены писать одно и то же. Почти copy-paste (а иногда и не "почти"). Досадно, но оказывается, что таких ситуаций примерно миллион.
Чтобы писать такие места быстрее и с меньшим числом опечаток, мы объединяем часто встречающиеся последовательности и выносим общую функциональность в отдельные сущности (функции, классы, макросы, шаблоны, generic'и, или даже тьфу-тьфу не дай бог аспекты).
И тут выясняется, что каждый такой конструкт первого порядка хочется потом fine-тюнить. Потому что вот в этом интерфейсе теперь надо показывать пункты не выпадающим списком, а плоским. А вот эта надпись должна быть полупрозрачной. Что значит "нельзя"? Какая-такая "архитектура"?
Появляется некоторый язык настройки этих сущностей второго рода. Аггрегация вместо наследования, декораторы, общие интерфейсы вместо общего предка.
Тут в проект приходит новый программист, и...
Re: С добрым утром!
Date: 2007-08-03 11:46 am (UTC)no subject
Date: 2007-08-03 11:50 am (UTC)Профессия "программист-археолог", например. Специалист по добыванию знаний из уровней системы, написанных сотню и более лет назад. Вроде бы все исходники есть, вся документация наличествует. Но профессия, тем не менее, важная :)
no subject
Date: 2007-08-03 11:59 am (UTC)Камон, 18-й век уже окончился, сложные технические проблемы решают путем декомпозиции и использования процессов, а не раскалыванием бриллиантовой головой гения
Re: С добрым утром!
Date: 2007-08-03 12:01 pm (UTC)no subject
Date: 2007-08-03 12:15 pm (UTC)От магического слова "декомпозиция" вся сложность проблемы съеживается и улетучивается, а если его повторить три раза, с использованием процессов, так просто тридцать три богатыря выходят из моря и все делают за полчаса.
no subject
Date: 2007-08-03 12:21 pm (UTC)в программировании — от силы тринадцатый: по каким именно границам декомпозицию производить не всегда понятно,
а большая часть процессов недалеко ушла от камлания.
сараи для дров строить уже научились, впрочем. и тачки.
no subject
Date: 2007-08-03 12:29 pm (UTC)no subject
Date: 2007-08-03 12:39 pm (UTC)Сложность проблемы от декомпозиции не съеживается, а скорее наоборот, раздувается. Просто ее становится возможным grasp. Вот и все. Остается декомпозицию из магического слова превратить в обыденный инструмент software development
Опять же, автомобилестроение прошло этот путь в обозримом прошлом - от какого-нибудь гениального
August Horch, в одиночку проектировавшего автомобили, до современных платформ и компонентов
no subject
Date: 2007-08-03 12:45 pm (UTC)no subject
Date: 2007-08-03 12:52 pm (UTC)физика такой роскоши до последнего времени не позволяла, да и сегодня ещё далеко не везде позволяет. и закон Мура сломался на самом интересном месте.
no subject
Date: 2007-08-03 01:00 pm (UTC)no subject
Date: 2007-08-03 01:09 pm (UTC)TCP/IP, SQL, нет, это слишком сложно. Threads, new/delete, garbage collection, нет, что там, это тоже слишком advanced. Высокоуровневые языки программирования, file system, OS вообще как таковые, etc etc. Даже и это не болты-гайки, это концепты куда как сложнее. Болты-гайки - это уровень стандартизации character encoding'ов, наверное.
Ну и еще насчет болтов-гаек - знаете, как устроен аналог С-шного strcmp в C#? А это ведь болт болтее некуда, казалось бы?
no subject
Date: 2007-08-03 01:17 pm (UTC)волка, козу и капусту20 танков по узкому мосту через речку так, чтобы данный процесс у пользователя не вызывал раздражения. Ну, понятно, речь не только о мосте, речь о pathtracking вообще.Ее не смог решить Westwood, ее не умеет решать EA, Blizzard, THQ, Nival, etc etc.
Вообще, адресовать человеку из Google комментарий, что все инженерные проблемы уже решены - немного смешно. Свое бизнес-преимущество эта компания получила именно потому, что ее сотрудники решили довольно много инженерных проблем, которые до них решены не были.
no subject
Date: 2007-08-03 01:31 pm (UTC)Если я решил, что здесь в программе будет thread, проектирование только начинается - а какие у меня threads? pthreads? Windows? Какая-то библиотека с своей семантикой?
Я уж не говорю про SQL ..
no subject
Date: 2007-08-03 01:36 pm (UTC)Просто есть такой удивительный факт - сравнение двух строк устроено принципиально по-другому.
Да поправят меня шарпники, если последующее вдруг является глупостью, ибо я только догадываюсь, и не знаю в точности.
Так вот, насколько подозреваю, в C# это O(1) операция, что достигается совершенно другой стратегией хранения строк (у которой, соответственно, есть свои неприятные побочные эффекты). Тогда как в С/С++ это О(length).
Я даже не знаю, с чем это сравнить. Одна модель машин использует только болты, а другая - только заклепки. Наверное, так.
no subject
Date: 2007-08-03 01:38 pm (UTC)no subject
Date: 2007-08-03 01:40 pm (UTC)Про проблему танков я ничего не слышал, а пример слишком непонятный, чтобы что-то доказать. Впрочем, даже если эта проблема действительно существует и действительно так важна, возможно, вы знаете универсальный ответ: любую проблему можно решить с помощью неограниченных ресурсов, а реальная решаемость заключена в том, чтобы стоимость затраченных ресурсов была адекватна выгоде от решения.
P.S. Писать о том, что кому смешно адресовать - это смешно само по себе. Не находите?