Способность разрабатывать алгоритмы и компьютерные программы, пригодные для практического применения
Обновлено: 02.12.2024
С момента появления первых языков программирования до используемых в настоящее время современных языков программирования компьютерное программирование претерпело значительные изменения. Теперь он стал более мощным, эффективным и продвинутым. Однако фундаментальные концепции и использование структур данных и алгоритмов в компьютерном программировании не изменились. DSA с самого начала был основой компьютерного программирования.
Возможно, вы слышали, что DSA используется в основном в области компьютерных наук. Однако использование DSA не ограничивается областью вычислений. Мы также можем найти концепцию DSA, используемую в повседневной жизни. В этом блоге мы обсудим общую концепцию DSA, которая используется в повседневной жизни. Но перед этим давайте сначала изучим основы структуры данных и алгоритмов.
Структура данных и алгоритмы – это раздел компьютерных наук, который занимается созданием машиноэффективных и оптимизированных компьютерных программ. Термин «структура данных» относится к хранению и организации данных, а «алгоритм» относится к пошаговой процедуре решения проблемы. Комбинируя «структуру данных» и «алгоритм», мы оптимизируем коды в программной инженерии.
Структура данных и алгоритм (DSA) применяются во всех дисциплинах разработки программного обеспечения. DSA — это строительный блок процесса разработки программного обеспечения. Он не ограничивается одним языком программирования. Хотя языки программирования со временем развиваются или уходят в неактивное состояние, DSA встроен во все эти языки.
Эффективность разработки программного обеспечения зависит от выбора подходящей структуры данных и алгоритма.
Возможны случаи, когда вам предоставляется наиболее эффективная структура данных для работы с надежным алгоритмом. Однако, если они несовместимы друг с другом, код не даст ожидаемого результата. Таким образом, выбор подходящей структуры данных для алгоритма является важной частью разработки программного обеспечения.
Возьмем, к примеру, имперскую систему измерения, используемую в США. Почему это так ужасно? В США для измерений используются такие единицы измерения, как дюймы, ярды, мили, унции и фунты. Если вам нужно преобразовать ярд в дюймы, вы должны умножить его на 36. Однако в метрической системе вы можете просто умножить на 1000, чтобы преобразовать метр в километр. Таким образом, уму легче выполнить преобразование в метрической системе. Вот почему большинство людей находят имперскую систему неудобной. Другим примером этого неудобства является то, что "унция" используется для твердых или жидких веществ в зависимости от контекста.
Важнейшим фактором здесь является простота преобразования одного показателя в другой. В этом примере мы можем сравнить системы измерения (то есть метрическую систему и имперскую систему) со «структурами данных», а процесс преобразования из одной единицы в другую можно рассматривать как алгоритм. Это показывает, что выбор правильной структуры данных сильно влияет на алгоритм, и наоборот.
Еще одним важным аспектом использования DSA при разработке программного обеспечения являются ограничения по времени и пространству. Эти ограничения проверяют наличие времени и места для алгоритма. Оптимизированный алгоритм устраняет оба этих ограничения на основе доступности ресурсов. Если память не является проблемой для оборудования, DSA больше фокусируется на оптимизации времени работы алгоритма. Точно так же, если аппаратное обеспечение имеет оба ограничения, DSA должен учитывать их оба. Вы можете узнать больше о представлении этих сложностей в асимптотическом анализе.
Давайте рассмотрим некоторые примеры использования DSA.
Структуры данных
Структура данных стека для обращения строки
Стек — это линейная структура данных. "Линейная" означает, что элементы располагаются один за другим. Доступ к элементу возможен только после доступа к предыдущим элементам.
Мы можем представить стопку как стопку тарелок, поставленных друг на друга. Доступ к каждой пластине под самой верхней пластиной невозможен до тех пор, пока не будут удалены пластины выше. Пластины можно добавлять и удалять только сверху.
Каждая пластина — это элемент, а стопка — это стопка. В терминах программирования каждая плита — это переменная, а стопка — это структура данных.
Зачем нам нужно стековое представление?
Возможно, вам интересно, зачем программисту учиться ставить тарелку на стопку и вынимать тарелку из стопки. Найдем на него ответ. Вам дается задание перевернуть строку. Как бы вы это сделали?
Начните выбирать символ из строки и копируйте его в новое место один за другим.
Теперь давайте скопируем эти элементы сверху в исходное местоположение.
Отлично, мы успешно перевернули строку, используя свойство стека (новая память). Вставлять и вынимать разрешалось только сверху. Так стек используется в программировании.
Структура данных очереди при посадке в автобус
Очередь также представляет собой линейную структуру данных, в которой элементы располагаются на основе правила FIFO (первым пришел — первым обслужен). Это как пассажиры, стоящие в очереди на посадку в автобус. Кто первым встанет в очередь, тот первым и сядет в автобус. Новые пассажиры могут встать в очередь сзади, тогда как пассажиры садятся в автобус спереди.
Зачем нам нужно представление Queue?
Вы можете спросить, где на компьютере используется очередь. Предположим, что вы находитесь в своем офисе и есть сеть из пяти компьютеров. Вы подключили все эти компьютеры к одному принтеру. Предположим, сотрудник хочет распечатать свои документы и отправляет команду на принтер через свой компьютер. Принтер получает команды и начинает печатать документы. В то же время другой сотрудник отправляет команды на принтер. Принтер помещает вторую команду в очередь. Вторая команда выполняется только после выполнения первой команды. Это соответствует правилу FIFO.
Структура графических данных в социальных сетях и Google Map
График – это сеть взаимосвязанных элементов. Каждый элемент называется узлом, а соединение между ними – краем.
Возможно, вы пользуетесь социальными сетями, такими как Facebook, LinkedIn, Instagram и т. д. Социальные сети — отличный пример использования графа. Социальные сети используют графики для хранения информации о каждом пользователе. Здесь каждый пользователь является узлом, как и в Graph. И если один пользователь, назовем его Джек, подружится с другим пользователем Роуз, то между Джеком и Роуз существует ребро (связь). Точно так же, чем больше мы связаны с людьми, количество узлов и ребер графа увеличивается.
Точно так же Google Map — еще один пример использования графиков. В случае Google Map каждое местоположение рассматривается как узлы, а дороги между местоположениями — как ребра. И когда нужно переместиться из одного места в другое, Google Map использует различные алгоритмы на основе графа, чтобы найти кратчайший путь. Мы обсудим это позже в этом блоге.
Алгоритмы
Алгоритм сортировки книг на полке
Проще говоря, сортировка – это процесс систематического упорядочивания похожих элементов. Например, предположим, что вы расставляете книги на полке в зависимости от высоты книг. В этом случае мы можем оставить более высокие книги слева, а затем более короткие книги, или мы можем сделать наоборот.
Эта же концепция реализована в алгоритмах сортировки. В DSA доступны различные алгоритмы сортировки. Хотя цель каждого алгоритма остается неизменной, каждый алгоритм работает по-разному в зависимости от различных критериев.
В приведенном выше примере, если мы хотим отсортировать книги как можно быстрее, необходимо учитывать несколько моментов.
- Можно ли легко перетасовать книги на полке? Если книги тяжелые, это может занять у нас больше времени. Точно так же могут быть и другие ограничения. (доступность)
- Какое количество книг? (размер данных)
- Как быстро мы можем получить к ним доступ? (возможности оборудования)
Алгоритмы строятся с учетом всех этих ограничений для получения оптимального решения. Примерами таких алгоритмов являются пузырьковая сортировка, сортировка выбором, сортировка слиянием, сортировка кучей и быстрая сортировка.
Алгоритм поиска книги на полке
Поиск, как следует из названия, помогает найти элемент.
Предположим, вы хотите найти определенную книгу на полке. Книги в себе не расположены особым образом. Если вам нужно найти книгу в кратчайшие сроки, как бы вы это сделали? Решение этой проблемы предлагает DSA.
Вы можете подумать: "Я буду искать книгу с самого начала и найду ее". В этом случае вы будете искать книги одну за другой от начала до конца полки. Та же концепция реализована в линейном поиске.
Но что, если книга стоит на другом конце полки? Вышеописанный процесс может занять много времени и не даст приемлемого решения.
Теперь попробуем другую процедуру. Сначала отсортируйте книги в алфавитном порядке по возрастанию, а затем найдите книгу посередине. Мы ищем книгу, которая начинается с буквы J.
Поскольку мы всегда смотрим на среднюю позицию, средняя позиция между A и Z — это M, а не J.
Теперь сравните J с M. Мы знаем, что J лежит перед M. Итак, давайте начнем поиск J в средней позиции A и M. G — средний элемент, снова J не найден.
Поскольку J лежит между G и M, найдем средний элемент между ними. Да, мы нашли J. Поздравляю. 🥳.
И вы только что внедрили двоичный поиск.
Алгоритмы поиска кратчайшего пути для поиска кратчайшего пути на карте Google
Задумывались ли вы когда-нибудь о том, как Карты Google могут показать вам кратчайший путь к месту назначения? Такие приложения, как Карты Google, могут делать это с помощью класса алгоритмов, называемых алгоритмами поиска кратчайшего пути.
Эти алгоритмы предназначены для поиска кратчайшего пути в графе. Как и в примере, описанном в структуре данных Graph выше, мы можем использовать алгоритмы графа, чтобы найти кратчайший путь между двумя заданными местоположениями на карте.
Для иллюстрации задачи найдем кратчайшее расстояние между A и F на следующей карте.
Каковы возможные решения этой проблемы? Давайте выясним возможные маршруты вместе с их длиной пути.
Мы видим, что кратчайший путь — Путь-3. Но мы потратили время на расчет и других путей, которые не собираемся использовать. Чтобы решить эту задачу, не теряя времени, мы можем начать с A и проверить возможные кратчайшие соседние пути (AC и AB). У нас есть AC как кратчайший путь.
Теперь мы находимся в C, снова выберите кратчайший путь среди соседних путей CE и CD, который и есть CD.
Из D у нас есть единственный путь к F. Из D мы также можем перейти к B, но B уже посещен, поэтому он не рассматривается. Выберите путь DF, и мы доберемся до места назначения.
Поздравляем еще раз🥳. Вы реализовали алгоритм Дейкстры.Таким образом, график находит применение в нашей жизни.
Когда я учился на последнем курсе бакалавриата и подавал заявку на должность инженера-программиста, процедура найма во всех компаниях была общей. Все они проверяли меня на задачах, связанных с использованием структур данных и алгоритмов. DSA также имеет большое значение в процессе найма компаний-разработчиков программного обеспечения. Рекрутеры используют DSA для проверки способностей программиста, потому что он показывает способность кандидата решать проблемы.
Как видно из приведенных выше примеров, мы можем связать DSA с нашей повседневной жизнью и сделать ее изучение более интересным. Для тех, у кого нет технического образования, они также могут изучить методы, используемые в алгоритмах для решения их повседневных задач.
Кроме того, нельзя пренебрегать важностью DSA в любом языке программирования. DSA никогда не исчезнет, а будет развиваться, потому что эволюционирующие компьютеры в 21 веке нуждаются в эволюционирующих алгоритмах для решения сложных задач.
Не говоря уже о том, что программист должен знать, как использовать соответствующую структуру данных в правильном алгоритме. Есть известная поговорка:
Наилучшие пожелания всем начинающим программистам. Начните учиться прямо сегодня.
Подпишитесь на блог Programiz!
Подпишитесь на нашу электронную подписку, чтобы первыми получать новейшие учебные пособия от Programiz. Также больше бонусов, таких как взгляд изнутри на последнюю функцию и многое другое.
владейте методами алгоритмического программирования. Продвиньте свою карьеру в области разработки программного обеспечения или науки о данных, изучая алгоритмы с помощью программирования и решения головоломок. Проходите собеседования по программированию, выполняя каждую алгоритмическую задачу в этой специализации. Применяйте недавно изученные алгоритмические методы к реальным задачам, таким как анализ огромной социальной сети или секвенирование генома смертельного патогена.
Наполовину потускневшая звезда
Нил Роудс и еще 3 преподавателя
Доступна финансовая помощь
или фиксируе с помощью учетной записи или
Чему вы научитесь
Играйте в 50 алгоритмических головоломок на своем смартфоне, чтобы развить свою алгоритмическую интуицию! Применяйте алгоритмические методы (жадные алгоритмы, бинарный поиск, динамическое программирование и т. д.) и структуры данных (стеки, очереди, деревья, графы и т. д.), чтобы решить 100 задач по программированию, которые часто появляются на собеседованиях в высокотехнологичных компаниях. Получите мгновенную обратную связь о правильности вашего решения.
Применяйте недавно изученные алгоритмы для решения реальных задач: ориентируйтесь в Большой сети или собирайте геном смертоносного патогена из миллионов коротких фрагментов его ДНК.
Изучайте тот же материал, что и студенты бакалавриата, изучающие «Алгоритмы 101» в ведущих университетах и не только! Мы рады, что студенты из разных уголков мира теперь изучают наши онлайн-материалы на курсах «Алгоритмы 101» в своих университетах. Вот цитата с веб-сайта профессора Сауле Ээтемади из Иранского университета науки и технологий: «После изучения учебных планов и учебных материалов ведущих университетов, включая Стэнфорд, Принстон и Массачусетский технологический институт, мы выбрали специализацию «Структуры данных и алгоритмы» UCSD. благодаря отличному учебному материалу и его практическому подходу».
Если вы решите выйти за рамки Алгоритмов 101, попробуйте решить более сложные задачи программирования (потоки в сетях, линейное программирование, алгоритмы потоковой передачи и т. д.) и закончите курс по алгоритмам, эквивалентный аспирантуре!
Приобретаемые навыки
- Отладка
- Тестирование программного обеспечения
- Алгоритмы
- Структура данных
- Компьютерное программирование
- Динамическое программирование
- Двоичное дерево поиска
- Приоритетная очередь
- Хеш-таблица
- Стек (абстрактный тип данных)
- Список
- Теория графов
Специализация: общие сведения
Легенда информатики Дональд Кнут однажды сказал: "Я ничего не понимаю, пока не попытаюсь их запрограммировать". Мы также считаем, что лучший способ изучить алгоритм — это запрограммировать его. Тем не менее, многие отличные книги и онлайн-курсы по алгоритмам, которые преуспели в представлении алгоритмических идей, еще не научили вас, как реализовать алгоритмы, важнейший навык в области компьютерных наук, который вы должны освоить на следующем собеседовании при приеме на работу. Мы попытались восполнить этот пробел, сформировав разнообразную команду инструкторов, в которую вошли ведущие мировые специалисты по теоретическим и прикладным алгоритмам из UCSD (Дэниэл Кейн, Александр Куликов и Павел Певзнер) и бывший инженер-программист из Google (Нил Роудс).Это уникальное сочетание навыков отличает эту специализацию от других превосходных МООК по алгоритмам, разработанным теоретиками-компьютерщиками. В то время как эти МООК сосредоточены на теории, наша специализация представляет собой смесь алгоритмической теории/практики/приложений с разработкой программного обеспечения. Вы изучите алгоритмы, решив около 100 задач кодирования на выбранном вами языке программирования. Насколько мне известно, ни один другой онлайн-курс по алгоритмам не предложит вам множество задач (и головоломок) по программированию, с которыми вы можете столкнуться на следующем собеседовании. Мы потратили более 3000 часов на разработку задач в качестве альтернативы вопросам с несколькими вариантами ответов, которые обычно встречаются в МООК.
Проект прикладного обучения
Специализация содержит два реальных проекта: Big Networks и Genome Assembly. Вы будете анализировать как дорожные сети, так и социальные сети и научитесь вычислять кратчайший маршрут между Нью-Йорком и Сан-Франциско в 1000 раз быстрее, чем алгоритмы кратчайшего пути, которые вы изучаете в стандартном курсе «Алгоритмы 101»! После этого вы узнаете, как собирать геномы из миллионов коротких фрагментов ДНК и как алгоритмы сборки способствуют последним разработкам в области персонализированной медицины.
15 сентября 2020 г. / SynergisticIT / Комментарии отключены о том, насколько важны структуры данных и алгоритмы для выпускников компьютерных наук?
Вы можете научиться применять как линейные, так и нелинейные структуры данных на технологическом учебном курсе в Калифорнии.
Что такое алгоритм?
Алгоритмом называется набор шагов, используемых для выполнения определенной задачи или получения желаемого результата. Это как строительные блоки для программирования, которые позволяют смартфонам, компьютерам или веб-сайтам бесперебойно функционировать и принимать решения. Каждый код, написанный программистом, представляет собой коллективную форму алгоритмов навигации по тому, что делать. Алгоритмы – это четко определенные процедуры, помогающие компьютерам решать проблемы.
Давайте рассмотрим простой пример GPS. Когда вы ищете местоположение, GPS использует алгоритм для поиска нескольких доступных маршрутов, а также для проверки текущего трафика GPS использует другой алгоритм, основанный на коллективной информации, который обеспечивает лучший доступный маршрут для вас. Все эти алгоритмы встроены в код GPS. Таким образом, если в коде GPS есть ошибка, он не будет работать правильно, что приведет к неправильному направлению. Компьютеры используют алгоритмы для вычислений намного быстрее, чем люди.
Связь между структурами данных и алгоритмом
Как структуры данных, так и алгоритмы взаимосвязаны и дополняют друг друга. Алгоритм применяется к определенной структуре данных, а использование правильной структуры данных помогает значительно улучшить производительность алгоритма. Следовательно, мы не можем отделить структуры данных и алгоритмы.
Ниже приведены основные категории алгоритмов по отношению к структурам данных:
- Поиск. Этот алгоритм помогает найти элемент в структуре данных.
- Вставка. Этот алгоритм применим для вставки элемента в структуру данных.
- Сортировка. Этот алгоритм помогает сортировать элементы в определенном порядке.
- Обновление. Алгоритм обновления полезен для обновления существующего элемента в структуре данных.
- Удалить. Чтобы удалить существующий элемент из структуры данных, вы можете использовать алгоритм удаления.
Причина изучения структур данных и алгоритмов
Структуры данных и алгоритмы — самые важные темы для программистов и выпускников компьютерных наук, которые помогают им устроиться на работу и добиться высоких результатов. Вот несколько веских причин для изучения структур данных и алгоритмов:
Совет. Используйте LeetCode и Hacker Rank, чтобы практиковать свои навыки кодирования, поскольку чем больше вы практикуетесь, тем больше вы будете компетентны для хорошей работы.
Заключение
Технологии будут только улучшаться, пока программирование и кодирование продолжают процветать. Таким образом, структура данных и алгоритмы сохранят свое значение для функционирования технологий, определения того, что они делают и как они это делают.
В идеале все студенты, изучающие информатику, должны изучать структуры данных и алгоритмы во время выпуска, но университеты обычно не учитывают эти темы. Таким образом, единственный источник изучения этих концепций — записаться на учебный курс Data Science Bootcamp. Если вы хотите улучшить свои знания алгоритмов и структур данных, вы находитесь на правильной платформе. Мы обучаем всем основным темам структур данных и алгоритмов.
Поможем вам достичь карьерных целей. SynergisticIT- Лучшие программисты в районе залива… Точка!
Несмотря на то, что были приложены все усилия для соблюдения правил стиля цитирования, могут быть некоторые расхождения. Если у вас есть какие-либо вопросы, обратитесь к соответствующему руководству по стилю или другим источникам.
Наши редакторы рассмотрят то, что вы отправили, и решат, нужно ли пересматривать статью.
Информатика — это изучение компьютеров и вычислений, а также их теоретических и практических приложений. Информатика применяет принципы математики, инженерии и логики во множестве функций, включая формулирование алгоритмов, разработку программного и аппаратного обеспечения и искусственный интеллект.
Самые влиятельные ученые-компьютерщики – Алан Тьюринг, взломщик кодов времен Второй мировой войны, которого обычно называют "отцом современных вычислений"; Тим Бернерс-Ли, изобретатель Всемирной паутины; Джон Маккарти, изобретатель языка программирования LISP и пионер искусственного интеллекта; и Грейс Хоппер, офицер ВМС США и ключевая фигура в разработке первых компьютеров, таких как UNIVAC I, а также в разработке компилятора языка программирования.
Информатика применяется в широком спектре дисциплин, включая моделирование последствий изменения климата и вируса Эбола, создание произведений искусства и визуализацию с помощью графического рендеринга, а также моделирование человеческого интерфейса с помощью искусственного интеллекта и машинного обучения.< /p>
Разработка видеоигр основана на принципах информатики и программирования. Современный рендеринг графики в видеоиграх часто использует передовые методы, такие как трассировка лучей, для обеспечения реалистичных эффектов. Развитие дополненной реальности и виртуальной реальности также расширило спектр возможностей разработки видеоигр.
Многие университеты по всему миру предлагают программы обучения основам теории информатики и применениям компьютерного программирования. Кроме того, распространенность онлайн-ресурсов и курсов позволяет многим людям самостоятельно изучать более практические аспекты информатики (такие как программирование, разработка видеоигр и дизайн приложений).
информатика, изучение компьютеров и вычислений, включая их теоретические и алгоритмические основы, аппаратное и программное обеспечение, а также их использование для обработки информации. Дисциплина информатики включает изучение алгоритмов и структур данных, проектирование компьютеров и сетей, моделирование данных и информационных процессов, а также искусственный интеллект. Информатика черпает некоторые из своих основ из математики и инженерии и поэтому включает в себя методы из таких областей, как теория массового обслуживания, вероятность и статистика, а также проектирование электронных схем. Информатика также широко использует проверку гипотез и экспериментирование при концептуализации, проектировании, измерении и уточнении новых алгоритмов, информационных структур и компьютерных архитектур.
Информатика считается частью семейства пяти отдельных, но взаимосвязанных дисциплин: компьютерная инженерия, информатика, информационные системы, информационные технологии и разработка программного обеспечения. Это семейство стало известно под общим названием компьютерной дисциплины. Эти пять дисциплин взаимосвязаны в том смысле, что вычислительная техника является их объектом изучения, но они разделены, поскольку каждая из них имеет свою собственную исследовательскую перспективу и учебную направленность. (С 1991 года Ассоциация вычислительной техники [ACM], Компьютерное общество IEEE [IEEE-CS] и Ассоциация информационных систем [AIS] сотрудничают в разработке и обновлении таксономии этих пяти взаимосвязанных дисциплин и руководств, которые образовательные учреждения использовать во всем мире для своих программ бакалавриата, магистратуры и исследовательских программ.)
Основные разделы информатики включают традиционное изучение компьютерной архитектуры, языков программирования и разработки программного обеспечения.Однако они также включают вычислительную науку (использование алгоритмических методов для моделирования научных данных), графику и визуализацию, взаимодействие человека и компьютера, базы данных и информационные системы, сети, а также социальные и профессиональные проблемы, которые являются уникальными для практики информатики. . Как может быть очевидно, некоторые из этих подполей пересекаются по своей деятельности с другими современными областями, такими как биоинформатика и вычислительная химия. Эти совпадения являются следствием склонности ученых-компьютерщиков признавать многочисленные междисциплинарные связи в своей области и действовать в соответствии с ними.
Развитие информатики
Информатика возникла как самостоятельная дисциплина в начале 1960-х годов, хотя электронный цифровой компьютер, являющийся объектом ее изучения, был изобретен на два десятилетия раньше. Корни компьютерных наук лежат главным образом в смежных областях математики, электротехники, физики и информационных систем управления.
Математика является источником двух ключевых концепций разработки компьютеров — идеи о том, что вся информация может быть представлена в виде последовательности нулей и единиц, и абстрактного понятия «хранимой программы». В двоичной системе счисления числа представляются последовательностью двоичных цифр 0 и 1 точно так же, как числа в знакомой нам десятичной системе представляются цифрами от 0 до 9. Относительная легкость, с которой два состояния (например, высокое и низкое напряжение) могут быть реализованы в электрических и электронных устройствах, что естественным образом привело к тому, что двоичная цифра или бит стала основной единицей хранения и передачи данных в компьютерной системе.
Электротехника дает основы проектирования цепей, а именно идею о том, что электрические импульсы, поступающие в цепь, можно комбинировать с помощью булевой алгебры для получения произвольных выходных сигналов. (Булева алгебра, разработанная в 19 веке, предоставила формализм для проектирования схемы с двоичными входными значениями нулей и единиц [ложь или истина, соответственно, в терминологии логики], чтобы получить любую желаемую комбинацию нулей и единиц на выходе.) Изобретение транзистора и миниатюризация схем, а также изобретение электронных, магнитных и оптических носителей для хранения и передачи информации стали результатом достижений электротехники и физики.
Информационные системы управления, первоначально называвшиеся системами обработки данных, предоставили ранние идеи, на основе которых развились различные концепции информатики, такие как сортировка, поиск, базы данных, поиск информации и графические пользовательские интерфейсы. В крупных корпорациях размещались компьютеры, на которых хранилась информация, необходимая для ведения бизнеса — расчет заработной платы, бухгалтерский учет, управление запасами, контроль производства, отгрузка и получение.
Теоретическая работа по вычислимости, начавшаяся в 1930-х годах, обеспечила необходимое распространение этих достижений на проектирование целых машин; важной вехой стала спецификация машины Тьюринга (теоретическая вычислительная модель, которая выполняет инструкции, представленные в виде последовательности нулей и единиц) в 1936 году британским математиком Аланом Тьюрингом и его доказательство вычислительной мощности модели. Еще одним прорывом стала концепция компьютера с хранимой в памяти программой, которую обычно приписывают американскому математику венгерского происхождения Джону фон Нейману. Это истоки области информатики, которая позже стала известна как архитектура и организация.
В 1950-х годах большинство пользователей компьютеров работали либо в научно-исследовательских лабораториях, либо в крупных корпорациях. Первая группа использовала компьютеры для выполнения сложных математических расчетов (например, траектории ракет), в то время как вторая группа использовала компьютеры для управления большими объемами корпоративных данных (например, платежных ведомостей и запасов). Обе группы быстро поняли, что писать программы на машинном языке нулей и единиц непрактично и ненадежно. Это открытие привело к разработке языка ассемблера в начале 1950-х годов, который позволяет программистам использовать символы для инструкций (например, ADD для сложения) и переменных (например, X). Другая программа, известная как ассемблер, переводила эти символические программы в эквивалентную двоичную программу, шаги которой компьютер мог выполнять или «выполнять».
Другие элементы системного программного обеспечения, известные как связывающие загрузчики, были разработаны для объединения фрагментов собранного кода и загрузки их в память компьютера, где они могли выполняться. Концепция связывания отдельных частей кода была важна, поскольку позволяла повторно использовать «библиотеки» программ для выполнения общих задач. Это был первый шаг в развитии области компьютерных наук, называемой разработкой программного обеспечения.
Позже, в 1950-х годах, язык ассемблера оказался настолько громоздким, что разработка языков высокого уровня (более близких к естественным языкам) стала поддерживать более простое и быстрое программирование. FORTRAN стал основным языком высокого уровня для научного программирования, а COBOL стал основным языком для бизнес-программирования. Эти языки несли с собой потребность в другом программном обеспечении, называемом компилятором, которое переводит программы на языке высокого уровня в машинный код. По мере того, как языки программирования становились все более мощными и абстрактными, создание компиляторов, создающих высококачественный машинный код и эффективных с точки зрения скорости выполнения и использования памяти, стало сложной задачей в области информатики. Разработка и реализация языков высокого уровня лежит в основе области компьютерных наук, называемой языками программирования.
Расширение использования компьютеров в начале 1960-х послужило толчком к разработке первых операционных систем, которые состояли из системно-резидентного программного обеспечения, которое автоматически обрабатывало ввод и вывод, а также выполняло программы, называемые «заданиями». Потребность в более совершенных вычислительных методах привела к возрождению интереса к численным методам и их анализу, и эта деятельность распространилась настолько широко, что стала известна как вычислительная наука.
В 1970-х и 80-х годах появились мощные компьютерные графические устройства, как для научного моделирования, так и для других видов визуальной деятельности. (Компьютерные графические устройства были представлены в начале 1950-х годов с отображением грубых изображений на бумажных графиках и экранах электронно-лучевых трубок [ЭЛТ].) Дорогое оборудование и ограниченная доступность программного обеспечения не позволяли этой области расти до начала 1980-х годов, когда компьютерная память, необходимая для растровой графики (в которой изображение состоит из маленьких прямоугольных пикселей), стала более доступной. Технология растровых изображений вместе с экранами с высоким разрешением и разработкой графических стандартов, которые делают программное обеспечение менее зависимым от машин, привели к взрывному росту этой области. Поддержка всех этих видов деятельности превратилась в область информатики, известную как графика и визуальные вычисления.
С этой областью тесно связано проектирование и анализ систем, которые напрямую взаимодействуют с пользователями, выполняющими различные вычислительные задачи. Эти системы получили широкое распространение в 1980-х и 90-х годах, когда линейное взаимодействие с пользователями было заменено графическими пользовательскими интерфейсами (GUI). Дизайн графического пользовательского интерфейса, который впервые был разработан Xerox, а затем был подхвачен Apple (Macintosh) и, наконец, Microsoft (Windows), важен, поскольку он представляет собой то, что люди видят и делают, взаимодействуя с вычислительным устройством. Разработка подходящих пользовательских интерфейсов для всех типов пользователей превратилась в область компьютерных наук, известную как взаимодействие человека с компьютером (HCI).
Xerox Alto был первым компьютером, в котором для управления системой использовались графические значки и мышь — первый графический пользовательский интерфейс (GUI).
Область компьютерной архитектуры и организации также претерпела значительные изменения с тех пор, как в 1950-х годах были разработаны первые компьютеры с хранимой в памяти программой. В 1960-х годах появились так называемые системы с разделением времени, позволяющие нескольким пользователям запускать программы одновременно с разных терминалов, жестко подключенных к компьютеру. В 1970-е годы были разработаны первые глобальные компьютерные сети (WAN) и протоколы для передачи информации на высоких скоростях между компьютерами, разделенными большими расстояниями. По мере развития этих видов деятельности они объединились в область компьютерных наук, называемую сетями и коммуникациями. Крупным достижением в этой области стало развитие Интернета.
Идея о том, что инструкции и данные могут храниться в памяти компьютера, имела решающее значение для фундаментальных открытий, касающихся теоретического поведения алгоритмов. То есть такие вопросы, как «Что можно/нельзя вычислить?» были официально рассмотрены с использованием этих абстрактных идей. Эти открытия положили начало области информатики, известной как алгоритмы и сложность. Ключевой частью этой области является изучение и применение структур данных, подходящих для различных приложений. Структуры данных, наряду с разработкой оптимальных алгоритмов для вставки, удаления и поиска данных в таких структурах, являются серьезной проблемой для ученых-компьютерщиков, поскольку они так интенсивно используются в компьютерном программном обеспечении, особенно в компиляторах, операционных системах, файловых системах и т. д. и поисковые системы.
В 1960-х годах изобретение накопителей на магнитных дисках обеспечило быстрый доступ к данным, расположенным в произвольном месте на диске. Это изобретение привело не только к более продуманным файловым системам, но и к развитию баз данных и систем поиска информации, которые позже стали необходимы для хранения, поиска и передачи больших объемов и разнообразных данных через Интернет.Эта область информатики известна как управление информацией.
Еще одной долгосрочной целью исследований в области компьютерных наук является создание вычислительных машин и роботизированных устройств, способных выполнять задачи, которые обычно считаются требующими человеческого интеллекта. К таким задачам относятся движение, зрение, слух, речь, понимание естественного языка, мышление и даже проявление человеческих эмоций. Область информатики интеллектуальных систем, первоначально известная как искусственный интеллект (ИИ), на самом деле возникла еще до появления первых электронных компьютеров в 1940-х годах, хотя термин искусственный интеллект появился только в 1956 году.
Три достижения в области вычислительной техники в начале 21 века — мобильные вычисления, клиент-серверные вычисления и взлом компьютеров – способствовали появлению трех новых областей компьютерных наук: разработка на основе платформ, параллельные и распределенные вычисления, и обеспечение безопасности и информации. Платформенная разработка — это изучение особых потребностей мобильных устройств, их операционных систем и их приложений. Параллельные и распределенные вычисления касаются разработки архитектур и языков программирования, которые поддерживают разработку алгоритмов, компоненты которых могут работать одновременно и асинхронно (а не последовательно), чтобы лучше использовать время и пространство. Безопасность и обеспечение информации связаны с проектированием вычислительных систем и программного обеспечения, которые защищают целостность и безопасность данных, а также конфиденциальность лиц, для которых эти данные характерны.
Наконец, особую озабоченность компьютерных наук на протяжении всей их истории вызывает уникальное общественное влияние, которое сопровождает исследования в области компьютерных наук и технологические достижения. Например, с появлением Интернета в 1980-х разработчикам программного обеспечения необходимо было решить важные вопросы, связанные с информационной безопасностью, личной конфиденциальностью и надежностью системы. Кроме того, вопрос о том, является ли программное обеспечение интеллектуальной собственностью, и связанный с ним вопрос «Кому оно принадлежит?» породила совершенно новую правовую область лицензирования и стандартов лицензирования, которые применялись к программному обеспечению и связанным с ним артефактам. Эти и другие проблемы составляют основу социальных и профессиональных проблем информатики, и они появляются почти во всех других областях, указанных выше.
Подводя итог, можно сказать, что дисциплина компьютерных наук превратилась в следующие 15 отдельных областей:
Читайте также: