Материал подготовлен на основе радиопередачи «ПостНаука» на радио Говорит Москва. Ведущий — шеф-редактор проекта «ПостНаука» Юлия Полевая, гость эфира — кандидат физико-математических наук, программист компании Parallels Станислав Протасов.

— Давайте попытаемся разобраться, что это такое и в чем особенности компьютерных наук, или компьютерной науки. Как правильно?

— Можно придумать много всяких особенностей. Первая из них в том, что часто термин употребляется во множественном числе. Причиной тому я вижу, наверное, тот факт, что компьютерные науки росли довольно неорганизованно, как отдельные веточки на дереве, и пока общей картины науки трудно разглядеть за этими ветвями. Наука молодая, она относится к разряду так называемых абстрактных наук. Собственно, такой наукой является математика. Компьютерные науки исследуют что-то идеальное, чего в реальном мире может просто физически не присутствовать. Геология изучает недра земли, медицина изучает человека, а компьютерные науки изучают что? Это интересный вопрос. Потому что из названия следовало бы, что изучает компьютер. Он уже придуман, построен довольно давно. Часто ставят довольно слабый знак равенства между словами «информатика» и «компьютерные науки». Но предметом изучения информатики является информация, способ ее добычи, переработки, поэтому это особенная наука, в которой название происходит не от предмета исследования, а, скорее, как от инструмента.

— А предмет тогда какой?

— Если говорить о том, что компьютерные науки — это почти информатика, то здесь информация во всех ее проявлениях — проявлениях той информации, которую можно сжимать, добывать, передавать по каналам связи, и все прилегающее к этому. То есть среды передачи информации, способы хранения данных и т. д. Компьютер в данном случае является скорее инструментом, высокотехнологичным, но инструментом работы с информацией.

— Верно ли еще то, что человек, занимающийся компьютерной наукой, обязательно должен быть при этом практиком?

— Да, на мой взгляд, компьютерные науки — это практическая дисциплина. Что такое наука? Наука — это деятельность человека по добыче и систематизации знаний. Так вышло, что компьютерная наука (наука об информации и об инструменте — компьютере) оперирует уже созданными вещами, то есть созданными в рамках этой науки. И многое, что делает компьютерная наука, — это создание чего-то нового, создание новых алгоритмов, создание новых способов чего-то, передачи информации, хранение информации, извлечение каких-то знаний об информации. Получается, что мы, вместо того чтобы получать знания из природы, то есть из того, что уже существует, эти знания создаем. Естественно, для того, чтобы эти знания получать, надо писать код, создавать физические и информационные системы, которые с этими данными, с этой новой информацией будут работать.

— Получается не совсем абстрактная наука. Есть абстрактная часть, на которой базируется прикладная. Грубо говоря, ты пишешь код на основе какой-то математической теории. Какое место математики в компьютерных науках?

— В принципе, информатика как наука и компьютерные науки в большинстве своем именно как научная дисциплина — это надмножество математики. Все, что исследуется, допустим, в теории алгоритмов, — это развитие существующих математических моделей. Все, что исследуется в области нейронных сетей, в области компьютерного зрения, — это все математические модели, математические термины. Все те же матрицы, деревья и графы. Когда мы говорим о науке, наука — это фактически надматематика. Когда мы говорим о практике, вся эта наука, в отличие от многих фундаментальных исследований, от физики, биологии, очень быстрая. Она быстрая потому, что из теории, которую мы получаем, мы очень быстро можем получить практический результат, программное обеспечение. Мы с вами только разработали какие-нибудь новые интерфейсы, и у нас уже по всему миру iPhone, которые умеют делают что-то с этими тачскринами, с новыми моделями управления устройства. Если мы говорим о том, что у нас появился новый алгоритм, который распознает лицо человека на отображении, то ожидайте, что через полгода появится приложение мобильного телефона, который будет это делать.

— Кто приходит в компьютерные науки, где обучаются? У нас даже такого слова нет. Как правильно вас назвать? Разработчик, программист?

— Можно и так и так. Кто приходит? Хороший вопрос, потому что еще 50 лет назад не было такой специальности — «программист». И если вы откроете биографию известных людей от мира информатики — Дональда Кнута, Дейкстры, то у них много забавных историй про то, что он пошел куда-нибудь, написал в какой-нибудь анкете, что он программист. Ему говорят: «Измените, пожалуйста, на физика-теоретика, потому что нет такой профессии». Сейчас такая профессия есть, и есть направление подготовки в этой области. Изначально, наверное, это были физики-математики, то есть те люди, которые получили очень близкое к предмету образование. Потом появились более точные в российской науке ветви, например прикладная математика и факультеты прикладной математики. И сейчас это уже вполне себе развивающиеся по всей страны факультеты компьютерных наук как калька названия Computer Science с английского языка.

