Transcript for:
Деніс Річі: Найважливіший програміст у світі

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

Можливо, Лінус Торвальца, який написав Linux, на якому працюють всі сервери. А можливо, Білл Гейтс, який написав Windows, на якій працюють практично всі комп'ютери і багато серверів. Я вважаю, що Деніс Річі...

точно важливіший. Він створив мову C і написав операційну систему Unix. Бо Windows також був написаний на мові C, а Linux це, по суті, своя адаптація Unix. Тому сьогодні буде про Деніс Річі, людину, яка, ну, точно претендує на звання найважливішого програміста в світі.

Бо на даний момент на мові C написані всі браузери. Ну, якщо навіть не на мові C, то на C++ чи Java, які похідні від C. Python, Ruby, PHP, JS також базуються на мові C. Фактично, увесь інтернет, практично всі девайси, які існують, неважливо, Windows, Linux, macOS, само собою, андроїди, всі вони базуються на напрацюваннях Деніс Річі. Проте він, як інженер, завжди залишався в тіні.

Помер він через тиждень після смерті Стіва Джобса і не удостоївся якоїсь уваги зі сторони преси. Тому я вважаю, що маю виправити цю несправедливість і розповісти вам про життя та роботу Деніс Річі. Людину, яка заклала фундамент сучасного айкі.

Народився Деніс осінь 1941 року. Ну, недалеко від Нью-Йорку. Його батько, Але Старічі, був інженером в компанії Bell Labs.

Це додатково надихнуло хлопця до електроніки, математики і фізики. Тому після закінчення школи він поступає в Гарварда і активно починає вчити фізику. Але згодом після мегастратури, по його словах, він недостатньо розумний для фізики.

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

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

Тобто не номінальні 40 гривень, а вагома сума. Тому бібліотеку він свою роботу не віддав. А без ось цієї бумажки з бібліотеки диплом йому також не видали.

І так вийшло, що текст його диссертації був практично втрачений. Лише після його смерті змогли відкопати серед інших бумаг один з екземплярів диссертації. А в 2020-му її відцифрували і тепер відкрили усім бажаючим. Я в телеграм закину файл PDF, можете ознайомитись.

Там, правда, не всі сторінки можна чітко роздивитись, але загальну ідею зрозуміти. Або хоча б подивитись, що друкував цей геній. В певний момент...

Деніс Річі чи то розчарувався в академічній освіті, чи то вважав себе недостатньо розумним не тільки для фізики, а й для складних алгоритмів і фундаментальної математики. Тому вирішив піти на якусь більш прикладну спеціалізацію. І пішов по стопах свого батька.

Поступив на роботу в компанію Bell Labs. І в ній він зміг реалізувати себе по максимуму. В компанії Річі любив пхати свій ніс абсолютно у всі відділи, які там були. Ну, в хорошому сенсі цього слова. Йому було все цікаво.

Тому, коли почало розробляти операційну систему Multics, він одразу взявся за неї. Multics була першою операційною системою з концепцією розділення часу і однорівневої пам'яті. Так?

Не позіхайте, зараз все розкажу на руках. На пальцях. Система розділення часу означає, що комп'ютер в кожен конкретний момент займається тільки однією задачею, але постійно переключається між ними. Це як грейсмейстер, який грає шахи з людьми, підряд переходячи від одного до іншого.

Ось люди це ті, хто ставить задачу, а комп'ютер робить одну ітерацію для виконання задачі і переключається на наступну. І так по колу він ходить дуже швидко. Ну, дуже швидко це по декілька кіль на кожну мілісекунду.

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

Правильно, оперативна і постійна. Якщо б я був вчительом інформатики, мені б цього було достатньо, і я би поставив відміну. Сідай, молодець.

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

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

Але вона ставала все більш і більш монструозною. Тому що розробкою займалась не одна компанія, а декілька. В тому числі Bell Labs, MIT і ще якась. Кому не пофіло, якщо там є MIT. Під упороблінням декількох організацій, самі цілі, навіщо вони хочуть створювати операційну систему, були надто розмитими.

Тому Беллапс в якийсь момент вирішив вийти з розробки, і MIT займався далі нею сам. А люди з Беллапс, отримавши такий досвід, почали працювати над іншою операційною системою. Яку згодом і назвуть Юнікс.

Тому що сама концепція операційної системи їм дуже подобалась. Але під управлінням декількох організацій продукт неможливо було допилити. Уяви, одні хочуть фігачити...

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

Тому Беллапс таки відділився, а Деніс Річі відділився разом з Беллапс. Вони разом такі джик і пішли. Причому не лише Деніс Річі. Якщо хтось і може посперечатися по першості з найважливішого програмісту світу, то це Кен Томпсон.

