asm32.info
Keep it simple — code in asm

Това е втората ми редакция на превода на книгата на Джофри Джеймс "The Tao of the programming".

Книгата е написана през 1987-ма година и макар и хумористична по формата си, съдържа сериозни послания за хакерската култура и ценности.

Книгата е много популярна в Интернет, преведена е на десетки езици и по същността си отдавна се е превърнала във фолклор, а оригиналния автор често не се помни.

Първият вариант на този превод беше направен именно по такъв превод, намерен в Мрежата на Руски език и в съвършено разбъркано състояние.

Сегашната втора редакция е базирана едновременно на оригиналния текст на Джофри Джеймс и на руския превод. Структурата на произведението е приведена към оригиналната.

Внимателното четене на тази книга помага за подобряване на програмистките умения и значително повишава качеството на софтуера, написан от програмистите.

Приятно четене.

Даото на програмирането

Автор:

©1987 Geoffrey James

Превод на български:

©2016 John Found

1. Тихото отсъствие

Казано от майстор

Когато се научиш да измъкваш кода на грешката от трап фрейма, тогава е момента да си тръгнеш.

1.1

Нещо тайнствено прие форма, роди се в пълната пустота. И съществува самотно и бездвижно, ту замирайки, ту намирайки се в постоянно движение.

Това е източникът на всички програми. Не зная името му и ще го наричам "Дао на програмирането".

Ако присъствието на Дао е голямо, тогава и операционната система е добра. Ако операционната система е добра, то и компилатора е добър. Ако компилатора е добър, тогава и приложенията са добри. Потребителят е доволен и в света цари хармония.

Даото на програмирането отплава в далечината и се завръща в утринния вятър.

1.2

Дао роди машинният език. Машинният език роди асемблера.

Асемблерът даде живот на компилатора. Сега има десет хиляди езика.

Всеки език си има своето предназначение, понякога скромно. Всеки език изразява Ин и Ян на програмите. Всеки език има своето място в Дао.

Нo не програмирайте на COBOL, ако можете да го избегнете.

1.3

В началото беше Дао. Дао породи Пространството и Времето. Затова, Пространството и Времето са Ин и Ян на програмирането.

На програмистите, които не разбират Дао, никога не им стига времето и мястото за техните програми. На програмистите, които разбират Дао, винаги им стига времето и мястото за да постигнат целите си.

Нима би могло да е иначе?

1.4

Мъдрият програмист говори за Дао и го следва. Средният програмист говори за Дао и го търси. Глупавият програмист говори за Дао и му се смее.

Ако нямаше причина за смях, то нямаше да има и Дао.

Високите звуци са сложни за възприятие.

Движението напред е път към отстъпление.

Големият талант се проявява късно.

Даже съвършената програма има бъгове.

2. Древните майстори

Казано от майстор

След три дни без програмиране, живота става безсмислен.

2.1

Програмистите от стари времена са били загадъчни и дълбоки. Ние не можем да постигнем мислите им и всичко, което можем е, да ги опишем.

Нащрек, като лисица, преплаваща река. Бдителни, като генерал на бойното поле. Добри, като стопанка приемаща гости. Прости, като необработен дървен къс. Непроницаеми, като черните езера в най-дълбоките пещери.

Кой ще разкрие тайните на техните сърца и разум?

Отговорът съществува само в Дао.

2.2

На великият майстор Тюринг, веднъж му се присънило, че е машина. Когато се събудил, той възкликнал:

"Не зная дали аз съм Тюринг, на когото се е присънило, че е машина, или съм машина на която се е присънило, че е Тюринг!"

2.3

Програмист от много голяма компютърна фирма, заминал на софтуерна конференция. Когато се върнал, отчитайки се пред началника си казал:

– Какви са тези програмисти, които работят в другите фирми? Държаха се зле и не им пукаше за докладите им. Косите им бяха дълги и рошави, дрехите им, измачкани и стари. Те устроиха погром в хотелските стаи и невъзпитано шумяха по време на презентацията ми.

Началникът казал:

– Повече никога няма да те пратя на тази конференция. Тези програмисти живеят извън пределите на материалният свят. Те смятат живота за абсурдна, нелепа случайност. Те пристигат и си тръгват без да признават граници. Без грижи, те живеят само за своите програми. Защо им трябва да се придържат към обществените норми? Те живеят с Дао.

2.4

Новак попитал своят Учител:

