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

Разработка программного обеспечения
Процесс разработки ПО
Ключевые процессы
Анализ • Проектирование • Программирование • Документирование • Тестирование
Модели
Итеративная • Спиральная • Каскадная • V-Model • Dual Vee Model
Методологии
Agile (XP, Lean, Scrum, FDD и др.) • Cleanroom • OpenUP • RAD • RUP • MSF • DSDM • TDD • BDD
Сопутствующие дисциплины
Конфигурационное управление • Управление проектами • Управление требованиями • Обеспечение качества

Программи́рование — процесс создания компьютерных программ.

По выражению одного из основателя языков программирования Никлауса Вирта «Программы = алгоритмы + структуры данных»[1][2].

Программирование основывается на использовании языков программирования, на которых записываются исходные тексты программ.


История

Коммутационная панель суммирующей машины IBM 402

205 год до н. э.[3] (150 год до н. э.[4]) — Антикитерский механизм из Древней Греции был калькулятором, использовавшим шестерни различных размеров и конфигурации, обусловливавших его работу[5], по отслеживанию метонова цикла, до сих пор использующегося в лунно-солнечных календарях[6].

1206 год — Аль-Джазари построил программируемый автомат-гуманоид. Одна система, задействованная в этих устройствах, использовала зажимы и кулачки, помещённые в деревянный ящик в определённых местах, которые последовательно задействовали рычаги, которые, в свою очередь, управляли ударными инструментами[источник не указан 284 дня].

1804 год — построен жаккардовый ткацкий станок, построенный в 1804 году Жозефом Мари Жаккаром, который произвёл революцию в ткацкой промышленности, предоставив возможность программировать узоры на тканях при помощи перфокарт, его иногда считают первым программируемым устройством[источник не указан 284 дня].

19 июля 1843 года — Чарлз Бэббидж разработал (но не смог её построить) «Аналитическую машину» — первое программируемое вычислительное устройство[источник не указан 284 дня].

19 июля 1843 года — графиня Ада Августа Лавлейс, дочь великого английского поэта Джорджа Байрона, написала первую в истории человечества программу для Аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости. В своей первой и единственной научной работе Ада Лавлейс рассмотрела большое число вопросов. Ряд высказанных ею общих положений (принцип экономии рабочих ячеек памяти, связь рекуррентных формул с циклическими процессами вычислений) сохранили своё принципиальное значение и для современного программирования[источник не указан 284 дня].

В материалах Бэббиджа и комментариях Лавлейс намечены такие понятия, как подпрограмма и библиотека подпрограмм, модификация команд и индексный регистр, которые стали употребляться только в 1950-х годах[источник не указан 284 дня]. Однако ни одна из программ, написанных Адой Лавлейс, никогда так и не была запущена[источник не указан 284 дня].

Первые книги по программированию в СССР

Первой советской открытой книгой по программированию, электронным вычислительным машинам и их различным применениям была выпущенная в начале 1956 года монография Анатолия Ивановича Китова «Электронные цифровые машины»[7][8]. Заключительная треть этой книги посвящена «Неарифметическому использованию ЭВМ» — применению компьютеров для управления производственными процессами, решению задач экономики, искусственного интеллекта, машинного перевода и т.д. Книга переведена на несколько иностранных языков и опубликована в США, Китае, Польше, Чехословакии и других странах. Об этой книге Президент Академии наук СССР Г. И. Марчук писал «Вышедшая в 1956 году книга А. И. Китова „Электронные цифровые машины“ фактически сделала переворот в сознании многих исследователей». Выдающийся учёный современности В. М. Глушков отмечал: «А. И. Китов — признанный пионер кибернетики, заложивший основы отечественной школы программирования и применения ЭВМ для решения военных и народнохозяйственных задач. Я сам, как и десятки тысяч других специалистов, получил свои начальные компьютерные знания из его книги „Электронные цифровые машины“ — первой отечественной книги по ЭВМ и программированию». Профессор Мичиганского университета Джон Карр (John Carr, USA) в своей монографии «Лекции по программированию» (1958, США) писал о том, что, проанализировав по рассматриваемой тематике порядка 150 выпущенных в мире на тот момент времени книг, вопросы как ручного, так и автоматического программирования лучше всего освещены в книге Анатолия Китова.

Через шесть месяцев в том же 1956 году вышла в свет под редакцией А. И. Китова книга А. И. Китова, Н. А. Криницкого и П. Н. Комолова «Элементы программирования» (для электронных вычислительных машин). Эта почти трёхсотстраничная книга стала второй в СССР общедоступной компьютерной монографией. В заключении этой книги продекларировано: «Широкое применение этих машин (ЭВМ) поднимет на новый небывало высокий уровень все виды производства в нашей стране, позволит резко повысить материальное благосостояние нашего народа и значительно укрепить обороноспособность нашей Родины». Данные две книги, покрыли громадный дефицит литературы по ЭВМ и программированию, существовавший в то время в Советском Союзе.

Вышедшая в свет в 1959 году книга «Электронные цифровые машины и программирование» Китова А. И. и Криницкого Н. А. была первым в СССР официальным учебником по ЭВМ и программированию, официально допущенным Министерством образования СССР для обучения в ВУЗах и университетах. Об этой книге Президент Академии наук СССР Г. И. Марчук писал: «В 1959 году появился другой фундаментальный труд А. И. Китова, написанный вместе с Н. А. Криницким — „Электронные цифровые машины и программирование“. Это была фактически энциклопедия науки об ЭВМ. Многие поколения студентов в университетах и вузах страны с помощью этой замечательной книги получили фундаментальное образование и стали первоклассными учеными во многих областях знаний. Книги А. И. Китова, написанные в начале эры ЭВМ в нашей стране, не должны быть забыты». Эта книга была издана в Румынии, Венгрии, Германской демократической республике и ряде других стран. Второе стереотипное издание книги «Электронные цифровые машины и программирование» появилось в 1961 году. Общий тираж иностранных и двух советских изданий составил свыше 130 000 экземпляров. Об этом учебнике-энциклопедии в своих воспоминаниях ветеран кафедры вычислительной техники МЭИ (первая кафедра ЭВМ в стране), д.т.н., профессор А. К. Поляков написал так: «По-моему мнению, учебник А. И. Китова и Н. А. Криницкого „Электронные цифровые машины и программирование“ (1959) в то время был лучшим в мире». .

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

Большая часть работы программистов связана с написанием исходного кода, тестированием и отладкой программ на одном из языков программирования. Исходные тексты и исполняемые файлы программ являются объектами авторского права и являются интеллектуальной собственностью их авторов и правообладателей[источник не указан 284 дня].

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

Единственный язык, напрямую выполняемый ЭВМ — это машинный язык (также называемый машинным кодом и языком машинных команд). Изначально все программы писались в машинном коде, но сейчас этого практически уже не делается. Вместо этого программисты пишут исходный код на том или ином языке программирования, затем, используя компилятор, транслируют его в один или несколько этапов в машинный код, готовый к исполнению на целевом процессоре, или в промежуточное представление, которое может быть исполнено специальным интерпретатором — виртуальной машиной. Но это справедливо только для языков высокого уровня. Если требуется полный низкоуровневый контроль над системой на уровне машинных команд и отдельных ячеек памяти, программы пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора ЭВМ (по этой причине трансляторы с языков ассемблера получаются алгоритмически простейшими трансляторами).

В некоторых языках вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, некоторых реализациях Lisp, Java, Perl, Python, языках для .NET Framework.

Скриншот фрагмента кода на языке Java в текстовом редакторе vim, демонстрирующий подсветку синтаксиса, поддержку Unicode, фолдинг

Инструменты

Текстовый редактор среды программирования может иметь специфичную функциональность, такую, как индексация имен, отображение документации, подсветка синтаксиса, средства визуального создания пользовательского интерфейса. С помощью текстового редактора программист производит набор и редактирование текста создаваемой программы, который называют исходным кодом. Язык программирования определяет синтаксис и изначальную семантику исходного кода.

В процессе программирования в настоящее время широко используются интегрированные среды разработки[9][10], в состав которых обычно входят:

  • редактор кода для ввода и редактирования текста программ[10];
  • отладчик для отладки (поиска и устранения ошибок);
  • транслятор для преобразования текста программы в машинное представление;
  • компоновщик для сборки программы из нескольких модулей;
  • другие служебные модули и инструменты.

Примечания

  1. Вирт Н. Алгоритмы + структуры данных = программы. — М.: Мир, 1985;
  2. Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона + CD. М.: ДМК Пресс, 2010. ISBN 978-5-94074-584-6, 0-13-022005-9
  3. Антонов Е. «Древнегреческий компьютер» оказался древнее, чем считалось // Наука и жизнь. — 2014. — 11 декабря (№ 12).
  4. The History of the Antikythera Mechanism. Сайт, посвящённый Антикитерскому механизму.
  5. Ancient Greek Computer’s Inner Workings Deciphered. National Geographic News. November 29, 2006.
  6. Freeth, Tony; Jones, Alexander; Steele, John M.; Bitsakis, Yanis (July 31, 2008). “Calendars with Olympiad display and eclipse prediction on the Antikythera Mechanism”. Nature. 454 (7204): 614—617. DOI:10.1038/nature07130. PMID 18668103. Используется устаревший параметр |coauthors= (справка)
  7. А.И. Китов. Электронные цифровые машины. — Москва, 1956.
  8. Основные публикации Китова А.И..
  9. Архангельский А.Я. Программирование на С++Builder 6. — Москва: БИНОМ, 2003. — 1152 с. — ISBN 5-7989-0239-0.
  10. 1 2 Макки Алекс. Введение .Net 4.0 и Visual Studio 2010 для профессионалов. — Москва: ООО "И.Д. Вильямс", 2010. — 416 с. — ISBN 978-5-8459-1639-6. — ISBN 978-1-43-022455-6.

Литература

  • Китов А.И. «Электронные цифровые машины» М.:, Издательство «Советское радио», 1956, 276 с.
  • Китов А.И., Криницкий Н.А., Комолов П.Н. «Элементы программирования» (для электронных вычислительных машин). Под редакцией А.И. Китова. Издательство Артиллерийской инженерной академии, М.:, 1956, 286 с.
  • Китов А.И., Криницкий Н.А. «Электронные цифровые машины и программирование» М.:, Издательство «ФИЗМАТГИЗ», 1959 (второе издание в 1961 г.), 572 с.
  • Дейкстра Э. Дисциплина программирования = A discipline of programming. — 1-е изд. — М.: Мир, 1978. — 275 с.
  • Бьярне Страуструп. Программирование: принципы и практика использования C++, исправленное издание = Programming: Principles and Practice Using C++. — М.: Вильямс, 2011. — С. 1248. — ISBN 978-5-8459-1705-8.
  • Александр Степанов, Пол Мак-Джонс. Начала программирования = Elements of Programming. — М.: Вильямс, 2011. — С. 272. — ISBN 978-5-8459-1708-9.
  • Роберт У. Себеста. Основные концепции языков программирования / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — 672 с. — ISBN 5-8459-0192-8 (рус.) ISBN 0-201-75295-6 (англ.).
  • Иан Соммервилл. Инженерия программного обеспечения / Пер. с англ. — 6-е издание. — М.: Вильямс, 2002. — 624 с.
  • Иан Грэхем. Объектно-ориентированные методы. Принципы и практика / Пер. с англ. — 3-е изд. — М.: Вильямс, 2004. — 880 с.
  • Дональд Кнут. Искусство программирования. В четырёх томах / Пер. с англ. — М.: Вильямс, 2001 − 2013.
  • Долгов В.А. Китов Анатолий Иванович - пионер кибернетики, информатики и автоматизированных систем управления / М.:, Минобрнауки, КОС-ИНФ, 2010. 337 с.(http://www.computer-museum.ru/books/dolgov_kitov_2010.pdf)

Ссылки