Введение

В разработке программного обеспечения понятия "программирование в большом" и "программирование в малом" относятся к двум различным аспектам создания программ. "Программирование в большом" подразумевает проектирование крупной системы как совокупности более мелких частей, а "программирование в малом" – создание этих частей путем написания строк кода на языке программирования. Эти термины были введены Фрэнком ДеРемером и Гансом Кроном в их статье 1975 года "Программирование в большом против программирования в малом", где они утверждают, что это по сути разные виды деятельности, и что типичные языки программирования и практика структурированного программирования хорошо поддерживают последний, но не первый. Это можно сравнить с более поздней дихотомией Остерхаута, которая различает языки системного программирования (для компонентов) и скриптовые языки (для связующего кода, соединяющего компоненты).

Описание

Фред Брукс отмечает, что способ создания отдельной программы отличается от способа создания программного продукта системы. Любое из этих условий приводит к большим и, следовательно, сложным программам, которые может быть трудно понять специалистам по сопровождению. При разработке крупных программных комплексов менеджеры кодирования делают акцент на разделении работы на модули с четко определенными взаимодействиями. Это требует тщательного планирования и детальной документации. В случае разработки крупных программных комплексов внесение изменений в программу может оказаться затруднительным. Если изменение затрагивает границы модулей, может потребоваться переработка работы многих разработчиков. Поэтому одной из целей разработки крупных программных комплексов является создание модулей, которые не потребуют изменения при вероятных изменениях. Это достигается за счет проектирования модулей с высокой связностью и слабой связанностью. Разработка крупных программных комплексов требует навыков абстрагирования. Пока модуль не реализован, он остается абстракцией. В совокупности абстракции должны формировать архитектуру, которая вряд ли потребует изменений. Они должны определять взаимодействия с точностью и доказуемой корректностью. Разработка крупных программных комплексов требует управленческих навыков. Процесс построения абстракций направлен не только на описание того, что может работать, но и на координацию усилий разработчиков, которые воплотят это в жизнь. Эта концепция была введена Фрэнком ДеРемером и Гансом Кроном в их статье 1975 года "Программирование в большом против программирования в малом", IEEE Trans. on Soft. Eng. 2(2). В терминологии компьютерных наук, разработка крупных программных комплексов может относиться к коду, представляющему логику переходов состояний высокого уровня системы. Эта логика кодирует информацию, такую как время ожидания сообщений, время отправки сообщений, время компенсации неудачных не-ACID транзакций и т.д. Язык, разработанный для явной поддержки разработки крупных программных комплексов, – BPEL.

Программирование в малом

В разработке программного обеспечения, программирование в малом описывает деятельность по написанию небольшой программы. Небольшие программы характеризуются малым объемом исходного кода, легкостью спецификации, скоростью разработки и обычно очень хорошо выполняют одну или несколько тесно связанных задач. Программирование в малом может осуществляться отдельными разработчиками или небольшими группами в короткие сроки и может включать менее формальные подходы (например, меньший упор на документирование или тестирование), инструменты и языки программирования (например, предпочтение слабо типизированных скриптовых языков строго типизированным языкам программирования). Программирование в малом также может описывать подход к созданию прототипов программного обеспечения или ситуации, когда быстрая разработка приложений важнее стабильности или корректности. В терминах компьютерных наук, программирование в малом связано с кратковременным программным поведением, часто выполняемым как единая ACID-транзакция, обеспечивающая доступ к локальной логике и ресурсам, таким как файлы, базы данных и т.п.