Monthly Archives: Лютий 2012

Археологія в програмуванні. Міждисциплінарне есе

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

Але спочатку цікавий факт: Археологи припускають що довжина сторони основи піраміди Хеопса була a = 230.33 (поки не стерлася), а її висота h = 146.6.

Любителі арифметики порахували, що
\displaystyle 2\frac{a}{h} \approx 3.142291950886767 \approx \pi

І от, якби вони були програмістами, в них виникло б питання:
“Ну і чого це Єгиптяни захотіли саме такі розміри?”,
“Що, число пі допомагає фараону краще сохнути?”,
“А що буде якщо збудувати вищу піраміду?”

І подібні. Взагалі то, поговоривши з архітектором можна було б вияснити чи було серед вимог до піраміди “вона повинна сушити мумії”, і якими архітектурними рішеннями він цього добився. Але про нього відомо лише що його звали

Хеміун

Хеміун

і що він мертвий. Правда ймовірно якась документація коло піраміди, або в самій піраміді залишилась. Якщо звісно її не полінувались перенести з папірусу на камінь.

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

Звісно, в айтішній археології використовуються зовсім інші інструменти, і результати теж виглядають по-іншому.

Наприклад ось збережені письмові свідчення про те хто писав реалізацію мови Python (cpython), і що він про це думав 14 травня 91 року:

         guido Sun May 05 20:09:44 1991 +0000: /* Long (arbitrary precision) integer object implementation */
         guido Tue May 14 12:06:49 1991 +0000: /* XXX The functional organization of this file is terrible */
         guido Fri May 02 03:12:38 1997 +0000: #include "Python.h"

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

Які якості повинен мати програміст археолог? Ну, по перше – терпіння. Його робота не така приємна як в архітектора, бо доводиться зустрічатись сам на сам з ідеями іншої людини, яка може виражати їх занадто по-іншому, бо належить до іншої культури, користується іншою мовою. Та не мені вам розказувати чому люди різні.

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

Так от, я про те, що якщо вже доля змушує бути археологом, то постарайтесь тримати мозок відкритим, а кругозір широким. Навчіться читати деванагарі в кінці-кінців. :) Он деякі мої знайомі окрім того що вчили Рубі, почали вчити ще японську. Думаєте це просто так?

І хоча терпіння потрібне, толерантність необов’язкова. Якщо вам від того полегшає, можете скільки завгодно матюкати індійських архітекторів. Чи кого ви там читаєте.

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

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

Також арехологу потрібно мати гарну короткотермінову пам’ять. Багато програмістів (з книжки Coders at work) кажуть що чим гірша короткотермінова пам’ять в програміста, тим менш заплутаний код він пише. Це стосується архітектора. Археолог навпаки – чим більше зможе охопити в пам’яті за раз, тим швидше він зможе зрозуміти задум архітектора.

Ну, і окрім гарної пам’яті, археологу потрібні гарні інструменти.

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

Є популярний аргумент проти ефективних редакторів коду (від людей які так і не подолали поріг входження), що думає програміст 90% часу, а набирає код – 10%, тому його ефективність залежить від його голови, а не від редактора. Цифри можуть бути навіть заменшені, але можна привести контраргумент – зручніше думати пролітаючи в редакторі крізь 5 рівнів абстракції за секунду, і не думаючи про те чи ти натискаєш C-], чи n.

Посилання

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

Filed under: Кодерство Tagged: розробка