Разработка программного обеспечения |
---|
Компьютерное программирование - это процесс проектирования и создания исполняемой компьютерной программы для достижения определенного результата вычислений или выполнения определенной задачи. Программирование включает в себя такие задачи, как: анализ, создание алгоритмов , точность алгоритмов профилирования и потребление ресурсов, а также реализация алгоритмов на выбранном языке программирования (обычно называемом кодированием ). [1] [2] Исходный код программы написан на одном или нескольких языках, которые понятны для программистов , а не машинный код, который непосредственно выполняется центральным процессором . Цель программирования - найти последовательность инструкций, которая автоматизирует выполнение задачи (которая может быть такой же сложной, как операционная система ) на компьютере , часто для решения данной проблемы. Таким образом, для профессионального программирования часто требуется опыт в нескольких различных предметах, включая знание области приложения , специализированных алгоритмов и формальной логики .
Сопровождающие и связанные с программированием задачи включают: тестирование , отладку , обслуживание исходного кода , внедрение систем сборки и управление производными артефактами , такими как машинный код компьютерных программ. Их можно рассматривать как часть процесса программирования, но часто термин « разработка программного обеспечения» используется для этого более крупного процесса, а термин « программирование» , « реализация» или « кодирование» зарезервирован для фактического написания кода. Программная инженерия сочетает инженерные методы с практикой разработки программного обеспечения. Обратный инжиниринг - это связанный процесс, используемый дизайнерами, аналитиками и программистами для понимания и воссоздания / повторной реализации. [3]
Программируемые устройства существуют веками. Еще в 9 веке программируемый музыкальный секвенсор был изобретен персидскими братьями Бану Муса , которые описали автоматизированный механический флейтист в Книге изобретательных устройств . [4] [5] В 1206 году арабский инженер Аль-Джазари изобрел программируемую драм-машину, в которой музыкальный механический автомат можно было заставить воспроизводить различные ритмы и паттерны ударных с помощью колышков и кулачков . [6] [7] В 1801 году жаккардовый ткацкий станокмогли производить совершенно другие переплетения, изменяя «программу» - серию картонных карточек с пробитыми в них отверстиями.
Алгоритмы взлома кода также существуют веками. В IX веке арабский математик Аль-Кинди описал криптографический алгоритм для расшифровки зашифрованного кода в «Рукописи по расшифровке криптографических сообщений» . Он дал первое описание криптоанализа с помощью частотного анализа , самого раннего алгоритма взлома кода. [8]
Первая компьютерная программа , как правило , приурочены к 1843 году, когда математик Ада Лавлейс опубликовал алгоритм для вычисления последовательности чисел Бернулли , предназначенных для осуществляться Чарльз Бэббидж «s Analytical Engine . [9]
В 1880-х годах Герман Холлерит изобрел концепцию хранения данных в машиночитаемой форме. [10] Позже панель управления (соединительная плата), добавленная к его табулятору 1906 года типа I, позволила программировать его для различных задач, и к концу 1940-х годов оборудование для записи единиц, такое как IBM 602 и IBM 604 , было запрограммировано с помощью панелей управления. таким же образом, как и первые электронно-вычислительные машины . Однако с появлением в 1949 году концепции компьютера с хранимыми программами и программы, и данные хранились и обрабатывались в памяти компьютера одинаково . [11]
Машинный код был языком ранних программ, написанных в наборе команд конкретной машины, часто в двоичной записи. Вскоре были разработаны языки ассемблера, которые позволили программисту указывать инструкции в текстовом формате (например, ADD X, TOTAL) с сокращениями для каждого кода операции и значимыми именами для указания адресов. Однако, поскольку язык ассемблера - это не что иное, как разные обозначения машинного языка, любые две машины с разными наборами инструкций также имеют разные языки ассемблера.
Языки высокого уровня сделали процесс разработки программы более простым и понятным и менее привязанным к базовому оборудованию. FORTRAN , первый широко используемый язык высокого уровня с функциональной реализацией, вышел в 1957 году [12], и вскоре были разработаны многие другие языки, в частности COBOL, предназначенный для коммерческой обработки данных, и Lisp для компьютерных исследований.
Эти скомпилированные языки позволяют программисту писать программы, используя синтаксически более богатые термины и более способные абстрагироваться от кода, что упрощает нацеливание на различные наборы машинных инструкций с помощью объявлений компиляции и эвристики. Первый компилятор для языка программирования был разработан Грейс Хоппер . [13] Когда Хоппер приступила к работе над UNIVAC в 1949 году, она принесла с собой идею использования компиляторов. [14] [15] Компиляторы используют возможности компьютеров, чтобы упростить программирование [12] , позволяя программистам определять вычисления, вводя формулу с использованием инфиксной нотации (например,Y = X * 2 + 5 * X + 9 ) например. FORTRAN , первый широко используемый язык высокого уровня, имеющий функциональную реализацию, которая позволяла абстрагировать повторно используемые блоки кода, вышел в 1957 году [12], и вскоре были разработаны многие другие языки, в частности COBOL, предназначенный для коммерческой обработки данных, и Lisp для компьютерных исследований. В 1951 году Френсис Е. Холбертон разработала первый генератор сортировки слиянием , которая выбежала на UNIVAC I . [16] Другая женщина, работающая в UNIVAC, Адель Милдред Косс , разработала программу, которая была предшественником генераторов отчетов . [16]Идея создания COBOL возникла в 1959 году, когда Мэри К. Хоуз , работавшая в Burroughs Corporation , организовала встречу для обсуждения создания общего делового языка. [17] Она пригласила шесть человек, в том числе Грейс Хоппер. [17] Хоппер принимал участие в разработке COBOL как бизнес-языка и создании «самодокументируемого» программирования. [18] [19] Вклад Хоппер в COBOL был основан на ее языке программирования FLOW-MATIC . [15] В 1961 году Жан Э. Саммет разработал FORMAC, а также опубликовал « Языки программирования: история и основы»., который впоследствии стал стандартной работой по языкам программирования. [17] [20]
Программы по-прежнему вводились с использованием перфокарт или бумажной ленты . К концу 1960-х годов устройства хранения данных и компьютерные терминалы стали достаточно дешевыми, чтобы программы можно было создавать, вводя их непосредственно в компьютеры. Фрэнсис Холбертон создала код, разрешающий ввод с клавиатуры, пока она работала в UNIVAC. [21]
Были разработаны текстовые редакторы, которые позволяли вносить изменения и исправления намного проще, чем с перфокартами. Сестра Мэри Кеннет Келлер занималась разработкой языка программирования BASIC, когда она была аспирантом Дартмута в 1960-х годах. [22] Один из первых объектно-ориентированных языков программирования , Smalltalk , был разработан семью программистами, включая Адель Голдберг , в 1970-х годах. [23]
Каким бы ни был подход к разработке, окончательная программа должна удовлетворять некоторым фундаментальным свойствам. Следующие свойства являются одними из наиболее важных: [24] [25]
В компьютерном программировании под удобочитаемостью понимается легкость, с которой человек-читатель может понять цель, поток управления и работу исходного кода. Это влияет на вышеперечисленные аспекты качества, включая портативность, удобство использования и, самое главное, ремонтопригодность.
Удобочитаемость важна, потому что программисты тратят большую часть своего времени на чтение, пытаясь понять и изменить существующий исходный код, а не писать новый исходный код. Нечитаемый код часто приводит к ошибкам, неэффективности и дублированию кода . Исследование [27] показало, что несколько простых преобразований читабельности [ какие? ] сделал код короче и значительно сократил время, необходимое для его понимания.
Следование последовательному стилю программирования часто способствует удобочитаемости. Однако удобочитаемость - это больше, чем просто стиль программирования. Многие факторы, мало или совсем не связанные со способностью компьютера эффективно компилировать и выполнять код, способствуют удобочитаемости. [28] Некоторые из этих факторов включают:
В презентации аспекты этого (например, отступы, переносы строк, цвет подсветки, и т.д.) часто обрабатываются редактором исходного кода , но аспекты содержания отражают талант и мастерство программиста.
Различные языки визуального программирования также были разработаны с намерением решить проблемы удобочитаемости путем принятия нетрадиционных подходов к структуре кода и отображению. Интегрированные среды разработки (IDE) стремятся объединить всю такую помощь. Такие методы, как рефакторинг кода, могут улучшить читаемость.
Академическая область и инженерная практика компьютерного программирования в значительной степени связаны с обнаружением и реализацией наиболее эффективных алгоритмов для данного класса проблем. Для этого алгоритмы классифицируются по порядкам с использованием так называемой нотации Big O , которая выражает использование ресурсов, таких как время выполнения или потребление памяти, с точки зрения размера ввода. Опытные программисты знакомы с множеством хорошо зарекомендовавших себя алгоритмов и связанных с ними сложностей и используют эти знания для выбора алгоритмов, которые лучше всего подходят для конкретных обстоятельств.
«Программирование компьютера для игры в шахматы» - это статья 1950 года, в которой оценивался «минимаксный» алгоритм, который является частью истории алгоритмической сложности; курс IBM Deep Blue (шахматный компьютер) является частью учебной программы по информатике в Стэнфордском университете . [29]
Первым шагом в большинстве формальных процессов разработки программного обеспечения является анализ требований , за которым следует тестирование для определения модели ценности, внедрения и устранения сбоев (отладки). Для каждой из этих задач существует множество разных подходов. Одним из популярных подходов к анализу требований является анализ вариантов использования . Многие программисты используют формы гибкой разработки программного обеспечения, в которых различные этапы формальной разработки программного обеспечения более интегрированы в короткие циклы, которые занимают несколько недель, а не лет. Есть много подходов к процессу разработки программного обеспечения.
Популярные методы моделирования включают объектно-ориентированный анализ и проектирование ( OOAD ) и архитектуру, управляемую моделями ( MDA ). Унифицированный язык моделирования ( UML ) - это обозначение, используемое как для OOAD, так и для MDA.
Аналогичный метод, используемый для проектирования баз данных, - это моделирование отношений сущностей ( моделирование ER ).
Методы реализации включают императивные языки ( объектно-ориентированные или процедурные ), функциональные языки и языки логики .
Очень сложно определить, какие современные языки программирования самые популярные. Методы измерения популярности языков программирования включают: подсчет количества объявлений о вакансиях, в которых упоминается этот язык, [30] количество проданных книг и курсов, обучающих языку (это переоценивает важность новых языков), а также оценки количества существующих строк. кода, написанного на этом языке (это недооценивает количество пользователей бизнес-языков, таких как COBOL).
Некоторые языки очень популярны для определенных типов приложений, в то время как некоторые языки регулярно используются для написания множества различных типов приложений. Например, COBOL по-прежнему силен в корпоративных центрах обработки данных [31], часто на больших мэйнфреймах , Fortran - в инженерных приложениях, языки сценариев - в веб- разработке и C - во встроенном ПО . Во многих приложениях при создании и использовании используется сочетание нескольких языков. Новые языки обычно разрабатываются на основе синтаксиса предыдущего языка с добавлением новых функций (например, C ++ добавляет объектную ориентацию в C иJava добавляет в C ++ управление памятью и байт-код , но в результате теряет эффективность и возможность низкоуровневых манипуляций).
Отладка - очень важная задача в процессе разработки программного обеспечения, поскольку наличие дефектов в программе может иметь серьезные последствия для ее пользователей. Некоторые языки более подвержены некоторым видам ошибок, потому что их спецификация не требует, чтобы компиляторы выполняли такую же тщательную проверку, как другие языки. Использование инструмента статического анализа кода может помочь обнаружить некоторые возможные проблемы. Обычно первым шагом в отладке является попытка воспроизвести проблему. Это может быть нетривиальная задача, например, с параллельными процессами или некоторыми необычными программными ошибками. Кроме того, конкретная пользовательская среда и история использования могут затруднить воспроизведение проблемы.
После воспроизведения ошибки, возможно, потребуется упростить ввод программы, чтобы упростить отладку. Например, когда ошибка в компиляторе может привести к сбою при синтаксическом анализе некоторого большого исходного файла, упрощения тестового примера, в результате которого в исходном исходном файле будет всего несколько строк, может быть достаточно для воспроизведения того же сбоя. Необходим метод проб и ошибок / разделяй и властвуй: программист попытается удалить некоторые части исходного тестового примера и проверить, существует ли проблема. При отладке проблемы в графическом интерфейсе программист может попытаться пропустить некоторые действия пользователя из исходного описания проблемы и проверить, достаточно ли оставшихся действий для появления ошибок. Создание сценариев и установка точек останова также являются частью этого процесса.
Отладка часто выполняется с помощью IDE . Также используются автономные отладчики, такие как GDB , и они часто предоставляют меньше визуальной среды, обычно с использованием командной строки . Некоторые текстовые редакторы, такие как Emacs, позволяют вызывать GDB через них, чтобы обеспечить визуальную среду.
Разные языки программирования поддерживают разные стили программирования (так называемые парадигмы программирования).). Выбор используемого языка зависит от многих факторов, таких как политика компании, соответствие задачам, доступность сторонних пакетов или индивидуальные предпочтения. В идеале будет выбран язык программирования, наиболее подходящий для поставленной задачи. Компромиссы от этого идеала включают поиск достаточного количества программистов, знающих язык, для создания команды, наличие компиляторов для этого языка и эффективность, с которой выполняются программы, написанные на данном языке. Языки образуют приблизительный спектр от «низкого уровня» до «высокого уровня»; «низкоуровневые» языки обычно более машинно-ориентированы и быстрее выполняются, тогда как «высокоуровневые» языки более абстрактны и проще в использовании, но выполняются медленнее. Обычно кодировать на языках высокого уровня проще, чем на языках "высокого уровня".низкоуровневые.
Аллен Дауни в своей книге « Как думать как компьютерный ученый» пишет:
Многие компьютерные языки предоставляют механизм для вызова функций, предоставляемых разделяемыми библиотеками . Если функции в библиотеке следуют соответствующим соглашениям во время выполнения (например, метод передачи аргументов ), то эти функции могут быть написаны на любом другом языке.
Компьютерные программисты - это те, кто пишет компьютерное программное обеспечение. В их работу обычно входят:
Хотя программирование в средствах массовой информации представлялось как предмет в некоторой степени математический, некоторые исследования показывают, что хорошие программисты обладают хорошими навыками в естественных человеческих языках и что обучение программированию похоже на изучение иностранного языка . [33] [ нужен лучший источник ]
Инициатива в области вычислительной техники направлена на устранение препятствий на пути внедрения облачных технологий в области безопасности, взаимодействия, переносимости и надежности.
Основано ли это на ... Надежности Портативности.
Совместимость
В 1950 году Клод Шеннон опубликовал ... "Программирование компьютера для игры в шахматы", ... "минимаксный" алгоритм.
Библиотечные ресурсы по компьютерному программированию |
|
В Викиучебнике есть книга на тему: Компьютерное программирование. |
В Викиучебнике есть книга по теме: Программирование для Windows. |
В Викиверситете есть учебные ресурсы по компьютерному программированию |