stringtranslate.com

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

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

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

История

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

Программируемые устройства существуют уже много веков. Еще в IX веке программируемый музыкальный секвенсор был изобретен персидскими братьями Бану Муса , которые описали автоматизированного механического флейтиста в « Книге гениальных устройств» . [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.

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

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

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

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

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

Отладка

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

  1. ^ Беббингтон, Шон (2014). «Что такое кодирование». Tumblr . Архивировано из оригинала 29 апреля 2020 г. Получено 3 марта 2014 г.
  2. ^ Беббингтон, Шон (2014). «Что такое программирование». Tumblr . Архивировано из оригинала 29 апреля 2020 г. Получено 3 марта 2014 г.
  3. ^ Koetsier, Teun (2001). «О предыстории программируемых машин: музыкальные автоматы, ткацкие станки, калькуляторы». Механизм и теория машин . 36 (5). Elsevier: 589–603. doi :10.1016/S0094-114X(01)00005-2.
  4. ^ Капур, Аджай; Карнеги, Дейл; Мерфи, Джим; Лонг, Джейсон (2017). «Громкоговорители по желанию: история электроакустической музыки без громкоговорителей». Organised Sound . 22 (2). Cambridge University Press : 195–205. doi : 10.1017/S1355771817000103 . ISSN  1355-7718.
  5. ^ Фаулер, Чарльз Б. (октябрь 1967 г.). «Музей музыки: история механических инструментов». Журнал педагогов музыки . 54 (2): 45–49. doi :10.2307/3391092. JSTOR  3391092. S2CID  190524140.
  6. ^ Ноэль Шарки (2007), Программируемый робот 13-го века, Университет Шеффилда
  7. ^ Дули, Джон Ф. (2013). Краткая история криптологии и криптографических алгоритмов . Springer Science & Business Media. С. 12–3. ISBN 9783319016283.
  8. ^ Фуэги, Дж.; Фрэнсис, Дж. (2003). «Лавлейс и Бэббидж и создание «заметок» 1843 года»". Анналы истории вычислительной техники IEEE . 25 (4): 16. doi :10.1109/MAHC.2003.1253887.
  9. ^ Рохас, Р. (2021). «Компьютерные программы Чарльза Бэббиджа». IEEE Annals of the History of Computing . 43 (1): 6–18. doi :10.1109/MAHC.2020.3045717.
  10. ^ Рохас, Р. (2024). «Первая компьютерная программа». Сообщения ACM . 67 (6): 78–81. doi : 10.1145/3624731 .
  11. ^ da Cruz, Frank (10 марта 2020 г.). «История вычислений в Колумбийском университете – Герман Холлерит». Колумбийский университет . Columbia.edu. Архивировано из оригинала 29 апреля 2020 г. . Получено 25 апреля 2010 г. .
  12. ^ "Память и хранение | Хронология компьютерной истории | Музей компьютерной истории". www.computerhistory.org . Архивировано из оригинала 27 мая 2021 г. . Получено 3 июня 2021 г. .
  13. ^ Риджуэй, Ричард (1952). «Составление рутины». Труды национального собрания ACM 1952 года (Торонто) на - ACM '52 . стр. 1–5. doi : 10.1145/800259.808980 . ISBN 9781450379250. S2CID  14878552.
  14. ^ Морис В. Уилкс . 1968. Компьютеры тогда и сейчас. Журнал Ассоциации вычислительной техники, 15(1):1–7, январь. стр. 3 (комментарий в скобках добавлен редактором), «(Я не думаю, что термин компилятор был тогда [1953] общеупотребительным, хотя на самом деле он был введен Грейс Хоппер.)»
  15. ^ [1] Первые в мире компиляторы COBOL. Архивировано 13 октября 2011 г. на Wayback Machine.
  16. ^ ab Bergstein, Brian (20 марта 2007 г.). "Создатель Fortran Джон Бэкус умирает". NBC News . Архивировано из оригинала 29 апреля 2020 г. Получено 25 апреля 2010 г.
  17. ^ «NIST разработает дорожную карту облаков». InformationWeek . 5 ноября 2010 г. Инициатива в области вычислений направлена ​​на устранение барьеров для внедрения облаков в области безопасности, совместимости, переносимости и надежности.
  18. ^ "На чем это основано". Computerworld . 9 апреля 1984 г. стр. 13. На чем это основано? Надежность Переносимость Совместимость
  19. ^ "Programming 101: Tips to become a good programmer - Wisdom Geek". Wisdom Geek . 19 мая 2016 г. Архивировано из оригинала 23 мая 2016 г. Получено 23 мая 2016 г.
  20. ^ Основы архитектуры программного обеспечения: инженерный подход . O'Reilly Media. 2020. ISBN 978-1492043454.
  21. ^ Элшофф, Джеймс Л.; Маркотти, Майкл (1982). «Улучшение читаемости компьютерных программ для облегчения модификации». Сообщения ACM . 25 (8): 512–521. doi : 10.1145/358589.358596 . S2CID  30026641.
  22. Multiple (wiki). "Readability". Docforge . Архивировано из оригинала 29 апреля 2020 г. Получено 30 января 2010 г.
  23. ^ Энтикнап, Николас (11 сентября 2007 г.). "SSL/Computer Weekly IT salary survey: financial boom drives IT job growth" . Архивировано из оригинала 26 октября 2011 г. . Получено 24 июня 2009 г. .
  24. Митчелл, Роберт (21 мая 2012 г.). «Утечка мозгов из Cobol». Computer World. Архивировано из оригинала 12 февраля 2019 г. Получено 9 мая 2015 г.
  25. ^ "Фотография предоставлена ​​Центром надводных боевых действий ВМС, Дальгрен, Вирджиния, из National Geographic, сентябрь 1947 г.". 15 июля 2020 г. Архивировано из оригинала 13 ноября 2020 г. Получено 10 ноября 2020 г.
  26. ^ Прат, Шантель С.; Мадхьястха, Тара М.; Моттарелла, Малайка Дж.; Куо, Чу-Сюань (2 марта 2020 г.). «Связь естественной языковой способности с индивидуальными различиями в изучении языков программирования». Scientific Reports . 10 (1): 3817. Bibcode :2020NatSR..10.3817P. doi :10.1038/s41598-020-60661-8. ISSN  2045-2322. PMC 7051953 . PMID  32123206. 
  27. ^ «Для мозга чтение компьютерного кода — это не то же самое, что чтение языка». Новости MIT | Массачусетский технологический институт . 15 декабря 2020 г. Получено 29 июля 2023 г.

Источники

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

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