Искусство программирования


Закон Любарского

  • Всегда есть еще одна ошибка.

    Аксиома Робертса

  • Существуют только ошибки

    Следствие Бермана

  • Что для одного ошибка, для другого - исходные данные.

    Пятый закон ненадежности

  • Ошибаться человеку свойственно, но окончательно все запутать может только компьютер.

    Первая Аксиома Компов

  • Чтобы ошибиться, достаточно компьютера, но чтобы действительно испортить все, нужен все-таки еще и человек.

    Третий закон Грида

  • Машинная программа выполняет то, что вы ей приказали делать, а не то, что бы в хотели, чтобы она делала.

    Первая компьютерная аксиома Лео Бейзера

  • Закладывая что-то в ЭВМ, помните, куда вы это положили.

    Руководство по системному программированию Штейнбаха

  • Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать.

    Постулаты Трумэна по программированию

  • Самая грубая ошибка будет выявлена, лишь когда программа пробудет в производстве, по крайней мере, полгода.
  • Контрольные перфокарты, которые не могут стоять в неправильном порядке, будут перепутаны.
  • Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобретательный идиот, который придумает способ, чтобы неправильная информация прошла через этот контроль.
    (Если бы контроллер ввода отвергал бы любую лажу, то нашелся бы гениальный идиот, который бы придумал, как его обдурить.)
  • Непечатный жаргон - это тот язык, которым решительно все программисты владеют в совершенстве.
  • Защита от "дурака" спасает только от неизобретательного дурака.
  • Если у Вас вдруг появляется гениальная идея, Вы ее тут же забываете, но если она неверна, то пытаетесь ее применить.
  • Если установка программы прошла нормально с первого раза, ничего не будет работать.

    Законы ненадежности Джилба

  • Компьютеры ненадежны, но люди еще ненадежнее.
  • Любая система, зависящая от человеческой надежности, ненадежна.
  • Число ошибок, которые нельзя обнаружить, бесконечно, в противовес числу ошибок, которые можно обнаружить, - оно конечно по определению.
  • В поиски повышения надежности будут вкладываться средства до тех пор, пока они не превысят величину убытков от неизбежных ошибок или пока кто-нибудь не потребует, чтобы была сделана хоть какая-то полезная работа.

    Закон Брука

  • Увеличение числа участников при подготовке опаздывающей программы только замедляет процесс.
    Прилагая усилия, когда заказной софт запаздывает, вы лишь еще более оттягиваете сроки его выпуска.
    Если программистский проект не укладывается в сроки, то добавление рабочей силы только задержит его окончание.

    Законы мира ЭВМ по Голубу

  • Неточно спланированная программа требует в три раза больше времени, чем предполагалось; тщательно спланированная - только в два раза.
    (Выполнение великолепно продуманного проекта занимает ровно в три раза больше положенного времени; на выполнение просто хорошо продуманного уходит всего в два раза больше времени.)
  • Усилия, прилагаемые для исправления ошибки, увеличивают ее в геометрической прогрессии по отношению к затраченному времени.
  • Работающая над программой группа питает отвращение к еженедельной отчетности о достигнутых результатах, поскольку она слишком явно свидетельствует об отсутствии таковых.

    Принцип Шоу

  • Создайте систему, которой сможет пользоваться дурак, и только дурак захочет ею пользоваться.
    (Сделай систему, с которой сможет работать даже дурак, и только дураки будуть с ней работать.)

    Закон компьютера применительно к АЛУ

  • Машина считает, человек принимает (решения,...)

    Закон Дикстры о Комповой Инерции

  • Если вы точно не знаете, что ваша програма должна делать - должно ли ее начинать?

    Закон Сатлингера

  • Компьютер будет работать лучше, если его включить

    Теоpема Бакупа

  • Для пеpезаписи любого пакета ПО всегда не хватает одной и только одной дискеты.

    Дополнение Овеpа -- Иншуpанса

  • Если дискет все же хватает -- число дефектных из них окажется не меньше числа оставшихся после записи плюс единица.

    Лемма Фуллбокса

  • Комплект дискет с копией софтвеpного пpодукта занимает целое число коpобок плюс одна-две дискеты. Последние с необходимостью теpяются.

    Теоpема Сетупа

  • Потеpять пеpвую загpузочную инсталяционную дискету невозможно.

    Следствие Лонгтайма

  • Если установка большого пpогpаммного пpодукта обламывается, то в 99.9% случаев -- когда две тpети инсталяционных дискет уже использованы.

    Топологическая гипотеза Ваpпа

  • Путем необъяснимого пока наукой искpивления пpостpанственно-вpеменного континуума, на копиpуемые дискетки обычно наносятся невеpные поpядковые номеpа. Отмечены случаи пеpемешивания и готовых нумеpованных наклеек. Hекотоpые исследователи утвеpждают, что опpеделенные концентpические конфигуpации магнитных полей пpиводят к пpоскальзыванию электpопpоводных пишущих пpиспособлений чеpез 4-е измеpение

    Лемма неpавномеpности Инстолла -- Оpдеpа

  • Веpоятность того события, что после дискеты с номеpом N будет запpошена дискета с номеpом N+1 экспоненциально убывает по меpе pоста N.

    Замечание Hеизвестного

  • Вы все pавно пеpепутаете дискеты -- метод полного пеpебоpа часто оказывается эффективнее дpугих.

    Теоpема Хаpда -- Оема

  • Hечитабельность вашим компьютеpом инсталляционных дискет нестандаpтного фоpмата есть достаточное условие того, что инсталлиpуемая система фатально несовместима с любыми пpогpаммами pасшиpения возможностей BIOS.

    Законы Лопатина о программировании

  • Если ты наконец-то выучил язык программирования, то он никому уже не нужен.
  • Если ты думаешь, что знаешь язык программирования, то ошибаешься - твои знания безнадежно устарели.
  • Если язык программирования необычайно полезен и популярен в этой стране, то за ее пределами он никому не нужен.

    Закон о надежности компьютера

  • Компьютеры - вещь слишком сложная, чтобы работать в принципе. Поэтому то, что они работают хоть как-то, уже чудо.

    Второй закон Вейнберга

  • Если бы строители строили здания так же, как программисты пишут программы, первый залетевший дятел разрушил бы цивилизацию.

    Законы программирования


  • Любая действующая программа устарела.
  • Любая программа обходится дороже и требует больших затрат времени, чем предполагалось.
  • Если программа полностью отлажена, ее нужно будет скорректировать.
  • Если программа полезна, ее изменят.
  • Если программа бесполезна, она будет документирована.
  • Любая программа стремится занять всю доступную память.
  • Ценность программы прямо пропорциональна весу ее `выдачи`.
    (Ценность программы пропорциональна весу ее аутпута (в кг.))
  • Сложность программы растет до тех пор, пока не превысит способности программиста.
    (Сложность программы будет нарастать до тех пор, пока позволяют знания програмиста.)
  • Сделайте так, чтобы програмисты писали программы на английском и вы узнаете, что они не умеют писать на английском.
  • Внутри каждой большой программы есть маленькая, которая там совсем не нужна.
  • Все ошибки, описанные как особенности, в момент сдачи программы не сработают или будут вести себя, как ошибки.
  • Все программы содержат ошибки, просто о некоторых мы не догадываемся.
  • Если Вы заводите в компьютер ерунду, то ничего кроме ерунды оттуда не выходит, только прошедшая через обработку такой умной машиной ерунда становится ценной и значимой в глазах начальства.
  • Если Вы точно не знаете, что ваша программа должна делать, надо ли ее начинать?
  • Именно та ошибка, о которой не знаешь, в один прекрасный день запорет твою работу за последние пять лет, одновременно уничтожая все игры на диске начальника.
  • Компьютерам свойственно ошибаться, но людям свойственно делать это намного чаще (В каждой ошибке компьютера Вы найдете, по крайней мере, две ошибки человека).
  • Мощность компьютера увеличивается как квадрат цены. Таким образом, если Вы хотите сделать ваш компьютер в два раза дешевле, Вам нужно сделать его вчетверо быстрее.
  • Неопределимые ошибки бесконечны, а определимые ограничены способностями компилятора.
  • Новый компьютер сломается как раз тогда, когда старый отключат и выбросят.
  • Работа с автоматическим исправителем ошибок приведет к обнаружению его узких способностей и широких недостатков.
  • Сделать компьютер значительно проще и дешевле, чем заставить его что-то делать.
  • Программы тестирования обязательно находят ошибку там, где их нет. Если ошибка все-таки есть то она в другом месте (например, на 5-10 символов выше, за границей экрана).
  • То, что некоторые пользователи зовут в программе, пользуясь ей, ошибкой, на самом деле является особенностью. Вывод: все что является для них особенностью или просто крутым (например, Windows) на самом деле есть не что иное, как одна большая ошибка.
  • Усилия, прилагаемые для исправления ошибки, увеличивают ее в геометрической прогрессии по отношению к затраченному времени.
  • Мощность компьютера увеличивается как квадрат цены. Таким образом, если Вы хотите сделать ваш компьютер в два раза дешевле, Вам нужно сделать его вчетверо быстрее.
  • Любая система, которая основывается на людской точности - неточна.
  • Основное различие между ЮЗЕРОМ и ХАКЕРОМ, взламывающими какую-либо систему, - это то, что действия ЮЗЕРА непредсказуемы и он действут на более широком фронте.
  • Чем более сложна и совершенна програма, тем более неточные результаты она выдает.
  • Программы тестирования обязательно находят ошибки там, где их нет. Если ошибка все-таки есть, то она в другом месте (например, на 5-10 символов выше, за границей экрана).
  • Неопределимые ошибки бесконечны, а определимые ограничены способностями компилятора.
  • Если вы находите ошибки, исправить которые - дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей программы.
  • Все глюки, описанные как особенность программы, в момент сдачи софта не сработают или вести себя будут как глюки.
  • Любая, даже самая гениальная программа никогда не заработает безглючно в момент сдачи ее заказчику.
  • То, что некоторые юзеры зовут в программе, пользуясь ей, ошибкой - на самом деле является особенностью программы.

    Вывод:

  • Все, что является для них особенностями программы или просто крутым (exm Windows), на самом деле есть не что иное, как один большой глюк.
  • Software на самом деле hard, а Hardware на самом деле soft - сделать компьютер значительно проще и дешевле, чем заставить его что-то делать.

    Мысли о программировании


  • Если программист признан незаменимым, то лучшее, что можно сделать - избавиться от него как можно скорее.
  • Некоторое время назад, когда КОБОЛ был светлой надеждой программистов, часто можно было слышать о возможности того, что администраторы смогут читать программы... Никто не принимал этого всерьез... Даже программисты не читают программ.
  • Есть... программы, которые следует выбросить еще до использования.
  • Требовать и эффективности, и гибкости от одной и той же программы - все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух.
  • Если программист работает с языком, в котором разрешены только три индекса, то вряд ли мы обнаружим больше трех.
  • Конструктор системы страдает от того, что чем лучше его система делает свое дело, тем меньше пользователи знают о ее существовании.
  • Каждая программа имеет соответствующий уровень продуманности и запутанности в зависимости от цели, для которой она применяется.
  • Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
  • Для локализации ошибки, однако, желателен человек, обладающий упорством тещи и стадными инстинктами крысы.
  • Другой эффект (отсутствия устной формы) - это затруднения, которые мы испытываем, говоря о языке программирования без доски и мела либо карандаша и бумаги. В каждой программистской лаборатории должны быть доска, мел и достаточное количество тряпок.
  • "Программирование" - как и "любовь" - одно слово, за которым скрывается бесконечное множество занятий.
  • В некоторых диалоговых системах ... пользователь может уберечь свою программу от понижения в приоритете, играя с клавишей переключения регистров в то время, пока он размышляет.
  • В природе программирования лежит то, что нет соотношения между "размерами" самой ошибки и проблем, которые она влечет.
  • Когда программист испытывает затруднения при поиске ошибки, это значит, что он ищет не там, где следует.
  • Документация - касторовое масло в программировании... Руководители полагают, что это хорошее средство, ибо программисты так ее ненавидят.
  • Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы.
  • Мы стоим на пороге новой эры, эры, ставшей возможной благодаря революции, совершенноя вычислительной машиной. Стоя на пороге, мы колеблемся в выборе пути - к золотому веку свободы или к темному веку тирании, причем и тот, и другой век может превзойти все, что когда-либо видел мир. Возможно, никакие отдельные усилия не скажутся на результате, но мы никогда не должны оставлять попыток, ибо иначе результат наверняка окажется тиранией.
  • Проект (OS/360) был закончен с опозданием, система потребовала большего объема памяти, чем планировалось, затраты значительно превысили предварительные оценки, вся система начала работать как следует только после создания нескольких вариантов, последовавших за первым.
  • Неподатливость проблемы (срыва планов разработки систем) вызывает всеобщееизумление, и разобраться в ее природе непросто.
  • Вычислительная машина обладает притягательной силой биллиарда или музыкального автомата, доведенных до логической завершенности.
  • Программист, как поэт, работает почти исключительно головой.
  • Вы печатаете на клавиатуре заклинание, и вот экран дисплея оживает, показывая объекты, которых не было и могло не быть никогда (но) если хоть один символ, один пробел в магической формуле не находится строго на своем месте, волшебство не работает.
  • Выдавать глобальные идеи - это удовольствие; искать сволочные маленькие ошибки - вот настоящая работа.
  • Как только проект окончательно принят, он становится устаревшим в смысле своих концепций.
  • Все программисты - оптимисты.
  • На этот раз программа обязательно пройдет.
  • Я только что нашел последнюю ошибку.
  • Большой программистский проект ... включет в себя много отдельных задач, каждая из которых может зависеть от окончания другой . Вероятность того, что каждая задача будет идти нормально, становится исчезающе малой.
  • Когда кажется, что все уже работает, все объединено в систему - вам еще осталось работы на четыре месяца.
  • Отметим, что настойчивость руководителя может определить график выполнения задания, но не в состоянии определить срок его действительного завершения.
  • Концептуальное единство является самым важным соображением при проектировании системы.
  • Система программирования предназначена для того, чтобы облегчать пользование вычислительной машиной.
  • Ни функциональность, ни простота сами по себе не гарантируют... высокого качества (проекта).
  • Добавляя малое к малому, получишь большую кучу.
  • Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая.
  • Ошибка? Это не ошибка, это системная функция.
  • Комьютер "делает из всех нас дураков".
  • Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
  • У компьютера всегда есть оправдание; у программиста - никогда.
  • Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
  • На пустом диске можно искать вечно.
  • Я пишу все свои критические программы на ассемблере, а комедийные - на фортране.
  • Бесполезно придумывать защиту от дурака - ведь дураки так гениальны.
  • Интуитивно ясно, что наличие ошибки в программе не скажется на результатах тестирования, если содержащая ошибку программная компонента при тестировании не выполнялась.
  • Если отладка - процесс удаления ошибок, то программирование должно быть процессом их внесения.
    Hosted by uCoz