Як вчили мови програмування у

Автор або джерело: Eleonora Burdina

Першоджерело

освіта робота, ретро, самоосвіта,

Повна версія

Як вчили мови програмування у 90-ті: кодинг на папері, «списування» з

популярних проєктів та самвидав

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

«Вивчав мови програмування переважно методом „списування“ з популярних

проєктів»

Всеволод Лобко, Principal Software Engineer у DataRobot

Я в IT з початку 1990-х. Так сталося, що завдяки батькам я потрапив до «щасливої бульбашки» людей, які вже тоді працювали в цій сфері та мали доступ до ресурсів київських інститутів кібернетики, ядерної фізики та інших схожих установ. Також ми були досить частими відвідувачами Космодрому (те, що зараз зветься Караваєвими Дачами, але тоді він ще був на площі Космонавтів — звідси й назва). Тож спочатку я мав доступ до «великих машин» СМ-4, СМ-1420 та «маленьких» ДВК, промислових мікро-ЕОМ «Електроніка-60» та інших. Згодом з’явилися «персоналки» — різні варіанти Sinclair і РК-86, КУВТ (Yamaha MSX), БК... Також мені пощастило погратися з електронікою, мікросхемами, коли вони ще були зрозумілими :)

Як водиться, я потрапив до Fido, потім до не зовсім легального інтернету, IRC, Usenet та інших «звичайних речей» того часу. Мені дуже пощастило швидко залишити російськомовне середовище, тож я почав багато користуватися письмовою англійською.

Перехід до програмування був досить органічним. Спочатку це були завдання малої автоматизації для знайомих: збір і зберігання показників лічильників, облік відвідувачів курсів тощо. Я знайшов роботу ще до навчання, але тоді була не дуже велика професійна «тусовка», тож майже всі всіх знали. Через знайомих потрапив до Фонду держмайна, де саме почалася робота з автоматизації приватизації: потрібно було оцифрувати та внести до загальної бази документи сотень тисяч підприємств, які приватизувалися, а потім провести власне приватизацію — зібрати реєстри покупців, розподілити акції тощо. Це був перший комерційний досвід і перше знайомство з Unix у вигляді SCO Unix :)

Raspberry PI з минулого (Blackfin evaluation board)

До речі, цікаво, що я навчався за спеціальністю з самого початку. Після 8 класу пішов до Київського оптико-механічного технікуму, який був базовим навчальним закладом для заводу «Арсенал», у найпершу групу за спеціальністю «Ремонт та обслуговування ЕОМ». Після технікуму вступив до КПІ на щойно сформовану кафедру САПР (системи автоматизованого проєктування). Навчалися на техніці, яка була. У школі — КУВТ і ДВК, у технікумі — ДВК і БК-0010, у КПІ — PC, VAX-station, DEC-station.

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

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

З Оксаною Лобко, 1997 рік

Щодо мов програмування, у «допекашну» епоху популярним був асемблер/BASIC, на PC «стандарт індустрії» — Turbo Pascal під DOS, деколи — Turbo-C, але значно менше. До Delphi я, на щастя, не дійшов, встиг перемкнутися на Unix до початку Windows, тож майже не стикався з розробкою під Win. На FreeBSD/Linux спочатку був C та Perl. Потім трошки PHP/FI (як його тоді називали). Далі досить довго був Tcl і XOTcl (цікава OOП концепція). Потім — як у всіх: PHP, а коли Python дійшов до production-ready стану, більшість комерційних проєктів того часу вже були на ньому.

Вивчав мови програмування переважно методом «списування» з популярних проєктів. Документація та туторіали теж допомагали. У доінтернетну епоху — книжки, Fido, старші/молодші брати по нещастю :) Хоча література з магазину була застарілою вже на момент друку. Я досить рано мав доступ до Fido і Internet, що мало істотне значення. З паперової класики можу, мабуть, назвати лише The Design and Implementation of the 4.4BSD Operating System Маршалла Кірка МакКузика у вигляді третьої копії з копії на ксероксі. Щодо журналів про комп’ютери, вони завжди були якоюсь «жовтою пресою».

Зате популярним був обмін знаннями. Мабуть, це була більше «горизонтальна передача», ніж менторство у сучасному розумінні. Також мені пощастило з кількома викладачами.

«Виші створювали тусовку зацікавлених осіб, які вже самі обмінювалися між

собою програмами, інформацією, даними, технологіями»

Максим Тульєв, член правління Інтернет-асоціації України

Мені було дуже цікаво займатися комп’ютерною технікою ще змалечку. Серед іншого допомогли комп’ютерні курси в Палаці дитячої творчості на Площі Слави біля ст. м. Арсенальна (були ще й місцеві районні гуртки). Там я отримав як базові знання, так і знайомства. Курси були безплатними.

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

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

Щодо техніки, спершу це були різновиди архітектури i8080 (Z80), потім їм на зміну прийшли IBM PC (x86). Популярними мовами другої половини 1990-х були Pascal та С. С та його різновиди досі популярні. Також через повільність тодішньої техніки доводилось часто використовувати асемблер і навіть машинні коди напряму. Вивчали все це самотужки, добуваючи крихти літератури, спілкуючись із колегами-ентузіастами.

Профільна паперова література була основним джерелом інформації. Так, вона швидко застарівала. Були й паперові самвидави, періодичні паперові журнали, що виходили раз на місяць. Їх купували, коли вистачало грошей або якщо там було щось особливо цікаве. Інтернет став доступним широкому колу наприкінці 1990-х — початку 2000-х. До того використовували системи BBS та мережу Fido.

Треба було під’єднувати модем до телефонної лінії, набирати відповідний номер, отримувати з’єднання з іншою системою та завантажувати відповідний файл, наприклад, книжку або технічну документацію. Знати, на якій саме BBS які є книги та файли. Ані Google, ані єдиної мережі, як ми її розуміємо зараз, для пересічного ентузіаста не існувало. У Fido теж можна було поспілкуватися, отримати відповіді на питання, але цикл «запитання-відповідь» зазвичай займав дні.

Тусовка, принаймні у Києві, була дуже гарна. Всі допомагали одне одному, цікавились новинами технологій, писали комп’ютерні віруси разом. У мене склалося так, що, коли вчився в інституті, я вже був співзасновником першої компанії «УНІС», але її давно немає — ще 2001-го її викупив інший оператор. Взагалі вважаю, що тоді було дуже просто знайти роботу: ринок потребував більше спеціалістів, ніж їх було. Кейсів, що хтось з айтівців довго не міг знайти роботу, я не пам’ятаю.

«У типових командах 1990-х самоучок було більше, ніж власників профільних

дипломів»

Михайло Завілейський, Leader of Organizational Development у DataArt

Я народився у 1970 році, тож розповідатиму про різні періоди з 1985-го по 2000-ні. Я завжди любив програмування та намагався програмувати все, що траплялося до рук. І навіть просто писати та перевіряти алгоритми на папері, як це було заведено у школах у 1980-ті.

Першим персональним пристроєм для програмування та ігор був калькулятор Б3-34, який батько приносив з роботи (коштував він місячну зарплату молодшого наукового співробітника чи інженера). Для навчання він був дуже корисним: інтерактивність, характерна для інтерпретованих мов, польський запис і стек в’їдалися у свідомість, операції з регістрів і переходи готували до освоєння асемблерів. Були й ігри: перший хіт — «Лунолет», який ознайомлював з багатьма аспектами реалізації чисельних методів. І з обмеженнями також — у грі «Політ в атмосфері» через нестачу пам’яті не було перевірок на допустимість вхідних параметрів — і мікросекундний потужний реактивний вихлоп допомагав перевищити швидкість світла, інакше зашкалювало опір атмосфери.

Паперове програмування готувало до взаємодії з великими машинами (так називали радянські мейнфрейми). Я навчався у фізико-математичній школі при університеті, і нас пускали на режимне підприємство, а викладачі давали свої логіни/паролі. (Кібербезпека? Ні, не чули.)

Ціна помилки була великою — черга на запуск програми могла бути багатогодинною. Досі пам’ятаю ганьбу, коли, роздрукувавши діаграму напруженості магнітного поля при непростій конфігурації зарядів, що рухаються, я побачив, що на вулиці дощ, а роздруківку треба завтра здавати вчителю. Вирішив «з голови» написати програму, яка роздрукує ще метр нісенітниці, щоб загорнути рулон з діаграмою. Один зайвий «0» зробив із метра десять, і на кожному аркуші докором друкувалося: «ТОВАРИШІ-КОРИСТУВАЧІ, ЕКОНОМТЕ ПАПІР».

Попри захоплення програмуванням зі школи, я пішов вчитися на радіофізику, щоб з’ясувати, що до кінця навчання спеціальність втратила кар’єрні перспективи через перебудову та скорочення військових замовлень. На щастя, та ж перебудова привнесла інновації у вищу освіту, і нам дозволили замінювати курси своєї кафедри на курси інших кафедр і навіть факультетів, з невеликими обмеженнями. Я пам’ятаю, як на останній сесії ціною двох тижнів інтенсивної підготовки та години ганьби я склав кафедральний та незамінний курс «Поширення радіохвиль», після чого виспався та за день склав на матмеху «Бази даних», «Експертні системи», «Технології програмування». І вишенька на торті — «Turbo Pascal».

Зустрічі гравців гри електронною поштою Galaxy/Galaxy Plus/Dragon Galaxy у 1998 році. Я захопився нею 1996 року, потім навіть написав свій сервер, щоб урізноманітнити ігрові механіки. З десятком поточних колег у DataArt я познайомився у грі, двоє з них — топменеджери та партнери

У Пітері, де я навчався, «програмістські» кафедри були на математико- механічному факультеті та факультеті прикладної математики та процесів управління. У 1980-ті кафедри матмеху були вже дуже розвинені та мали історію. Навчання на них тяжіло до того, що зараз називають Computer Science та Informational Systems, але інформаційні технології проникали скрізь, де з’являлася обчислювальна техніка. Наприклад, поява інтернету в Санкт- Петербурзі багато в чому була пов’язана з бізнесами, розпочатими випускниками хімічного факультету.

На моєму фізичному факультеті були лабораторії, де стояли персональні компʼютери IBM PC/AT 256. Викладачі й аспіранти любили на них грати, але мені, студенту другого-третього курсу, для навчально-наукових завдань поступалися місцем відразу.

Навчання у вишах було «старорежимним»: з лекціями, програмуванням на папері, тестами на знання «канонів». Треба сказати, що коли ми налагоджували співпрацю з університетами у першій декаді 2000-х, у багатьох містах України частина курсів збереглася у тому ж форматі через консерватизм викладачів і погану матеріально-технічну базу. Я пам’ятаю, коли ми з приятелем попросили батька нашої колишньої однокласниці, фізика-теоретика, розповісти нам про мову Forth. Він посадив нас в аудиторії та гучним голосом прочитав вступну 90-хвилинну лекцію. Ми злякалися такого підходу та далі розбиралися самі.

Інша історія: восени 1990 року один з аспірантів фізичного факультету вирішив прочитати «додатковий» спецкурс про C++, розрахований на семестр (одна пара на тиждень). Після першої ж лекції я був зачарований, поїхав у суботу на компʼютерний ринок і купив книгу Страуструпа, роздруковану на АЦДП ( алфавітно-цифровий друкуючий пристрійпристрій обчислювальної машини, призначений для відображення на носії даних букв, цифр і спеціальних символів — ред. ), та дискети з піратським Turbo C++.

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

У середині 1990-х картина була схожою, індустрія поповнювалася завдяки «конверсії» в програмістів технарів різного штибу і не тільки. Інтернет різко спростив поширення інформації, великі компанії почали створювати та розповсюджувати чудові посібники до нових продуктів з гарними прикладами, вийшли та стали легко доступними переклади основних книг, багато з яких актуальні й донині: The Art of Computer Programming, The Mythical Man-Month, Booch method.

Працювати почав рано: потрохи ще з 1986 році, з 1989-го — у повному масштабі. Після першого курсу мене призвали до флоту (тоді на два роки скасували «бронювання» для студентів). Завдяки наказу Горбачова я служив трохи більше як рік, а не три. Але повернувшись, навчався все менше і працював усе більше. Переважно займався програмуванням у наукових інститутах, де платили мало, але й працювали там мало. У результаті можна було поєднувати дві-три роботи, зарплати у мене були від 7 до 18 доларів на місяць, втім я мав необмежений доступ до комп’ютерів. Повноцінну роботу починав в епоху 286-х PC. Серйозні проєкти вже можна було робити на 386-х, які підтримували нормальну багатозадачність і 32-розрядні адреси.

З Романом Махненком, він же GVNG , теж працює у DataArt

Були й курйозні моменти. Наприкінці 1990-х на початку роботи в DataArt ми активно використовували Microsoft ASP (не ASP.NET, а «класику»). У якийсь момент мережею поширилася інформація про баг в IIS, який дозволяв завантажити вихідний код сторінок, додавши ::DATA в кінець URL. Усвідомлення, що ми працюємо в американській компанії та крадіжка коду може призвести до наслідків, ще не було.

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

