Написание программ по информатике

Компьютерное программирование-это процесс проектирования и создания исполняемой компьютерной программы для достижения определенного результата вычислений или выполнения определенной задачи. Программирование включает в себя такие задачи. Как анализ . Генерация алгоритмов, профилирование точности алгоритмов и потребления ресурсов. А также реализация алгоритмов на выбранном языке программирования (обычно называемом кодированием). Исходный код программы написан на одном или нескольких языках . Понятных программистам, а не на машинном коде, который непосредственно выполняется центральным процессором Цель программирования состоит в том . Чтобы найти последовательность инструкций. Которая автоматизирует выполнение задачи (которая может быть такой же сложной. Как операционная система) на компьютере, часто для решения данной задачи . Таким образом. Опытное программирование часто требует знаний в нескольких различных предметах . Включая знание предметной области приложения, специализированных алгоритмов и формальной логики.

Задачи , сопутствующие программированию и связанные с ним . Включают в себя: тестирование, отладку, обслуживание исходного кода . Реализацию систем сборкии управление производными артефактами, такими как машинный код компьютерных программ. Они могут рассматриваться как часть процесса программирования. Но часто термин обеспечения, реализацияили кодированиеПрограммная инженерия сочетает инженерные методы с практикой разработки программного обеспечения. Реверс-инжиниринг это связанный с этим процесс. Используемый дизайнерами. Аналитиками и программистами для понимания и повторного создания/повторной реализации.[3]:3

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

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

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

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

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

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

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

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

Языки высокого уровня сделали процесс разработки программы более простым и понятным и менее привязанным к базовому оборудованию. ФОРТРАН, первый широко используемый язык высокого уровня. Имеющий функциональную реализацию. Появился в 1957году [11], и вскоре были разработаны многие другие языки-в частности, COBOL, предназначенный для коммерческой обработки данных, и Lisp для компьютерных исследований.

Эти компилируемые языки позволяют программисту писать программы в терминах. Которые синтаксически богаче и более способны абстрагировать код. Делая его ориентированным на различные наборы машинных команд с помощью деклараций компиляции и эвристики. Первый компилятор для языка программирования был разработан Грейс Хоппер. когда Хоппер вышла на работу в UNIVAC в 1949 году. Она принесла идею использования компиляторов с ней. составители использовать мощности компьютеров. Чтобы сделать программирование проще[11] , позволяя программистам укажите расчеты путем ввода формул с помощью инфиксной нотации (например, Y = X*2 + 5*X + 9) например. ФОРТРАН, первый широко используемый высокоуровневый язык. Функциональная реализация которого позволяла абстрагировать многократно используемые блоки кода. Появился в 1957году [11], и вскоре были разработаны многие другие языки-в частности, COBOL, предназначенный для коммерческой обработки данных, и Lisp для компьютерных исследований. В 1951 году Фрэнсис Э. Холбертон разработала первый генератор сортировки-слияния, который работал на UNIVACI. Другая женщина. Работавшая в UNIVAC , Адель Милдред Косс, разработала программу. Которая была предшественницей генераторов отчетов. Идея создания COBOL возникла в 1959 году. Когда Мэри К. Хейз, работавший в корпорации Берроуза, назначил встречу. Чтобы обсудить создание общего делового языка.Она пригласила шесть человек. Включая Грейс Хоппер. Хоппер был вовлечен в разработку COBOL как делового языка и создание Вклад Хоппер в COBOL был основан на ее языке программирования. Названном FLOW-MATIC. В 1961 году Жан Э. Саммет разработал FORMAC, а также опубликовал Языки программирования: история и основы, которая впоследствии стала стандартной работой по языкам программирования.[19]

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

Программы в основном все еще вводились с помощью перфокарт или бумажной ленты. См. Компьютерное программирование в эпоху перфокарт. К концу 1960-х годов устройства хранения данных и компьютерные терминалы стали достаточно недорогими. Чтобы программы можно было создавать. Вводя их непосредственно в компьютеры. Фрэнсис Холбертон создала код. Позволяющий вводить данные с клавиатуры. Пока она работала в UNIVAC.]

Были разработаны текстовые редакторы. Которые позволяли вносить изменения и исправления гораздо легче. Чем с перфокартами. Сестра Мэри Кеннет Келлер работала над разработкой языка программирования BASIC, когда она была аспиранткой в Дартмуте в 1960-х годах. Один из первых объектно-ориентированных языков программирования , Smalltalk, был разработан семью программистами . Включая Адель Голдберг, в 1970-х годах.]

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

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

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

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

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

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

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

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

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

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

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

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

Шахматные алгоритмы как пример

«Программирование компьютера для игры в шахматы» — это статья 1950 года. В которой оценивался «минимаксный» алгоритм, являющийся частью истории алгоритмической сложности; курс по Deep Blue (шахматному компьютеру) IBM является частью учебной программы по информатике в Стэнфордском университете.]

Методологии

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

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

Аналогичным методом. Используемым для проектирования баз данных. Является Моделирование сущностей-отношений (ER Modeling).

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

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

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

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

Отладка

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

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

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

Отладка часто выполняется с помощью IDE , таких как Eclipse, Visual Studio, Xcode, Kdevelop, NetBeans и Code::Blocks. Также используются автономные отладчики. Такие как GDB, и они часто обеспечивают меньшую визуальную среду. Обычно используя командную строку. Некоторые текстовые редакторы. Такие как Emacs, позволяют вызывать GDB через них. Чтобы обеспечить визуальную среду.

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

Различные языки программирования поддерживают различные стили программирования (называемые парадигмами программированияВыбор используемого языка зависит от многих факторов. Таких как политика компании. Пригодность к задаче. Наличие сторонних пакетов или индивидуальные предпочтения. В идеале будет выбран язык программирования. Наиболее подходящий для данной задачи. Компромиссы с этим идеалом включают в себя поиск достаточного количества программистов. Знающих язык. Чтобы создать команду. Наличие компиляторов для этого языка и эффективность. С которой выполняются программы. Написанные на данном языке. Языки образуют приблизительный спектр от Обычно проще писать код на

Аллен Даунив своей книге

Детали выглядят по-разному на разных языках. Но несколько основных инструкций появляются практически на каждом языке:

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

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

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

См. также

  1. ^
  2. ^ Bebbington. Shaun (2014). . Тамблер. Архивирован с оригинала 29 апреля 2020года . Извлечено 3 марта 2014года .
  3. ^ Эйлам, Эльдад (2005). Реверс: секреты реверсивной инженерии. Джон Уайли и сыновья. ISBN 978-0-7645-7481-8.CS1 maint: uses authors parameter (ссылка)
  4. ^ Koetsier, Teun (2001), «On the prehistory of programmable machines: musical automata, looms, calculators», Mechanism and Machine Theory, Elsevier, 36 (5): 589-603, doi:10.1016/S0094-114X(01)00005-2.
  5. ^ Капур, Аджай; Карнеги, Дейл; Мерфи, Джим; Лонг, Джейсон (2017). . Организованный Звук. Издательство Кембриджского университета. 22 (2): 195–205. doi:10.1017/S1355771817000103. ISSN 1355-7718.
  6. ^ Фаулер, Чарльз Б. (октябрь 1967). Журнал музыкальных педагогов. 54 (2): 45–49. doi:10.2307/3391092. JSTOR 3391092. S2CID 190524140.
  7. ^ Ноэль Шарки (2007), Программируемый робот 13-го века, Шеффилдский университет
  8. ^ Дули, Джон Ф. (2013). Краткая история криптологии и криптографических алгоритмов. Springer Science & Business Media. стр. 12-3. ISBN 9783319016283.
  9. ^ Fuegi, J.; Francis, J. (2003). IEEE Annals of the History of Computing. 25 (4): 16. doi:10.1109/MAHC.2003.1253887.
  10. ^ да Круз, Фрэнк (10 марта 2020 года). . Колумбийский университет. Columbia.edu Архивирован с оригинала 29 апреля 2020года . Извлечено 25 апреля 2010года .
  11. ^ b c Бергштейн. Брайан (20 марта 2007). . Новости Эн-Би-си . Архивирован с оригинала 29 апреля 2020года . Извлечено 25 апреля 2010года .
  12. ^ . 9 апреля 1972года . Проверено 13 октября 2018 года – via Newspapers.com…
  13. ^ . Курьер-журнал. 12 декабря 2001года . Проверено 13 октября 2018 года – via Newspapers.com…
  14. ^ . Мэрилендский университет. Колледж-Парк. Извлечено 14 октября 2018года .
  15. ^ . Информационнаянеделя . 5 ноября 2010 года. Computing initiative стремится устранить барьеры на пути внедрения облачных технологий в области безопасности. Интероперабельности. Переносимости и надежности.
  16. ^ Компьютерныймир . 9 апреля 1984 г. стр... Надежность Переносимость. Совместимость
  17. ^ . Выродок мудрости. 19 мая 2016года . Извлечено 23 мая 2016года .
  18. ^ Elshoff, James L.; Marcotty, Michael (1982). Коммуникации АСМ. 25 (8): 512–521. doi:10.1145/358589.358596. S2CID 30026641.
  19. ^ Несколько (wiki). . Докфордж. Архивирован с оригинала 29 апреля 2020года . Извлечено 30 января 2010года .
  20. ^ Пич, Крис. . В 1950 году Клод Шеннон опубликовал книгу …
  21. ^ Энтикнап, Николас (11 сентября 2007). .
  22. ^ Митчелл, Роберт (21 мая 2012). . Компьютерный мир. Извлечено 9 мая 2015года .
  23. ^ Фотография любезно предоставлена Военно-морским центром надводной войны, Дальгрен. Штат Вирджиния. Из National Geographic сентябрь 1947 г.

Источники

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

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