User Tools

Site Tools


text:real-programmers-ukrainian

Справжні програмісти не використовують Паскаль

Copyright © 1982 Ed Post

У старі добрі часи — «золоту еру» комп’ютерів — було легко відрізнити чоловіків від хлопчиків (у літературі їх іноді називають «справжніми чоловіками» та «їдачами кішу»). У цей період «справжні чоловіки» були тими, хто розумівся на комп’ютерному програмуванні, а «їдці кішу» — ні. Справжній комп’ютерний програміст говорив такі речі, як «DO 10 I=1,10» і «ABEND» (вони насправді балакали великими літерами, ви розумієте), а решта світу говорила такі речі, як «комп’ютери надто складні для мене» і «я не можу покладатися на комп’ютери – вони такі знеособлені». ( Попередня робота вказує на те, що справжні чоловіки ні на що не «покладаються» і не лякаються знеособленості.)

Але, як завжди, часи змінюються. Сьогодні ми зіткнулися зі світом, у якому маленькі старенькі можуть отримати комп’ютеризовані мікрохвильові печі, 12-річні діти можуть вибивати справжніх чоловіків у грі в Asteroids та Pac-Man, і будь-хто може купити і навіть зрозуміти свій власний персональний комп’ютер. Справжньому програмісту загрожує вимирання, його замінять старшокласники з макбуками!

Існує явна потреба вказати на відмінності між типовим гравцем у Pac-Man у середній школі та справжнім програмістом. Розуміння цих відмінностей дасть цим дітям те, до чого прагнути – стати прикладом для наслідування, батьківською фігурою. Це також допоможе роботодавцям справжніх програмістів зрозуміти, чому було б помилкою замінити справжніх програмістів у своєму штаті на 12-річних гравців у Pac-Man (зі значною економією зарплати).

Мови

Найпростіший спосіб відрізнити справжнього програміста з натовпу - це мова програмування, яку він (або вона) використовує. Справжні програмісти використовують Фортран. Любителі кіша використовують Паскаль. Ніклауса Вірта, розробника мови Паскаль, якось запитали: «Як ви вимовляєте своє ім’я?». Він відповів: «Ви можете або називати мене по імені, вимовляючи його «Veert», або називати мене за значенням «Worth». З цього коментаря можна одразу зрозуміти, що Ніклаус Вірт їсть кіш. Єдиним механізмом передачі параметрів, схваленим справжніми програмістами, є виклик-за-значенням-повернення, реалізоване в компіляторах Фортран. Справжнім програмістам не потрібні абстрактні концепції, щоб виконувати свою роботу: вони цілком задоволені перфоратором, компілятором Fortran IV та пивом.

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

Якщо ви не можете зробити це на Фортран, зробіть це на мові асемблера. Якщо ви не можете зробити це мовою асемблера, це не варто робити зовсім.

Структурне програмування

За останні кілька років академіки інформатики увійшли в колію «структурованого програмування». Вони стверджують, що програми легше зрозуміти, якщо програміст використовує деякі спеціальні мовні конструкції та методи. Звичайно, вони не всі згодні щодо того, які саме конструкції, і приклади, які вони використовують, щоб продемонструвати свою конкретну точку зору, незмінно поміщаються на одній сторінці якогось того чи іншого незрозумілого журналу — явно недостатньо прикладу, щоб когось переконати. Коли я закінчив школу, я вважав себе найкращим програмістом у світі. Я міг би написати неперевершену програму «хрестики-нулики», використовувати п’ять різних комп’ютерних мов і створити 1000-рядкову програму, яка б працювала. (Справді!) Потім я потрапив у реальний світ. Моїм першим завданням у реальному світі було прочитати та зрозуміти програму на Фортрані із 200 000 рядків, а потім пришвидшити її в два рази. Будь-який справжній програміст скаже вам, що все структуроване кодування у світі не допоможе вам вирішити таку проблему — для цього потрібен справжній талант. Кілька коротких спостережень щодо справжніх програмістів і структурованого програмування:

  • Справжні програмісти не бояться використовувати GOTO.
  • Справжні програмісти можуть написати п’ятисторінкові цикли DO, не заплутавшись.
  • Справжнім програмістам подобаються арифметичні оператори IF, оскільки вони роблять код цікавішим.
  • Справжні програмісти пишуть код, який самостійно змінюється, особливо якщо це економить їм 20 наносекунд у середині крихітного циклу.
  • Програмістам коментарі не потрібні: код очевидний.
  • Оскільки Фортран IV не має структурованих операторів IF, REPEAT … UNTIL або CASE, справжнім програмістам не потрібно турбуватися про те, що вони не використовуються. Крім того, їх можна симулювати, якщо необхідно, за допомогою призначених GOTO.

Останнім часом структури даних також набули великої популярності. Абстрактні типи даних, структури, вказівники, списки та рядки стали популярними в певних колах. Вірт (згаданий вище їдок кіша) насправді написав цілу книгу, стверджуючи, що можна написати програму на основі структур даних, а не навпаки. Як відомо всім справжнім програмістам, єдиною корисною структурою даних є масив. Рядки, списки, структури, набори — усе це особливі випадки масивів, і їх можна так само легко обробляти, не псуючи мову програмування всілякими ускладненнями. Найгірше в химерних типах даних це те, що їх потрібно декларувати, а справжні мови програмування, як ми всі знаємо, мають неявну типізацію на основі першої літери назви змінної (шість символів).

Операційні системи

Яку операційну систему використовує справжній програміст? CP/M? Не дай Бог - CP/M, врешті-решт, в основному є іграшковою операційною системою. Навіть маленькі старенькі та учні початкової школи можуть зрозуміти та використовувати CP/M.

Звичайно, Unix є набагато складнішим - типовий хакер Unix ніколи не може згадати, як цього тижня називається команда PRINT, - але коли доходить до діла, Unix стає прославленою відеоігрою. Люди не займаються серйозною роботою над системами Unix: вони розсилають жарти по всьому світу через USENET і пишуть пригодницькі ігри та дослідницькі статті.

Ні, ваш справжній програміст використовує OS/370. Хороший програміст може знайти та зрозуміти опис помилки IJK305I, яку він щойно отримав у своєму скрипті JCL. Чудовий програміст може написати скрипт JCL, взагалі не звертаючись до посібника. Справді видатний програміст може знайти помилки, заховані в 6-мегабайтному дампі ядра, не використовуючи шістнадцятковий калькулятор. (Я дійсно бачив, як це було зроблено.)

OS/370 — справді чудова операційна система. Є можливість знищити дні роботи одним недоречним пробілом, тому заохочується уважність програмістів. Найкращий спосіб отримати доступ до системи – за допомогою перфокарт. Деякі люди стверджують, що існує система поділу часу, яка працює на OS/370, але після ретельного вивчення я дійшов висновку, що вони помиляються.

Засоби програмування

Які інструменти використовує справжній програміст? Теоретично, справжній програміст може запускати свої програми, вводячи їх на передній панелі комп’ютера. У ті часи, коли комп’ютери мали передню панель, це робилося час від часу. Ваш типовий справжній програміст знав весь початковий завантажувач пам’яті в шістнадцятковому форматі та вводив його щоразу, коли його програма знищувала його. (Тоді пам’ять була пам’яттю – вона не зникала, коли вимикалася електроенергія. Сьогодні пам’ять або забуває речі, коли ви цього не хочете, або запам’ятовує речі довго після того, як їх краще забути.) Легенда говорить це те, що Сеймур Крей, винахідник суперкомп’ютера Cray I і більшості комп’ютерів Control Data, фактично ввів першу операційну систему для CDC7600 на передній панелі з пам’яті, коли його вперше ввімкнули. Сеймур, зрозуміло, справжній програміст.

Одним із моїх улюблених справжніх програмістів був системний програміст для Texas Instruments. Одного разу він отримав міжміський дзвінок від користувача, чия система дала збій посеред важливої роботи. Джим зміг усунути пошкодження по телефону, змусивши користувача перемикати команди дискового вводу-виводу на передній панелі, відновлювати системні таблиці в шістнадцятковому форматі, читати вміст реєстру назад по телефону. Мораль цієї історії: хоча інструментарій справжнього програміста зазвичай включає в себе перфоратор і принтер, у надзвичайних ситуаціях він може обійтися лише передньою панеллю та телефоном.

У деяких компаніях редагування коду програм більше не виглядає як десять інженерів, які стоять у черзі, щоб використати перфоратор. Насправді в будівлі, в якій я працюю, немає жодного перфоратора. Справжньому програмісту в цій ситуації доводиться виконувати свою роботу за допомогою програми текстового редактора. Більшість систем пропонують кілька текстових редакторів на вибір, і справжній програміст повинен бути обережним, щоб вибрати той, який відображає його особистий стиль. Багато людей вважають, що найкращі текстові редактори у світі були створені в дослідницькому центрі Xerox Palo Alto для використання на їхніх комп’ютерах Alto та Dorado. На жаль, жоден справжній програміст ніколи не користуватиметься комп’ютером, операційна система якого називається SmallTalk, і точно не спілкуватиметься з комп’ютером за допомогою миші.

Деякі з концепцій у цих редакторах Xerox були включені в редактори, що працюють на операційних системах з більш прийнятними назвами. EMACS і VI, ймовірно, найвідоміші з цього класу редакторів. Проблема з цими редакторами полягає в тому, що справжні програмісти вважають «те, що ви бачите, те й отримуєте» таким же поганим поняттям для текстових редакторів, як і для жінок. Ні, справжньому програмісту потрібен текстовий редактор типу «ви просили, ви це отримали» — складний, загадковий, потужний, невблаганний, небезпечний. TECO, якщо бути точним.

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

З цієї причини справжні програмісти не бажають фактично редагувати програму, яка майже працює. Їм набагато простіше просто виправити бінарний об’єктний код напряму, використовуючи чудову програму під назвою SUPERZAP (або її еквівалент на машинах не IBM). Це працює настільки добре, що багато робочих програм у системах IBM не мають жодного відношення до оригінального коду Фортран. У багатьох випадках оригінальний вихідний код більше недоступний. Коли настає час виправляти таку програму, жоден менеджер навіть не подумає надсилати нікого, крім справжнього програміста, щоб виконати цю роботу – жоден структурований програміст, що їсть кіш, навіть не знає, з чого почати. Це називається «безпека робочого місця».

Деякі інструменти програмування, якими НЕ користуються справжні програмісти:

  • Препроцесори FORTRAN, такі як MORTRAN і RATFOR. Кулінарне мистецство програмування — чудово підходить для приготування кіша. Перегляньте коментарі вище щодо структурованого програмування.
  • Дебагери вихідного коду. Справжні програмісти можуть читати дампи ядра.
  • Компілятори з перевіркою меж масиву. Вони пригнічують креативність, знищують більшість цікавих способів використання EQUIVALENCE і унеможливлюють модифікацію коду операційної системи за допомогою негативних індексів. Найгірше те, що перевірка меж неефективна.
  • Системи підтримки вихідного коду. Справжній програміст зберігає колоду перфокарт у ящику під замком, бо не може залишити свої важливі програми без охорони.

Справжній програміст за роботою

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

  • Справжні програмісти працюють у Лос-Аламоській національній лабораторії, створюючи симулятори атомної бомби для роботи на суперкомп’ютерах Cray I.
  • На РНБО працюють справжні програмісти, декодують російські передачі.
  • Багато в чому завдяки зусиллям тисяч справжніх програмістів, які працюють у НАСА, наші хлопці потрапили на Місяць і повернулися раніше за космонавтів.
  • Комп’ютери в космічному кораблі були запрограмовані справжніми програмістами.
  • Програмісти працюють для Boeing над розробкою операційних систем для крилатих ракет.

У Лабораторії реактивного руху в Каліфорнії працюють деякі з найвидатніших справжніх програмістів. Багато з них знають напам'ять всю операційну систему космічних кораблів “Піонер” і “Вояджер”. Завдяки поєднанню великих наземних програм Фортран і невеликих програм на асемблері на базі космічних апаратів вони можуть робити неймовірні навігаційні вчинки та імпровізацію, такі як попадання у вікна шириною десять кілометрів у Сатурні після шести років у космосі, ремонт або обхід пошкоджені сенсорні платформи, радіо та батареї. Стверджується, що одному справжньому програмісту вдалося вставити програму зіставлення шаблонів у кілька сотень байтів невикористаної пам’яті космічного корабля «Вояджер», який шукав, знаходив і фотографував новий супутник Юпітера.

Один із планів майбутньої місії космічного корабля Galileo полягає в тому, щоб використовувати гравітаційну траєкторію повз Марс на шляху до Юпітера. Ця траєкторія проходить в межах 80 ± 3 кілометрів від поверхні Марса. Ніхто не буде довіряти програмі Паскаль (або програмісту на Паскаль) навігацію з такими допусками.

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

Здається, деякі високопоставлені їдці кішу в Міністерстві оборони вирішили, що всі оборонні програми мають бути написані якоюсь великою уніфікованою мовою під назвою «ADA» (зареєстрована торгова марка, DoD). Деякий час здавалося, що ADA судилося стати мовою, яка суперечить усім принципам справжнього програмування — мовою зі структурою, мовою з типами даних, жорсткою типізацією та крапками з комою. Коротше кажучи, мова, розроблена для того, щоб понівечити креативність типового справжнього програміста. На щастя, мова, прийнята Міністерством оборони, має достатньо цікавих функцій, щоб зробити її підхожою: вона неймовірно складна, містить методи для лагодження операційної системи та перегрупування пам’яті, і Едсгару Дейкстрі це не подобається. (Дейкстра, я певен, що ви знаєте, був автором GoTos Considered Harmful — знаменної праці в методології програмування, яку схвалювали як програмісти Pascal, так і ті, хто їсть кіш). Крім того, рішучий справжній програміст може писати фотрановські програми будь-якою мовою.

Справжній програміст може піти на компроміс зі своїми принципами і працювати над чимось трохи тривіальнішим, ніж знищення життя, яким ми його знаємо, за умови, що на це є достатньо грошей. Наприклад, у Atari є кілька справжніх програмістів, які створюють відеоігри. (Але не граючи в них. Справжній програміст знає, як перемогти машину щоразу: у цьому немає жодного виклику.) Кожен, хто працює в LucasFilm, є справжнім програмістом. (Було б божевіллям відмовити 50 мільйонам шанувальників «Зоряних воєн»). Частка справжніх програмістів у сфері комп’ютерної графіки дещо нижча за норму, здебільшого тому, що ще ніхто не знайшов використання комп’ютерної графіки. З іншого боку, вся комп’ютерна графіка виконується на Фортран, тому існує достатня кількість людей, які займаються графікою, щоб уникнути необхідності писати програми на Коболі.

Справжній програміст у грі

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

  • На вечірці справжні програмісти в кутку говорять про безпеку операційної системи та про те, як її обійти.
  • Під час футбольного матчу справжній програміст – це той, хто порівнює гру зі своїми симуляціями, надрукованими на фальцованому папері 11“ на 14”.
  • На пляжі справжній програміст малює блок-схеми на піску.
  • Справжній програміст йде на дискотеку дивитися світломузику.
  • На похороні справжній програміст каже: «бідний Джордж! у нього процедура сортування майже запрацювала, як його вдарив інсульт».
  • У продуктовому магазині справжній програміст — це той, хто наполягає саморучно провести товар повз лазерний касовий сканер, бо ніколи не довіряє операторам, що ті зроблять як треба з першого разу.

Природне середовище справжнього програміста

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

Типовий справжній програміст живе перед комп’ютерним терміналом. Навколо цього терміналу знаходяться:

  • Лістинги всіх програм, над якими коли-небудь працював справжній програміст, складені приблизно в хронологічному порядку на кожній плоскій поверхні в офісі.
  • Біля півдюжини чи близько того частково наповнених чашок холодної кави. Іноді в каві можуть плавати недопалки. У деяких випадках чашки містять Фанту.
  • Якщо він не дуже хороший, будуть копії посібника з OS JCL і Principles of Operation, відкриті на деяких особливо цікавих сторінках.
  • На стіні прикріплений роздрукований календар Снупі за 1969 рік.
  • По підлозі розкидано кілька обгорток для сирних батончиків з арахісовим маслом (типу, які черствіють зразу у пекарні, щоб вони не погіршилися, коли чекають у торговому автоматі).
  • У верхній лівій шухляді столу ховається Double Stuf Oreos для особливих випадків.
  • Під Oreos є шаблон блок-схеми, залишений попереднім мешканцем офісу. (Справжні програмісти пишуть програми, а не документацію. Залиште це людям з обслуговування.)