– Има един програмист, който никога не проектира, не тества и не документира програмите си. Но всички които го познават, смятат че той е един от най-добрите програмисти в света. Как става така?

Учителят казал:

– Този програмист е овладял Дао. Той не се нуждае повече от проектиране; той не се ядосва, когато системата увисва, но приема мирозданието без раздразнение. Той отдавна не се нуждае от документация; той вече не се притеснява, че някой може да види кода му. Той вече не се нуждае от тестване; всяка негова програма е съвършена сама по себе си, ясна и елегантна, предназначението ѝ е очевидно. Той наистина е проникнал в тайната на Дао!

3. Проектиране

Казано от майстор

Когато програмата се тества е твърде късно за промени в дизайна.

3.1

Веднъж един човек отишъл на компютърна изложба. Всеки ден, когато влизал, човекът казвал на пазача:

– Аз съм велик крадец, прославен със своите подвизи. Предупреждавам ви, че и тази изложба няма да остане неограбена.

Тези думи силно обезпокоили пазача, защото вътре имало изложено компютърно оборудване за милиони долари и той внимателно проследил този човек. Но човекът просто се разхождал от павилион в павилион, тихичко тананикайки си нещо под нос.

Когато си тръгвал, пазача го отвел настрани и го претърсил отгоре до долу, но не намерил нищо.

На следващият ден, човекът се върнал и упрекнал пазача:

– Аз си тръгнах с огромна плячка вчера, но днес ще бъде още по-добре.

И пазача го следил през деня още по-внимателно, но без никаква полза.

В последният ден на изложбата, пазача не могъл да сдържи любопитството си:

– Сър Крадецо! – казал той – Аз съм объркан и не мога да се успокоя! Моля Ви, просветете ме. Какво крадете?

Човекът се разсмял.

– Крада идеи – казал той.

3.2

Имало едно време майстор програмист, който пишел неструктурирани програми.

Един начинаещ програмист, опитвайки се да му подражава, също започнал да пише неструктурирани програми.

Когато, начинаещият помолил майстора да оцени програмите му, той го разкритикувал, че пише неструктурирани програми, като казал:

– Това, което е подходящо за майстора, не подхожда на начинаещия. Ти трябва първо да разбереш Дао, преди да престъпиш през структурата.

3.3

Имало някога програмист, от свитата на княз Ву. Князът попитал програмиста:

– Кое е по-лесно да се напише: счетоводна програма или операционна система?

– Операционна система – отвърнал програмистът.

Князът издал недоверчиво възклицание:

– Без съмнение, счетоводната програма е тривиална в сравнение със сложността на операционната система – казал той.

– Не съвсем. – казал програмистът. – Когато се пише счетоводна програма, програмистът играе ролята на посредник между хора имащи различни идеи по повод на това, как трябва да работи програмата, как трябва да се съставят отчетите и как всичко това се отнася към данъчното законодателство. Напротив, операционната система не е ограничена от външните му представи. Когато пише операционна система, програмистът търси най-краткият път към хармонията между машина и идеи. Ето защо да се напише операционна система е по-просто.

Княз Ву кимнал и се разсмял:

– Всичко това е чудесно и правилно, но кое е по-просто да се дебъгва?

Програмистът не отговорил.

3.4

Един мениджър отишъл при майстор програмист и му показал заданието за нова програма. Мениджърът попитал майстора:

– Колко време ще отнеме създаването на тази система ако дам този проект на петима програмиста?

– Ще отнеме година – веднага казал майсторът.

– Но тази система ни трябва веднага или колкото се може по-рано! Колко време ще отнеме, ако ангажирам десет програмиста?

Майсторът се намръщил леко:

– В такъв случай ще трябват две години.

– Ами ако поръчам това на сто програмиста?

Майсторът повдигнал рамене:

– Тогава проекта никога няма да бъде завършен – казал той.

4. Кодинг

Казано от майстор

Добре написаната програма е рай; Лошо написаната програма е ад.

4.1

Програмата трябва да е лека и грациозна, подпрограмите и съединени като наниз перли. Духът и предназначението на програмата трябва да са кристално ясни. Тя не трябва да е нито много малка, нито много голяма, без никакви безполезни цикли или неизползвани променливи, да не и липсва структура, но и да не е излишно твърда.

Програмата трябва да следва "Законът за най-малкото учудване". Що за закон е това? Това е, когато програмата реагира на потребителя по начин, който го учудва най-малко.

Програмата, независимо колко е сложна, трябва да действа като едно цяло. Програмата трябва да се управлява от вътрешната си логика повече, отколкото от външните обстоятелства.

Ако програмата не удовлетворява тези условия, тя ще бъде в състояние на дисонанс и объркване. Единственият начин да се поправи това е, програмата да се пренапише на чисто.

4.2

Новак попитал Майстор програмист:

– Аз написах програма, която понякога работи, а понякога гърми. Следвах всички правила за програмиране и сега съм в задънена улица. Каква е причината за това?

Майсторът отвърнал:

– Ти си се объркал, защото не разбираш Дао. Само глупакът очаква разумно поведение от околните хора. А защо ти го очакваш от машината, която е конструирана от хора? Компютрите имитират детерминизъм, само Дао е съвършенно.

– Правилата за програмиране са преходни, само Дао е вечно. Следователно ти трябва да съзерцаваш Дао дотогава, докато не получиш просветление.

– Но как да разбера, че съм получил просветление? – попитал новакът.

– Тогава, програмата ти ще работи правилно – отговорил майсторът.

4.3

Майстор обяснявал природата на Дао на един от новаците.

– Дао е въплътено във всяка програма – независимо колко незначителна – казал майсторът.

– Има ли Дао в джобният калкулатор? – попитал начинаещият.

– Има! – последвал отговорът.

– Има ли Дао в игрите? – продължавал новакът.

– Него го има дори и в игрите – казал майсторът.

– А има ли Дао в Windows?

Майсторът се закашлял и меко променил позицията си:

– За днес урокът привърши – казал той.

4.4

Един от програмистите на принц Ванг пишел програма. Пръстите му танцували над клавиатурата. Програмата се компилирала без съобщения за грешки и работела като нежен повей на вятъра.

– Прекрасно! – възкликнал принца – Твоята техника е безпогрешна!

– Техника ли? – казал програмистът, обръщайки се от терминала. – Това, което аз следвам е Дао – извън всякакви техники. Когато започвах да програмирам, си представях цялата програма, като едно цяло. След три години, повече не виждах цялото. Вместо това започнах да използвам подпрограми. Но сега аз не виждам нищо. Целият съществувам в безформената пустота. Моите чувства бездействат. Духът ми е свободен и работи без план, подчинявайки се само на собствените си инстинкти. Накратко казано, моята програма се пише сама. Наистина, понякога възникват сложни проблеми. Аз виждам как се появяват, забавям, тихо гледам. След това променям един ред от кода и сложностите изчезват, като кълбо дим. След това компилирам програмата. Стоя неподвижно и оставям радостта от работата да запълни битието ми. За миг затварям очи и се изключвам от системата.

Принц Ванг казал:

– Ех, ако всичките ми програмисти бяха толкова мъдри!

5. Поддръжка

Казано от майстор

Дори програмата да е дълга три реда, някой ден ще трябва да се поддържа.

5.1

Често използваната врата не се нуждае от смазване.

Бързо течащият поток не ще се превърне в блато.

Нито звуците, нито мислите преминават през вакуум.

Ако програмата не се използва, тя гние.

Това са велики тайни.

5.2

Веднъж началник попитал програмист, колко време му трябва, за да завърши програмата, върху която работи в момента.

– Ще завърша утре! – веднага отговорил програмиста.

– Мисля, че това не е реалистично – казал началника – Честно кажете, колко време ще отнеме?

Програмистът помислил малко и казал:

– Ами всъщност, иска ми се да добавя още някои възможности и да изчистя малко кода. Ще ми трябват поне две седмици.

– Даже така е твърде оптимистично – настоял началника – Просто ми кажи когато програмата е готова.

– Да, разбира се! – казал програмиста.

След няколко години, началникът се пенсионирал. Когато отивал на своя прощален обяд, той видял, че програмиста е заспал с глава на клавиатурата. Бил програмирал цяла нощ.

5.3

Веднъж, на начинаещ програмист поръчали да напише код за прост финансов пакет.

Начинаещият работил неистово в продължение на много дни, но когато учителят му прегледал програмата, той открил, че тя съдържа екранен редактор, набор от обобщени графични подпрограми и интерфейс с изкуствен интелект, но няма нищо приличащо на финансови разчети.

Когато попитал за това, новакът възнегодувал:

– Не бъдете толкова нетърпелив – казал той – ще добавя и финансовата част рано или късно.

5.4

Може ли селянинът да пренебрегне посевите, които е посял?

