Виновен демон

Програмирането е гадно

Тези от моите приятели, които трябва да вдигат нещата по-тежки от лаптоп на работа и по-често от два пъти седмично, веднъж се възползваха от възможността и вмъкнаха в разговор нещо от рода на: „Брат (това задължително започна с„ Брат “), ти не си напрегнати на работа. Току-що работех по 4700 часа на седмица, копаейки тунел под Мордор с отвертка. "

В някои отношения те са прави. Мордор е гадно и очевидно са необходими много повече физически усилия, за да се изкопае тунел, отколкото да се натискат клавиши. Разбира се, ако не сте мравка. Но за да обсъдим, нека всички се съгласим, че стресът и лудостта не са много полезни неща, нали? Отлично! Добре дошли в програмирането.

Всички екипи по програмиране са създадени от психо и се състоят от психо

Представете си да се присъедините към екип от инженери. Вие сте затрупани с нови идеи, току-що сте завършили колеж, а светът за вас се състои от чисто красиви неща, перфектни в тяхната хармония на цел, икономичност и сила. Започвате с среща с Мери, ръководител на проект за мост в мегаполис. Мери ви запознава с Фред, но само след като сте преминали през петнадесет проверки за сигурност, които Дейв е поставил, защото пуловерът на Дейв е бил издърпан веднъж от масата и следователно „Никога повече“. Фред работи само с дърво, така че веднага се чудите какво точно прави Фред по проекта. В действителност, в час пик, трафик, пълен с коли, пълни със смъртни хора, ще се втурва през този мост през 70-метрова бездна над кипящата река.
„Не се притеснявайте - казва Мери, - Фред ще работи по тротоарите.
- Какви песни?
- Е, Фред току-що направи добра презентация защо са необходими песни. И на всичкото отгоре придават естетика на визията. Разбира се, те ще бъдат направени без парапети, защото имаме строго правило „без парапети“, въведено от Фил, а Фил дори не е инженер. Никой изобщо не е сигурен какво прави Фил, но работата му явно е изпълнена със синергия и има нещо общо с висшия мениджмънт, с когото никой от инженерите не иска да участва. Така че нека Фил прави каквото иска. Междувременно Сара е открила няколко иновативни технологии за настилка и ги е вградила дълбоко в дизайна на моста, така че трябва да вземете предвид всяка една, тъй като всички те имат различни изисквания за поддръжка и безопасност. Том и Хари работят заедно от много години, въпреки че водят непрекъснат дебат за това коя система от мерки е по-добра - метрична или имперска. Спорът се решава на принципа „кой какво стига пръв“. Това вече е толкова досадно за всички, които в действителност сглобяват конструкцията, че плюят по всичко и с помощта на чук, пила и заваръчна машина настройват онези части, които по някакъв начин пасват. Освен това, според проекта, той трябва да е въжен мост, но никой не разбира напълно как се изграждат кабелни мостове, затова го направихме наполовина и след това го подкрепихме с колони, за да не падне. Но окачващите кабели все още бяха оставени, защото поддържат някои части на моста. Никой не знае точно кои, но всички са сигурни, че са много важни.

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

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

Всеки код е лош

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

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

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

Има една теория, която твърди, че всичко това може да бъде излекувано, ако се спазват стандартите. Проблемът е, че има повече „стандарти“ от нещата, които компютърът може да направи. В същото време всеки стандарт се подобрява по различни начини и се приспособява към личните нужди на хората, които го пишат. Така че няма нито една програма, която да влезе в реалния свят, без да прави едни и същи неща, използвайки няколко десетки различни, дори много различни методи.

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

Винаги ще има тъмнина

Като дете в спалнята ми имаше килер. Имаше странна форма. На пръв поглед всичко изглеждаше нормално, но когато се заехте с бизнеса си, забелязахте, че в стената вдясно има ниша, която може да се използва като малък рафт. След това надникнахте в дълбините и забелязахте, че клон напуска задната стена на нишата, създавайки проход в абсолютна празнота, където не прониква нито един лъч светлина. Веднага я познахте - това е мястото, където всички онези гладни чудовища, които прогонвате всяка вечер с фенерчета и плюшени играчки, се оттеглят.

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

