Jump to content

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

(Перенаправлено из читаемого кода человека )

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

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

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

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

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

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

Вход исходного кода

[ редактировать ]

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

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

[ редактировать ]

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

[ редактировать ]

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

  • Надежность : как часто результаты программы являются правильными. Это зависит от концептуальной правильности алгоритмов и минимизации ошибок программирования, таких как ошибки в управлении ресурсами (например, переполнение буфера и условия гонки ) и логические ошибки (такие как разделение по нулевым или вне-один ошибки ).
  • Надежность : насколько хорошо программа предвидит проблемы из -за ошибок (не ошибок). Это включает в себя такие ситуации, как неправильные, неуместные или поврежденные данные, недоступность необходимых ресурсов, таких как память, службы операционной системы и сетевые соединения, ошибка пользователей и неожиданные перебои в электроэнергии.
  • Юзабилити : эргономика программы: легкость, с которой человек может использовать программу для своей предполагаемой цели или в некоторых случаях даже непредвиденных целей. Такие проблемы могут сделать или нарушить свой успех даже независимо от других проблем. Это включает в себя широкий спектр текстовых, графических, а иногда и аппаратных элементов, которые улучшают ясность, интуитивность, сплоченность и полноту пользовательского интерфейса программы.
  • Портативность : диапазон компьютерных аппаратных и операционных системных исходный код программы платформ, на которых можно скомпилировать / интерпретировать . Это зависит от различий в объектах программирования, предоставленных различными платформами, включая аппаратные и операционные системы, ожидаемое поведение аппаратной и операционной системы, а также доступность компиляторов, специфичных для платформы (а иногда и библиотек) для языка исходного кода.
  • Обслуживаемость : легкость, с которой программа может быть изменена ее нынешними или будущими разработчиками, чтобы сделать улучшения или настраивать, исправлять ошибки и отверстия для безопасности , или адаптировать ее к новым средам. Хорошие практики [ 19 ] Во время первоначальной разработки имеет значение в этом отношении. Это качество может не быть непосредственно очевидным для конечного пользователя, но оно может значительно повлиять на судьбу программы в долгосрочной перспективе.
  • Эффективность / производительность : мера системных ресурсов, которые потребляет программа (время процессора, пространство памяти, медленные устройства, такие как диски, пропускная способность сети и в некоторой степени даже взаимодействие с пользователем): чем меньше, тем лучше. Это также включает в себя тщательное управление ресурсами, например, очистку временных файлов и устранение утечек памяти . Это часто обсуждается под тенью выбранного языка программирования. Хотя язык, безусловно, влияет на производительность, даже более медленные языки, такие как Python , могут мгновенно выполнять программы с человеческой точки зрения. Скорость, использование ресурсов и производительность важны для программ, которые узкие места для системы, но эффективное использование времени программиста также важно и связано с затратами: больше оборудования может быть дешевле.

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

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

[ редактировать ]

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

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

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

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

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

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

[ редактировать ]

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

Методологии

[ редактировать ]

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

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

Аналогичная методика, используемая для дизайна базы данных,-это моделирование объектов ( ER Modeling ).

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

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

[ редактировать ]

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

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]
  1. ^ Bebbington, Shaun (2014). «Что такое кодирование» . Tumblr . Архивировано с оригинала 29 апреля 2020 года . Получено 3 марта 2014 года .
  2. ^ Bebbington, Shaun (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). «Опционально громкоговорителя: история электроакустической музыки на основе не-лауза» » . Организованный звук . 22 (2). Издательство Кембриджского университета : 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. ^ Fuegi, J.; Фрэнсис, Дж. (2003). "Lovelace & Babbage и создание" заметок 1843 года ". IEEE ANNALS ИСТОРИЯ ИСКУССТВА . 25 (4): 16. doi : 10.1109/mahc.2003.1253887 .
  9. ^ Рохас Р. (2021). «Компьютерные программы Чарльза Бэббиджа». IEEE ANNALS ИСТОРИЯ ИСКУССТВА . 43 (1): 6–18. doi : 10.1109/mahc.2020.3045717 .
  10. ^ Рохас Р. (2024). «Первая компьютерная программа» . Коммуникации ACM . 67 (6): 78–81. doi : 10.1145/3624731 .
  11. ^ Да Круз, Фрэнк (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 Aractived 13 октября 2011 года на The Wayback Machine
  16. ^ Jump up to: а беременный Бергштейн, Брайан (20 марта 2007 г.). «Создатель Фортрана Джон Бэкус умирает» . NBC News . Архивировано с оригинала 29 апреля 2020 года . Получено 25 апреля 2010 года .
  17. ^ «Nist для разработки облачной дорожной карты» . InformationWeek . 5 ноября 2010 года. Вычислительная инициатива направлена ​​на удаление барьеров для принятия облаков в области безопасности, совместимости, переносимости и надежности.
  18. ^ «На чем это основано». Computerworld . 9 апреля 1984 г. с. 13. Это основано на ... переносимости надежности. Совместимость
  19. ^ «Программирование 101: Советы, чтобы стать хорошим программистом - мудрость» . Мудрость . 19 мая 2016 года. Архивировано с оригинала 23 мая 2016 года . Получено 23 мая 2016 года .
  20. ^ Основы программной архитектуры: инженерный подход . О'Рейли СМИ. 2020. ISBN  978-1492043454 .
  21. ^ Elshoff, James L.; Маркотти, Майкл (1982). «Улучшение читаемости компьютерной программы для помощи в изменении» . Коммуникации ACM . 25 (8): 512–521. doi : 10.1145/3585889.358596 . S2CID   30026641 .
  22. ^ Множественные (вики). «Читабельность» . Docforge . Архивировано с оригинала 29 апреля 2020 года . Получено 30 января 2010 года .
  23. ^ Enticknap, Николас (11 сентября 2007 г.). «SSL/Компьютерный еженедельный обзор ИТ -заработной платы: финансовый бум стимулирует рост рабочих мест» . Архивировано из оригинала 26 октября 2011 года . Получено 24 июня 2009 года .
  24. ^ Митчелл, Роберт (21 мая 2012 г.). «Стечение мозга COBOL» . Компьютерный мир. Архивировано с оригинала 12 февраля 2019 года . Получено 9 мая 2015 года .
  25. ^ «Фотография любезно предоставлена ​​военно -морским военным центром, Далгрен, штат Вирджиния, от National Geographic сентября 1947 года» . 15 июля 2020 года. Архивировано с оригинала 13 ноября 2020 года . Получено 10 ноября 2020 года .
  26. ^ Прат, Шантель с.; Мадхьястха, Тара М.; Mottarella, Malayka J.; Куо, Чу-Хсуан (2 марта 2020 г.). «Связывание естественного языка с индивидуальными различиями в языках программирования обучения» . Научные отчеты . 10 (1): 3817. BIBCODE : 202020NATSR..10.3817P . doi : 10.1038/s41598-020-60661-8 . ISSN   2045-2322 . PMC   7051953 . PMID   32123206 .
  27. ^ «Для мозга чтение компьютерного кода - это не то же самое, что чтение языка» . MIT News | Массачусетский технологический институт . 15 декабря 2020 года . Получено 29 июля 2023 года .

Источники

[ редактировать ]

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 556e9e30a0d214b8f7dd7c052a64cde6__1726251000
URL1:https://arc.ask3.ru/arc/aa/55/e6/556e9e30a0d214b8f7dd7c052a64cde6.html
Заголовок, (Title) документа по адресу, URL1:
Computer programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)