Вони спільно робили і Unix, і напрацювання, які згодом переросли в Molossi, тому роботу одного від роботи іншої доволі важко чітко розділити. Саме Томпсон розробив перший прототип операційної системи, яка згодом переросте в Unix. Саме він спочатку написав його на асемблері. І маючи досвід розробки Multics, вони взяли цей досвід і розробили систему з нуля. Це як команда приватбанку в якийсь момент така, ми хочемо створити свій банк.

Взяли талановитих розробників, взяли хорошу команду і запалили свій монобанк. Не треба було підтримувати легасі, яке приходилось підтримувати монобанку, вже зрозуміли всі проблематики і всі нюанси по банківській сфері і зробили охренітельно крутий банк. Основною відмінністю системи, яка зробила команда Томпсон, була відсутність однорівневої пам'яті.

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

І гарна програма буде коректніше розподіляти ресурси сама для себе. Тобто вона набагато краще може зрозуміти, як економити і гарно оптимізувати свою роботу. Але це гарна система, а не ті, які деколи, на жаль, пишу і я також, щоб швидко встигнути в бідлайни.

Тому що якщо взяти якийсь умовний PHP, Python, JS, в них пам'ять тече як не в себе, і вони тупо перезапускають воркери для того, щоб хоч якось компенсувати оця пам'ять, яка тупо виливається зі всіх сторін. Так от, зі своєю наївною вірою про програмістів він почав створювати операційну систему. А, і не тільки операційну систему, він ще запалив гру Space Travel.

Уявляєте хардкорність тодішніх геймерів? Щоб собі просто пограти гру, їм треба було написати операційну систему. Написати ігровий рушій, на який написати гру. Написати гру, і аж тоді можна чуть-чуть погратися. Це не те, що новомодні студії, які беруть собі Unity чи Unreal Engine і за сотні мільйонів доларів пилять ігри.

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

Але проблема полягала в тому, що одна година роботи такого комп'ютера на сучасні гроші коштувала приблизно 700 доларів. Про те, як формували і рахували ціну одної години роботи за комп'ютером, я розказував в відосі про Лінус Торвальца, тому якщо цікаво, чекні. Бо мені насправді пощастило. Коли я ходив в комп'ютерний клуб, там одна година роботи, по-моєму, коштувала гривню 50 копійок.

Бо якби вона коштувала 700 доларів, напевно, максимум я б міг пограти раз в 2-3 роки. І то годинку. Дорога, а гра вийшла, але виявилось, що в компанії лежав без діла маленький, по тодішнім міркам, маленький комп'ютер PDP-7.

Тому Кен Томпсон вирішив переписати свою гру під цю машину. І, відповідно, грати безкоштовно. Але для переписування треба було взяти весь вихідний код гри і переписати його під іншу систему. Коли він почав це робити, то як справжній програміст захотів все автоматизувати. Тому замість того, щоб посидіти декілька тижнів і переписати гру, він вирішив переписати операційну систему під той комп'ютер, щоб міг запустити свою гру практично без будь-яких змін з того коду, який працює і на тому комп'ютері.

Точнісінько, як і зараз, справжні програмісти ніколи не будуть витрачати декілька годин свого безцінного часу на якусь рутину, яку можна автоматизувати всього за 5 днів. Але як і в сучасних автоматизаторів, так і в Томпсон була просто топова аргументація. Дивіться, автоматизувати нам треба буде всього один раз.

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

На щастя, в його дружини в той час була відпустка, тому вони разом сіли і за місяць переписали систему під новий комп'ютер. Ну, якби в них ще були дорослі діти, вони б могли їх запахати працювати і ось економити ще декілька днів. До речі, в дружини, напевно, відпустка прийшла на всі 100. По суті, за цей місяць з'явився преобраз Unix. Вже була готова робота з периферійними пристроями, але, умовно кажучи, це були дві різні системи. Просто зовнішні апи операційних систем для програм було однакове.

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

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

І давайте дивитися на справи реально. За такий час він зробив MVP, мінімально життєздатний продукт. До повноцінної операційної сис��еми ще була дуже велика-велика робота. Ось тут і почали цю систему крутити разом Деніс Річі, Кен Томпсон і багато інших програмістів. Спочатку писали систему на асемблери, створили стандарти спілкування.

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

А тому кожен новий підвид комп'ютерів мав свій діалект асемблера. І треба було адаптовувати і переписувати багато моментів під нього. І це не було проблемою на той час. Тому що тоді під комп'ютери писали операційну систему.