Справжній програміст здатний працювати 30, 40 і навіть 50 годин поспіль під сильним тиском. Насправді він вважає за краще саме так. Поганий час відповіді не турбує справжнього програміста — він дає йому можливість трохи поспати між компіляціями. Якщо у справжнього програміста недостатньо напруженого графіка, він, як правило, ускладнює завдання, працюючи над якоюсь невеликою, але цікавою частиною проблеми протягом перших дев’яти тижнів, а потім завершуючи решту протягом останнього тижня, через два-три 50-годинні марафони. Це не лише справляє враження на його менеджера, який зневірився коли-небудь виконати проект вчасно, але й створює зручне виправдання для того, щоб не виконувати документацію. В загальному:

  • Жоден справжній програміст не працює з 9 до 5. (Якщо це не 9 вечора до 5 ранку.)
  • Справжні програмісти не носять краваток.
  • Справжні програмісти не носять взуття на високих підборах.
  • Справжні програмісти приходять на роботу вчасно до обіду.
  • Справжній програміст може знати, а може і не знати імені своєї дружини. Однак він знає всю кодову таблицю ASCII (або EBCDIC).
  • Справжні програмісти не вміють готувати. Продуктові магазини нечасто працюють о 3 годині ночі, тож вони виживають на Твінкі та каві.

Майбутнє

Що з майбутнього? Справжніх програмістів викликає певне занепокоєння те, що останнє покоління програмістів не виховується з такими ж поглядами на життя, як їхні старші. Багато з них ніколи не бачили комп'ютера з передньою панеллю. Навряд чи хтось із тих, хто сьогодні закінчує школу, може виконувати шістнадцяткову арифметику без калькулятора. Випускники коледжу в наші дні є м’якими – захищені від реалій програмування відладчиками вихідного рівня, текстовими редакторами, які підраховують дужки, і зручними операційними системами. Найгірше те, що деякі з цих імовірних комп’ютерників встигають отримати дипломи, навіть не вивчивши Фортран! Чи судилося нам стати індустрією Unix-хакерів і програмістів на Паскаль?

Навпаки. Зі свого досвіду я можу лише повідомити, що майбутнє світле для справжніх програмістів повсюди. Ні OS/370, ні Фортран не виявляють жодних ознак відмирання, незважаючи на всі зусилля програмістів на Паскаль у всьому світі. Навіть більш витончені хитрощі, як-от додавання конструкцій структурованого кодування до Фортран, зазнали невдачі. Звісно, деякі постачальники комп’ютерів випустили компілятори Фортран 77, але кожен із них має спосіб перетворити себе назад у компілятор Фортран 66 за допомогою додаткової карти – для компіляції циклів DO, як Бог задумав їх.

Навіть Unix може бути не таким поганим для справжніх програмістів, як колись. Остання версія Unix має потенціал операційної системи, гідної будь-якого справжнього програміста. Він має два різних і дещо несумісних інтерфейси користувача, таємничий і складний термінальний драйвер, віртуальну пам’ять. Якщо ігнорувати той факт, що він структурований, навіть програмування на C може оцінити справжній програміст: зрештою, немає перевірки типів, імена змінних складаються з семи (десяти? восьми?) символів, а додатковий бонус типу даних “вказівник” це як мати найкращі частини Фортран і мови асемблера в одному місці. (Не кажучи вже про деякі більш творчі способи використання #define.)

Ні, майбутнє не таке вже й погане. Чому за останні кілька років популярна преса навіть коментувала яскраву нову групу комп’ютерних ботанів і хакерів, які залишають такі місця, як Стенфорд і M.I.T., виходячи у реальний світ. Судячи з усіх доказів, дух справжнього програмування живе в цих молодих чоловіках і жінках. Поки існують погано визначені цілі, химерні помилки та нереалістичні графіки, будуть справжні програмісти, які готові взятися та вирішити проблему, залишаючи документацію на потім. Хай живе Фортран!


Переклад: Сергій Вакуленко - Campbell, California

text/real-programmers-ukrainian.txt · Last modified: 2023/03/12 23:46 by vak

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki