software engineering что это

Кто ты по професии: Разница между «Programmer», «Software Engineer» и «Computer Scientist»

Как только сегодня ни называют программистов, особенно в зарубежных СМИ. Да и у нас, в частности, при поиске работы, можно встретить абсолютно разные описания должностных обязанностей.

Меняется ли от этого суть работы? Мы в 1cloud попробовали разобраться в том, какую работу подразумевают такие специализации как «Programmer», «Software Engineer» и «Computer Scientist».

Терминология

Изучение сути вопроса логично начать с понимания терминов. Самым понятным является «Programmer», который в Оксфордском словаре определяется как человек, ответственный за написание программы. И с переводом все просто: программист – он и в Африке программист. И даже в России. Сложности начинаются дальше.

«Software Engineer» (SE) (согласно статье в webopedia) — это дипломированный профессиональный инженер, имеющий достаточно знаний и навыков для применения инженерных дисциплин при создании программного обеспечения. Главное отличие — SE занимается разработкой, руководством проектов, а программист их реализует путем написания кода. На русский название должности переводится как «инженер-программист» или просто «программист».

Теперь разберемся с тем, кто такой «Computer Scientist» (CS). Если верить словарю, то речь идет о работе в области теории вычислений и проектирования компьютеров. Разные словари дают разный перевод на русский: «учёный, работающий в области теории вычислительных машин и систем (в области ВТ, в области компьютерных наук)» или «программист».

Итого, имеем три очень разных определения в английском и три «программиста» в русском.

Как сами программисты понимают эту разницу

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

Для обеспечения полноценной разработки ПО/кода программист должен быть сконцентрирован на своей работе и обеспечить последующее использование и интеграцию программных компонентов друг с другом. Энтони Щерба (Anthony Scherba), президент и основатель студии разработки Yeti, сравнивает этот процесс с решением сложной алгебраической задачи.

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

Необязательные компетенции: математический анализ, коммуникативные навыки и умение работать в команде — подробнее в блоге Алана Скоркина (Alan Skorkin).

Работа «Software Engineer» подразумевает комплексный подход и иногда ее можно сравнить даже с процессом создания произведения искусства, которое программист старается постоянно усовершенствовать. Так считает и Дэниел Каплан (Daniel Kaplan), опытный программист и сотрудник Pivotal Labs.

Инженер должен видеть всю картину с двух сторон: проект в соответствии с общим планом и отдельные задачи, необходимые для его осуществления. Он должен уметь находить верные комплексные решения, понимать требования клиентов, прогнозировать возможные последствия и распределять задачи по программированию (в команде).

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

«Computer Scientist» — математик и технический специалист в равной степени. Он обладает математическими знаниями и объясняет, как и почему работает тот или иной инструмент, решение или алгоритм. Его работа имеет большое значение для развития программирования в целом. Также CS свойственна специализация в одной или нескольких сферах — ИИ, нейронные сети, теория языков программирования, базы данных.

Представления профессионалов в принципе соотносятся со словарными статьями, что естественно: на то они и профессионалы, чтобы разбираться в своей работе. Сбой в коммуникации и подмена понятий явно происходит на каком-то другом уровне, но на каком?

Какую разницу видят учебные заведения и работодатели

Начнем опять с «программиста». Еще одно его важное отличие от всех остальных: как правило, отучившись в профильном ВУЗе, вчерашний студент становится не просто «программистом», а «инженером/бакалавром/магистром по специальности/направлению…».

Для западной образовательной системы это тоже характерно — взгляните, к примеру, на разнообразие специальностей в направлении «Software Development and Programming» Сиднейского Технологического Университета. Ни одна из них не содержит в своем названии слова «programmer» или «programming».

Нет, конечно, многие университеты предлагают курсы по программированию (даже бесплатные), но редко когда в дипломе написано просто «программист». А что хотят видеть работодатели?

Помимо знания разных языков и/или опыта работы на разных мобильных платформах/ опыта веб-программирования/ администрирования, программисту нельзя обойтись без коммуникативных навыков (примеры тут и тут). В приведенных примерах вакансий требуется навык работы в команде, предполагается общение с вендорами, сотрудничество с другими отделами компании и техническим директором. Ну и организаторские и управленческие способности будут нелишними. А в ряде случаев нужны еще и достаточно глубокие знания математики.

Требования на российском рынке отличаются не сильно и включают разработку проектов, работу в команде, понимание принципов информационной безопасности (и всё те же навыки, отмеченные в абзаце выше). Таким образом, работодатели хотят видеть в программисте универсального (и творчески мыслящего) специалиста, а не просто человека, который пишет и тестирует код на определенном языке, решая кем-то поставленную задачу. Получается, что работодатель (как на Западе, так и у нас) под «программистом» очень часто понимает то, что словари обозначают как минимум как «Software Engineer».

Образовательные программы по профилю «Software Engineering» подразумевают, подход к разработке ПО с научной и инженерной точки зрения, разработку собственных проектов, аналитическую и управленческую деятельность. Помните, в предыдущем разделе эксперты говорили, что SE должен уметь реагировать на изменяющиеся требования? На магистерской программе помимо этого объясняют, как укладываться в бюджет и сроки.

В университете Глазго учат определять технические характеристики, проектировать, создавать и верифицировать крупные программные системы. При этом список предметов включает программирование на разных языках, проектирование баз данных, изучение алгоритмов, то есть все те знания, которые необходимы и для работы «классического программиста».

Что касается точки зрения работодателей, то по их мнению в обязанности инженера-программиста входит написание кода, проверка технической реализации UI/UX, оптимизация работы приложений, разработка внутренней методологии и стандартов, контроль и управление требованиями. Кроме того, соискатель должен обладать лидерскими качествами. Технические требования не сильно отличаются от требований к «обычным» программистам: их примеры можно посмотреть тут: 1, 2 и 3.

Университетские программы по направлению «Computer Science» включают больше математических предметов, изучение теории алгоритмов, а также такие темы как машинное обучение, нейронные сети и облачные вычисления. Студенты изучают больше теории, но должны успешно применять на практике полученные математические знания, выявлять, формулировать и решать инженерные проблемы. Таким образом, у этого типа специалистов формируется наибольшая «широта взглядов» — в теории он может работать и программистом, и SE, и непосредственно по специальности.

Это не означает, что полученных знаний ему «за глаза» хватит для успешного старта карьеры в любой из областей и больше ничему учиться не придется. Например, чтобы построить успешную карьеру разработчика, такому выпускнику явно понадобится «подтянуть» практические навыки по написанию кода — но не придется изучать программирование «с нуля».

Идеальный соискатель на должность «Computer Scientist» должен обладать знаниями по теоретической информатике, теории алгоритмов, проектированию баз данных, компьютерному моделированию, при необходимости выполнять задачи аналитика и проводить исследования, знать весь процесс от проектирования до внедрения ПО… Список можно продолжать долго (подробнее читайте тут и тут).

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

Что в итоге

Да, действительно программисты, SE и CS — специальности близкие, но не одинаковые, и готовят таких профессионалов на разных университетских специальностях. Наибольшую путаницу в трактовке терминов вносят работодатели – для них, например, разница между «программистом» и Software Engineer может быть совершенно не очевидна.

Судя по требованиям работодателей, от «просто программиста» ждут творческого подхода, универсальных знаний и soft skills, а «computer scientist» может решать важные, но при этом сугубо прикладные, узконаправленные задачи — говорить о том, что одна специальность «по умолчанию» лучше или «сильнее» другой тут не приходится.

О чем еще мы пишем в блоге 1cloud на Хабре:

Источник

Не каждый программист может так себя назвать: кто такой Software Engineer и как им стать

Редактор в Highload

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

Немного о Software Engineer

Редакция Highload публикует перевод материала.

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

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

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

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

Когда речь заходит о работе в IT-сфере — вариантов уйма. Мы решили рассмотреть одно из самых популярных направлений. Инженер ПО или Software Engineer работает над созданием программ и приложений.

И самое интересное — далеко не каждый, кто занимается программированием, может сказать, что он инженер.

Карьерная лестница Software Engineer

Прежде всего нужно прояснить один вопрос. Многие не понимают разницы между инженером ПО и программистом. Люди путаются в этих определениях, и в итоге всех айтишников называют «программистами». Разберемся, в чем же разница:

Добравшись до уровня сеньор, можно стать архитектором или тимлидом. Архитекторы, как и инженеры, тоже решают проблемы, но на более высоком уровне. Они работают над внутренней структурой и внешним интерфейсом программного комплекса. Найдя сложное архитектурное решение, они передают задание инженерам.

Специализация и обязанности Software Engineer

Теперь рассмотрим основные обязанности инженера ПО на разных уровнях.

Два состояния каждого программиста: «я — бог» и «я не имею представления, что делаю»

Начальный уровень

Когда вы делаете первые шаги в инжиниринге ПО, вам предложат тестирование, чтобы оценить ваши умения. А дальше, в зависимости от результатов, вас нанимают и определяют конкретные обязанности.

Ваши задачи могут быть какими угодно, но все они будут направлены на то, чтобы вы могли учиться и приобретать опыт. Очень часто придется работать с более опытными сотрудниками, которые будут следить за вашим прогрессом и делиться с вами знаниями. Имейте в виду: чем лучше будете выполнять задания, тем больше возможностей у вас появится в будущем!

Джуниор и мидл

Обычно при найме Junior Software Engineer главное требование — опыт. Для этого уровня наличие опыта — не столько бонус, сколько обязательное условие. На собеседовании вас первым делом спросят о том, есть ли у вас опыт работы на аналогичной должности или в этой сфере.

Тем не менее работа — не единственный способ набраться опыта. У вас могут быть и личные, и групповые проекты. Не лишними окажутся и семинары или курсы. Закончили школу инжиниринга ПО — тоже хорошо.

Помимо опыта, джуниор должен уметь работать автономно, без постоянного надзора более продвинутых специалистов.

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

То же самое касается и мидл-уровня, но с одним нюансом. На Middle Software Engineer возлагают больше обязанностей, и навыков у него должно быть больше (как технических, так и коммуникационных). Такой эксперт уже может выступать ментором для разработчиков начального и младшего уровней.

Сеньор

Как и большинство опытных специалистов, Senior Software Engineer должен выполнять свои непосредственные обязанности, а также вести и поддерживать команду. Здесь потребуются еще и коммуникационные, и управленческие навыки. Плюс умение активно слушать, хотя с этим связана не каждая должность в этой сфере. С другой стороны, вам доверят самые важные и сложные задания, поэтому и уровень ответственности значительно возрастет. Если вы доросли до сеньора, значит карьера в этой сфере у вас вполне сложилась.

Архитектор

Архитектор платформ должен сделать так, чтобы платформа выглядела простой и понятной для внешних пользователей. А чтобы этого добиться, можно воспользоваться, к примеру, интерфейсом прикладного программирования (API). В таком случае помимо организации процесса, вы будете участвовать еще и в проектировании API.

Честно говоря, с такими навыками уже можно запросто открывать свой стартап.

Все, что нужно знать о начальном уровне Software Engineer

А теперь посмотрим, какие профессиональные навыки потребуются инженеру на начальном уровне.

Требования к навыкам здесь довольно непритязательны: наличие диплома бакалавра компьютерных наук, разработки приложений или ПО. На самом деле, любое образование, связанное с компьютерами, уже позволит вам претендовать на должность Software Engineer. Не лишним также будет желание учиться и расти.

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

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

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

Чего ждать: будущее профессии

У IT-сферы большое будущее. Можно даже сказать, что это будущее всего человечества. И разработка ПО — большая часть этой истории.

«Я всегда мечтал увидеть будущее»

Большинство экспертов уверены, что у этой сферы большое и светлое будущее.

Примеры должностей

Давайте посмотрим, какие должности могут быть востребованы в этой сфере:

Теперь у вас есть полная картина, и вы будете знать, с чем доведется столкнуться в мире разработки ПО, если вы решите двигаться в этом направлении.

Источник

Что такое Software Engineering?

Сегодня мы решили рассказать Вам об одном из самых востребованных на сегодняшний день направлений научной и профессиональной деятельности. Software Engineering (Программная инженерия) сегодня стремительно набирает популярность, в университетах Европы и России открываются все новые и новые образовательные программы, где готовят специалистов software engineer. Но кто же такой этот software engineer? Программист? Аналитик? Дизайнер? Чем он занимается? Что входит в его/ее обязанности? Откуда такой повышенный интерес отрасли к этим специалистам? Ведь по данным, например, агентства www.alec.co.uk, это будет одна из самых востребованных профессий в 2017 году. При этом Forbes также отмечают в одной из своих статей, что профессия является второй по популярности, и прогнозируют 17% рост количества вакансий данного класса с 2014 по 2024 год.

Итак, обо всем по порядку. Чтобы более детально разобраться в том, кто такой Software Engineer, нам снова (как и в статье про бизнес-инжиниринг ), необходимо вспомнить о том, что такое инжиниринг в целом. Обратимся к уже ранее использованному определению этого термина.

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

Software Engineer — это специалист, занимающийся разработкой программного обеспечения с использованием инженерных принципов и опирающийся на фундаментальные знания Компьютерных наук. Это специалист очень широкого профиля, так как он/она имеет комплексное представление о процессах разработки IT-решений, поэтому именно он является ключевым действующим лицом на всех стадиях жизненного цикла продукта: от сбора и анализа требований к процессам работы с софтом до кастомизации систем под конкретного клиента. Момент с работой с клиентами здесь стоит подчеркнуть отдельно, ведь Software engineer должен иметь достаточный набор компетенций, чтобы проанализировать потребности клиента и спроектировать для него решение, после чего суметь проанализировать реакцию клиента, а затем разработать окончательный вариант, который будет максимально соответствовать всем заявленным потребностям. Этот специалист вовлечен практически во все аспекты разработки софта, включая исследование проблем, анализ, дизайн, разработку, внедрение, обучение и поддержку. Довольно часто эту профессию путают с профессией разработчика, но это вещи хоть и схожие, но, все таки, разные. Разработчик создает программный код, но software engineer создает дизайн системы, которую разработчики внедряют. Инженеру при этом необходимы знания программирования и технический склад мышления, но непосредственной разработкой он не занимается.

Несмотря на то, что непосредственным программированием software engineer не занимается (или занимается, но в редких случаях), описание профессии близко к “универсальному солдату”, что, в общем-то, так и есть, отсюда и такая востребованность этих специалистов. К необходимым навыкам для такого специалиста относятся:

В обязанности такого специалиста входит:

Источник

Что такое программная инженерия. Лекция в Яндексе

Кандидат технических наук МИЭМ, заместитель руководителя департамента программной инженерии факультета компьютерных наук НИУ ВШЭ и заместитель завкафедрой системного программирования ИСП РАН Ефим Гринкруг даёт свой ответ на вопрос о том, что такое программная инженерия.

Этому термину уже почти 50 лет — впервые его начали использовать в 1968 году. Дело в том, что именно тогда методы классической инженерии — например разбиение на отдельные компоненты — стали всерьёз применяться в создании софта. Но почему они не применялись раньше, и какой новый смысл приобрело выражение «программная инженерия» в последние десятилетия?

Под катом — подробная расшифровка и слайды.

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

Вы видите этот слайд, который показывает, что я в 1968 году закончил физико-математическую школу № 444. Среди вас есть кто-нибудь оттуда? Это лицей № 444 в Измайлово, 13-я Парковая. Я там был две недели назад, он еще оставался. Это была первая физико-математическая спецшкола в Москве, которая вместо столярного и слесарного дела в 1959 году, задолго до того, как я там учился, ввела уроки программирования. До этого все строгали табуретки. И когда я получал аттестат, вместе с аттестатом зрелости в школе я получил такую бумажку — свидетельство о присвоении квалификации, где написано, что мне присвоена квалификация «вычислитель-программист 3-го разряда». В те времена рабочие профессии были от 1-го до 6-го разряда, 6-й был самый крутой. Третий разряд получали те, у кого пятерка по программированию, второй разряд — четверка, троечников- перворазрядников у нас не было. И так получилось, что в 1968 году я столкнулся со словом «программирование» в первый раз. Почему в 1968-м? Потому что я пришел в эту школу не с самого начала, а с середины девятого класса, предпоследнего в те времена. И когда я туда пришел, потому что старые районы Москвы стали сноситься и школы закрывались, а я ходил в университет на мехмат в математический кружок, мне посоветовали пойти в эту школу в середине 9-го класса, потому что преподавателю было интересно, смогу я догнать там или нет. Нас таких было трое из этого кружка. Я пришел туда, и через неделю где-то выяснилось, что какая-то полугодовая контрольная по программированию. Я, конечно, ни сном ни духом. Мне дали учебник, я честно прочитал половину этого учебника за пару вечеров, и потом нужно было написать программу. И программа представляла собой некий двойной вложенный цикл. Нужно было успеть за 45 минут что-то такое двойным циклом изобразить, причем на языке, как теперь сказали бы, ассемблера. Я успел прочитать только половину команд, которые бывают в этой машине, оператор цикла до меня не дошел, он был в другой половине, и мне пришлось ухитриться сделать двойной цикл, пользуясь условным переходом, больше ничем. Вы, наверное, представляете, как это можно соорудить теперь. Парадокс был в том, что оценку «пять» за контрольную получили в классе двое: один мальчик, который там учился с самого начала и который был победителем всех мыслимых олимпиад всегда, и ваш покорный слуга, просто потому, что у нас двоих программа работала, а у остальных примерно тридцати пяти учащихся все было очень хорошо с циклами, но не работало. И с тех пор я проникся очень твердо идеей о том, что в программировании ничего серьезного нет. Если человек напряжется и за два дня может превозмочь то, что проходили два года до этого, и получить пятерку, не делая ничего и ничего не зная, то никакого серьезного отношения к этому делу вообще быть не может, и все это полная ерунда. Вот математика, физика — это серьезно, а это полная ерунда. И это отношение к делу, к программированию, у меня сохранялось после этого примерно лет шесть, то есть почти до окончания университета (тогда это называлось институтом, но мы об этом еще поговорим).

Читайте также:  боли в правой лопатке при движении что это может быть

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

Что же такое процесс создания программ? Это и есть тема нашей лекции, это и есть сущность программной инженерии.

Как и любое производство, производство программ проделало большой путь: от кустарного к промышленному. Что отличает современное производство вообще, не только в программировании, от кустарного? Есть какие-то отличительные признаки. Какие это признаки? Прежде всего, разделение труда. Неслучайно говорят: «кустарь-одиночка». Наверное, какие-то научные результаты привлекаются, что кустарю редко бывает под силу. Еще современные технологии. Чтобы было разделение труда, нужно поддерживать какие-то стандарты. Вы никогда не пробовали воткнуть какой-нибудь разъем туда, куда он не втыкается? Значит, нужно поддерживать какие-то профессиональные стандарты. Что еще?

— Это правильно. Качество результата. А откуда оно берется? И вообще, на что оно влияет? И почему, как вы думаете, я пришел сюда из Высшей школы экономики, где есть новый факультет компьютерных наук? Потому что, как на днях в газете «Ведомости» писал Анатолий Карачинский, президент компании IBS, большого российского холдинга, который компьютеризирует все на свете (в этот холдинг входит также компания Luxoft, это едва ли не единственная в стране компания, которая имеет сертификат качества высшего уровня в мире по производству программного обеспечения), экономика Индии, например, получает почти в два раза больше от экспорта ПО, чем Россия от экспорта нефти и газа (это в цифрах). Поэтому серьезная разработка программ и вы как будущие серьезные разработчики программ — это, наверное, и есть национальное достояние.

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

Кораблестроение — это наука? Да, академик Крылов делал какие-то достижения в кораблестроении. Это наука? Что там есть кроме закона Архимеда? То есть наука бывает разная: бывает наука теоретическая, бывает наука практическая, инженерная и так далее.

Программная инженерия — это деятельность, связанная с производством и поддержанием ПО.

Откуда взялся этот термин и почему я решил начинать свой рассказ с 1968 года? Потому что в 1968 году впервые в истории этот термин стали использовать. Была конференция, которую спонсировало НАТО, в германском городе Гармиш-Партенкирхене, где потом проводилась зимняя Олимпиада, там собралось 50 крупнейших специалистов со всего западного мира, и они попытались ответить на вопрос, который к тому времени — к 1968 году — уже назрел очень остро, а именно: «Как делать программы так, чтобы они были надежные, вовремя и так далее?» К тому времени в 1968 году я окончил эту самую 444-ю школу и поступил на первый курс МИЭМ (тогда это был Московский институт электронного машиностроения, как когда-то отколовшийся от Вычислительного факультета МИФИ, а теперь он стал отделением (или кампусом, как у нас принято говорить) Высшей школы экономики). Таким образом получилось, что с 1968 года я, не имея особого влечения к этой деятельности, оказался в профессиональном смысле ровесником программной инженерии.

Когда я учился в школе, там стояла одна из первых вычислительных машин, называлась она «Урал-1». К сожалению, уже очень давно закрыт на ремонт Политехнический музей, и всю его экспозицию раскидали по каким-то углам. На самом деле, там довольно интересный был представлен ряд отечественных вычислительных машин. Отличникам давали попрограммировать на «БЭСМ-4» тогда, неотличникам — на «БЭСМ-3» и этом самом «Урале». Это ламповая машина. А вот фотография школы.

Кто ее разрабатывал? Тут было написано, что их было сделано всего 183 штуки, и одним из разработчиков был Юдицкий Давлет Исламович, который потом стал одним из основателей города Зеленограда. Зеленоград — это была попытка сделать «Силиконовую долину» под Москвой. Он известен тем, что был одним из разработчиков нетрадиционных арифметических устройств, которые считали в остаточных классах. Это такая арифметика, у которой нет единиц переноса, поэтому она работает очень быстро. Эта линия как-то увяла, потому что потом из этого представления числа, которое годится для такой быстрой арифметики, очень трудно преобразовывать в обычные числа туда-сюда, зато считает замечательно.

Вот эта машина «Урал-1», когда она еще стояла в Политехническом музее.

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

Конференция в Гармиш-Партенкирхене была посвящена тому, что уже в те годы на Западе стало ясно, что писать программы дороже и дольше и более трудоемко, чем делать то железо, на котором они потом работают. И возник вопрос: почему это происходит и как сделать так, чтобы быстро разрабатывать надежные программы?

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

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

Значит, хочется чего? Хочется собирать программные изделия так же, как вы в детстве делали это с помощью конструктора Lego.

То есть взять какой-то готовый набор…

Может быть, если не хватает, другой прикупить.

И строить это дело, как Lego, из типовых готовых компонент.

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

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

И как это все делать вообще? Основное содержание этой конференции, 1968 год. Перед вами темы, которые обсуждались тогда. А кто там был? Там были преподаватели, производители как железа, так и программ, там был, в частности, Эдсгер Вибе Дейкстра. Знаете такого?

Вот основные темы, некоторые из них уже неактуальны. Например, последняя — «Надо ли оценивать Software отдельно от Hardware?». Всерьез обсуждался этот вопрос. Все уже понимают, что такой Hardware, по сравнению с Software, которым он начинен, не стоит вообще ничего.

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

Программные компоненты должны производиться и использоваться в соответствии с определенными стандартами, которые принято называть компонентными моделями. То есть что такое компонент? Компонентная модель — их может быть много разных — отвечает на главный вопрос: что такое компонент и чем он отличается от некомпонента?

Тут я должен заметить (и вы, наверное, уже сами это почувствовали), что некомпонентного программирования не бывает, и весь разговор идет о том, что считать компонентом.

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

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

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

А здесь вы видите первую цифровую машину (или одну из самых первых). Я ее когда-то сам сфотографировал в библиотеке Гарвардского университета, называлась она MARK-1. Буква «K» от слова MARK-1 в правом верхнем углу отвалилась. Может быть, сейчас уже приклеили обратно. Вы видите параметры этой машины.

Как это все происходит? Как правило, обычная программа, к которой вы привыкли, сперва пишется, создается (разрабатывается, отлаживается), а потом исполняется. Поэтому принято различать всегда две стадии, два этапа: статику до выполнения программы и динамику, когда она выполняется, какие возможности она получает и что она делает в динамике.

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

В те времена все это было гораздо сложнее. И этой платформой занималась отрасль программирования, которая называлась «системное программирование». На самом деле системное программирование — это основа программирования вообще. Что это такое? Очень часто приходится объяснять экономистам, что такое системное программирование и чем оно отличается от просто программирования. Я уже сказал, что у нас с этого года открыта базовая кафедра Института системного программирования Российской академии наук под руководством академика Иванникова. Академик Иванников знаменит тем, что он руководил разработкой программной системы, которая управляла стыковкой космических кораблей «Аполлон» и «Союз». Слышали об этом? Наверное, слышали благодаря сигаретам, а тогда это было большое достижение.

Экономисты говорят, что бывает два вида продукции в промышленном производстве. Их называют «Производство группы А» и «Производство группы B». Что относится к группе А? Средства производства, а к группе B — в основном предметы потребления.

Блага, которые предназначены для производства, называются средствами производства или товарами производственного назначения. А то, что непосредственно потребляется — одежда или еда, — это средство, предметы потребления. Бывает так, что один и тот же продукт относится и к средствам производства, и к предметам потребления. Какой-нибудь сахар, когда вы его кладете в чай — это предмет потребления, а когда вы его используете для производства варенья — это средство производства.

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

— Был один, РЕФАЛ назывался. Он был очень теоретический. Рекурсивных функций алгоритмический язык. Он был давно, он не использовался для практического программирования. Я когда-то на семинаре в университете попытался вместе с автором этого языка сложить два целых числа. Мы исписали несколько досок — и не уложились в семинарское время.

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

Вот у нас кафедра системного программирования Института системного программирования Академии наук с этого сентября появилась, и для начала где-то 15-20 человек с каждого курса там раз в неделю занимаются, слушают лекции и работают. Это попытка. Эта базовая кафедра не только у нас открыта, она открыта в Физтехе и на ВМК МГУ, они там все вместе перемешиваются. И это попытка передать опыт, чтобы не распалась связь времен в этой области, важнейшей области программирования, если мне удалось это донести до вас.

Развитие компонентного программирования вообще зависит от архитектуры железа. Даже на голом железе машинный код, были какие-то содержательные обозначения, как писать программу. Не в нулях и единицах же, эта производительность будет равна нулю. Потом появляется автокод, какие-то содержательные обозначения появляются. Потом появляются какие-то процедурные языки, то есть можно воровать целыми процедурами и считать их компонентами. Это будут компоненты, этапы статистической разработки программ. Берете код и делаете cut and paste. Потом вас лишают премии за это. Появляются какие-то языки высокого уровня, более-менее высокого уровня.

Появился язык C. Почему появился язык C? Где-то на рубеже 1973-1974 годов появился язык C, потому что научились быстро делать железо, быстро делать машины, появилась машина PDP-11 в частности, и к тому времени надоело каждый раз писать операционную систему с нуля для разных архитектур.

Появилась идея переиспользовать код. Это тоже компонентность. Главный смысл компонентности — не делать дважды того же самого. Переиспользовать даже не код, а труд. Язык C появился для того и потому, что ядро операционной системы каждый раз переписывать не захотелось. А захотелось иметь основную часть, написанную на компилируемом на любое железо языке, где надо чуть-чуть вставить Assembler. Это главная побудительная причина появления языка C и ядра операционной системы Unix.

И зимой 1974 года мне так повезло, что я держал бобину с магнитной лентой, которая каким-то образом попала в Курчатовский институт. Обратите внимание, у нас тоже сильные программисты были в институте, занимавшемся вопросами ядерной физики. Это тоже неслучайно. И так мне повезло, что я держал первый компилятор C в руках, потому что в Курчатовском институте собирали команду добровольцев, чтобы ее содрать, эту самую операционную систему Unix, потому что железо уже сдирали. Содранное PDP-11 называлось у нас СМ-3, СМ-4, СМ-5, СМ-6, они соответствовали этой PDP-11. Как выглядела PDP-11 в те времена, вы видите.

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

Читайте также:  sweet box что это

Что было сделано в мои времена в этом институте? Был проект, он был начат в 1967 году, вычислительный комплекс М-9 производительностью 1 млрд операций в секунду (по тем временам). Денег на него не дали, и он постепенно обрезался до машины под названием М-10, которая примерно 10 лет, начиная с конца 1970-х годов, была самой мощной советской вычислительной машиной. Она была параллельной и многопроцессорной, и параллелизм этой машины не превзойден нигде по сей день. Когда эта машина прошла испытания, как раз образовался Институт вычислительных комплексов, который потом к 70-летию Карцева (Карцева уже не было в живых) стал носить его имя. Сейчас он находится недалеко от метро Беляево и уже не является никаким институтом. Там, как во многих теперь бывших закрытых институтах, торгуют мебелью, бог знает чем, — это время прошло.

В те времена в академическом Институте проблем управления под руководством профессора Задыхайло из Института прикладной математики имени Келдыша проходили тараканьи бега, как мы называли. Все отечественные и неотечественные компьютеры, которые были в стране, соревновались на какой-то контрольной задаче, кто быстрее ее посчитает. В качестве единицы измерения, как в попугаях, было время расчета этой задачи на БЭСМ-6. БЭСМ-6 — это 48-разрядная машина, поэтому по правилам нужно было считать не хуже, чем БЭСМ-6, то есть с не меньшей точностью. А эта наша М-10 могла перестраивать формат вычислений на ходу, и можно было считать в 16-разрядной арифметике, в 32-разрядной, в 64-разрядной. Нас заставили считать на 64-разрядной, чтобы было не хуже. И эта машина М-10 выиграла у всех и держала этот рекорд примерно десятилетие.

Вот я вам показываю Радиотехнический институт имени Минца, который до сих пор есть на улице 8 Марта. Весь первый этаж, эти большие стекла, был выставлен, чтобы шкафы от этой машины внести внутрь, потому что никак иначе внести ее туда было невозможно.

Так выглядит НИИ ВК теперь возле метро Беляево (может быть, проезжали, видели), но там уже нет института.

И эта самая М-10 в 1974 году предстала передо мною на первом этаже радиотехнического института как куча голого железа без единой команды внутри. И какое-то количество людей пыталось ее зарядить базовым программным обеспечением, системным программным обеспечением. И я туда попал по распределению, и, конечно, я вам рассказывал, что мое пренебрежение к программированию тогда было известно какое. Меня спросили, когда я пришел в первый раз: «Чем бы вы хотели заниматься?», я сказал: «Чем угодно, только не программированием». И мне сказали так: «У нас сейчас горячая пора, у нас там запарка, сроки. Вы помогите месяца три, а потом мы с вами найдем что-нибудь вкусненькое из математики, прикладной математики и так далее». Я поехал помогать. Вот примерно до сих пор и помогаю.

Вы видите здесь всякие слова о том, что качественная архитектура не имеет себе равных до сих пор, потому что Cray — это был наиболее знаменитый американский аналог. Конечно, элементарная база была лучше у Cray, но по количеству вложенных идей М-10 была богаче.

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

В Америке берут и строят Empire State Building, потому что у них есть замечательное сталелитейное производство, и 100 с лишним этажей эти балки выдержат. Они занимают мало места по площади и имеют какой-то объем.

У нас места много, кирпичи у нас необожженные, но места много. Мы можем этот Empire State Building положить на бок, объем будет такой же, места будет занимать много, и не требуется никакой особой высоколегированной стали. Если положить на бок, там будет всего этажа четыре. Примерно так же выглядели эти все вычислительные супер-ЭВМ, которые здесь показаны на картинке.

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

Но потом, когда это все заработало, сказали, что на целое поколение специалистов (это 10-15 лет)… Почему мы говорим, что нужно поддерживать, чтобы не распалась связь времен?

Мой возраст и ваш возраст — это 2-3 поколения специалистов.

Где это использовалось? Вы видите. То, что называют ядерным чемоданчиком, никакого отношения к ядерной реакции не имеет. Этот чемоданчик — просто оконечное устройство системы предупреждения о ракетном нападении. Оно стояло каждый раз у главы государства в шаговой доступности, как говорят, и в положенных местах.

По периметру страны — это карта — были расположены радиолокационные объекты. Неслучайно вся первая машина оказалась в Радиотехническом институте имени Минца. Они разрабатывали радиочасть этого всего. А эта машина была мозгами всей этой системы. Вы видите, что эти секторы покрывали весь периметр. Скажем, сектор под номером 2 закрывал весь Китай с Индией. Сама станция была из таких зданий (это реальная фотография одной из них, а именно которая под цифрой 1, Печорская Северная). Верхнее здание — 17 этажей вверх, 5 вниз под землю, — и эта наклонная часть — это антенная решетка площадью примерно с футбольное поле. Нижняя часть — это то же самое, только передающая станция. Та приемная, эта передающая. Когда в Казахстане я видел такие же две станции возле озера Балхаш и их включали в опытную эксплуатацию, их налаживали, я думал, во-первых, во всем Казахстане гас свет, а во-вторых, в Балхаше рыба вареная появлялась в непосредственной близости от этого передающего устройства. Это основательная получается СВЧ-печка. Про все это можно прочитать в Интернете. Это просто локатор. С этого локатора в вычислительный комплекс из машин такого рода поступало огромное количество информации в реальном времени, и нужно было по этой информации увидеть, летит что-нибудь сюда вообще или нет. Увидеть, что не летит — хорошо. Если летит, то понять, что летит — все автоматически, — сколько летит, куда летит, и скомандовать тем, кто должен лететь на перехват, что им надо делать. И на все про все есть пара десятков минут.

Такая система была на этих машинах сделана. При этом, конечно же, нужно было программировать. Архитектура была параллельная, непохожая ни на что. Вы знаете хоть один хороший язык параллельного программирования, уже сейчас? Не 25 лет назад, не 30, а сейчас? Наверное, нет. Есть маленькие попытки внедрить это дело сейчас, довольно скромные. Тогда это работало, потому что никакого выхода не было иначе, иначе невозможно было за те пару десятков минут успеть сделать то, что нужно. И нужно было это делать, имея какое-то базовое программное обеспечение с соответствующим качеством.

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

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

И опыт накапливался, потому что натыкались на все эти грабли. Сначала сделали то, что просили военные. Понятно, что им нужно сделать — делай раз, делай два. Не работает, работает неоптимально, потому что, не продумав суть, сразу начали делать частности. Провалилась разработка.