Рекомендуем по этой теме:
9748
IT-Образование

— Какая есть разница между программным обеспечением и программой?

— Есть такая золотая последовательность от математической модели к конкретным методам, алгоритмам. У нас идет конкретизация — математическая модель. У нас есть в этой модели некоторые методы, которые мы превращаем в алгоритмы. Алгоритм — это некоторая инструкция, которая говорит, как можно сделать что-то. Вы можете приказывать своему роботу-пылесосу обходить комнату в таком-то порядке. Дальше реализацией алгоритма является программа. То есть это некоторый набор приказов уже конкретному предмету — компьютеру. Это очень низкоуровневая вещь. Вы знаете, как приказывать компьютеру — это все еще в области компьютерной науки, в области математики. И, в принципе, раньше, когда компьютеры были большие, а программисты очень умные, они писали программы на перфокартах, набивали дырочки в картонке, засовывали их в большую машину, и машина выполняла приказания. Тогда была высока цена ошибки. То есть человек создавал программу один раз, он не имел возможности исправить ошибки, которые он допустил, и поэтому машина считала то, что ей сказали. Это была программа. Программное обеспечение — это совершенно другая история, это то, что от программиста идет не к машине, а к человеку. То есть человек — это пользователь программного обеспечения, который ничего не знает о программисте, ничего не знает о том, как писалась эта программа. Соответственно, он пользуется продуктом. Например, у нас есть продукт — велосипед. Если бы наш велосипед писался, как раньше программа, то половина велосипедов была бы без спиц, без одного колеса, без половины руля, точно так же программное обеспечение. Оно должно пройти очень много технологических стадий. Это что-то похожее на ГОСТы. Мы должны каким-то образом стандартизировать разработку таких программ, программного обеспечения для телефонов, для компьютеров, чтобы этим можно было пользоваться более-менее массово. И, соответственно, этот процесс очень сложный. Он включает в себя тестирование, менеджмент со стороны других людей, чтобы они следили, что все правильно делается. Это в том числе следование современным технологиям. То есть нельзя написать программу в 1998 году, а потом в 2014-м просто ее запустить. Это невозможно, потому что сейчас компьютеры очень сильно видоизменились, изменилась архитектура, операционные системы, и она может просто не заработать. И поэтому, когда мы говорим о программном обеспечении, вы должны понимать, что вы видите только вершину айсберга — сам продукт и, может быть, какие-то способы взаимодействия с разработчиком, способы обновления программного обеспечения, звонок в службу поддержки. А под этим всем существует еще огромное дерево от людей, которые эту программу поддерживают, которые ее держат в рабочем состоянии и делают это постоянно. Не один раз написали и забыли, а постоянно поддерживают ее в жизнеспособном состоянии, чтобы вы могли и дальше ею пользоваться.

— Расскажите, что такое параллельное программирование? И почему это так важно?

— В компьютере есть процессор — такая штука, которая выполняет ваши приказания. Это достаточно сложный кристалл, микросхема, которая принимает на вход команды и выполняет их. И до недавнего времени все компьютеры были однопоточными, однозадачными. То есть один компьютер, один процессор, одна последовательность задач, команд и, соответственно, одна программа во время выполнения. В свое время было прорывом для пользователей конечное появление операционной системы Windows с ее многозадачностью, когда на принципах прерывания друг друга несколько программ могли работать на этом потоке команд одновременно. Одна программа выполняется, говорит «подожди секундочку», другая программа приостанавливается, и поэтому у вас может создаться впечатление, что вы работаете с несколькими программами одновременно. Для того чтобы это было не как бы, а на самом деле, компьютеры стали получать все больше и больше ядер. Это, наверное, еще связано с тем, что есть такой закон Мура. Он связан с тем, что у вас количество транзисторов в процессоре растет каждые 1,5 года в два раза. И, соответственно, если мы с вами будем уменьшать размер каждого транзистора, то когда-то мы придем к такому состоянию, что они уже перестанут подчиняться тем законам физики, которым они подчиняются сейчас. То есть у очень маленького транзистора начинаются совершенно другие эффекты — квантовый процесс, который уже не подчиняется электрической физике. И в этот момент, когда количество транзисторов начало расти, встал вопрос о том, как сделать так, чтобы получить преимущество не от того, что они становятся все меньше и быстрее, а от того, что их просто много. И он разделился на два процессора. И теперь два процессора одновременно могут выполнять два потока команд. Соответственно, ваш компьютер может одновременно работать с двумя программами. Такая ситуация начала масштабироваться, и получается, что вы можете очень сложную вычислительную задачу, которая требует много однотипных вычислений, выполнять почти в 200 раз быстрее. И, соответственно, когда появилась техническая возможность работать с множеством ядер одновременно, вы получили новую математику, и теперь алгоритм перестал быть просто последовательностью команд. Теперь это несколько последовательностей команд, которые должны между собой еще и взаимодействовать, чтобы результат, который они совместно получают, был правильным, чтобы не было никаких проблем из-за того, что кто-то закончил раньше, кто-то позже, кто-то прочитал или перезаписал данные другого потока и вдруг испортил данные для другой программы. И, соответственно, как только появилась такая возможность, начали разрабатываться алгоритмы нового типа, параллельные алгоритмы. Для них необходимо было разработать инструменты, обеспечивающие правильность программ, гарантировать, что каждый раз при запуске такой параллельной программы, даже если потоки команд будут двигаться немножко с разной скоростью, вы будете всегда получать один и тот же результат. Для этого существует примитивная синхронизация. Например, вы говорите всем потокам остановиться в конкретной точке. Они все собираются, дождались друг друга, поехали дальше. И вот эта наука включает в себя не только практические вещи, как заставить программу работать правильно, но и теоретические изыскания на тему того, как заставить программу работать максимально быстро. Например, как заставить программу работать так, чтобы ваш алгоритм не требовал каких-то дополнительных синхронизаций между потоками и приходил всегда к правильному результату. И, соответственно, алгоритм в рамках параллельного программирования классифицируется как не ожидающий, не блокирующий по степени их готовности к работе сразу с места, без ожидания соседей по процессорам.

Рекомендуем по этой теме:
6282
Внутренняя разработка в Computer Science

— Что такое искусственный интеллект в рамках компьютерной науки?

— Вообще, искусственный интеллект, так же как компьютерная наука, — это совокупность каких-то веточек, которыми занимаются разные группы ученых, разные группы программистов. Был такой товарищ Джон Сёрл, написавший в 1970 году статью, в которой он декларировал два понятия — сильный и слабый искусственный интеллект. И первый, то есть сильный, постулировался как некая способность машины мыслить на том же уровне, что и человек, то есть осознавать себя, принимать какие-то жизненные решения, развиваться, эволюционировать. Это интеллект в том смысле, в котором мы его понимаем даже на бытовом уровне. А система слабого искусственного интеллекта — это такие компьютерные программы, которые могут выполнять задачи, которые делает человек, но без человека.

И таких систем, естественно, множество. Например, можно попытаться провести аналогию между человеческими органами чувств и системой искусственного интеллекта. Представьте, что у вас есть вкус и обоняние. Соответственно, вы можете понимать вкусы и запахи. Как это работает у вас? У вас это работает как набор рецепторов, на которые падает молекула вещества, и формируется электрический импульс в мозг. Мозг анализирует эту молекулу, говорит, что это, скорее всего, мясо или, скорее всего, апельсин. То же самое может делать машина. Соответственно, если мы с вами построим техническую систему, которая будет принимать сигнал с молекулы, понимать, что это за молекула, то дальше, при помощи математической статистики и баз данных о том, какие бывают запахи, какие бывают молекулы в каких веществах, мы можем с вами формировать сигнал о том, что с вероятностью столько-то у нас такой продукт. Уже сейчас в таком простеньком виде такие системы используются. Например, есть заточенные под определенные задачи электронные носы, которые находят наркотики и взрывчатку. Они очень чувствительные — нос реагирует на некоторую концентрацию запаха в воздухе, а детектор может реагировать на одну молекулу какого-то наркотика, который вырвался из сумки. Соответственно, может найти гораздо четче, чем собака.

Рекомендуем по этой теме:
4291
3D-реконструкция по изображениям

— А что касается сильного интеллекта? Это пока недостижимая мечта?

— Это хитрый вопрос. Он до сих пор, конечно, находится в области философии, потому что, если бы он существовал, мы бы об этом уже знали. Соответственно, разработки ведутся. И они ведутся несколькими путями. Один из довольно давно эксплуатируемых способов, который сейчас начинает получать возможность к реализации, — это способ имитационный. У нас есть мозг, который является носителем нашего интеллекта. И если мы с вами разберемся, как работает мозг — я думаю, нейронаука дает достаточно полный ответ на этот вопрос, — мы с вами можем попытаться сымитировать эти же процессы при помощи компьютера. То есть на огромных вычислительных системах построить подобие человеческого или животного мозга, заставить его выполнять те же операции, которые выполняет наш мозг, то есть просто смоделировать интеллект живого существа. А можно попытаться какими-то другими способами получить похожие вещи при помощи построения мультиагентных систем, которые каким-то образом самоорганизуются при помощи генетических алгоритмов, то есть тех подходов, которые не являются имитирующими, но какими-то нестандартными путями. Поскольку до сих пор у нас сильного искусственного интеллекта не существует, говорить об этом пока рановато.