• Что такое компьютерная наука?

    Что такое компьютерная наука?

    19:05 Авг. 17, 2014

    Что такое компьютерная наука?

    В гостях

    Станислав Протасов

    Кандидат физико-математических наук, преподаватель МФТИ, программист компании Parallels

    Ю. ПОЛЕВАЯ: Сегодня у нас в гостях Станислав Протасов, кандидат физико-математических наук, преподаватель МФТИ, программист в компании Parallels. Поговорим мы сегодня о том, что такое компьютерная наука. Давайте попытаемся разобраться что это такое и в чём особенности компьютерных наук, или компьютерной науки. Как правильно?

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

    Ю. ПОЛЕВАЯ: А предмет тогда какой?

    С. ПРОТАСОВ:  Здесь опять вопрос. Если говорить о том, что компьютерные науки это почти информатика, то здесь информация во всех её проявлениях. Проявлениях той информации, которую можно сжимать, информации, которую можно добывать, информации, которую можно передавать по каналам связи, и всё прилегающее к этому. То есть, среды передачи информации, способы хранения данных и т.д. Компьютер в данном случае является скорее инструментом, высокотехнологичным, но инструментом работы с информацией.

    Ю. ПОЛЕВАЯ: Верно ли ещё то, что человек, занимающийся компьютерной наукой, обязательно должен быть при этом практиком?

    С. ПРОТАСОВ: Да, на мой взгляд, компьютерные науки – это практическая дисциплина. Что такое наука? Наука – это деятельность человека по добыче и систематизации знаний. Так вышло, что компьютерная наука, разговаривая об информации и об инструменте – компьютере, оперирует уже созданными вещами, то есть, созданными в рамках этой науки. И многое, что делает компьютерная наука – это создание чего-то нового, создание новых алгоритмов, создание новых способов чего-то, передачи информации, хранение информации, извлечение каких-то знаний об информации. Получается, что мы, вместо того, чтобы получать знания из природы, из того, что уже существует, мы эти знания создаём. Естественно, для того, чтобы эти знания получать, надо писать код, надо создавать физические системы, информационные системы, которые с этими данными, с этой новой информацией будут работать.

    Ю. ПОЛЕВАЯ: Получается не совсем абстрактная наука. Есть абстрактная часть, на которой базируется прикладная. Грубо говоря, ты пишешь код на основе какой-то математической теории или чего-то ещё. Какое место математики в компьютерных науках?

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

    Ю. ПОЛЕВАЯ: Что здесь мотивирует разработчиков, программистов? Кто за кем гонится: прогресс за математиками и разработчиками или разработчики стремятся обогнать этот прогресс, скажем, постоянно усовершенствовать, делать новые приложения, тачскрины и т.д.? Есть iPhone. Он же всё время за чем-то развивается, эволюционирует.

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

    Ю. ПОЛЕВАЯ: Какие есть самые передовые области в компьютерной науке, самые быстро развивающиеся?

    С. ПРОТАСОВ: Их много. Говорить, что они передовые, не передовые – эта та самая ситуация. У нас много в разную сторону направленных векторов развития. И они все, в свою очередь, передовые. То есть, есть  самые передовые технологии на каждой веточке. Где-то у нас новая технология хранения данных, где-то виртуализации операционной системы. Где-то у нас распознавание изображений. И всё это самые передовые технологии. Но они не сопоставимы между собой как вот это круче, чем вот это.

    Ю. ПОЛЕВАЯ: А есть важная, кардинальная задача, которую нужно решить, если мы говорим о безопасности? Это важная задача обеспечение безопасности данных в интернете?

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

    Ю. ПОЛЕВАЯ: Кто приходит в компьютерные науки, где обучаются? У нас даже такого слова нет. Как правильно тебя назвать? Разработчик, программист?

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

    Ю. ПОЛЕВАЯ: Спрашивают как развивается направление big date.

    С. ПРОТАСОВ: Развивается. Вообще, big date – это такой термин, очень много в около компьютерном информационном поле таких понятий, которые не имеют чёткого определения. Например, к ним относится облачные вычисления big date и т.д. Вig date это что такое? Это некая совокупность  технологий, которая направлена на то, чтобы хранить большие объёмы данных, и уметь с ними читать. Если речь идёт о конкретных технологиях big date и hadoop, а hadoop – это реализация идеи big date. У нас есть конкретная система управления базами данных для очень больших объёмов данных. И они, естественно, развиваются, потому что у нас информация растёт не линейно. И есть такие точки очень быстрого роста – это социальные сети, информационный поиск, где информация растёт очень быстро. Ты сканируешь интернет, у тебя всё больше и больше страниц. И нужно где-то каталогизировать то, что ты нашёл. Или в социальной сети у тебя было 50 млн. пользователей, стало 600 млн. пользователей. Естественно, у тебя очень большое масштабирование размеров. Тебе нужно правильно обеспечивать хранение данных, чтобы твоя система работала с той же скоростью, что и раньше. Представьте себе, что тот же «вконтакт» внезапно начнёт очень сильно тормозить, потому что разработчики не учли, что они должны хранить свои данные как-то по другому. Потому что те технологии, которые они использовали раньше, они уже не подходят для тех объёмов. Поэтому, да, они развиваются. И развиваются такие технологии, в основном, конечно, теми потребителями, т.к. крупными компаниями, которые заинтересованы в использовании таких технологий. То есть, компании, которые хранят много-много данных. Это телеком, социальные сети, поисковики, что-то ещё, может, научные институты, которые занимаются обработкой больших объемов данных.

    Ю. ПОЛЕВАЯ: Всякие биоинформатики, когда им нужно обрабатывать большое количество информации, получающейся в результате секвенирования. Интересная подробность. Оказывается, есть разница между программным обеспечением и программой. В чём здесь подвох. Что такое программное обеспечение, что такое программа, в чём их отличие и кто этим вообще занимается?

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

    Ю. ПОЛЕВАЯ: Сколько примерно проходит времени до того момента, как она попадает к конечному пользователю? Есть среднестатистическое время, когда создаётся программное обеспечение?

    С. ПРОТАСОВ: Если мы говорим о программном обеспечении, которое живёт и выживает, то есть то, которое пользуется довольно долго, то у компании сначала идёт график совершенно непредсказуемый, до первого работающего прототипа. Будут они его полгода писать, три года писать, непонятно. А дальше компания выходит на прямую линию, если у неё номера версий больше 4, 5, как правило, компания специально для себя выставляет некоторый график, и говорит, что мы набираем некоторую функциональность, которой ещё нет в нашем продукте, и мы хотим её добавить. Мы создаём список этих новшеств в нашем продукте, и говорим, что за год обязуемся их выпустить в следующей версии продукта. Например, одна компания выбирает цикл в один год, какая-то в полгода, другая в три месяца, кто-то в два года. Это зависит от компании, которая выпускает продукт.

    Ю. ПОЛЕВАЯ: Очень интересно по поводу того, как конечный пользователь общается с программистами за счёт отправки отчётов об ошибке, в том числе.

    С. ПРОТАСОВ: Да, есть такая галочка, которую все обычно игнорируют, когда программку ставят, отправлять анонимные отчёты.

    Ю. ПОЛЕВАЯ: Лучше не игнорировать?

    С. ПРОТАСОВ:  Конечно, лучше нет. Она же уже поставлена. Если вы снимаете, вы делаете кого-нибудь очень печальным в этом мире. Эти отчёты, на самом деле, очень полезные. И именно благодаря им ваш софт может в принципе конкурировать с другими реализациями, и может жить дальше. Представьте себе, что вы программист, компания, которая написала продукт. Вы отправили продукт пользователям, те заплатили деньги, поснимали все галочки, и ничего не происходит. Вы сидите, думаете: нравится им, не нравится, у них, может, ломается чего-нибудь. Когда эти галочки оставляете, это называется программа пользовательского опыта, то есть, пользователь каким-то образом использует свой продукт, и информацию о том, как он его использует, отправляется разработчикам. Например, вы взяли какой-то очень сложный графический пакет. В нём есть меню вверху, в нём куча инструментов: кисточки, фильтры, линии, квадратики. И вы как пользователь начинаете пользоваться тем, что вам нужно. Вы начинаете выбирать этот фильтр чаще всего. И получается, что есть статистика, которая говорит о том, что 95% пользователей проходят по этому пути. Этот путь состоит из трёх кликов мышкой. Он открывает файл, свойства и что-нибудь. Это долго. Если этим пользуются все, то очевидно, что такую штуку надо вывести повыше.  И благодаря такому отчёту, который собирается с большого количества пользователей, компания может взять и сделать в следующей версии продукта, выпустить эту функцию на панели. Раз ей пользуются все, значит нужно, чтобы она была доступна максимально быстро. Это благодаря вашему опыту использования. Или проблема, например, у вас с редкой операционной системой. Все пользуются, например, Windows, Macintosh, разными дистрибутивами Linux. И вроде бы компания тестирует продукт, проверяет на всех платформах, на основных версиях операционных систем. Но может так случиться, что какая-то версия выпала из сферы интересов компании. Тогда, когда вы используете продукт, отправляете отчёт об ошибке, возникшей у вас в продукте, вы можете сказать, что есть такая версия операционной системы, в которой есть косячок, давайте вы его исправите. И вообще, очень много полезной информации можно получить, не только для самого пользователя полезной, конечно, но  и для компании. Это может быть маркетинговая информация о том, как долго человек пользуется продуктом, почему он его удаляет. Бывает такое, когда вы программку удаляете, она спрашивает почему вы меня удаляете.

    Ю. ПОЛЕВАЯ: Обычно с рассылками происходит, когда ты отписываешься от какой-то рассылки, тебя спрашивают. Эти отчёты поступают в огромном количестве. Как вы их храните?

    С. ПРОТАСОВ: Хранят их очень по разному. Есть компании, которые вырастают из маленьких старт-апов, и каждая компания набивает собственные шишки. А есть компании, которые пользуются уже существующими наработками. Точно так же с маленькими компаниями, которые когда-то создавались. Они могут на своей шкуре проходить очень важный путь, который проходят все компании. Так же точно с внутренней разработкой. То есть, к внутренней разработке относится, в том числе, и система поддержки пользовательских отчётов. И компании, конечно же, вынуждены бороться с тем, что их количество вдруг внезапно выросло, стало вдруг много пользователей, это замечательно, но вызывает некоторые проблемы. Это всё хранится в базах данных, в специально структурированном виде. И для того, чтобы из этих отчётов извлекать информацию, нужна иногда нетривиальная математика, связанная, например, с прогнозированием чего-то. Представьте себе, что ваша программа отправляет отчёты, и у нас есть много версий обновления этой программы. И мы должны понимать сколько пользователей ещё пользуются продуктом, какой версией продукта, и какова тенденция. То есть, через сколько дней мы с вами увидим, что все пользователи обновились, и мы  можем делать что-то дальше, какие-то шаги предпринимать, анонсировать новый продукт. Или же, например, мы можем видеть с вами, что какая-то версия почему-то оказалась более популярной, чем новые. Как так вышло, что пользователи почему-то обновляются назад? Это всё математика вполне себе. Эти данные извлекаются из таких структурированных хранилищ, которые надо постоянно сжимать, хранить, и следить за тем, чтобы они не терялись. Потому что для компании информация, полученная от пользователя – это самая ценная информация, которую он может получить.

    Ю. ПОЛЕВАЯ: Какие ещё аспекты внутренней разработки?

    С. ПРОТАСОВ:  Кроме того, что компания общается с пользователем, она ещё внутри себя общается. Очень много процессов, естественно. У вас не только программисты в компании сидят, у вас там есть и отдел управления персоналом, и охрана, и есть такие люди, называются тестировщики, очень важные люди.

    Ю. ПОЛЕВАЯ: Что они делают? Они тестируют те программы?

    С. ПРОТАСОВ:  Отдел обычно называется отдел обеспечения качества. Это отдел, который делает так, чтобы ваш продукт соответствовал требованиям. Это могут быть требования здравого смысла. Если вы накладываете на картинку размытие, то у вас получится размытая картинка, а не что-нибудь левое. Так и требования документации. Например, у вас есть заказчик, он говорит: хочу вот это. Отдел качества следит за тем, чтобы всё было так, как захотел заказчик, или так, как вы себе сами поставили в самом начале. Это большое количество людей между собой общается. И оно между собой общается разными способами. Понятно, что если вы будете ходить пешком из отдела в отдел, можно много времени потратить. Как можно больше таких коммуникаций надо автоматизировать. Для этого существует большое количество систем, которые уже разработаны, и часто отдел разработки занимается либо внедрением таких систем, либо попыткой связать их между собой, чтобы у вас система, которая следит за задачами в компании, была связана с системой, которая следит за ошибками в компании. Например, такой кейс, когда приходят отчёты об ошибках от пользователей, вам необходимо на них реагировать. Вот у вас прилетел отчёт, их 200 миллионов. Такие отчёты вручную никак не разобрать. Но вы точно знаете, что большинство из них по какому-то критерию группируются, то есть, есть однотипные ошибки у пользователей. И вы можете при помощи систем, похожих на искусственные интеллектуальные системы, в смысле, что это задача классификации у нас идёт, вы можете разбить их на группы, и сформировать из них пакетик, признак, по которому вы их объединили, и сгруппировать их, запомнить, какие конкретно ошибки у вас соответствуют этой проблеме. Соответственно, вы получаете информацию о том, у кого такая проблема произошла, на каких платформах она произошла, и после этого по этой сигнатуре может создаваться задача разработчику. Вы автоматизируете процесс, исключая из него ручной труд по перебору всех заявлений о проблемах программного обеспечения.

    Ю. ПОЛЕВАЯ: И разработчик обязан отреагировать?

    С. ПРОТАСОВ: У него в списке появляется задача.  Он будет на неё реагировать.

    Ю. ПОЛЕВАЯ: А что такое внутренняя коммуникация?

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

    Ю. ПОЛЕВАЯ: Расскажи, пожалуйста, что такое параллельное программирование? И почему это так важно?

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

    Ю. ПОЛЕВАЯ: Есть какой-то конечный результат, то, быстрее, или больше чего вы не можете сделать? Какое-то ограничение в параллельном программировании есть?

    С. ПРОТАСОВ: Во-первых, есть ограничения на текущий момент. То есть, далеко не всякая задача может быть разделена на 200 параллельных подзадач, которые будут выполняться. Бывает такое, что процесс последовательный. Вы должны сначала сделать а, а потом уже делать б. Это многие вычисления так работают. Вы не можете, прежде чем возьмёте первую производную, взять вторую производную, например. И есть класс задач, которые отлично параллелятся. Это задачи математической физики, те, которые  считают численно. Есть дифференциальные уравнения, многие решают аналитические в институте на втором курсе, а есть целые научные институты, которые занимаются численным решением таких уравнений. Они берут огромные объёмы данных, они берут очень подробную сетку, начинают строить решения при помощи суперкомпьютеров на большом параллельном компьютере. Соответственно, им необходимо, чтобы это было очень быстро. Конечно, есть проблемы, с которыми они сталкиваются. Понятно, что теоретически задачи делятся отлично на любое количество подзадач. Но на деле оказывается, вы представляете себе огромный компьютер, в которым тысяча ядер. Соответственно, чтобы сигнал от одного ядра дошёл до другого, необходимы линии передачи информации, эти линии съедают некоторое время. Необходимо, чтобы такие программы пользовались одной памятью. Память является очень медленным с точки зрения разработки программного обеспечения, ресурсом. Вы должны минимизировать работу с ней каким-то образом. И оказывается, что далеко не любую задачу можно тесно распараллелить на n процессоров, а бывает так, что в какой-то момент польза от количества ядер начинает превращаться во вред. У вас кривая пользы начинает падать вниз.

    Ю. ПОЛЕВАЯ: Что такое искусственный интеллект в рамках компьютерной науки?

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

    Ю. ПОЛЕВАЯ: А какие ещё есть примеры?

    С. ПРОТАСОВ:  Если говорить про электронный нос, например, есть лабораторные исследования, которые занимаются изучением, например, продуктов питания. Мы с вами говорим, что у нас есть срок или что-нибудь, на нём написано, что ароматизатор апельсин. Ароматизатор бывает натуральный, идентичный натуральному, или совсем не натуральный. И они состоят из разных веществ. И, соответственно, такой нос может по заранее известным учёному признаку определить какого типа ароматизатор, не врёт ли нам производитель и т.д. Такие исследования регулярно проводятся в разных городах, где в институтах разработаны такие приборы, в Новосибирске, в Воронеже. И такие приборы помогают проверить испортился ли продукт, действительно ли он соответствует тому, что заявлено на упаковке. Если мы говорим не только про электронный нос, то у нас есть система компьютерного зрения. Мы с вами, когда перемещаемся в пространстве, мы оцениваем расстояние, особенно видим какой-то предмет за счёт того, что у нас два глаза, мы можем по геометрическому принципу, у нас зрачки в среднем на расстоянии 66 мм. И каждый глаз определяет смещение предмета друг относительно друга. И по этим физическим принципам может сказать вам какое примерно расстояние у нас до столба, до двери. И, соответственно, почему бы такого не иметь компьютеру? Мы вспоминаем про алгоритмы компьютерного зрения, и про то, что современные мобильные роботы умеют пользоваться такими алгоритмами. Это называется алгоритм стереосопоставления, когда у вас две картинки, вы между ними пытаетесь найти, например, какое-то соответствие. Вы увидели фонарь на улице ночью. И фонарь светится. И робот по смещению между его глазами, между камерами, может определить расстояние до фонаря. И благодаря таким знаниям он может ориентироваться в пространстве. Мы получаем автономного робота, который может ездить по заброшенным помещениям, по зонам техногенных катастроф. Ему не страшная радиация, погода. Он может спасать людей, доставлять гуманитарные грузы. Это вообще очень приоритетная разработка для многих государств. Они занимаются разработкой мобильных роботов очень активно сейчас. Кроме бинокулярного зрения бывает ещё анализ изображений.  Когда вы на картинке можете и проанализировать объект. Самый частый пример  - это распознавание человеческих лиц. И от самого простого просто посчитать, например, вы поставили камеру над входом в торговый центр, и считаете входящих, выходящих людей по лицам. Соответственно, вы можете сказать сколько людей посетило вашу выставку достаточно точно, просто посчитав прошедших перед камерой людей. Если мы говорим про более сложные вещи, то есть, вы зафиксировали лицо, теперь вам нужно его распознать. Элементарно – поиск пропавших, разыскиваемых людей. И более игровые приложения как социальные сети, совершенно верно. Это всё алгоритмы распознавания, когда вы по изображению с камеры можете получить некоторую более глубокую информацию. Можно говорить о том, что картинка – это информация, то есть, самое примитивное представление. Вы из неё получаете некоторые данные, то есть, о пропорциях лица, о цвете глаз и т.д., и из данных получаете уже знания о том, кто изображён на этом изображении.

    Ю. ПОЛЕВАЯ: А что касается сильного интеллекта? Это пока недостижимая мечта?

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

    Ю. ПОЛЕВАЯ: Это скорее из области фантастики?

    С. ПРОТАСОВ:  Я думаю, что это из области ближайших 50 лет.

    Ю. ПОЛЕВАЯ: Через 50 лет мы получим сильный искусственный интеллект?

    С. ПРОТАСОВ:  Я думаю, что наука пойдёт немножко другим путём. Это, скорее, идеальное желание человечества создать что-то, божественные амбиции, создать интеллект. Но в целом я встречал гораздо более интересные версии, то, что человечество научится правильно интегрироваться со своим интеллектом. Представьте себе ситуацию, что уже сейчас существует большое количество нейроинтерфейсов. Мы с вами с каждым годом приближаемся всё ближе и ближе к вычислительным устройствам. Если раньше компьютер был большой, и способом взаимодействия с ним была перфокарта и экран. Это очень неудобно. Сейчас мы с вами уже переходим от 10-пальцевого ввода на клавиатуре к непосредственному взаимодействию с устройством. Мы с вами трогаем его пальцем, перетаскиваем картинку по экрану, мы изменяем размер пальцами. То есть, мы с вами начинаем взаимодействовать информацией, фактически. Вы знаете очки. Они понимают наш голос, речь, умеют фактически встраиваться в нашу жизнь каким-то образом, пусть плохонько, но мы можем взаимодействовать привычными нами способами. Есть способы нам неизвестные, те же нейроинтерфейсы. Почти во всех институтах занимаются тем, что хоть как-то, но понимают человеческую мозговую активность, либо очень грубо, пять стрелочек и на виртуальной клавиатуре можно набрать текст. Это то, что сейчас практически из конструктора можно сделать. До более точного понимания о чём человек думает, а конкретных образах. Это, наверное, ещё впереди. Но главное, что мы с вами получаем новые способы взаимодействия, когда вам даже не нужно пальцами шевелить. Если ваш нейроинтерфейс научится понимать именно вас, за какое-то время настроится, поймёт особенности своего хозяина, то мы с вами сможем расширить вычислительность нашего мозга очень простым способом. Мы с вами немножко напряжёмся, ваш запрос уйдёт куда-нибудь в облачную систему, которая посчитает или найдёт нужную информацию. Сижу я, например, дома и вспоминаю как же звали режиссёра этого фильма. Я напрягся, моё напряжение превратилось в сигнал в компьютерной системе, она обратилась к «Википедии», «Википедия» отправила мне ответ обратно. И всё это через нейроинтерфейс. То есть, вы начинаете расширять способности своего мозга, начинаете знать то, что никогда не знали.

    Ю. ПОЛЕВАЯ: Это всё равно обращение к «Википедии», расширение инструментария, которым мы можем пользоваться, чтобы узнать что либо, чем возможности мозга. Я и сейчас могу обратиться к «Википедии» за три клика.

    С. ПРОТАСОВ: Я думаю, что речь будет идти о том, не то, что это принципиально другой подход, а в том, что вы не будете задумываться о том, что вы к «Википедии» обратились. То есть, человек не будет задумываться о том, его ли это знание вообще. Он обратится просто усилием мысли, и даже, может быть, не поймёт то ли он вспомнил это, то ли ему подсказал его виртуальный помощник.

    Ю. ПОЛЕВАЯ: Всё-таки, 50 лет?

    С. ПРОТАСОВ:  Я думаю, может и раньше.

    Ю. ПОЛЕВАЯ: Когда мы были в лаборатории у Александр Яковлевича Каплана, который занимается компьютерными нейроинтерфейсами в лаборатории , там мне показалось всё пессимистичнее. На тех экспериментах, которые мы делали  у него, подключая мозг моей коллеги к компьютеру, там всё было медленнее. И поэтому мне интересно, что ты говоришь про 50 лет, а Каплан Александр Яковлевич, наверное, здесь бы не согласился. В любом  случае, здесь возникает проблема, в том числе, этическая. Проблема в рамках сильного искусственного интеллекта. Собственно то же самое, что клонирование, которое вызывает огромное количество споров и т.д. Ты видишь здесь какую-то проблему? Есть ли здесь этическая проблема?

    С. ПРОТАСОВ: Очень хороший вопрос. На него в своё время отвечали Стругацкие в своих книжках. Человечество часто не задумывается о проблемах, которые гипотетически возможны. И пытаются решить, на мой взгляд, часто, когда они возникают. То есть, никто толком не задумывался о том, что будет какая-то проблема этическая с клонированием, когда-то давно об этом предполагали, задумываться начали, когда реально начало что-то получаться. Я думаю, что так же, если вдруг по какой-то причине у нас получится вынести человеческий интеллект за пределы человека, или создать искусственный интеллект, то до последнего момента никому не будет до этого дела. И в самый последний момент, когда это станет угрозой или просто возможностью, естественно, мировые правительства начнут задумываться. Но технологии науки работают так, что она найдёт лазейку для выхода. То есть, если что-то будет создано, то нельзя это просто так уничтожить, как любое научное знание, если только не сжигать в библиотеке.

    Ю. ПОЛЕВАЯ: Какие проблемы ты в этом видишь? Что случится, если сильный искусственный интеллект получится создать?

    С. ПРОТАСОВ:  Про это есть кино, называется «Терминатор».

    Ю. ПОЛЕВАЯ: Расскажи, чем ты непосредственно занимаешься как программист-разработчик?

    С. ПРОТАСОВ:  Сама компания занимается несколькими ветками направлений. Сейчас у нас две таких больших отрасли. Одна связана с сервис-провайдерами, то есть, компаниями, которые предоставляют вам сервис. Это может быть сервис хостинга, когда вы покупаете место под сайт, это может быть сервис обсчёта. Вы как хостинг-провайдер, компания, которая держит у себя эти места, должны как-то тарифицировать пользователей. У нас есть ветка, связанная с конечным пользователем. Это продукт Parallels Desktop 9 для Mac и Parallels Access. Я занимаюсь частью, которая связана с сервис-провайдерами. И мы делаем продукт, который в конечном итоге будет использоваться в государственных структурах, или близких к этому.  Я сейчас занимаюсь задачами, связанными с шифрованием данных наших отечественных крипт-алгоритмов, потому что это нужно для компании, которая использует наш продукт. Они говорят: «Мы хотим использовать наш алгоритм шифрования, потому что они надёжные, защищены ГОСТом, нас не будут подслушивать». Государственные компании имеют некоторые требования к программному обеспечению, которое они используют. Они должны сертифицироваться в специальных лабораториях. Например, есть компания, которая сертифицирует ПО для госконтор. Соответственно, там есть требования что должно быть, чего не должно быть в таких продуктах. А есть, в зависимости от степени защищённости, определённые требования. Вы не можете использовать американские алгоритмы, потому что американцы, наверняка умеют их расшифровывать.

    Ю. ПОЛЕВАЯ: Русские не умеют?

    С. ПРОТАСОВ: Для этого и создаются, чтобы не умели их расшифровывать.

    Ю. ПОЛЕВАЯ: В государственных компаниях используется совершенно другое программное обеспечение, чем у простых смертных, потому что им нужно сохранять определённый уровень безопасности, которым они оперируют?

    С. ПРОТАСОВ:  Естественно, не во всех компаниях и не всё, но то, которое критично для информации, конечно же, оно сертифицируется.

    Ю. ПОЛЕВАЯ: Спасибо большое, Станислав.

    Версия для печати

Связь с эфиром


Сообщение отправлено