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

Перейти к навигацииПерейти к поиску
Разработка программного обеспечения
Ключевые процессы
Парадигмы и модели
Методологии
Инструменты
Данные и инструкции когда-то [] хранились на внешних перфокартах, сортировались и упорядочивались в программные колоды.

Программи́рование также ко́динг (от англ. coding «процесс написания программного кода»; не путать с коди́рованием) — процесс создания и модификации компьютерных программ.

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

Программирование основывается на использовании языков программирования и средств программирования. В основном языки программирования основаны на текстовом представлении программ, но иногда программировать можно, используя, например, визуальное программирование или «zero-code» программирование.

История

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

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

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

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

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

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

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

Первым широко известным и успешным языком программирования высокого уровня был Фортран, разработанный с 1954 по 1957 год, командой исследователей IBM во главе с Джоном Бакусом. Успех Фортрана привёл к образованию комитета учёных по разработке «универсального» компьютерного языка. Отдельно Джон Маккарти из Массачусетского технологического института разработал язык программирования Лисп (основанный на лямбда-исчислении), первый язык, возникший в академических кругах и получивший успех. С успехом этих начальных усилий языки программирования стали активной темой исследований в 1960-х и далее.

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

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

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

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

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

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

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

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

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

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

Инструменты

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

В процессе программирования в настоящее время широко используются интегрированные среды разработки[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 (англ.). — Сайт, посвящённый Антикитерскому механизму. Дата обращения: 4 марта 2018. Архивировано 5 июля 2012 года.
  5. Ancient Greek Computer’s Inner Workings Deciphered Архивная копия от 29 июня 2011 на Wayback Machine. National Geographic News. November 29, 2006.
  6. Freeth, Tony; Jones, Alexander; Steele, John M.; Bitsakis, Yanis. Calendars with Olympiad display and eclipse prediction on the Antikythera Mechanism (англ.) // Nature : journal. — 2008. — 31 July (vol. 454, no. 7204). — P. 614—617. — doi:10.1038/nature07130. — PMID 18668103. Архивировано 17 октября 2010 года.
  7. А.И. Китов. Электронные цифровые машины. — Москва, 1956.
  8. Основные публикации Китова А.И. Дата обращения: 4 марта 2018. Архивировано 25 августа 2019 года.
  9. Архангельский А.Я. Программирование на C++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.

Литература

  • Дейкстра Э. Дисциплина программирования = A discipline of programming. — М.: Мир, 1978. — 275 с.
  • Роберт У. Себеста. Основные концепции языков программирования / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — 672 с. — ISBN 5-8459-0192-8 (рус.). — ISBN 0-201-75295-6 (англ.).
  • Дональд Кнут. Искусство программирования. В четырёх томах / Пер. с англ. — М.: Вильямс, 2001 − 2013.

Ссылки