Между программированием и физикой

Как изменить российское образование, чтобы интегрировать Россию в мировой хайтек

Автор этой статьи Юрий Панчул — старший инженер компании MIPS Technologies, которая проектирует процессоры для бытовой электроники. Процессоры MIPS стоят в телевизорах Sony, роутерах Cisco, принтерах Hewlett-Packard. В прошлом Юрий был основателем стартапа в области автоматизации электронного дизайна C Level Design, который был проинвестирован Intel Capital и среди клиентов которого были Hitachi и Fujitsu.

Мировая электронная и компьютерная промышленность проходит через период трасформации, возможно самый радикальный за последние 30 лет. Двойная монополия Intel и Microsoft на рынке персональных компьютеров становится неактуальной из-за распостранения смартфонов, планшетов и облачного хранения данных. Происходит рост как традиционных для рынка гаджетов процессорных компаний (ARM, MIPS), так и различных альтернативных проектов, стартовавших в Китае.

В этих условиях для российских компаний появляется возможность интегрироваться в мировую экономику и получить свою долю мирового «электронного пирога», размер которого оценивается в 1,85 трлн долл. [1]. Но для российского технологического рывка необходим крупный пул квалифицированных инженеров, которых должны подготовить российские вузы. В какой степени программа российских вузов соответствует новым реалиям, и что в них можно изменить?

Уроки перестройки

Современная российская модернизация — явление не новое, до нее была, например, волна интереса к электронике и, особенно, программированию во время горбачевской перестройки. В 1985-1987 гг. в школах появились компьютерные классы с первыми советскими персональными компьютерами «Агат» и японскими MSX Yamaha. Издательство «Мир» напечатало много переводных книг по языкам программирования и операционным системам, появился журнал «Микропроцессорные средства и системы», стал популярным переводной журнал «Электроника».

Одним из наиболее «компьютерных» мест для учебы в СССР 1987 г. общественное мнение считало Факультет управления и прикладной математики (ФУПМ) Московского физико-технического института (МФТИ). И действительно — студенты МФТИ того времени работали на базовых кафедрах в ВЦ Академии наук с известным гуру Евгением Веселовым, разрабатывали программное обеспечение для Unix в Институте им. Курчатова и авиационные встроенные системы для ГосНИИАС. Однако «компьютерность» ФУПМ была поразительным образом почти никак не связана с программой его основных курсов, в которой, по западным меркам, практически никакой «компьютерности» не было.

В типичном западном университете типа Беркли или Стэнфорда в то время был прежде всего основательный, хотя и вводный, курс по алгоритмам и структурам данных [2], основательный курс по компиляторам [3] и курсы по операционным системам [4]. Они переплетались с практикой — студент учился писать хороший код со сложными структурами данных и алгоритмами.

Ничего такого в программе ФУПМ МФТИ тогда не было. Хотя многие западные учебники были в то время переведены на русский язык, и некоторые (книга Ахо и Ульмана по компиляторам) даже были в списке рекомендованной литературы, но они никак или почти никак не использовались в МФТИ. Студенты учились писать простые программы на Фортране, по-видимому, для чисто вычислительных целей, а курс по компиляторам содержал менее 10% информации по сравнению с соответствующими курсами в заданных вузах.

Проблемы неадекватности программы Computer Science в советских вузах возникали не только у выпускников МФТИ. Александр Авсеев, Principal Architect, Corporate Research в одной из ведущих телекоммуникационных компаний мира Huawei и выпускник Московского авиационного института, утверждает: «По моему опыту, российские выпускники вузов (за исключением ВМК-шников) практически полностью пролетают мимо CS 313 (Ред. курс по алгоритмам и структурам данных), который в Америке практически везде преподается стандартно на базе книг Кнута и Кормена. Т.е. начинать надо с изучения основ, алгоритмов и структур. И знать это надо назубок. Это все спрашивается на собеседованиях, и тут даже практические знания могут не помочь, потому что надо знать теорию и терминологию, как свои пять».

Что же изучали на «компьютерном» факультете МФТИ в конце 1980-х годов вместо «компьютерной науки»? Физику. Очень, очень много физики. Пять семестров общей физики, пять семестров теоретической физики, теоретическая механика, уравнения математической физики и математика — но только в объеме, необходимом для поддержки физики. Для многих студентов такая несбалансированность программы была большой загадкой. Возможно, разгадка связана с тем, что МФТИ изначально планировался как кузница инженерных кадров для разработки межконтинентальных баллистических ракет, и программа обучения была оптимизирована для решения возникающих при этом вычислительных задач.