Потом была следующая разработка. Военным нужно было решать одну большую задачу на этой машине, но она должна была крутиться всегда. Это пример непрерывного производства в виртуальном мире. Она должна работать всегда: надежно и так далее. Отдельный разговор, как программный инженер должен потом это все развивать, даже просто ошибки отлаживать в программе, которая работает всегда. Это отдельная тема. Но главное, что получается при этом — пропадает грань между системным программированием и программированием пользовательским. Пользовательское программирование в данном случае — это обработка локационной информации. Она тоже не очень пользовательская и очень важная. Но грань между операционной системой, системным программированием и программированием пользовательским, чисто задача распознавания образов, например, она стирается, потому что нужно успеть. Хорошо яичко к Христову дню. Система должна заработать к тому времени, когда она должна заработать. Поэтому эта грань начинает пропадать, а значит, начинает пропадать надежность. Когда одна подсистема, один модуль, один компонент, пусть большой, становится беззащитным от другого, теряется качество. Это все архитектурные вопросы, которые, кстати, не решены до сих пор, по крайней мере в тех компьютерах, с которыми мы с вами имеем дело. Я сейчас скажу парадоксальную вещь, но операционная система Windows не является системой, а значит, операционной, просто потому, что она не является системой.

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

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

Системное программирование, к сожалению, до сих пор называется системным программированием от однокоренных слов, а не от сути. Операционная система, система программирования отладки — все это вместе системное программирование. А надо бы, чтобы все эти системы удовлетворяли определение системы для начала.

Что бы тогда было? Во-первых, тогда бы не было вирусов, тогда бы пропала отрасль промышленности, которая борется с вирусами, которая производит вирусы. Эти отрасли промышленности часто пересекаются. Придумывают вирусы, потом с ними борются и так далее. Все это требует, и это давно описано в литературе, другого подхода к архитектуре, прежде всего аппаратной архитектуре, потому что мы видим, что у нас самый современный компьютер, а если посмотреть его архитектуру, если посмотреть на то, как вообще там выполняется команда, машинная инструкция, почему она вообще выполняется, кто велел, кто контролирует, что она может выполняться, и каким образом, мы выясним, что ответы на эти вопросы ничем не отличаются в этих архитектурах от тех, что были тогда, и даже хуже. Почему это происходит спустя 50 лет? Происходит это потому, что вся эта наука — в этот момент — перестает быть наукой и становится общественным явлением. И все это смахивает на притчу о Вавилонской башне, потому что хотели как лучше, а потом дьявол все-таки сбил с толку, захотелось денег побыстрее и побольше, и теперь появляются вирусы. Это все о связи точных наук и обществоведения.

Тем не менее, когда эта машина была сделана, стали прибегать к главному конструктору разные люди из Академии наук, из того же Курчатовского института, кстати, и просили на ней сделать что-то серьезное, то, что делали в Америке на Cray, а для этого должна быть более-менее похожая на людей операционная система. Ею я и занимался, и мы с коллегами сделали операционную систему (ОС) М-10, но она могла позволить физикам, например, считать что-то научное. Тут перечислены некоторые научные задачи из физики, которые были посчитаны с помощью этой системы в те времена. Кто интересуется, откроет сайт Computer Museum и сможет там увидеть историю всего этого дела, так что я могу себя считать экспонатом виртуального музея.

Последняя машина Карцева была такая. Она была тоже параллельная, она была сделана уже в конце 1980-х годов. Карцев умер в 1983 году. Доделывали уже без него. Было сделано несколько экземпляров, а на этом все и кончилось. Тут тоже была векторная параллельная архитектора с высокой производительностью.

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

Продавалось это все в ГУМ и стоило недорого, вы видите, вполне доступно.

Это Сначала был «Шилялис», потом «Юность». Они ничем не отличались друг от друга кроме формы. И в 1987 году эта штука поступила в продажу, это был первый персональный советский компьютер с уже содранным программным обеспечением.

Я почему про это все говорю? Мы говорим о программной инженерии. Если нет своего производства средств производства программ, то неизбежно приходится их сдирать.

Сейчас начались какие-то слабые разговоры про импортозамещение, и что я вижу на всяких конференциях по операционной системе? Импортозамещение операционных систем к чему сводится? Как правило, сводится к сдиранию Linux, потому что его легче содрать, чем Windows, он открытый. И никому не приходит в голову сделать что-то самим, вообще не приходит в голову. Как вы думаете, почему?

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

Коммерческое ПО. Когда институт закрылся примерно в начале 1990-х, что получилось? Стали сдавать помещения, и нас пригласил греческий Software House, команда программистов из нашего института, мы поехали в греческий Software House, и я первый раз поехал туда в 1991 году. Тогда в Греции все было хорошо. Это сейчас там плохо, а тогда, в начале 1990-х годов, все было отлично. Они разрабатывали банковскую систему для Европы. Там было человек 600 программистов, но это было то самое пользовательское программирование. И я имел возможность три года там попрограммировать банковские системы, в том числе для нашего московского «Инкомбанка» (он тогда еще существовал). Там я первый раз столкнулся с тем, что бывает не просто программная инженерия, а бывает Computer-Aided программная инженерия. Эта компания, которая производила банковские системы, закупила как раз тогда в Америке CASE tool (CASE — Computer-Aided Software Engineering), с помощью которого можно было полуграфически, полупрограммистским образом определить всю здоровенную банковскую систему и нажать кнопочку, чтобы сгенерировался ее исходный код, причем на разных языках, и получить банковскую систему, которая была сопрягаема со всем европейским банковским хозяйством, с переводом денег, карточками (тогда там были карточки, у нас еще не было). В те времена в банковских системах в обиходе был «Кобол» (он и до сих пор там живет только поэтому). Этот тул был разработан под руководством Джеймса Мартина. Это автор и разработчик известных книг и продуктов по базам данных, автор DB2 и так далее.

Он организовал фирму тогда, которая называлась KnowledgeWare, и проповедовал то, что потом стало называться UML. То, о чем я сказал, — это был предвестник (еще UML не было), но это был один из тулов, которые послужили предтечей UML. Там я увидел, что такое программная инженерия по-западному, когда сидело примерно 600 программистов, каждый день на такой доске писалось «Осталось 755 ошибок», «Осталось 754 ошибки», потом что-то сделали — «Осталось 850 ошибок». И этот процесс не сходился вообще за те три года, что я там работал, с помощью этого тула. Тул стоил 2 млн долларов за инсталляцию. Сам Джеймс Мартин привел команду разработчиков этого тула туда в Афины, две недели нам читали лекции, чтобы мы потом объясняли грекам, как этим всем пользоваться, потому что технический директор этой греческой компании предпочел, чтобы сначала эти ребята рассказали нам, а не грекам, а мы рассказали грекам. Он решил, что это будет оптимально.

Джеймс Мартин запросил какую-то астрономическую сумму за вводную лекцию и уехал в тот же день.

Банковское программирование очень консервативное в том смысле, что эти правила и компонентные модели банковских систем ни один банкир менять не будет под страхом смерти, потому что это действительно огромные деньги. В этом пользовательском программировании крутятся огромные деньги. Полчаса простоя современной программной системы, поддерживающей торги в каких-то инвестиционных компаниях (скажем, в Бостоне есть большая инвестиционная компания с большой программной поддержкой), полчаса стоит десятки миллионов долларов. Если эту программу остановить на полчаса просто потому, что ее надо починить, нашли ошибку, сразу десяток миллионов долларов за эти полчаса ушел в трубу. Это программная инженерия.

Проработав там три года в такой программной инженерии, я вернулся в Москву, потому что невозможно три года жить в гостинице, и попал, к моему удовольствию, в замечательную компанию в Москве. Может быть, вы о ней слышали, она называлась «Параграф». Потом она несколько раз переименовывалась. Сейчас она называется ParallelGraphics. Организовали ее братья Пачиковы. Один в Америке живет, другой в Москве до сих пор. Там были отборные ребята, которых с улицы не брали. Они распространяли информацию о себе по друзьям и знакомым. Было там человек 100, максимум 120 в разные годы. Я там проработал восемь лет. Эта компания занималась трехмерной графикой для Интернета. Зайдите на www.parallelgraphics.com, там будет много демонстраций. Я хотел вам показать какие-то свои программки тех лет, связанные с трехмерной графикой и компонентностью, прежде всего, но, к сожалению, у нас нет технической возможности это сделать.

Читайте также:  tilda или wordpress что лучше

Эта компания еще знаменита тем, что это одна из самых первых российских программистских компаний, которую купила серьезная американская фирма Silicon Graphics. Компания Silicon Graphics в Америке — это та компания, которая делала суперкомпьютеры и программное обеспечение, для фильмов в том числе. Jurassic Park весь был снят, запрограммирован с помощью продуктов Silicon Graphics. И вот «Параграф» стал частью Silicon Graphics под названием Cosmo Software. Вы видите, что руководил этим подразделением Silicon Graphics после продажи Кай-Фу Ли (Kai-Fu Lee). Он потом стал главным в китайском Microsoft, а потом его оттуда сманила Google. Это говорит о том, что наши программисты всегда котировались на высочайшем уровне. При этом, к сожалению, само программирование пока еще котируется недостаточно. Вспомним позавчерашнее замечание Карачинского.

В настоящее время эта компания существует, с ней были связаны довольно известные имена. Например, вы, наверное, знаете, кто такая Ольга Дергунова, она работала в «Параграфе». Она много лет была представителем Microsoft в Москве. Когда сюда приезжал Билл Гейтс, он первым делом встречался с ней.

Кто такой Алексей Пажитнов, вы знаете? Это автор «Тетрис». Он сейчас живет в Америке, но он каждый год приезжает сюда, чтобы быть членом жюри конкурса программных студенческих проектов, которые организует фирма Microsoft, называется Microsoft Imagine Cup, и об этом чуть позже.

Там я занимался реализацией языка VRML, а потом он стал называться X3D. Консорциум www.web3d.org. Web3D — это очень трехмерная графика в Интернете. Там вы посмотрите на стандарты этого дела. Я подчеркиваю слово «стандарт». Программная инженерия начинается со стандартов, как всякое промышленное производство чего бы то ни было. И когда я пришел в «Параграф» 1 сентября 1996 года, буквально в этот день опубликовали в открытом доступе Java-технологии. С тех пор прошел почти 21 год, и я практически кроме Java ни на чем не программирую, просто потому, быть может, что я до этого, исключая зарубежный греческий опыт, программировал на языках, которые вообще ни на что не похожи на машинных архитектурах, которые тоже вообще ни на что непохожи. И захотелось программировать так, чтобы это не улетало в трубу, захотелось делать reusable code, а это одна из главных мыслей в компонентном программировании и в программной инженерии. Обидно тратить сумасшедшие усилия на то, что потом пропадет вместе с этим железом. Ради этого Unix стали придумывать, чтобы не пропадало вместе с железом. Из него пророс Linux, который все теперь любят списывать в порядке импортозамещения.

Этот язык в принципе компонентный, и он отлично ложится на самую распространенную в Java-платформе компонентную модель JavaBeans. Может быть, про нее вам здесь расскажут, я просто с первого раза не хочу вам забивать голову.

Наши студенты теперь уже довольно регулярно участвуют в этом конкурсе Microsoft. Первый раз мы выиграли второе место по России с проектом, который назывался «Интернет для слепых». Официально он назывался немножко иначе, но по сути это был Интернет для слепых. Как слепой человек может работать в Интернете, входить туда, и что он там может делать? Если мы сейчас накроем полотенцем монитор, как это? Были предложены разные ухищрения на этот счет. И в 2013 году мы взяли первое место по России. Это произошло в Санкт-Петербурге, и было обидно, потому что каждый год Microsoft проводит конкурс в другой стране, а наши ухитрились выиграть тогда, когда это проводилось в Санкт-Петербурге. До этого или через год после это было, по-моему, в Австралии где-то, в Сиднее. Приезжает туда почти полсвета, одна команда от страны, как правило, по какой-то номинации. Наши ребята выиграли первое место по России, и пятое неофициальное место они заняли где-то по зрительским симпатиям. Я не могу сказать, что это особое научное мероприятие, потому что там оценивается не только сама идея и качество ее реализации в программистском смысле, там оценивается еще и то, как это подается, потому что Microsoft — это коммерческая компания. «Яндекс» тоже коммерческая компания. Задача любой коммерческой компании — это получение прибыли, поэтому надо еще это дело хорошо подать. Но если вы к нам придете — уже пора нам выигрывать в мировом масштабе, в России мы все попробовали уже.

Я хочу постепенно закругляться, сделать какие-то выводы.

Экономика всех развитых стран все больше зависит от программного обеспечения. Я вернусь к мысли о переводе на русский язык. Есть так называемый mission critical software (это английский термин). Попытайтесь перевести его на русский язык. Это такая же история, как системное программирование. Что является альтернативой системному программированию? Академика Иванникова, директора института, почтальон спрашивает: «У вас на вывеске написано „Институт системного программирования“. Значит ли это, что во всех других институтах программирование бессистемное?»

Что такое mission critical software? На русский язык переводят как «ответственное программное обеспечение». Сразу возникает вопрос: а все остальное — это безответственное? И хочется сказать «да».

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

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

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

А что такое программное обеспечение вообще? Чем мы вообще занимаемся? Кто-нибудь знает определение слова «программа»? Вы видели в книжке, что такое программа, строгое определение? Как мы вспоминали, как дать строгое определение такому, что такое система и операционная система?

В те времена у нас был сотрудник, чистый математик, он был аспирантом курса по чистой алгебре на мехмате. Ему где-то хотелось получать зарплату, его привели к нам в отдел программирования в Карцевский институт, но поскольку он был чистый математик, ему поручили писать документацию — инструкцию по программированию. Тогда только появилось голое железо, его заставили писать инструкцию по программированию. Он начал гениально, как настоящий математик. Он должен был дать определение, что такое программа. Он иначе не понимал, как вообще начать такую инструкцию. Но написал. Правда, он сделал оговорку. Он написал так: «Программой в частях и соединениях Советской армии называется…», ну, и дальше последовательность машинных инструкций, каждая из которых объясняется в этой книге. Но хоть попытка была. Я не видел никогда серьезной попытки дать определение программы. В принципе, программная инженерия — это такая пара, потому что программа сама по себе без документации не может развиваться. Она будет выброшена после того, как перестанет работать.

И теперь несколько слов о том, что такое факультет Computer Science, что такое компьютерные науки и при чем там отделение программной инженерии.

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

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

Вы знаете, что первым делом сделал Иисус Христос, когда пришел в Иерусалим? Он выгнал торгующих из храма. Вытолкал. Kicked the money changers out of the Temple. В русском языке есть устойчивое словосочетание «храм науки», и до тех пор, пока в храме науки будет превалировать торговля, видимо, трудно ожидать таких революций, потому что они стоят огромных денег, но они дают перспективу. И этой перспективой, наверное, будут заниматься программные инженеры, относящиеся к системному программированию, которые имеют системное мышление, которые смогут установить соответствие между математической теорией систем и тем системным программным обеспечением, которое будет диктоваться новыми архитектурами. Но это, наверное, уже делать вам.

Про языки. Язык Python — это популярный, хороший язык, используемый в основном в веб-программировании, очень хорош для того, чтобы с него начинать обучение, но значительно менее употребим, чем язык C и чем язык Java. Если вы зайдете на сайт www.tiobe.com, этот сайт уже лет 25 мониторит каждый месяц популярность языков программирования. Последние лет 15 на первом месте два языка — Java и С. В этом году Java усилила свое преимущество над С. Все остальные сильно позади, C#, про который вам рассказывают. C# — это отдельная история, это слепок с Java. Почему? По тому самому, почему мне надоело на уникальных машинах программировать.

Язык C — это высокоуровневый язык низкого уровня. Пока микропроцессоры популярны, скажем, для Internet of things, там же маленькие микропроцессоры, там память поначалу у всех этих сенсорных узлов в беспроводных сетях…

Я пропустил это в своем докладе. Я работал примерно лет пять в компании MeshNetics, которая делала Internet of things у нас. Эти микропроцессоры программировались на голом C, потому что это фактически Assembler, ничего другого там быть не может. В эти годы, когда появляется огромное количество маленьких микропроцессоров с маленькими возможностями, C начинает обгонять Java последние 10 лет. Потом, по мере того, как эта технология приобретает размах и крупные компании начинают их клепать большим тиражом, они становятся мощнее. Как только появляется возможность засадить туда виртуальную Java-машину, сделать реализацию, все ребята переключаются на нее.

Почему у вас в Android на Java программируют, как вы думаете? Потому что Джеймс Гослинг ушел в Google, когда фирма Sun была продана Oracle. Причем он ушел, потому что ему не понравился коммерческий подход в фирме Oracle к развитию Java-машины, он всегда считал, что это должно происходит в более открытом виде, как открытое программное обеспечение. Как только микропроцессор для телефона стал способен крутить Java, там была сделала Java-машина, и все программируют на ней. А Python — это такой язык, на котором хорошо учиться, который неоптимально компилируется, потому что он интерпретируется в основном. Современная Java хороша тем, что она сначала была интерпретируема, но потом за 20 лет развития там уже такая оптимизация на ходу происходит (помните, я сказал, что на ходу происходит много помимо собственного выполнения?), что уже не в разы производительность теряется, а на единицы процента. К сожалению, я вам не смог показать по техническим причинам трехмерную графику, которую я делал, работая в «Параграфе» только на Java. А Java ничего не знает про видеокарту, про всякие аппаратные возможности.

Если вы хотите сравнить язык программирования, то всякое сравнение языков программирования… Я когда-то вычитал умную фразу в детективе Марининой, как ни странно. Там было написано, что «всякий критерий приобретает свой смысл в контексте целеположения». Замечательная фраза. Если вы хотите сравнивать языки по каким-то критериям, вы сначала спросите «зачем?», то есть целеположение определите. Если вы хотите потом устроиться на работу, то на ближайшие лет 10 я вас опять-таки буду агитировать за Java просто потому, что Python уже уступает место другим языкам, а Java этого пока не делает и еще лет десять не будет.

— Существуют ли приложения языков, такие как «Пролог», в современной программной инженерии? То есть с совершенно другими принципами.

— Как они используются в наши дни? Есть еще для них место?

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

Это открытые области науки. Может быть, это называется computer science, но делается этот computer science ради программной инженерии, потому что на выходе хочется иметь хорошую программу. Этим тоже стоит заниматься.

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

— Он находится в трех минутах ходьбы от метро, но, к сожалению, там уже почти никакого не осталось. Там бо́льшая часть помещения была сдана в аренду, молодежи там почти нет. Там есть, правда, до сих пор ученый совет, который принимает к защите диссертации. Но была статья. Когда началась перестройка, где-то в 1990-х годах была статья в американском журнале «Компьютер», называлась она «High-speed computers of the former Soviet Union», по-моему. Что-то в этом духе. Она у меня есть. Кто заинтересуется — пишите мне письмо. У меня был написан ее e-mail, я вам ее пришлю. Там был обзор всех оригинальных архитектур — потому что обозревать то, как списывали IBM 360, смысла нет, — которые были разработаны. И там было написано. Единственное, что они говорили, действительно оригинальное — это они вспоминали машину M-10 и сказали, что с уходом главного конструктора — а он умер, не дожив трех недель до своего шестидесятилетия в 1983 году — институт как-то перестал генерировать новые архитектуры. Это действительно так, но это объективная вещь. Везде человек смертен. Иногда бывает школа научная, иногда она обрывается, все разбегаются, как правило, за длинным рублем. Ради чего вас здесь собирают при «Яндексе»? Вас собирают здесь для того, чтобы из вас потом такие школы получились, чтобы не прерывалась связь времен. Как-то так. Я подчеркиваю, не может быть серьезного самостоятельного программирования без элементарной базы, которая позволяет делать свои аппаратные компоненты, прежде всего. Но это общемировая тенденция. Фирму Intel переплюнуть не может никто, и не скоро сможет, я думаю. Но у нас в те времена была та же тенденция, что и в фирме Intel, кстати. Фирма Intel имеет два центра разработки новых процессоров: один находится в Хайфе (Израиль), а второй в Редмонде (США), по-моему. В Силиконовой долине в Пало-Альто у фирмы Intel находится штаб-квартира, но там ничего не разрабатывают, там сидит руководство, менеджеры. И эти два исследовательских центра в конвейерном режиме друг с другом конкурировали, и это в значительной степени было двигателем интеловских технологий.

Надо сказать, что фирма Intel проводит ежегодный конкурс, который похож на Oscar в Голливуде. Там новые разработки награждаются призами. Среди своих интеловских сотрудников он называется Intel Technology Award. Все ходят по красной дорожке, как в Голливуде, приезжают во фраках и так далее. У нас просто этого не показывают. Когда у нас будет такое же уважение к этому делу, желательно к тому моменту, когда вы вызреете как специалисты, тогда вам будет широкая улица для работы, чего я вам искренне желаю.

Источник

Информ портал о технике и не только