stringtranslate.com

Компьютерное программирование

Компьютерное программирование или кодирование — это совокупность последовательностей инструкций, называемых программами , которым компьютеры могут следовать для выполнения задач. [1] [2] Он включает в себя разработку и реализацию алгоритмов , пошаговых спецификаций процедур путем написания кода на одном или нескольких языках программирования . Программисты обычно используют языки программирования высокого уровня , которые более понятны человеку, чем машинный код , который непосредственно выполняется центральным процессором . Опытное программирование обычно требует знаний в нескольких различных предметах, включая знание предметной области , деталей языков программирования и библиотек общего кода , специализированных алгоритмов и формальной логики .

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

История

Ада Лавлейс , чьи примечания были добавлены в конец статьи Луиджи Менабреа, включала первый алгоритм , разработанный для обработки аналитической машиной Чарльза Бэббиджа . Ее часто называют первым программистом в истории.

Программируемые устройства существуют уже много столетий. Еще в 9 веке программируемый музыкальный секвенсор был изобретен персидскими братьями Бану Муса , которые описали автоматизированный механический флейтист в «Книге изобретательных устройств» . [3] [4] В 1206 году арабский инженер Аль-Джазари изобрел программируемую драм-машину , в которой можно было создать музыкальный механический автомат , способный воспроизводить различные ритмы и рисунки барабанов с помощью колышков и кулачков . [5] [6] В 1801 году жаккардовый ткацкий станок мог производить совершенно разные переплетения, изменив «программу» - серию картонных карточек с пробитыми в них отверстиями.

Алгоритмы взлома кода также существовали на протяжении веков. В 9 веке арабский математик Аль-Кинди описал криптографический алгоритм расшифровки зашифрованного кода в «Рукописи по расшифровке криптографических сообщений» . Он дал первое описание криптоанализа с помощью частотного анализа , самого раннего алгоритма взлома кода. [7]

Первая компьютерная программа обычно датируется 1843 годом, когда математик Ада Лавлейс опубликовала алгоритм расчета последовательности чисел Бернулли , который должен был выполняться аналитической машиной Чарльза Бэббиджа . [8] Однако сам Чарльз Бэббидж написал свою первую программу для AE в 1837 году. [9] [10]

Данные и инструкции когда-то хранились на внешних перфокартах , которые содержались в порядке и располагались в программных колодах.

В 1880-х годах Герман Холлерит изобрел концепцию хранения данных в машиночитаемой форме. [11] Позже панель управления (штепсельная плата), добавленная к его табулятору Type I 1906 года, позволила программировать его для различных задач, а к концу 1940-х годов записывающее оборудование, такое как IBM 602 и IBM 604 , программировалось с помощью панелей управления. аналогичным образом, как это делали первые электронные компьютеры . Однако с появлением в 1949 году концепции компьютера с хранимой программой и программы, и данные одинаково сохранялись и обрабатывались в памяти компьютера . [12]

Машинный язык

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

Проводная панель управления для бухгалтерской машины IBM 402 . Провода соединяют потоки импульсов от устройства считывания карт со счетчиками и другой внутренней логикой и, в конечном итоге, с принтером.

Языки компилятора

Языки высокого уровня сделали процесс разработки программы более простым и понятным, а также менее привязанным к базовому оборудованию . Первый инструмент, связанный с компилятором, A-0 System , был разработан в 1952 году [13] Грейс Хоппер , которая также ввела термин «компилятор». [14] [15] FORTRAN , первый широко используемый язык высокого уровня, имеющий функциональную реализацию, вышел в 1957 году, [16] и вскоре были разработаны многие другие языки — в частности, COBOL , предназначенный для коммерческой обработки данных, и Lisp. для компьютерных исследований.

Эти компилируемые языки позволяют программисту писать программы в более синтаксически более богатых терминах и более способных абстрагировать код, что позволяет легко ориентироваться на различные наборы машинных инструкций с помощью объявлений компиляции и эвристики . Компиляторы использовали возможности компьютеров, чтобы упростить программирование [16] , позволив программистам задавать вычисления путем ввода формулы с использованием инфиксной записи .

Запись исходного кода

Ввод программ в основном осуществлялся с помощью перфокарт или бумажной ленты . К концу 1960-х годов устройства хранения данных и компьютерные терминалы стали достаточно недорогими, и программы можно было создавать, вводя их непосредственно в компьютеры. Были также разработаны текстовые редакторы , которые позволяли вносить изменения и исправления гораздо проще, чем с помощью перфокарт .

