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

Кандидат технічних наук МІЕМ, заступник керівника департаменту програмної інженерії факультету комп'ютерних наук НДУ ВШЕ та заступник завідувача кафедри системного програмування ІСП РАН Юхим Гринкруг дає свою відповідь на питання про те, що таке програмна інженерія.

Цього терміну вже майже 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 рік. Перед вами теми, які обговорювалися тоді. А хто там був? Там були викладачі, виробники як заліза, так і програм, там був, зокрема, Эдсгер Вібе Дейкстра. Знаєте такого?

— Так.

— Чим він знаменитий?

— Алгоритми робив.

— І не один, багато. Семафори Дейкстри, алгоритм Дейкстри. «On-the-Fly Garbage Collection» — класична стаття про те, як математично обґрунтувати паралельну збирання сміття в теперішніх платформах — Java, .NET і так далі, — там, де є на ходу паралельна збірка сміття. Автор — теж Дейкстра.

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



І головний доповідь була про те, як організувати таке компонентне програмування, щоб поставити цю справу на промисловий потік. Це питання актуальне дотепер, хоча минуло багато років. Це така парадигма програмування. Що таке парадигма? Підхід до програмування, один з багатьох. Де якісь програмні конструкції можна багаторазово використовувати, одного разу написавши (у сучасних об'єктно-орієнтованих мовах це зазвичай класи або сукупності класів) з тим, щоб їх можна було, по-перше, написати добре, обов'язково переиспользовать, обов'язково досягати їх безпомилкового якості, і потім з якісних компонент збирати якісні вироби. Що для цього треба? Треба обмежити свободу програмування, тому що потрібно дотримуватися якісь правила. Правила — це стандарти програмування. І ми тут перший раз переходимо від кустарщини до промислового розмови. Необхідно впровадити виробничі стандарти. Це високо сказано, але якісь стандартні відносини, тому що стандартизація — це необхідна умова промислового виробництва, надійності результату, поділу праці, і відповідає на всі питання, які хотілося прояснити.

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



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

Що таке програмування? Це процес примусу більш-менш великої кількості заліза до якоїсь корисної діяльності. Це боротьба за те, щоб машина виконала те, що ви від неї хочете. Але ця боротьба не з машиною, а ця боротьба з вами, з самим собою, тому що є тенденція розвести безмежне неподобство, і коли ви щось робите, ви боретеся з собою. Боротися з залізом абсолютно безглуздо. Ви боретеся зі своїм нерозумінням, невмінням і так далі. І вся ця боротьба так чи інакше пов'язана з компонентностью, якщо вдуматися.



Якщо подивитися на історію обчислювальної техніки, то мене, наприклад, в університеті вчили програмувати на двох видах обчислювальних машин: на аналогових, яких ви, напевно, вже не побачите, швидше за все, ніколи, і вже цифрових. Чому не побачите? Тому що вся аналогова техніка починаючи з телефону вже перейшла на цифру. Тим не менше, спочатку аналогова обчислювальна машина являла собою набір готових компонент, і здоровенний ящик з проводами перед нею для того, щоб об'єднувати ці компоненти між собою, і отримувати таку функцію тільки на виході, або напруга, яке моделює постановку задачі, розв'язуваної на цій аналогової машині. Крім того, сама цифрова машина зроблена з електричних елементів, які так чи інакше аналогові. Тобто певна діалектика.



Зліва ви бачите порівняно пізню аналогову обчислювальну машину, компоненти якої з'єднані проводами для того, щоб вийшла якась бажана функція, смоделировалась.

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

Чому все це важливо і чому НАТО за це взялося в перший раз? Тому що ви бачите, що це стало розвиватися приблизно в кінці війни, і розвиватися це стало не просто так, а тому що треба було робити бомбу, а бомбу треба було моделювати і прораховувати, тому що якщо б кожен раз робили натурні випробування бомби, коли виникало якесь питання, і не застосовували б обчислювальну техніку для цього, то цілком ймовірно, Землю вже розкололи б навпіл давно. Невипадково Лос-Аламосская національна лабораторія, яка робила бомбу в Америці, вважається однією з основних лабораторій, яка диктувала і диктує всякі суперкомп'ютерні, наприклад, оцінки. Знаєте, 24 ливерморских тесту (Ливерморская національна лабораторія) досі вважаються класичними тестами оцінки продуктивності комп'ютерів.



Як це все відбувається? Як правило, звичайна програма, до якої ви звикли, спершу пишеться, створюється (розробляється налагодження), а потім виконується. Тому прийнято розрізняти завжди дві стадії, два етапи: статику до виконання програми і динаміку, коли вона виконується, які можливості вона отримує і що вона робить в динаміці.

Як в апаратурі, так і в програмному забезпеченні за всю історію йде поступовий перехід від статики до динаміки. При цьому динаміка вимагає нових засобів апаратури, нової якості, тому що вона не дається задарма. І, відповідно, при програмуванні можна розрізняти компоненти, які використовуються на етапі розробки в статиці, в динаміці або і там, і там. І ці відмінності визначаються архітектурою самої обчислювальної системи і того ж базового, що на цій машині є. Ви звикли до того, що ваша машина вже забезпечена всім, чим треба: там є операційна система, тобто це базове програмне забезпечення, або, як зараз кажуть, платформа.



В ті часи все це було набагато складніше. І займалася цією платформою галузь програмування, яка називалася «системне програмування». Насправді системне програмування — це основа програмування взагалі. Що це таке? Дуже часто доводиться пояснювати економістам, що таке системне програмування і чим воно відрізняється від просто програмування. Я вже сказав, що у нас з цього року відкрита базова кафедра Інституту системного програмування Російської академії наук під керівництвом академіка Іваннікова. Академік Іванніков знаменитий тим, що він керував розробкою програмної системи, яка керувала стиковки космічних кораблів «Аполлон» і «Союз». Чули про це? Напевно, чули завдяки сигарет, а тоді це було велике досягнення.

Економісти кажуть, що буває два види продукції у промисловому виробництві. Їх називають «Виробництво групи " А» і «Виробництво групи 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 в ті часи, ви бачите.



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



Що було зроблено в мої часи в цьому інституті? Був проект, він був початий в 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, там буде багато демонстрацій. Я хотів вам показати якісь свої програмки тих років, пов'язані з тривимірною графікою і компонентностью, перш за все, але, на жаль, у нас немає технічної можливості це зробити.

Ця компанія ще знаменита тим, що це одна з найперших російських програмістських компаній, яку купила серйозна американська фірма 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. Всі ходять по червоній доріжці, як у Голлівуді, приїжджають у фраках і так далі. У нас просто цього не показують. Коли у нас буде така ж повага до цієї справи, бажано до того моменту, коли ви вызреете як фахівці, тоді вам буде широка вулиця для роботи, чого я вам щиро бажаю.

Дякую за увагу. Вчіться добре.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.