Нет серебряной пули: Сущность и случайность в разработке программного обеспечения.
No Silver Bullet
Нет "серебряной пули" в разработке ПО: анализ статьи Фреда Брукса о сложности, продуктивности и ограничениях роста в инженерии программного обеспечения.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Статья по управлению программными проектами, основанная на народных представлениях, "Нет серебряной пули — Сущность и случайность в разработке программного обеспечения" — широко обсуждаемая статья по разработке программного обеспечения, написанная лауреатом премии Тьюринга Фредом Бруксом в 1986 году. Брукс утверждает, что "не существует единого усовершенствования, будь то в технологиях или методах управления, которое само по себе обещало бы даже на один порядок величины [в десять раз] улучшение в течение десятилетия в отношении производительности, надежности или простоты". Он также заявляет, что "мы не можем ожидать двукратного увеличения результатов каждые два года" в разработке программного обеспечения, как это происходит в разработке аппаратного обеспечения (закон Мура).
Paper on software project management
the folkloric belief
"No Silver Bullet—Essence and Accident in Software Engineering" is a widely discussed paper on software engineering written by Turing Award winner Fred Brooks in 1986. Brooks argues that "there is no single development, in either technology or management technique, which by itself promises even one order of magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity." He also states that "we cannot expect ever to see two fold gains every two years" in software development, as there is in hardware development (Moore's law).
Резюме
Брукс различает два различных типа сложности: случайную и существенную. Это соотносится с классификацией Аристотеля. Случайная сложность связана с проблемами, которые создают инженеры, и которые они могут решить. Например, современные языки программирования абстрагировали детали написания и оптимизации ассемблерного кода и устранили задержки, вызванные пакетной обработкой, хотя другие источники случайной сложности сохраняются. Существенная сложность обусловлена самой решаемой задачей, и её невозможно устранить; если пользователям нужна программа, выполняющая 30 различных функций, то эти 30 функций являются существенными, и программа должна их выполнять. Брукс утверждает, что случайная сложность значительно уменьшилась, и современные программисты тратят большую часть времени на решение проблем, связанных с существенной сложностью. Брукс утверждает, что это означает, что полное устранение всех проявлений случайной сложности не даст такого же значительного улучшения, как попытки уменьшить существенную сложность. Брукс настаивает на отсутствии универсального решения, но считает, что ряд инноваций, направленных на уменьшение существенной сложности, может привести к существенным улучшениям. Одной из технологий, значительно снизивших случайную сложность, стало изобретение языков программирования высокого уровня, таких как Ada.
Brooks distinguishes between two different types of complexity: accidental complexity and essential complexity. This is related to Aristotle's classification. Accidental complexity relates to problems that engineers create and can fix. For example, modern programming languages have abstracted away the details of writing and optimizing assembly code and eliminated the delays caused by batch processing, though other sources of accidental complexity remain. Essential complexity is caused by the problem to be solved, and nothing can remove it; if users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things. Brooks claims that accidental complexity has decreased substantially, and today's programmers spend most of their time addressing essential complexity. Brooks argues that this means shrinking all the accidental activities to zero will not give the same order of magnitude improvement as attempting to decrease essential complexity. While Brooks insists that there is no one silver bullet, he believes that a series of innovations attacking essential complexity could lead to significant improvements. One technology that had made significant improvement in the area of accidental complexity was the invention of high level programming languages, such as Ada.
Связанные понятия
Статья Брукса иногда упоминается в связи с законом Вирта, чтобы утверждать, что "программные системы растут в размерах и сложности быстрее, чем разрабатываются способы управления этой сложностью".
Brooks's paper has sometimes been cited in connection with Wirth's law, to argue that "software systems grow faster in size and complexity than methods to handle complexity are invented."