Современное программирование

Требования к качеству

Каким бы ни был подход к развитию, окончательная программа должна удовлетворять некоторым фундаментальным свойствам. К числу наиболее важных относятся следующие свойства: [17] [18]

Использование автоматических тестов и фитнес-функций может помочь сохранить некоторые из вышеупомянутых атрибутов. [20]

Читабельность исходного кода

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

Читабельность важна, поскольку программисты тратят большую часть своего времени на чтение, попытки понять, повторное использование и изменение существующего исходного кода, а не на написание нового исходного кода. Нечитаемый код часто приводит к ошибкам, неэффективности и дублированию кода . Исследование показало, что несколько простых преобразований читабельности сделали код короче и значительно сократили время на его понимание. [21]

Следование единообразному стилю программирования часто помогает улучшить читабельность. Однако читабельность — это больше, чем просто стиль программирования. Многие факторы, практически не имеющие отношения к способности компьютера эффективно компилировать и выполнять код, способствуют удобочитаемости. [22] Некоторые из этих факторов включают в себя:

Аспекты представления ( такие как отступы, разрывы строк, выделение цветом и т. д.) часто обрабатываются редактором исходного кода , но аспекты содержания отражают талант и навыки программиста.

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

Алгоритмическая сложность

И академическая область, и инженерная практика компьютерного программирования в основном связаны с обнаружением и реализацией наиболее эффективных алгоритмов для данного класса задач. Для этой цели алгоритмы классифицируются по порядкам с использованием так называемой нотации Big O , которая выражает использование ресурсов, таких как время выполнения или потребление памяти, с точки зрения размера входных данных. Опытные программисты знакомы с множеством хорошо зарекомендовавших себя алгоритмов и их сложностью и используют эти знания для выбора алгоритмов, которые лучше всего подходят для конкретных обстоятельств.

Методологии

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

Популярные методы моделирования включают объектно-ориентированный анализ и проектирование ( OOAD ) и модельно-ориентированную архитектуру ( MDA ). Унифицированный язык моделирования ( UML ) — это нотация, используемая как для OOAD, так и для MDA.

Похожий метод, используемый для проектирования базы данных, — это Entity-Relationship Modeling ( ER Modeling ).

Методы реализации включают императивные языки ( объектно-ориентированные или процедурные ), функциональные языки и логические языки .

Измерение использования языка

Очень сложно определить, какие современные языки программирования наиболее популярны. Методы измерения популярности языка программирования включают в себя: подсчет количества объявлений о вакансиях, в которых упоминается этот язык, [23] количества проданных книг и курсов, обучающих этому языку (это переоценивает важность новых языков), а также оценку количества существующих строк. кода, написанного на этом языке (это занижает количество пользователей бизнес-языков, таких как COBOL).

Некоторые языки очень популярны для определенных типов приложений, в то время как некоторые языки регулярно используются для написания множества различных типов приложений. Например, COBOL по-прежнему силен в корпоративных центрах обработки данных [24], часто на больших мэйнфреймах , Fortran в инженерных приложениях, языки сценариев в веб- разработке и C во встроенном программном обеспечении . Многие приложения при создании и использовании используют смесь нескольких языков. Новые языки обычно разрабатываются на основе синтаксиса предыдущего языка с добавлением новых функций (например, C++ добавляет объектно-ориентированность в C, а Java добавляет управление памятью и байт-код в C++, но в результате теряет эффективность и способность к низкому уровню производительности). манипулирование на уровне).

Отладка

Первой известной реальной ошибкой , вызвавшей неполадку в компьютере, была моль, застрявшая внутри мэйнфрейма Гарварда, что было зафиксировано в журнале регистрации от 9 сентября 1947 года. насекомое было обнаружено.

Отладка — очень важная задача в процессе разработки программного обеспечения, поскольку наличие дефектов в программе может иметь серьезные последствия для ее пользователей. Некоторые языки более склонны к некоторым ошибкам, поскольку их спецификация не требует от компиляторов такого большого количества проверок, как другие языки. Использование инструмента статического анализа кода может помочь обнаружить некоторые возможные проблемы. Обычно первым шагом в отладке является попытка воспроизвести проблему. Это может быть нетривиальная задача, например, с параллельными процессами или какими-то необычными программными ошибками. Кроме того, специфическая пользовательская среда и история использования могут затруднить воспроизведение проблемы.

После воспроизведения ошибки ввод программы, возможно, придется упростить, чтобы облегчить ее отладку. Например, когда ошибка в компиляторе может привести к его сбою при анализе какого-то большого исходного файла, упрощения тестового примера, в результате которого из исходного исходного файла будет всего несколько строк, может быть достаточно для воспроизведения того же сбоя. Необходим метод проб и ошибок/разделяй и властвуй: программист попытается удалить некоторые части исходного тестового примера и проверить, существует ли проблема по-прежнему. При отладке проблемы в графическом интерфейсе программист может попытаться пропустить некоторые действия пользователя из исходного описания проблемы и проверить, достаточны ли оставшиеся действия для появления ошибок. Сценарии и точки останова также являются частью этого процесса.

Отладка часто выполняется с помощью IDE . Также используются автономные отладчики, такие как GDB , которые часто предоставляют меньше визуальной среды, обычно используя командную строку . Некоторые текстовые редакторы, такие как Emacs, позволяют вызывать GDB через них, обеспечивая визуальную среду.

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

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

Аллен Дауни в своей книге « Как думать как ученый-компьютерщик » пишет:

Детали выглядят по-разному на разных языках, но несколько основных инструкций есть практически на каждом языке:
  • Ввод: сбор данных с клавиатуры, файла или другого устройства.
  • Вывод: Отображение данных на экране или отправка данных в файл или другое устройство.
  • Арифметика: выполнение основных арифметических операций, таких как сложение и умножение.
  • Условное выполнение: проверьте наличие определенных условий и выполните соответствующую последовательность операторов.
  • Повторение: многократное выполнение какого-либо действия, обычно с некоторыми вариациями.

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

Программисты

Программисты — это те, кто пишет компьютерное программное обеспечение. Их работа обычно включает в себя:

Хотя программирование представлено в средствах массовой информации как предмет, отчасти математический, некоторые исследования показывают, что хорошие программисты обладают хорошими навыками владения естественными человеческими языками и что обучение программированию похоже на изучение иностранного языка . [26] [27]

Смотрите также