Согласно Сергею Вакуленко, выпускнику ФУМП, бывшему работнику Института им. Курчатова, сейчас — инженеру по моделированию в процессорной компании MIPS Technologies, «крен физтеховской программы в сторону матфизики был необходим для подготовки специалистов, решающих задачи наподобие расчета нагревания боеголовки при проходе через атмосферу. Для более актуальных на сегодняшний день задач, например программирования встроенных систем для современных гаджетов, все эти матфизические курсы совершенно бесполезны, а теоретическую физику на ФУПМ-е можно было бы уложить в два семестра».

Недостатки официальной программы обучения МФТИ частично компенсировались инициативами снизу. В 1988 г. на Физтехе появилась Студенческая лаборатория компьютеризации (СЛК) — достаточно независимая от администрации института организация, во главе которой стоял Олег Бацуков. Сначала это был своего рода клуб коллективного самообразования примерно из 20 студентов. Потом СЛК стала заключать договора с другими институтами, например договор с Институтом проблем кибернетики на создание системного программного обеспечения для советского векторного суперкомпьютера «Электроника СС-БИС», аналога знаменитого американского векторного суперкомпьютера Cray-1.

Современное состояние

За 20 лет в МФТИ произошли большие изменения. Появились адекватные курсы процедурного, объектно-ориентированного и низкоуровневого/ ассемблерного программирования, курсы по алгоритмам и структурам данных, а также серьезный курс по операционным системам. Появилась поддерживаемая Intel Кафедра микропроцессорных технологий Факультета радиотехники и кибернетики. Помимо «старого» компьютерного факультета ФУПМ появился «новый» компьютерный Факультет инноваций и высоких технологий МФТИ, студенты и преподаватели которого (Анастасия Уряшева, Антон Моисеев, Юрий Аммосов) инициировали разработку программ на базе новой платформы Android. Группа студентов и преподавателей (Александр Злобин, Александр Бибиков) на Кафедре радиотехники МФТИ разработали систему на чипе для бортовых компьютеров, используя синтезируемые процессорные ядра и программируемые пользователем вентильные матрицы (ППВМ или FPGA — Field Programmable Gate Array) — устройства, которые позволяют современному студенту реализовать свои собственные электронные дизайны процессоров и систем без размещения многомиллионных заказов на фабрике.

К сожалению, отдельные очаги нового еще не образовали сбалансированную структуру курсов и практической деятельности, которую можно увидеть в американских университетах. На компьютерных специальностях осталось избыточное количество обязательных курсов, связанных с теоретической механикой, теоретической и математической физикой. Дмитрий Северов, преподаватель МФТИ и бывший замминистра связи и массовых коммуникаций России, утверждает, что причина лежит на поверхности: «Аргументы про «тренировку мышления» не связаны с подбором предметов никак совсем. Подбор предметов — это, прежде всего, способность внести изменения в состав и «построение» необходимого множества преподавателей. Надо ли объяснять, почему последние 25 лет в высшей школе РФ условные «теорфизики» подбираются и строятся лучше, чем условные «информатики»?».

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

Возможно, следует начинать не с копирования продвинутых курсов по компьютерной архитектуре в той форме, в которой они преподаются, скажем, в Стэнфорде, а с простых практических курсов по цифровому дизайну, программированию встроенных систем и цифровой обработке сигналов (Digital Signal Processing — DSP), которые преподает, например, отделение Университета Калифорнии Санта-Круз в Кремниевой Долине (University of California Santa Cruz Extension in Silicon Valley). Это вечерние курсы повышения квалификации, которые используют уже работающие инженеры для освоения областей, лежащих на границе их предыдущего образования и практического опыта. Следует вспомнить, что одна из проблем преподавания в России заключается в том, что большая масса теоретического материала преподается перед практикой, из-за чего студент не может вовремя понять, почему он изучает тот или иной раздел, метод или даже предмет. Кроме этого, такие курсы могли бы читать и недавние студенты. Таким образом можно было бы заполнить одно из самых явных «белых пятен» физтеховского образования — пустоту между миром высокоуровневого программирования и миром физического кремния и электронов, между которыми и лежит большинство ключевых технологий, сделавших возможным современный мир гаджетов.

Между программированием и физикой

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

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

Проблема разрыва между программированием и физикой не уникальна для России — ее замечали и в вузах США, и в вузах других стран. Несколько лет назад израильские профессора Ноам Нисан (Noam Nisan) и Шимон Щокен (Shimon Schocken) разработали курс на стыке электроники и программирования, который в различных формах скопировали многие университеты мира, включая Стэнфорд, где версия этого курса называется «От логических элементов И-НЕ к игре «Тетрис»».

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

Этот же курс можно было бы внедрить и для студентов программистских специальностей в России, но у него есть недостаток. Российские студенты часто учат большое количество материала в последние пару дней перед экзаменом или зачетом, отчего некоторые объекты принципиально разной природы из разных уровней курса могут в сознании студента склеиться. Например, аппаратный сумматор на языке описания аппаратуры может склеиться с командой сложения из низкоуровневого программирования на ассемблере. Чтобы студент реально прочувствовал все уровни аппаратуры и программного обеспечения, он должен сделать маленький проект/лабораторную работу на каждом из этих уровней.

Первой частью двухсеместрового курса лабораторных работ могла бы быть сборка простых электронных схем на основе микросхем малой степени интеграции. Второй частью курса было бы несколько лабораторных работ с реализацией более сложных дизайнов, используя «студенческие» платы ППВМ/FPGA, и описание аппаратуры с помощью языка Verilog.

Третьей частью курса было бы знакомство с организацией процессора, концепциями процессорных инструкций, стадий конвейера и внешней памяти. Сначала студенты могли бы реализовать простейший процессор, выполняющий команды в один продолжительный такт синхросигнала низкой тактовой частоты, потом они могли бы ввести концепцию процессорного конвейера, построить простой конвейерный процессор и реализовать его все на той же плате ППВМ/FPGA.

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

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

1. www.ipc.org

2. Сейчас читается по Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein

3. Cейчас читается по Compilers: Principles, Techniques, and Tools by Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman

4. Cейчас читается по Operating Systems Design and Implementation by Andrew S. Tanenbaum

5 комментариев

  1. Юра,

    > Хотя многие западные учебники были в то время переведены на русский язык, и некоторые (книга Ахо и Ульмана по компиляторам) даже были в списке рекомендованной литературы, но они никак или почти никак не использовались в МФТИ.

    Возникает вопрос — а ты вообще, в МФТИ учился ? :)
    Нет, то что ты бывал на территории института, я помню. Но как ты мог пропустить ТРЯП и ему подобные курсы ?

    1. Рустик, в ТРЯП-е, насколько я помню, в 1989 году полезной информации было ровно полстранички — алгоритм LR(k) парсера. Вообще там был фокус на грамматиках, лексическом и синтаксическом разборе — задачах, давно решенных в 1960-1970-х годах и неактуальных к концу 1980-х. Некоторые предметы рассмотрения курса (атрибутивные грамматики) не использовались в реальных компиляторах конца 1980-х и позже из-за ненадобности. При этом алгоритмы глобальной оптимизации и генерации кода, которые составляли 95% компилятора даже в то время, насколько я помню, в курсе практически никак не разбирались. Я не помню там Data Flow Analysis, Control Flow Graph и т.д. которые были в американских учебниках уже того времени. Про более тонкие штучки (учет конвейерности процессора, векторизации циклов) я вообще не говорю (хотя их наверное не нужно учить в данном курсе). Короче, можешь убедиться сам — http://trpl.narod.ru/t-books/TRPL_73.pdf

      Издание 2006 года стало получше, но сравни его с современными книжками на эту тему — http://trpl.narod.ru/t-books/_TRYAPBOOK_pdf.pdf Из беглого просмотра видно, что они добавили генерацию кода для выражений (по мотивам джонсоновского компилятора 1978 года) и поверхностное обсуждение реализации ООП и джавы. Лучше, чем раньше, но все равно недостаточно.

      Кстати, тебя на днях разыскивал некий журналист, чтобы пораспрашивать о твоих проектах начала 1990-х. Кинь мне е-мейл, если он тебя не нашел.

    2. Кстати, Рустик. Если ты общаешься на физтехе, и там кто-то интересуется в повышении качества их ТРЯП-а, то у меня под рукой (то бишь в MIPS-е) есть американский компиляторный гуру, который в молодости изучал русский язык как язык вероятностного противника :-) Я могу его попросить почитать ТРЯП-ные материалы и внести ценные указания (хотя заранее предупреждаю, что его русский хуже среднефизтеховского английского, т.е. читать материалы он может, но обсуждение с ним лучше вести по-английски).

  2. Я есть у тебя в контактах на FB.
    А из знакомых — Саша Тормасов преподает на физтехе.

  3. Вся эта ваша «физика» и «теорфизика» всего навсего до 4-го курса. И не входит в блок «специализации» даже на ФОПФе.
    Нужно же настоящим СПЕЦИАЛИСТАМ фундаментальное ОБРАЗОВАНИЕ.
    А лучше физики и теорфизики нигде математические методы не проработаны.
    Алгоритмы же и структуры данных можно (да и нужно) ещё в школе начинать изучать.
    Что касается Университетских курсов и профессоров.
    Не хочет наше правительство покамест нанимать на преподавательскую работу хороших CS, да и сами CS от ВУЗовских ЗП предпочитают держаться подальше.

Добавить комментарий

Ваш адрес email не будет опубликован.

Оценить: