Включите исполнение JavaScript в браузере, чтобы запустить приложение.
Карьера6 марта, 2025

Computer Science: определение и особенности

Что за наука Computer Science и какие задачи она помогает решать разработчикам? Разбираем алгоритмы, базы данных, компьютерные сети, криптографию, языки программирования, информационную безопасность. Как эти знания влияют на карьерный трек разработчика?

Для кого сегодня полезны Computer Science

Computer Science (CS) — компьютерная наука о работе с информацией с применением вычислительной техники. В рамках этой области знаний изучают, как собирать, хранить, обрабатывать, оценивать данные при помощи компьютерных технологий. В России для ее обозначения используют термин «информатика».

Наука Computer Science сегодня охватывает десятки направлений: математика, базы данных, алгоритмы, архитектура компьютеров, языки программирования. Знание CS для ежедневных задач пригодится IT-специалистам из разных областей:

  • frontend- и backend-разработчики;
  • системные и бизнес-аналитики; 
  • тестировщики и QA-инженеры;
  • инженеры Data Science;
  • технические писатели;
  • специалисты по Information Security (информационной безопасности);
  • product-менеджеры и product owner-ы; 
  • DevOps;
  • специалисты по ML-обучению;
  • системные администраторы и администраторы баз данных;
  • пентестеры (pentest, специалисты по проникновению) и белые хакеры;
  • системные архитекторы.

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

Зачем нужно изучать компьютерные науки

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

  • писать чистый код;
  • создавать отказоустойчивые и безопасные приложения;
  • продумывать вопросы производительности;
  • закладывать правильную архитектуру IT-решений.

Есть сферы, где знание компьютерных наук требуется «со старта». Системный администратор должен понимать устройство сетей и ПК, взаимодействие машин. Data Scientist напрямую связан с математикой и наукой о Big Data.

Часто на собеседованиях задают вопросы по Computer Science, чтобы понять уровень специалиста. К примеру, у кандидата на вакансию frontend-разработчика на интервью могут спросить: 

Что происходит, когда пользователь вводит запрос в поисковую строку и нажимает Enter?

На самом деле запрос не направляется сразу в Google или Яндекс. Браузер ищет IP-адрес в локальном кэше (если раньше пользователь искал страницу, то ее отдадут из кэша). Если нет, то смотрит кэш операционной системы —> поднимается до роутера или ближайшего DNS-сервера провайдера — > к DNS-серверам в сети и т.д. Для ответа нужно узнать устройство компьютерных и информационных сетей, модель OSI, протоколы TCP / IP.

Что такое трехстороннее рукопожатие (Triple Handshake) и как оно работает?

Это обмен сообщениями между клиентом и сервером для установки безопасного соединения SSL/TLS. Чтобы ответить на вопрос, важно знать устройство компьютерных сетей и проблемы безопасности.

Чем отличается сложность алгоритма O(n) от бинарного поиска O(log n)?

Это можно сравнивать с поиском номера абонента по телефонной книге. В случае с O(n) данные не упорядочены: возможно, придется пролистать 500 страниц и перебрать тысячи записей, чтобы найти нужную. Бинарный поиск O(log n) упрощает задачу. Представьте, что в телефонной книге фамилии абонентов указаны в алфавитном порядке. Для ответа на вопрос нужно знать алгоритмы (это тоже часть компьютерной науки). 

Каждая из областей Computer Science может пригодиться специалистам в области IT и смежных отраслях — вопрос только в глубине освоения. Начинающему frontend-разработчику достаточно знать алгоритмы, базы данных, устройство компьютерных сетей и математику. Специалисту уровня Senior нужны глубокие знания, позволяющие решать прикладные задачи: почему памяти много, а программа «тормозит» или как переписать однопоточное приложение на параллельные вычисления. 

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

Какие дисциплины входят в Computer Science

Понятие Computer Science (компьютерная наука) появилось в 1959 году в журнале Communications of the ACM. В статье The role of the University in computers, data processing, and related fields («Роль университета в области компьютеров, обработки данных и смежных областях») ученый Луи Фейн (Louis Fein) предложил создать Высшую школы в области информатики. Исследователь утверждал, что в рамках школы компьютерных наук Graduate School in Computer Sciences нужно изучать:

  • Information Data — сбор, хранение, поиск, классификацию, поиск, кодирование, декодирование, интерпретацию, выборку, фильтрацию, анализ, проверку, передачу информации;
  • Models — математические, алгебраические, статистические модели;
  • Other Topics — автоматизацию, теорию принятия решений, кибернетику, искусственный интеллект (Artificial Intelligence) и еще более 10 дисциплин. 