Да предположим, че сте редовен уеб разработчик. Знаете десетина езици за програмиране, куп полезни библиотеки, стандарти, протоколи, какво друго има. Все още трябва да научите нещо ново поне веднъж седмично. Като се има предвид това, трябва да запомните да проверите всички стотици неща, които вече знаете. Изведнъж има нещо актуализирано или счупено. И се уверете, че те продължават да работят заедно и че никой не е отстранил тази грешка в някоя от тях, че сте правили нещо, което сте смятали за страхотно един уикенд, докато сте били пияни. Актуализирали ли сте всичко? Отлично! И тогава изведнъж всичко се разваля.

- Какво по дяволите? - казвате на глас и започвате да търсите проблем. Откривате, че преди време някакъв идиот е решил, че тъй като друг идиот е решил, че 1/0 трябва да се равнява на безкрайност, той може да използва това като съкращение на термина „Безкрайност“ и да опрости кода си. Тогава дойде неидиот и с основание реши, че е някак идиотско, както би трябвало да мисли първоначалният идиот, но тъй като той не се замисли, неидиотът реши да стане козел и промени поведението си до критична грешка в новия си компилатор. Тогава той реши, че няма да казва на никого, че това е грешка (той е козел) и сега всичките ви снежинки миришат на урина и дори не можете да намерите котка.

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

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

Много работа е свършена в Интернет, но Интернет все още е ад.

Не забравяйте този фрагмент за хора и лош код? Интернет е същият, само милиард пъти по-лош. Уебсайтовете (които по същество представляват извънгабаритни колички за пазаруване с максимум три динамични страници) се поддържат от екипи от хора денонощно, защото истината е, че нещо се чупи по всяко време и навсякъде, за всички. В момента определен служител на Facebook получава десетки хиляди съобщения за грешка и стърчи с език, опитвайки се да реши проблема, преди цялата система да отиде по дяволите. В офиса на Google има екип, който не е спал от три дни. Някъде другаде програмист на база данни седи заобиколен от празни консерви на Mountain Dew, а съпругът й смята, че тя вече е мъртва. И ако тези хора спрат, светът ще изгори в пламъци. Повечето хора нямат представа какво правят сисадмините, но повярвайте ми, ако всички те решат да вземат почивка за обяд едновременно, дори няма да стигнат до пицарията и ще останете без патрони за стрелба обратно към бандите. бездомни мутанти, които търсят вашата консерва.

В интернет често се казва: „Вижте, това нещо работи. Понякога. Ако технологията се прилага правилно ”. Фигак! Сега е част от интернет. Всеки, който има няколкостотин долара в джоба си и компютър, може да открадне парче от интернет, да натъпка в него всякакви кошмарни кодови фрагменти и след това да прикрепи своето малко парче към куп големи парчета и нещата ще се влошат малко. Дори добрите програмисти забравят да четат мистериозни спецификации, защото хората, които са ги писали, са били наети да създават еднорози. Така че всеки прекарва половината време в борба с факта, че нищо не е съвместимо с нищо или изобщо има смисъл и може да се счупи всеки момент, а ние просто се опитваме да го прикрием и се надяваме, че никой не забелязва.

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

По природа не сме луди, но в този процес сме полудели

Смешно, а? Какво ще кажете за този диалог:

- Нарича се arrayReverse?
- s/камила/_/
- Готино, благодаря.

Е, помогна ли този човек? Е, този с камилата? Това звучи ли като смислен отговор? Не? Отлично. Все още можете да намерите Господа. Все още не сте прекарали толкова време в четене на код, че сте започнали да го говорите. Човешкият мозък не е специално проектиран дори за основна логика и тук цялата кариера се състои в работа с много, много сложна логика. Трябва да развиете огромни вериги абстрактни събития и изисквания, за да намерите липсващата запетая в края. След цял работен ден изпадате в състояние на лека афазия - това е, когато погледнете лицата на хората, които говорят, и не разберете дали са приключили или не, защото не виждате точка и запетая. Потапяте се в свят на абсолютна безсмислие, където единственото, което има значение, е когато кратки набори от цифри навлизат в гигантски лабиринт от символи, а други набори от числа или снимка на коте изплуват от другия край на лабиринта.

Разрушителният ефект върху мозъка може да бъде ясно илюстриран от компютърните езици, които хората измислят. Ето програмата:

Прави точно същото нещо като тази програма:

И тази програма:

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

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

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