Може ли учителят да не забележи дори най-скромният си ученик?

Може ли добрият баща да позволи да гладува детето му?

Може ли добрият програмист да откаже да поддържа своя код?

6. Мениджмънт

Казано от майстор

Нека програмистите да са много, а мениджърите малко – тогава всички ще са продуктивни.

6.1

Когато началниците провеждат безкрайни съвещания, програмистите пишат игрички. Когато счетоводителите говорят за доходите за тримесечието, бюджета за разработки ще бъде орязан. Когато старшите разработчици броят гаргите – облаците се сгъстяват.

Повярвайте, това не е Дао на програмирането.

Когато началниците поемат задължения, игрите са забравени. Когато счетоводителите планират дългосрочно, хармонията и реда са почти възстановени. Когато разработчиците са заети с текущи проблеми, проблемите скоро ще се решат.

Повярвайте, това е Дао на програмирането.

6.2

Защо програмистите не са продуктивни? Защото времето им се губи по заседания.

Защо програмистите са метежни? Защото мениджмънта много пречи.

Защо програмистите си тръгват един след друг? Защото прегарят.

Работейки за лош мениджмънт, те не ценят повече своята работа.

6.3

Един началник бил пред уволнение, но програмист, който работел за него написал програма, която станала популярна и се продавала добре. В резултат от това, началника си запазил работата.

За благодарност началникът предложил на програмиста да му даде премия, но програмиста отказал с думите:

– Написах програмата, защото си помислих, че това ще бъде интересна концепция и не очаквам за това награда.

Като чул това, началника си казал: "Този програмист, макар и на ниска длъжност, добре разбира задълженията си на служител. Ще го повишим до по-висока длъжност – консултант по управлението."

Но когато го предложил, програмиста отказал отново с думите:

– Аз съществувам за да програмирам. Ако ме повишите, няма да правя нищо, а само ще губя времето на хората. Мога ли да си вървя? Пиша сега една програма.

6.4

Началник отишъл при подчинените му програмисти и им казал:

– В съответствие с работното ви време, трябва да идвате на работа в девет сутринта и да си тръгвате в пет следобед.

Програмистите много се ядосали и някои от тях веднага поискали да напуснат.

Тогава началникът казал:

– Добре, в такъв случай, можете сами да си сложите работното време. Само проектите трябва да са готови в срок.

Програмистите си тръгнали доволни и започнали да идват по обяд и да работят до късно след полунощ.

7. Корпоративна мъдрост

Казано от майстор

Можеш да демонстрираш програмата пред директора, но не можеш да го направиш компютърно грамотен.

7.1

Новак попитал майстор:

– На изток има огромна дървовидна структура, която хората наричат "Щаб-квартира на корпорацията". Тя е подпухнала от вицепрезиденти и счетоводители. Постоянно спуска множество указания, всяко от които казва: "Върви натам!" или "Ела насам!" и никой не знае какво значи това. Всяка година на разклоненията ѝ се появяват нови имена и винаги без всякаква полза. Как може такава неестествена същност да съществува?

Майсторът отговорил:

– Ти си видял тази необятна структура и си обезпокоен то това, че тя няма рационално предназначение. Нима не те забавлява безкрайното и въртене? Нима не се наслаждаваш на непомрачената от проблеми лекота, с която се програмира в сянката на нейните клони? Защо те дразни нейната безполезност?

7.2

На изток има акула, която е по-голяма от всички останали риби. Тя се превръща в птица, чийто криле, като облаци закриват небето. Когато тази птица пресича земята, тя донася съобщение от Щаб-квартирата на корпорацията. Тя хвърля това съобщение сред програмистите, както чайка оставя следи на плажа. След това, птицата се въздига по вятъра и се прибира у дома, а зад нея небето отново е ясно.

Новакът програмист с удивление гледа птицата, защото не разбира какво означава това.

Средният програмист се страхува от идването на птицата, защото го плаши нейното съобщение.

Майсторът програмист продължава да работи на терминала си, защото не е забелязал нито пристигането, нито отлитането на птицата.

7.3

Вълшебникът от Кулата от Слонова Кост донесе своето последно изобретение при майстора програмист за тест.

Вълшебникът домъкна голяма черна кутия в офиса на майстора, а майсторът го чакаше мълчаливо.

– Това е интегрирана, разпределена работна станция с общо предназначение – започна Вълшебника – ергономично проектирана, с проприетарна операционна система, езици за програмиране от шесто поколение и най-съвременен потребителски интерфейс. За създаването и, моите помощници изразходваха няколко стотин човеко-години. Нима не е изумителна?

Майсторът леко повдигна вежди:

– Това наистина е изумително – каза той.

– От щаб-квартирата на корпорацията постъпи указание – продължи Вълшебникът – всеки трябва да използва тази система като платформа за новите си програми. Съгласен ли си с това?

– Разбира се – каза майсторът – Веднага ще я изпратя в изчислителния център!

И Вълшебникът се върна в своята кула доволен.

– След няколко дни, новак програмист влезе в офиса на майстора и каза:

– Не мога да намеря разпечатката на новата си програма. Не знаете ли вие къде може да е?

– Да – отговори майсторът. – Разпечатките на програмите вече се трупат върху новата платформа в изчислителния център.

7.4

Майсторът програмист се движи от проект в проект без страх. Никакви изменения в мениджмънта няма да му навредят. Няма да го уволнят, даже ако закрият проекта. Защо става така? Той е изпълнен с Дао.

8. Хардуер и Софтуер

Казано от майстор

Без вятър, тревата е неподвижна. Без софтуер, хардуерът е безполезен.

8.1

Новак попитал майстор програмист:

– Забелязах, че една от компютърните корпорации е доста по-голяма от всички останали. Тя се възвишава над конкурентите си, като великан над джуджета. Всеки неин отдел обхваща цял отрасъл. Защо е така?

Майсторът отвърнал:

– Защо задаваш тъпи въпроси? Тази корпорация е толкова голяма, защото не може да бъде друга. Ако произвеждаше само компютри, никой нямаше да ги купува. Ако разработваше само софтуер, хората щяха да я възприемат като слуга. Но тъй като тя съчетава и двете неща, хората мислят, че те са богове! И без да полага усилия, тя лесно побеждава.

8.2

Майстор програмист инспектирал нов програмист. Един път майсторът видял, че новака увлечено играе на джобна електронна игра.

– Извинявай, – казал той – може ли да погледна?

Новакът се откъснал от играта и я подал на майсторът.

– Виждам, че това устройство предлага три нива на игра: Лесен, Среден и Сложен – казал майсторът. – Обаче, всяко такова устройство има допълнително ниво на играта, когато играта не може да победи човека, но и не се оставя да бъде победена.

– Моля Ви, Учителю! – промълвил начинаещият. – Как да намеря тези тайни настройки?

Майсторът хвърлил играта на пода и я стъпкал с крак.

Внезапно новакът получил просветление.

8.3

Имало някога програмист, който работел с микропроцесори.

– Виж колко ми е хубаво тук – казал той на програмиста на мейнфрейми, който му дошъл на гости. – Имам си собствена операционна система и дисково устройство. С никой не трябва да деля своите ресурси. Програмите са самодостатъчни и лесни за ползване. Защо не се махнеш от сегашната си работа и не дойдеш да работим заедно?

Тогава програмистът на мейнфрейми започнал да описва своята система, като казал:

– Мейнфреймът стои в изчислителният център като древен мъдрец, потънал в медитация. Дисковите му устройства са се разгърнали от край до край като огромен електронен океан. Програмното осигуряване е многостранно като брилянт и преплетено като първобитна джунгла. Програмите, всяка от тях уникална, се движат през системата като бързотечна река. Ето защо съм щастлив там където съм.

Програмистът на микрокомпютри, като чул това, замълчал за дълго. Но двамата програмисти си останали приятели до края на дните си.

8.4

Срещнали се Желязото и Програмата на пътя за Чанг Це. Програмата казала:

– Ти си Ин, а аз съм Ян. Ако пътешестваме заедно, ще станем знаменити и ще спечелим богатство.

И така продължили заедно, с намерението да завоюват света.

И не щеш ли, срещнали Фърмуер, който бил облечен в изпокъсани парцали и куцал покрай пътя, подпирайки се на чепата тояга.

Фърмуер им казал:

– Дао е отвъд Ин и Ян. То е тихо и спокойно като езеро. То не търси слава, затова никой не усеща присъствието му. То не търси успех, защото си е самодостатъчно. То съществува извън пространството и времето.

Желязото и Програмата засрамени се върнали по домовете си.

9. Епилог

Казано от майстор

Време е да си ходиш.

Last modified on: 19.01.2017 09:52:15

Preview

Comments

Title: Filename: