Информатика — это изучение вычислений , информации и автоматизации . [1] [2] [3] Информатика охватывает теоретические дисциплины (такие как алгоритмы , теория вычислений и теория информации ) и прикладные дисциплины (включая проектирование и реализацию аппаратного и программного обеспечения ). [4] [5] [6]
Алгоритмы и структуры данных играют центральную роль в информатике. [7] Теория вычислений касается абстрактных моделей вычислений и общих классов задач , которые могут быть решены с их помощью. Области криптографии и компьютерной безопасности включают изучение средств для безопасной связи и предотвращения уязвимостей безопасности . Компьютерная графика и вычислительная геометрия занимаются генерацией изображений. Теория языков программирования рассматривает различные способы описания вычислительных процессов, а теория баз данных касается управления хранилищами данных. Взаимодействие человека и компьютера исследует интерфейсы, через которые взаимодействуют люди и компьютеры, а программная инженерия фокусируется на дизайне и принципах, лежащих в основе разработки программного обеспечения. Такие области, как операционные системы , сети и встроенные системы, исследуют принципы и дизайн, лежащие в основе сложных систем . Компьютерная архитектура описывает конструкцию компьютерных компонентов и управляемого компьютером оборудования. Искусственный интеллект и машинное обучение направлены на синтез целевых процессов, таких как решение проблем, принятие решений, адаптация к окружающей среде, планирование и обучение, обнаруженных у людей и животных. В рамках искусственного интеллекта компьютерное зрение направлено на понимание и обработку изображений и видеоданных, в то время как обработка естественного языка направлена на понимание и обработку текстовых и лингвистических данных.
Основная задача компьютерной науки — определить, что можно автоматизировать, а что нет. [2] [8] [3] [9] [10] Премия Тьюринга общепризнанно считается высшей наградой в области компьютерной науки. [11] [12]
Самые ранние основы того, что впоследствии стало компьютерной наукой, появились еще до изобретения современного цифрового компьютера . Машины для вычисления фиксированных числовых задач, такие как абак, существовали с античности, помогая в вычислениях, таких как умножение и деление. Алгоритмы для выполнения вычислений существовали с античности, даже до разработки сложного вычислительного оборудования. [16]
Вильгельм Шиккард спроектировал и построил первый работающий механический калькулятор в 1623 году. [17] В 1673 году Готфрид Лейбниц продемонстрировал цифровой механический калькулятор, названный Stepped Reckoner . [18] Лейбница можно считать первым ученым-компьютерщиком и теоретиком информации по разным причинам, включая тот факт, что он задокументировал двоичную систему счисления. В 1820 году Томас де Кольмар запустил индустрию механических калькуляторов [примечание 1], когда он изобрел свой упрощенный арифмометр , первую вычислительную машину, достаточно прочную и надежную, чтобы ее можно было использовать ежедневно в офисной среде. Чарльз Бэббидж начал проектировать первый автоматический механичесий калькулятор , его Difference Engine , в 1822 году, что в конечном итоге дало ему идею первого программируемого механического калькулятора , его Analytical Engine . [19] Он начал разрабатывать эту машину в 1834 году, и «менее чем за два года он набросал многие из основных черт современного компьютера». [20] «Ключевым шагом стало принятие системы перфокарт, полученной из ткацкого станка Жаккарда » [20], что сделало ее бесконечно программируемой. [примечание 2] В 1843 году во время перевода французской статьи об аналитической машине Ада Лавлейс написала в одной из многочисленных включенных ею заметок алгоритм вычисления чисел Бернулли , который считается первым опубликованным алгоритмом, когда-либо специально разработанным для реализации на компьютере. [21] Около 1885 года Герман Холлерит изобрел табулятор , который использовал перфокарты для обработки статистической информации; в конечном итоге его компания стала частью IBM . Вслед за Бэббиджем, хотя и не знал о его более ранней работе, Перси Ладгейт в 1909 году опубликовал [22] вторую из единственных двух конструкций механических аналитических машин в истории. В 1914 году испанский инженер Леонардо Торрес Кеведо опубликовал свои «Очерки автоматики» [ 23] и спроектировал, вдохновленный Бэббиджем, теоретическую электромеханическую вычислительную машину, которая должна была управляться программой только для чтения. В статье также была представлена идея арифметики с плавающей точкой [24] [25]В 1920 году, чтобы отпраздновать 100-летие изобретения арифмометра, Торрес представил в Париже Электромеханический арифмометр , прототип, который продемонстрировал осуществимость электромеханической аналитической машины, [26] на которой команды можно было печатать, а результаты распечатывать автоматически. [27] В 1937 году, спустя сто лет после несбыточной мечты Бэббиджа, Говард Эйкен убедил IBM, которая производила все виды оборудования с перфокартами, а также занималась калькуляторным бизнесом [28], разработать свой гигантский программируемый калькулятор, ASCC/Harvard Mark I , на основе Аналитической машины Бэббиджа, которая сама использовала карты и центральный вычислительный блок. Когда машина была закончена, некоторые приветствовали ее как «мечту Бэббиджа, ставшую реальностью». [29]
В 1940-х годах, с развитием новых и более мощных вычислительных машин, таких как компьютер Атанасова-Берри и ENIAC , термин «компьютер» стал относиться к машинам, а не к их предшественникам-людям. [30] Когда стало ясно, что компьютеры могут использоваться не только для математических вычислений, область компьютерной науки расширилась, чтобы изучать вычисления в целом. В 1945 году IBM основала Научную вычислительную лабораторию Уотсона в Колумбийском университете в Нью-Йорке . Отремонтированный дом братства на Вест-Сайде Манхэттена был первой лабораторией IBM, посвященной чистой науке. Лаборатория является предшественником Исследовательского подразделения IBM, которое сегодня управляет исследовательскими центрами по всему миру. [31] В конечном итоге, тесные отношения между IBM и Колумбийским университетом сыграли решающую роль в появлении новой научной дисциплины, поскольку Колумбийский университет предложил один из первых академических кредитных курсов по информатике в 1946 году. [32] Информатику начали выделять в отдельную академическую дисциплину в 1950-х и начале 1960-х годов. [33] [34] Первая в мире программа получения степени по информатике, Кембриджский диплом по информатике , была запущена в компьютерной лаборатории Кембриджского университета в 1953 году. Первый факультет компьютерных наук в Соединенных Штатах был сформирован в Университете Пердью в 1962 году. [35] С тех пор, как стали доступны практические компьютеры, многие приложения вычислительной техники стали отдельными областями изучения со своими собственными правами.
Хотя впервые был предложен в 1956 году, [36] термин «компьютерная наука» появляется в статье 1959 года в Communications of the ACM , [37] в которой Луис Фейн выступает за создание Высшей школы компьютерных наук, аналогичной созданию Гарвардской школы бизнеса в 1921 году. [38] Луис оправдывает название, утверждая, что, как и наука управления , этот предмет является прикладным и междисциплинарным по своей природе, имея при этом характеристики, типичные для академической дисциплины. [37] Его усилия, а также усилия других, таких как численный аналитик Джордж Форсайт , были вознаграждены: университеты продолжили создавать такие факультеты, начиная с Purdue в 1962 году. [39] Несмотря на свое название, значительная часть компьютерной науки не включает в себя изучение самих компьютеров. Из-за этого было предложено несколько альтернативных названий. [40] Некоторые факультеты крупных университетов предпочитают термин «компьютерная наука» , чтобы подчеркнуть именно это различие. Датский ученый Петер Наур предложил термин даталогия [41] , чтобы отразить тот факт, что научная дисциплина вращается вокруг данных и обработки данных, не обязательно с участием компьютеров. Первым научным учреждением, использовавшим этот термин , был факультет даталогии Копенгагенского университета, основанный в 1969 году, а Петер Наур был первым профессором даталогии. Термин используется в основном в скандинавских странах. Альтернативный термин, также предложенный Науром, — наука о данных ; теперь он используется для многопрофильной области анализа данных, включая статистику и базы данных.
На заре вычислительной техники в сообщениях ACM было предложено несколько терминов для обозначения специалистов в этой области — turingineer , turologist , flow-charts-man , applied meta-mathematician и applied epistemologist . [42] Три месяца спустя в том же журнале было предложено comptologist , а в следующем году — hypologist . [43] Также был предложен термин computics . [44] В Европе часто используются термины, полученные из сокращенных переводов выражений «автоматическая информация» (например, «informazione automatica» на итальянском языке) или «информация и математика», например informatique (французский), Informatik (немецкий), informatica (итальянский, голландский), informática (испанский, португальский), informatika ( славянские языки и венгерский ) или pliroforiki ( πληροφορική , что означает информатика) на греческом языке . Похожие слова также были приняты в Великобритании (как в Школе информатики Эдинбургского университета ). [45] «В США, однако, информатика связана с прикладными вычислениями или вычислениями в контексте другой области». [46]
Фольклорная цитата, часто приписываемая Эдсгеру Дейкстре , но почти наверняка не сформулированная им впервые , гласит, что «компьютерная наука не более о компьютерах, чем астрономия о телескопах». [примечание 3] Проектирование и развертывание компьютеров и компьютерных систем обычно считается областью дисциплин, отличных от компьютерной науки. Например, изучение компьютерного оборудования обычно считается частью компьютерной инженерии , в то время как изучение коммерческих компьютерных систем и их развертывания часто называют информационными технологиями или информационными системами . Однако между различными дисциплинами, связанными с компьютерами, произошел обмен идеями. Исследования в области компьютерной науки также часто пересекаются с другими дисциплинами, такими как когнитивная наука , лингвистика , математика , физика , биология , науки о Земле , статистика , философия и логика .
Некоторые считают, что компьютерная наука имеет гораздо более тесную связь с математикой, чем многие научные дисциплины, при этом некоторые наблюдатели говорят, что вычисления являются математической наукой. [33] Ранняя компьютерная наука находилась под сильным влиянием работ таких математиков, как Курт Гёдель , Алан Тьюринг , Джон фон Нейман , Рожа Петер и Алонзо Чёрч , и между этими двумя областями продолжается полезный обмен идеями в таких областях, как математическая логика , теория категорий , теория доменов и алгебра . [36]
Связь между компьютерной наукой и программной инженерией является спорным вопросом, который еще больше запутывается спорами о том, что означает термин «программная инженерия» и как определяется компьютерная наука. [47] Дэвид Парнас , взяв пример из взаимосвязи между другими инженерными и научными дисциплинами, заявил, что основное внимание компьютерной науки уделяется изучению свойств вычислений в целом, в то время как основное внимание программной инженерии уделяется проектированию конкретных вычислений для достижения практических целей, что делает эти две отдельные, но взаимодополняющие дисциплины. [48]
Академические, политические и финансовые аспекты компьютерной науки, как правило, зависят от того, сформирован ли отдел с математическим или инженерным уклоном. Отделения компьютерных наук с математическим уклоном и числовой ориентацией рассматривают согласование с вычислительной наукой . Оба типа отделов, как правило, прилагают усилия для объединения области в образовательном плане, если не во всех исследованиях.
Несмотря на слово «наука» в названии, ведутся споры о том, является ли компьютерная наука дисциплиной науки, [49] математики, [50] или инженерии. [51] Аллен Ньюэлл и Герберт А. Саймон утверждали в 1975 году:
Информатика — эмпирическая дисциплина. Мы бы назвали ее экспериментальной наукой, но, как и астрономия, экономика и геология, некоторые из ее уникальных форм наблюдения и опыта не вписываются в узкий стереотип экспериментального метода. Тем не менее, они являются экспериментами. Каждая новая построенная машина — это эксперимент. Фактически, построение машины ставит вопрос перед природой; и мы слушаем ответ, наблюдая за работой машины и анализируя ее всеми доступными аналитическими и измерительными средствами. [51]
С тех пор утверждалось, что информатику можно классифицировать как эмпирическую науку, поскольку она использует эмпирическое тестирование для оценки правильности программ , но проблема остается в определении законов и теорем информатики (если таковые существуют) и определении характера экспериментов в информатике. [51] Сторонники классификации информатики как инженерной дисциплины утверждают, что надежность вычислительных систем исследуется так же, как мосты в гражданском строительстве и самолеты в аэрокосмической технике . [51] Они также утверждают, что в то время как эмпирические науки наблюдают то, что существует в настоящее время, информатика наблюдает то, что может существовать, и в то время как ученые открывают законы путем наблюдения, в информатике не было найдено никаких надлежащих законов, и вместо этого она занимается созданием явлений. [51]
Сторонники классификации компьютерной науки как математической дисциплины утверждают, что компьютерные программы являются физическими реализациями математических сущностей и программ, которые могут быть дедуктивно обоснованы с помощью математических формальных методов . [51] Ученые-компьютерщики Эдсгер В. Дейкстра и Тони Хоар рассматривают инструкции для компьютерных программ как математические предложения и интерпретируют формальную семантику языков программирования как математические аксиоматические системы . [51]
Ряд ученых-компьютерщиков утверждали, что в информатике выделяют три отдельные парадигмы. Питер Вегнер утверждал, что эти парадигмы — это наука, технология и математика. [52] Рабочая группа Питера Деннинга утверждала, что это теория, абстракция (моделирование) и проектирование. [33] Амнон Х. Иден описал их как «рационалистическую парадигму» (которая рассматривает информатику как раздел математики, который преобладает в теоретической информатике и в основном использует дедуктивное рассуждение), «технократическую парадигму» (которая может быть найдена в инженерных подходах, наиболее заметно в программной инженерии) и «научную парадигму» (которая подходит к артефактам, связанным с компьютерами, с эмпирической точки зрения естественных наук , [53] идентифицируемых в некоторых разделах искусственного интеллекта ). [54] Информатика фокусируется на методах, используемых в проектировании, спецификации, программировании, проверке, реализации и тестировании созданных человеком вычислительных систем. [55]
Как дисциплина, информатика охватывает ряд тем от теоретических исследований алгоритмов и пределов вычислений до практических вопросов внедрения вычислительных систем в аппаратное и программное обеспечение. [56] [57] CSAB , ранее называвшийся Computing Sciences Accreditation Board, который состоит из представителей Association for Computing Machinery (ACM) и IEEE Computer Society (IEEE CS) [58] , определяет четыре области, которые он считает критически важными для дисциплины информатики: теория вычислений , алгоритмы и структуры данных , методология и языки программирования , а также элементы и архитектура компьютера . В дополнение к этим четырем областям CSAB также определяет такие области, как программная инженерия, искусственный интеллект, компьютерные сети и связь, системы баз данных, параллельные вычисления, распределенные вычисления, взаимодействие человека и компьютера, компьютерная графика, операционные системы, а также числовые и символьные вычисления как важные области информатики. [56]
Теоретическая информатика по духу математична и абстрактна, но черпает свою мотивацию из практических и повседневных вычислений. Она стремится понять природу вычислений и, как следствие этого понимания, предоставить более эффективные методологии.
По словам Питера Деннинга, фундаментальный вопрос, лежащий в основе компьютерной науки, заключается в следующем: «Что можно автоматизировать?» [3] Теория вычислений сосредоточена на ответе на фундаментальные вопросы о том, что можно вычислить и какой объем ресурсов требуется для выполнения этих вычислений. В попытке ответить на первый вопрос теория вычислимости исследует, какие вычислительные задачи разрешимы на различных теоретических моделях вычислений . Второй вопрос рассматривается теорией сложности вычислений , которая изучает временные и пространственные затраты, связанные с различными подходами к решению множества вычислительных задач.
Знаменитая задача P = NP?, одна из задач Премии тысячелетия , [59] является открытой проблемой в теории вычислений.
Теория информации, тесно связанная с вероятностью и статистикой , связана с квантификацией информации. Она была разработана Клодом Шенноном для нахождения фундаментальных ограничений на операции обработки сигналов , такие как сжатие данных, а также на надежное хранение и передачу данных. [60] Теория кодирования — это изучение свойств кодов (систем для преобразования информации из одной формы в другую) и их пригодности для конкретного приложения. Коды используются для сжатия данных , криптографии , обнаружения и исправления ошибок , а в последнее время также для сетевого кодирования . Коды изучаются с целью разработки эффективных и надежных методов передачи данных . [61]
Структуры данных и алгоритмы изучают общепринятые вычислительные методы и их вычислительную эффективность.
Теория языков программирования — это раздел компьютерной науки, который занимается разработкой, реализацией, анализом, характеристикой и классификацией языков программирования и их индивидуальных особенностей . Она входит в дисциплину компьютерной науки, как зависящую от математики, программной инженерии и лингвистики , так и влияющую на них . Это активная область исследований с многочисленными специализированными академическими журналами.
Формальные методы — это особый вид математически обоснованной техники для спецификации , разработки и проверки программных и аппаратных систем. [62] Использование формальных методов для проектирования программного обеспечения и оборудования мотивировано ожиданием того, что, как и в других инженерных дисциплинах, выполнение соответствующего математического анализа может способствовать надежности и устойчивости проекта. Они формируют важную теоретическую основу для разработки программного обеспечения, особенно там, где речь идет о безопасности. Формальные методы являются полезным дополнением к тестированию программного обеспечения, поскольку они помогают избегать ошибок и также могут дать основу для тестирования. Для промышленного использования требуется поддержка инструментов. Однако высокая стоимость использования формальных методов означает, что они обычно используются только при разработке высокоинтегрированных и жизненно важных систем , где безопасность или защита имеют первостепенное значение. Формальные методы лучше всего описать как применение довольно широкого спектра теоретических основ компьютерной науки , в частности логических исчислений, формальных языков , теории автоматов и семантики программ , а также систем типов и алгебраических типов данных к проблемам спецификации и проверки программного обеспечения и оборудования.
Компьютерная графика — это изучение цифрового визуального контента, которое включает в себя синтез и обработку данных изображений. Это исследование связано со многими другими областями компьютерной науки, включая компьютерное зрение , обработку изображений и вычислительную геометрию , и широко применяется в области спецэффектов и видеоигр .
Информация может принимать форму изображений, звука, видео или других мультимедиа. Биты информации могут передаваться потоком с помощью сигналов . Ее обработка является центральным понятием информатики, европейского взгляда на вычисления, который изучает алгоритмы обработки информации независимо от типа носителя информации — будь то электрический, механический или биологический. Эта область играет важную роль в теории информации , телекоммуникациях , информационной инженерии и имеет приложения в медицинских вычислениях изображений и синтезе речи , среди прочего. Какова нижняя граница сложности алгоритмов быстрого преобразования Фурье ? является одной из нерешенных проблем в теоретической информатике .
Научные вычисления (или вычислительная наука) — это область исследований, связанная с построением математических моделей и методов количественного анализа , а также с использованием компьютеров для анализа и решения научных проблем. Основное применение научных вычислений — моделирование различных процессов, включая вычислительную гидродинамику , физические, электрические и электронные системы и схемы, а также общества и социальные ситуации (особенно военные игры) вместе с их средой обитания, среди многих других. Современные компьютеры позволяют оптимизировать такие конструкции, как готовые самолеты. Известными в области проектирования электрических и электронных схем являются SPICE, [63] , а также программное обеспечение для физической реализации новых (или модифицированных) конструкций. Последнее включает в себя необходимое программное обеспечение для проектирования интегральных схем . [64]
Социальные вычисления — это область, которая занимается пересечением социального поведения и вычислительных систем. Исследования взаимодействия человека и компьютера разрабатывают теории, принципы и рекомендации для дизайнеров пользовательских интерфейсов.
Программная инженерия — это изучение проектирования, внедрения и модификации программного обеспечения с целью обеспечения его высокого качества, доступности, удобства в обслуживании и быстрой сборки. Это системный подход к проектированию программного обеспечения, включающий применение инженерных практик к программному обеспечению. Программная инженерия занимается организацией и анализом программного обеспечения — она занимается не только созданием или производством нового программного обеспечения, но и его внутренним устройством и обслуживанием. Например, тестирование программного обеспечения , системная инженерия , технический долг и процессы разработки программного обеспечения .
Искусственный интеллект (ИИ) направлен или требуется для синтеза целенаправленных процессов, таких как решение проблем, принятие решений, адаптация к окружающей среде, обучение и коммуникация, обнаруженных у людей и животных. Начиная с кибернетики и Дартмутской конференции (1956), исследования искусственного интеллекта были обязательно междисциплинарными, опираясь на такие области знаний, как прикладная математика , символическая логика, семиотика , электротехника , философия сознания , нейрофизиология и социальный интеллект . В общественном сознании ИИ ассоциируется с разработкой роботов , но основной областью практического применения был встроенный компонент в областях разработки программного обеспечения , которые требуют вычислительного понимания. Отправной точкой в конце 1940-х годов был вопрос Алана Тьюринга « Могут ли компьютеры думать? », и этот вопрос фактически остается без ответа, хотя тест Тьюринга по-прежнему используется для оценки выходных данных компьютеров по шкале человеческого интеллекта. Однако автоматизация оценочных и прогностических задач становится все более успешной заменой человеческому мониторингу и вмешательству в области компьютерных приложений, связанных со сложными реальными данными.
Архитектура компьютера, или организация цифрового компьютера, является концептуальным проектом и фундаментальной операционной структурой компьютерной системы. Она в основном фокусируется на том, как центральный процессор выполняет внутреннюю работу и обращается к адресам в памяти. [65] Инженеры-компьютерщики изучают вычислительную логику и проектирование компьютерного оборудования, от отдельных компонентов процессора , микроконтроллеров , персональных компьютеров до суперкомпьютеров и встроенных систем . Термин «архитектура» в компьютерной литературе можно проследить до работы Лайла Р. Джонсона и Фредерика П. Брукса-младшего , членов отдела организации машин в главном исследовательском центре IBM в 1959 году.
Параллелизм — это свойство систем, в которых несколько вычислений выполняются одновременно и потенциально взаимодействуют друг с другом. [66] Для общих параллельных вычислений был разработан ряд математических моделей, включая сети Петри , исчисления процессов и модель параллельной машины с произвольным доступом . [67] Когда несколько компьютеров соединены в сеть с использованием параллелизма, это известно как распределенная система. Компьютеры в этой распределенной системе имеют свою собственную частную память, и информация может обмениваться для достижения общих целей. [68]
Эта отрасль компьютерной науки направлена на управление сетями между компьютерами по всему миру.
Компьютерная безопасность — это раздел компьютерных технологий, целью которого является защита информации от несанкционированного доступа, нарушения или изменения, при этом сохраняя доступность и удобство использования системы для предполагаемых пользователей.
Историческая криптография — это искусство написания и расшифровки секретных сообщений. Современная криптография — это научное изучение проблем, связанных с распределенными вычислениями, которые могут быть атакованы. [69] Технологии, изучаемые в современной криптографии, включают симметричное и асимметричное шифрование , цифровые подписи , криптографические хэш-функции , протоколы согласования ключей , блокчейн , доказательства с нулевым разглашением и искаженные схемы .
База данных предназначена для организации, хранения и извлечения больших объемов данных. Цифровые базы данных управляются с помощью систем управления базами данных для хранения, создания, обслуживания и поиска данных с помощью моделей баз данных и языков запросов . Интеллектуальный анализ данных — это процесс обнаружения закономерностей в больших наборах данных.
Философ вычислительной техники Билл Рапапорт отметил три великих прозрения компьютерной науки : [70]
Языки программирования могут использоваться для выполнения различных задач разными способами. Распространенные парадигмы программирования включают:
Многие языки поддерживают несколько парадигм, делая различие скорее вопросом стиля, чем технических возможностей. [76]
Конференции являются важными событиями для исследований в области компьютерных наук. Во время этих конференций исследователи из государственного и частного секторов представляют свои последние работы и встречаются. В отличие от большинства других академических областей, в компьютерных науках престиж конференционных докладов выше, чем журнальных публикаций. [77] [78] Одно из предлагаемых объяснений этого заключается в том, что быстрое развитие этой относительно новой области требует быстрого обзора и распространения результатов, а с этой задачей лучше справляются конференции, чем журналы. [79]
вычислений — это систематическое изучение алгоритмических процессов, которые описывают и преобразуют информацию, их теории, анализа, проектирования, эффективности, реализации и применения. Фундаментальный вопрос, лежащий в основе всех вычислений, — «Что можно (эффективно) автоматизировать?»
«Что можно автоматизировать?» — один из самых вдохновляющих философских и практических вопросов современной цивилизации.