Рекомендации

  1. ^ Беббингтон, Шон (2014). «Что такое кодирование». Тамблер . Архивировано из оригинала 29 апреля 2020 года . Проверено 3 марта 2014 г.
  2. ^ Беббингтон, Шон (2014). «Что такое программирование». Тамблер . Архивировано из оригинала 29 апреля 2020 года . Проверено 3 марта 2014 г.
  3. ^ Кетсьер, Теун (2001). «О предыстории программируемых машин: музыкальных автоматов, ткацких станков, калькуляторов». Теория механизма и машин . 36 (5). Эльзевир: 589–603. дои : 10.1016/S0094-114X(01)00005-2.
  4. ^ Капур, Аджай; Карнеги, Дейл; Мерфи, Джим; Лонг, Джейсон (2017). «Дополнительные громкоговорители: история электроакустической музыки без громкоговорителей». Организованный звук . 22 (2). Издательство Кембриджского университета : 195–205. дои : 10.1017/S1355771817000103 . ISSN  1355-7718.
  5. ^ Фаулер, Чарльз Б. (октябрь 1967 г.). «Музей музыки: история механических инструментов». Журнал музыкальных педагогов . 54 (2): 45–49. дои : 10.2307/3391092. JSTOR  3391092. S2CID  190524140.
  6. ^ Ноэль Шарки (2007), Программируемый робот 13 века, Шеффилдский университет
  7. ^ Дули, Джон Ф. (2013). Краткая история криптологии и криптографических алгоритмов . Springer Science & Business Media. стр. 12–3. ISBN 9783319016283.
  8. ^ Фуэги, Дж.; Фрэнсис, Дж. (2003). «Лавлейс и Бэббидж и создание «заметок» 1843 года».". IEEE Annals of the History of Computing . 25 (4): 16. doi : 10.1109/MAHC.2003.1253887.
  9. ^ Рохас, Р. (2021). «Компьютерные программы Чарльза Бэббиджа». IEEE Анналы истории вычислений . 43 (1): 6–18. дои : 10.1109/MAHC.2020.3045717.
  10. ^ Рохас, Р. (2024). «Первая компьютерная программа». Коммуникации АКМ . 67 (6): 78–81. дои : 10.1145/3624731 .
  11. ^ да Круз, Фрэнк (10 марта 2020 г.). «История вычислений Колумбийского университета - Герман Холлерит». Колумбийский университет . Колумбия.edu. Архивировано из оригинала 29 апреля 2020 года . Проверено 25 апреля 2010 г.
  12. ^ «Память и хранилище | Хронология истории компьютеров | Музей истории компьютеров» . www.computerhistory.org . Архивировано из оригинала 27 мая 2021 года . Проверено 3 июня 2021 г.
  13. ^ Риджуэй, Ричард (1952). «Составление регламентов». Материалы национального собрания ACM 1952 года (Торонто) на тему - ACM '52 . стр. 1–5. дои : 10.1145/800259.808980 . ISBN 9781450379250. S2CID  14878552.
  14. ^ Морис В. Уилкс . 1968. Компьютеры тогда и сейчас. Журнал Ассоциации вычислительной техники, 15 (1): 1–7, январь. п. 3 (комментарий в скобках добавлен редактором): «(Я не думаю, что термин «компилятор» тогда [1953] широко использовался, хотя на самом деле он был введен Грейс Хоппер.)»
  15. ^ [1] Первые в мире компиляторы COBOL. Архивировано 13 октября 2011 г. в Wayback Machine.
  16. ^ Аб Бергштейн, Брайан (20 марта 2007 г.). «Умер создатель Фортрана Джон Бэкус» . Новости Эн-Би-Си . Архивировано из оригинала 29 апреля 2020 года . Проверено 25 апреля 2010 г.
  17. ^ «NIST разработает дорожную карту облака» . Информационная неделя . 5 ноября 2010 г. Инициатива в области вычислительной техники направлена ​​на устранение барьеров на пути внедрения облачных технологий в области безопасности, совместимости, портативности и надежности.
  18. ^ «На чем это основано» . Компьютерный мир . 9 апреля 1984 г. с. 13. Основано ли оно на... Надежности Портативности. Совместимость
  19. ^ «Программирование 101: Советы, как стать хорошим программистом - Wisdom Geek» . Мудрость Гик . 19 мая 2016 года. Архивировано из оригинала 23 мая 2016 года . Проверено 23 мая 2016 г.
  20. ^ Основы архитектуры программного обеспечения: инженерный подход . О'Рейли Медиа. 2020. ISBN 978-1492043454.
  21. ^ Элсхофф, Джеймс Л.; Маркотти, Майкл (1982). «Улучшение читаемости компьютерных программ для облегчения модификации». Коммуникации АКМ . 25 (8): 512–521. дои : 10.1145/358589.358596 . S2CID  30026641.
  22. ^ Несколько (вики). «Читаемость». Докфорж . Архивировано из оригинала 29 апреля 2020 года . Проверено 30 января 2010 г.
  23. Энтикнап, Николас (11 сентября 2007 г.). «Еженедельный обзор зарплат в сфере SSL/Computer в сфере ИТ: финансовый бум стимулирует рост рабочих мест в сфере ИТ» . Архивировано из оригинала 26 октября 2011 года . Проверено 24 июня 2009 г.
  24. Митчелл, Роберт (21 мая 2012 г.). «Утечка мозгов из Кобола». Компьютерный мир. Архивировано из оригинала 12 февраля 2019 года . Проверено 9 мая 2015 г.
  25. ^ «Фотография любезно предоставлена ​​Центром надводных боевых действий ВМС, Дальгрен, Вирджиния, из журнала National Geographic, сентябрь 1947 года» . 15 июля 2020 года. Архивировано из оригинала 13 ноября 2020 года . Проверено 10 ноября 2020 г.
  26. ^ Прат, Шантель С.; Мадхьястха, Тара М.; Моттарелла, Малайка Дж.; Куо, Чу-Сюань (2 марта 2020 г.). «Связь способностей к естественному языку с индивидуальными различиями в изучении языков программирования». Научные отчеты . 10 (1): 3817. Бибкод : 2020НатСР..10.3817П. дои : 10.1038/s41598-020-60661-8. ISSN  2045-2322. ПМК 7051953 . ПМИД  32123206. 
  27. ^ «Для мозга чтение компьютерного кода — это не то же самое, что чтение языка» . Новости Массачусетского технологического института | Массачусетский Институт Технологий . 15 декабря 2020 г. . Проверено 29 июля 2023 г.

Источники

дальнейшее чтение

Внешние ссылки