Тобто комп'ютер поставлявся зразу з операційною системою. Було б нонсенс поставляти його без. Ну, приблизно, як зараз робить Apple. Коли ти купуєш MacBook, ти маєш операційну систему вже на ньому. Але програмістам приходилось переписувати свої програми і практично на ідентичні, але трішки інші, тому що різні операційні системи працювали з різними...

процесорами і мали трішки різний синтаксис, і за цього з'являлось багато проблем. А яка головна характеристика хорошого програміста? Правильно, хороший програміст лінивий програміст. Тому наша команда вирішила написати операційну систему на мові, яка буде транслюватись під кожний новий підвид асемблера сама. Тобто треба буде просто написати адаптер, а повністю операційна система буде залишатись тою самою.

Це як при переїзді поїзда з України в Польщу колесна база міняється, але самі вагони кожен раз не перезбирають. Міняють просто колесну базу. Спочатку розглядали можливість використати якусь існуючу мову програмування і приглядувалися до Фортран.

Так. Той динозавр разом з Кобилом вже тоді існував. Але, як виявилось, Фортран не може справитись з такою задачею і просто не підходить для таких цілей.

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

Назвали цю мову базова комбінована мова програмування. Або скорочено мова B. До речі, а я раніше думав, що мова B назвали тому, що асемблер це типу мова A, і B це як після асемблера. Але ні, мова B назвали як від абревіатури.

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

Тому мову, яка получилась, спочатку назвали мовою B. А потім таки, а яка буква йде після B? Правильно, C. І назвали як мова, яка йде після B, мова C. До речі, іронічно, що інші мови програмування використали схожу практику. Наприклад, мова C++ це мова C, в яку додавали об'єктне орієнтовне програмування.

Мова C Sharp назвала себе так, тому що це як C з чотирьома плюсами, типу, двічі краще за C++. В цьому і полягає особливість Деніс Річі і команди програмістів. В них була ідея написати універсальну операційну систему.

Але... Для того, щоб це зробити, до ідеї треба було ще декілька кроків, які абсолютно не були готові. Банально, не було підходячої мови програмування. Більше того, мови програмування настільки не було, що для того, щоб дойти до фінальної мови програмування, прийшлось написати не одну, а цілих дві мови програмування. Тому конкретно ця команда, ймовірно, зекономила для ІТ, Добрячий десяток років.

Секономила, бо я не вірю, що є певні винаходи чи відкриття, які були б неможливими без певних особистостей. Навіть Ньютон, Ейнштейн, Марконі мали усе під ґрунт для того, щоб зробити свої досягнення. І якби не зробили вони, то точно зробив би хтось пізніше. Саме тому умовне радіо ледь неодночасно винишили Марконі і Тесла.

Тому що все було готовим уже до того. Радіохвилі вже досліджували і навчилися їх генерувати. Ну, той ж герць. Вже на той момент існував телеграф, який навчився кодувати в електромагнітні хвилі і передавати.

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

Долучайтесь до спонсорів, отримуйте багато додаткового контенту, а також доступ до чату для спонсорів, де ми час від часу придумуємо нові теми для відео, обмінюємось мемчиками, тіктоками і просто теревенами. Річ, будучи одним з головних розробників мови всі і системи Unix, все своє подальше життя продовжив допилювати ці напрямки. Спочатку допилили Unix як окрему систему.

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

Якщо подивитись на сімейство Unix-подібних систем, то там можна помітити практично усі існуючі операційні системи, окрім Вінди. Ось в нас є Linux, ось є macOS, ось є AIX від IBM, Xenix від Microsoft, Solaris від Oracle. Тобто практично усі існуючі системи, окрім Вінди.

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

Так само з мовою C. До 1990 року він сам брав активну участь в написанні нових стандарт��в і версій для мови C. Він був співавтором The C Program Language, яка стала просто біблію для програмістів. Давав лекції, брав участь в конференції.

і весь час тримав руку на пульсі розвитку IT. Вийшов на пенсію він в 2007 році. І по суті все своє життя пропрацював одній компанією.

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

Деніс Річі дивовижний програміст. Він вважав себе недостатньо розумним для фундаментальної фізики і математики, Але створив стандарти мов і операційних систем, які зараз використовують просто всюди. Від мультиварок і FPV-дронів до суперкомп'ютерів і спейс-шаттлів. По суті, він створив фундаментальні принципи сучасного IT і програмування. Я не можу сказати, що його заслуги не пам'ятають чи про нього забули.

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

І пам'ятай, Резерв Плюс може стати як гарним кроком в діджиталізацію армії і викорінення САВКа, так і просто черговою апкою для попилення бюджету.