В 1962 г. организована первая кафедра компьютерных наук в Purdue University (штат Индиана).

Проблему создания «самостоятельной дисциплины, изучающей информационный процесс, его методы и средства» изучали и советские ученые. В частности, в 1961 г. в «Научная информация» вопрос поднимал исследователь Александр Михайлов. В 1962 году советский ученый Александр Харкевич предложил понятия «информология» и «информатика» для описания компьютерной науки.

Теоретическая информатика

Theoretical Computer Science — наука и отрасль знаний, посвященная информации — тому, как она создается, хранится, обрабатывается. Теоретическая информатика опирается на математические и абстрактные основы вычислений, формирует базу для прикладных исследований.

В рамках Theoretical Computer Science ученые работают с разными теориями: автоматов, графов, чисел, категорий, вычислимости, сложности вычислений. Дисциплина исследует математическую логику, криптографию, комбинаторную оптимизацию.

Простой пример — на собеседовании могут спросить, что такое двоичный (бинарный код), как создать или раскодировать его. Число «3» в двоичном формате выглядит как 00000011. 

Криптография и информационная безопасность

ИБ и криптография — сферы, тесно связанные с защитой данных от несанкционированного доступа. 

Веб-разработчикам, тестировщикам, QA-инженерам стоит знать основные уязвимости — OWASP (Open Web Application Security Project):

  • Injection (инъекция);
  • Broken Authentication and Session Management (нарушение аутентификации и управления сессиями);
  • Cross-Site Scripting (XSS, межсайтовый скриптинг);
  • Broken Access Control (нарушение контроля доступа);
  • Security Misconfiguration (неправильная конфигурация безопасности);
  • Insecure Cryptographic Storage (небезопасное хранение криптографических данных);
  • Insufficient Logging and Monitoring (недостаточное логирование и мониторинг);
  • Insecure Communication (небезопасная связь);
  • Using Components with Known Vulnerabilities (использование компонентов с известными уязвимостями);
  • Insufficient Attack Protection (недостаточная защита от атак), а также другие.

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

Например, приложение шифрует номера кредитных карт в базе данных с помощью автоматического шифрования БД. Затем эти данные автоматически расшифровываются при извлечении. Злоумышленники могут использовать ошибку SQL-инъекции, чтобы извлечь номера кредитных карт в виде открытого текста.

Математика

Часто встречаются дискуссии о том, нужна ли программисту математика. Уровень понимания зависит от той сферы, где собирается работать программист. Верстальщикам и frontend-разработчикам зачастую достаточно минимальных знаний алгебры и геометрии. Специалистам по Data Science или машинному обучению нужно углубленное понимание математики. 

При программировании пригодятся такие направления Computer Science:

  • школьный курс алгебры и математики — уравнения, переменные, функции, визуализация пространства в игре;
  • математический анализ — моделирование динамики данных, машинное обучение, структура алгоритмов и их сложность, дифференцирование и интегрирование для создания трехмерных моделей;
  • дискретная математика — работа со множествами, графами, бинарными отношениями и функциями, разработка криптографических алгоритмов и систем шифрования;
  • линейная алгебра и геометрия — работа с многомерными пространствами (графика, Computer Vision, Machine Learning), векторы и матрицы для создания виртуальной реальности;
  • математическая логика — использование условий и операторов (AND, OR и NOT), а также многие другие.

Самый простой пример — при верстке нужно создать анимацию с кругом. Чтобы рассчитать и задать правильные CSS-свойства, необходимо знать, что такое радиус, диаметр, центр, градусы углов.

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

По разным данным, в мире от 1000 до 10 000 языков программирования. В декабре 2024 года ТОП-5 ЯП рейтинге TIOBE Index включал Python, C++ , Java, C и C#.

Языки программирования могут быть:

  • интерпретируемые и компилируемые;
  • высокоуровневые и низкоуровневые;
  • с динамической или статической типизацией.

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

К примеру, Python — мультипарадигмальный высокоуровневый язык программирования общего назначения с динамической строгой типизацией и автоматическим управлением памятью. С помощью Питона разработчики могут реализовать любые задачи: от создания сайта или чат-бота до обучения моделей искусственного интеллекта. Писать код компьютерных программ и приложений на Python можно в GigaIDE Desktop или GigaIDE Desktop. Среда разработки поддерживает инструменты для данного языка программирования, а AI-ассистент GigaCode помогает документировать, объяснять, улучшать код или генерировать тесты.

Архитектура компьютеров

Раздел Computer Science изучает, как работают компьютерные устройства и из каких элементов состоят: 

  • что такое процессор;
  • как работает внутренняя память (оперативная и основная); 
  • что такое устройства ввода-вывода информации (периферийные);
  • где находится внешняя память и так далее.

Computer Science помогает описать компьютерные устройства. Детальным разбором, как это работает и как реализовать на практике теоретические концепции, могут заниматься другие направления — например, компьютерная инженерия.

Знать архитектуру компьютеров нужно для низкоуровневого программирования (драйверы, операционные системы, прошивки, микроконтроллеры). Но общее понимание архитектуры компьютеров пригодится любому IT-специалисту. Например, чтобы правильно подобрать виртуальную машину на cloud.ru или аналогичных сервисах (с учетом опперационной системы, количества ядер vCPU и оперативной памяти RAM, объема загрузочного диска). С архитектурой компьютеров разработчики сталкиваются даже тогда, когда пишут первый код на любом языке программирования. Переменная a, в которой находится фраза Hello, world! — это физическая или виртуальная область памяти машины.

Информационные сети

Раздел Computer Science изучает компьютерную сеть. Направление научных знаний помогает понять, как она работает, как передает информацию, как защитить данные. В работе программисты сталкиваются с такими понятиями:

  • мост (Bridge);
  • шлюз (Gateway);
  • файл-сервер ЛВС (LAN — Local Area Network);
  • протоколы (SMTR, FTR, TCP/IP, IPX/SPX, HTTP, HTTPS);
  • модель OSI/ISO.

Понимать устройство сетей нужно всем, кто связан с веб-разработкой и программированием: создание сайтов, приложений. Знания пригодятся и системным администраторам, DevOps, InfoSec-инженерам. 

Самые простые примеры задач с использованием сетевых технологий — как сделать HTTP-запрос к gitverse.ru, получить информацию от сервера и обработать его на клиентской части приложения. Системные администраторы сталкиваются с более сложными кейсами в области программирования. Например, как настроить сетевую защиту от сетевых атак. Для решения задачи используют специальные инструменты вроде межсетевых экранов UserGate: виртуальный NGFW.

Базы данных

БД — структурированные хранилища информации. В них могут находиться самые разные данные: персональная информация покупателей интернет-магазина, история транзакций пользователя банковского приложения, список товаров на складе. Как правило, информацию предоставляют в виде таблиц со строками и столбцами. Computer Science как наука формирует теоретические представления и концепции, как должны работать БД.

Базы данных могут быть:

  • реляционными (табличными),
  • графовыми,
  • иерархическими. 

Чтобы управлять базами данных, существуют СУБД. Среди известных систем управления PostgreSQL, MySQL, Microsoft SQL Server, SQLite, Oracle Database, Redis и другие. 

Знать устройство и принципы работы БД нужно как backend-разработчикам или системным администраторам, так и frontend-программистам.

Пример задачи при программировании — записать в БД сведения о новом пользователе, который зарегистрировался в сервисе: номер телефона, фамилия и имя, пол. В более сложных кейсах нужно:

  • собрать данные из разных источников и проанализировать Big Data (использовать Advanced DataArts Studio или аналогичные инструменты);
  • продумать, как безопасно хранить корпоративные данные (Advanced Data Warehouse Service);
  • защитить БД от уязвимостей и хакерских атак (Advanced Database Security Service) и так далее.

Алгоритмы

Алгоритмы — один из разделов науки Computer Science. Пожалуй, с ним сталкиваются практически все разработчики вне зависимости от сферы и языка программирования. На этапе собеседования могут проводить «Алгоритмическую секцию», где проверяют понимание O(1), O(n), O(n²), O(log n), O(√n), O(n³), O(nn). Если упростить, это то сколько операций нужно сделать для достижения нужного результата.

Самый простой пример — задача на сортировку пузырьком (Bubble Sort Algorithm) на любом языке программирования. О ней часто спрашивают на собеседованиях и просят решить ее на секции live-кодинга. Bubble Sort Algorithm назван так из-за того, что при переборе элементы массива «всплывают» к началу списка, подобно пузырькам воздуха в воде. Сложность алгоритма оценивается как $O(n^2)$: если увеличится исходный массив, то квадратично увеличивается время выполнения. В конечном счете это может привести к тому, что перебор займет слишком много времени (а иногда — съест память и приведет к ошибке программы).

Computer Science — наука, в рамках которой появились десятки направлений. Программист может изучать каждое из них поверхностно или углубиться в определенную сферу (базы данных, алгоритмы).