Для кого сегодня полезны 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 — наука, в рамках которой появились десятки направлений. Программист может изучать каждое из них поверхностно или углубиться в определенную сферу (базы данных, алгоритмы).