У типових командах 1990-х самоучок було більше, ніж власників профільних дипломів. Але я помітив цікавий тренд. Дуже умовно можна поділити програмістів на «творчий» та «аналітичний» типи. Я сам завжди був на творчому боці, моделював реальний світ у коді, не дбаючи про ефективність алгоритмів і моделей даних. Але коли в компанію, починаючи з кінця 1990-х і до середини 2000-х, почало приходити більше «аналітиків» з профільною освітою та систематичним підходом до справи, я остаточно програв конкуренцію як програміст і зосередився на менеджменті.

Тож точка перелому, коли якісна профільна освіта стала безумовно корисною, справді десь на зламі тисячоліть. Загалом фундаментальним речам і тоді, і зараз корисно вчитися «академічно», не поспішаючи та вдумливо. Прикладна частина — це самонавчання, практика, тут підказки колег і наставників дуже помічні.

Щодо популярних мов програмування, то наприкінці 1980-х і на початку 1900-х для навчальних і побутових цілей використовували Pascal і Basic. На великих машинах у тих місцях, де я навчався та працював, здебільшого були FORTRAN (через математичні бібліотеки), PL/I, Algol 68. COBOL домінував у обробці даних до появи реляційних баз. Для системного програмування, інтеграції з обладнанням використовували макроасемблери та С. Функціональна LISP була популярна для перших експертних систем, хоча були її дуже прикладні застосування, наприклад, AutoLISP, вбудована мова домінантної системи проєктування AutoCAD. Звичайно, список можна розширювати, тут тільки половина мов, якими я сам щось робив (на COBOL я нічого не писав).

1990-ті — це роки появи об’єктних та об’єктноорієнтованих мов в освіті, коли об’єктні розширення традиційних мов поєднувалися з новими технологічними платформами, що охоплювали і мову, і середовище виконання, і бібліотеки з самого початку. Прийшли Java, потім MS .NET. Хоча в науковому середовищі об’єктноорієнтований підхід з’явився раніше 1980-х — той самий Smalltalk.

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

Поява групових проєктів освіти, колективних дипломних і курсових робіт стала проривом у передових вишах у 1990-ті та зустріла опір консервативної частини викладачів, оскільки оцінки треба було ставити індивідуальні, а хто насправді робив — зʼясувати було не просто. Якщо хтось займався організацією, був таким прототипом скрам-майстра, а хтось збиранням вимог та ручним тестуванням, то способи показу їхнього вкладу в проєкт доводилося винаходити.

Про літературу. У середині — кінці 1980-х із цим було погано. Перший комп’ютерний журнал, здається, Computer World, батько привіз мені у 1986-му з відрядження до Болгарії. Досі пам’ятаю фразу зі статті про процесор 80386: «Попри очевидні переваги в архітектурі та продуктивності, перед придбанням подумайте, чи потрібен вам такий дорогий прилад, адже на практиці ми бачимо не так багато завдань, які не можуть бути вирішені в межах 16-розрядних архітектур».

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

Літературний самвидав

З появою інтернету на початку 1990-х проблема з доступом до інформації почала зникати. Перекладна література з’являлася все швидше, хоч і з відставанням та низькою якістю перекладу та редактури. Рідкісні фрагменти коду в прикладах обходилися без друкарських помилок і спотворень, оскільки редактори видавництва, звісно, ​​не могли допомогти.

Пам’ятаю, наприкінці 1990-х купив незвичайну книгу — переклад «Довідника Вебмайстра» з оригіналу O’Reilly. Мені вона дуже нагадувала «Так казав Заратустра» Ніцше, малюючи образ надлюдини. Вебмайстер має бути і дизайнером, і програмістом актуального тоді Full Stack, фахівцем з верстки, UI/UX, письменником і системним аналітиком.

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

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

Взагалі найцікавіший для мене тренд у 1990-ті — це експоненційне зростання складності типових застосунків. Великі та складні системи перестали бути справою обраних, технічної та наукової еліти. Активно розвивалися підходи та методології колективної роботи, яких фактично не навчали. Ще не було вибудовано нормальної культури взаємодії клієнтів та розробників — вимоги були від «хотілок» до формальних документів на сотні сторінок, зроблених за держстандартами або канонами RUP. Команди ж тяжіли до Agile, хоча маніфест і термін з’являться лише у першій декаді XXI століття.