
Tłumaczenie https://www.stilldrinking.org/programming-sucks. Dostosowane do polskich realiów. Starałem się zachować jak najwięcej z oryginału, wprowadzając zmiany tam gdzie uznałem, że lepiej oddadzą istotę tekstu i będą bardziej czytelne dla polskich odbiorców. I tak użyłem też AI (Claude Sonnet 5 Medium) bo mam milion innych rzeczy do zrobienia, urlop i zimne Karlovačko do wypicia. Jednocześnie zrobiłem co mogłem żeby tekst był wiernie przetłumaczony (a licencjat z anglistyki jednak do czegoś zobowiązuje).
Napisane 27 kwietnia 2014, o 12:52. Była niedziela.
Każdy mój znajomy, który w pracy musi czasem podnieść coś cięższego od laptopa — i to częściej niż raz na dwa tygodnie — prędzej czy później wciśnie w rozmowę coś w stylu: „Stary1, ty to nie masz pojęcia co to ciężka robota. Ja kopałem tunel pod Mordorem śrubokrętem, i to bez nadgodzin, przez 4700 godzin z rzędu.”
I mają rację. W Mordorze jest ciężko, i kopanie tunelu na pewno bardziej obciąża kręgosłup niż stukanie w klawiaturę — no chyba, że jesteś mrówką. Ale, czysto teoretycznie, czy możemy się zgodzić, że stres i szaleństwo też są czymś złym? Świetnie. Witamy w świecie programowania.
Każdy zespół programistów składa się z szaleńców i jest przez szaleńców zbudowany
Wyobraź sobie, że dołączasz do zespołu inżynierów. Jesteś pełen zapału i pomysłów, świeżo po studiach, gdzie żyłeś w świecie czystych, pięknych projektów, budzących zachwyt swoją estetyczną spójnością, ekonomią i wytrzymałością. Zaczynasz od poznania Marty, kierowniczki projektu mostu w dużym mieście. Marta przedstawia cię Frankowi, ale najpierw musisz przejść przez piętnaście kontroli bezpieczeństwa, które wprowadził Dawid, bo raz ktoś ukradł mu sweter z biurka i nigdy więcej nie możemy do tego dopuścić. Franek pracuje wyłącznie z drewnem, więc pytasz, co on tu robi, skoro most ma obsługiwać ruch samochodów pełnych śmiertelników w godzinach szczytu, nad dwustumetrową przepaścią z wartkim nurtem na dnie. Spokojnie, mówi Marta, Franek odpowiada za kładki dla pieszych. Jakie kładki? No, Franek świetnie uargumentował, że kładki podniosą atrakcyjność mostu. Oczywiście będą bez barierek, bo tak zarządził Filip, który nie jest inżynierem. Nikt tak naprawdę nie wie, czym Filip się zajmuje, ale na pewno chodzi o synergię i ma to coś wspólnego z zarządem, z którym żaden inżynier nie chce mieć do czynienia, więc po prostu dają Filipowi robić swoje. Sara tymczasem znalazła kilka najnowszych technologii układania nawierzchni i postanowiła wykorzystać je wszystkie w projekcie. więc w miarę postępu budowy będziesz musiał zastosować różne obejścia dla każdej z nich, bo każda wymaga innej konstrukcji nośnej. Janek i Franek pracują razem od lat, ale toczą wieczną wojnę o to, czy liczyć w metrach, czy w calach, i skończyło się na zasadzie „kto pierwszy dotarł do danego fragmentu projektu, ten narzuca jednostki”. Dla ekipy, która to wszystko fizycznie skręca, stało się to takim koszmarem, że w końcu się poddali i po prostu wciskają, wbijają albo spawają na siłę, cokolwiek akurat mają pod ręką. A, i most zaprojektowano jako wiszący, tylko że nikt tak naprawdę nie wiedział, jak się buduje most wiszący, więc w połowie budowy dostawili dodatkowe słupy podporowe, żeby całość się nie zawaliła — ale liny nośne zostawili, bo one wciąż jakoś podtrzymują część konstrukcji. Nikt nie wie którą, ale wszyscy są przekonani, że to ta ważna część. Po zakończeniu prezentacji zapraszają cię do dorzucenia własnych pomysłów, ale nie masz żadnych, bo jesteś inżynierem od napędów rakietowych i nie znasz się na mostach.
Przejechałbyś tym mostem? Nie. Gdyby taki most jakimś cudem powstał, wszyscy zamieszani w to ludzie poszliby pod ścianę na rozstrzelanie. A mimo to jakaś odmiana tej właśnie dynamiki miała miejsce przy pisaniu każdego programu, z którego kiedykolwiek korzystałeś — oprogramowanie bankowe, strony internetowe i pewien wszechobecny program, który miał chronić dane w internecie, a jednak tego nie robił.
Każdy kod jest chujowy
Każdy programista od czasu do czasu, kiedy nikogo nie ma w domu, gasi światło, nalewa sobie szkockiej, włącza jakąś spokojną rockową balladę i otwiera na komputerze pewien plik. Dla każdego programisty ten plik jest inny. Czasem sam go napisał, czasem tylko go znalazł i wiedział, że musi go zachować. Czyta linijkę po linijce i roni łzy nad ich pięknem, a potem łzy stają się gorzkie, bo przypomina sobie o wszystkich pozostałych plikach i o nieuchronnym upadku wszystkiego, co piękne i dobre na tym łez padole.
Ten plik to Piękny Kod. Ma sensowne, spójne nazwy funkcji i zmiennych. Jest zwięzły. Nie robi niczego jawnie głupiego. Nigdy nie musiał przetrwać w prawdziwym świecie ani odpowiadać przed działem sprzedaży. Robi dokładnie jedną, przyziemną, konkretną rzecz — i robi ją dobrze. Napisała go jedna osoba i nikt inny nigdy go nie tknął. Czyta się go jak wiersz napisany przez kogoś po trzydziestce.
Każdy programista zaczyna od napisania jednego takiego idealnego, unikalnego jak płatek śniegu kawałka kodu. Potem w piątek słyszy, że do wtorku musi mieć gotowych sześćset takich płatków, więc trochę kombinuje, kopiuje niektóre płatki i próbuje je skleić, albo prosi kolegę o pomoc, a ten roztapia płatek dotykiem, i w końcu wszystkie płatki wszystkich programistów lądują na jednej kupie w jakimś niezrozumiałym kształcie, a ktoś opiera o to Picassa, bo nikt nie chce patrzeć, jak kocie szczyny wsiąkają w zmiażdżone, topniejące w świetle dnia płatki śniegu. W kolejnym tygodniu wszyscy dorzucają na to więcej śniegu, żeby Picasso się nie przewrócił.
Istnieje teoria, że da się to zrobić po Bożemu, trzymając się standardów — tylko że „standardów” jest więcej niż rzeczy, które komputery w ogóle potrafią robić, a każdy z tych standardów jest na różne sposoby udoskonalany i psuty przez osobiste upodobania ludzi, którzy go implementują. Więc żaden kawałek kodu nigdy nie trafił do realnego świata bez wykonania kilkudziesięciu identycznych rzeczy na kilkadziesiąt zupełnie różnych sposobów. Pierwsze tygodnie w każdej nowej pracy to samo ogarnianie, jak działa dany program — nawet jeśli znasz każdy język, framework i standard, którego tam użyto — bo standardy to mityczne stworzenia.
Ciemność zawsze gdzieś tam czeka
Kiedy byłem dzieckiem, miałem w pokoju garderobę o dziwnej konstrukcji. Z zewnątrz wyglądała normalnie, ale gdy wchodziłeś do środka robić to, co tam się w garderobie robi, odkrywałeś, że ściana po prawej ma wnękę, tworzącą wygodną półeczkę. A kiedy spojrzałeś w górę, okazywało się, że wnęka nie kończy się sufitem — widać było tylko otchłań, gdzie nie docierało żadne światło, i w której, byłeś pewien, w ciągu dnia mieszkały wszystkie straszne potwory, które co noc trzymałeś na dystans latarką i pluszakami.
Podobnie jest z nauką programowania. Poznajesz swoje przydatne narzędzia, potem rozglądasz się wokół i odkrywasz, że tuż obok leżą kolejne, całkiem poręczne narzędzia — a one ukazują ci bezdenną grozę, która od zawsze czaiła się tuż przy twoim łóżku.
Weźmy na przykład przeciętnego programistę webowego. Zna kilkanaście języków programowania, mnóstwo przydatnych bibliotek, standardów, protokołów, co tam jeszcze. I tak musi się uczyć w tempie mniej więcej jednej nowej rzeczy na tydzień, do tego pamiętać, żeby sprawdzać setki rzeczy, które już zna, bo mogły zostać zaktualizowane albo się zepsuć, i upewniać się, że wszystkie nadal ze sobą współpracują, i że nikt nie naprawił buga, którego kiedyś pewnego weekendu po kilku głębszych wykorzystał do zrobienia czegoś, co wydawało mu się wtedy naprawdę kurwa sprytne. Ogarnął już wszystko, zależności i biblioteki zaktualizowane, super, spoko — i wtedy nagle wszystko zaczyna się pierdolić.
„Co jest, kurwa” — mówisz i zaczynasz szukać źródła problemu. Odkrywasz, że pewnego dnia jakiś idiota uznał, że skoro inny idiota wcześniej zdecydował, że 1/0 ma być równe nieskończoności, to można tego użyć jako skrótu na „Infinity” przy upraszczaniu kodu (żeby zaoszczędzić znaki, można podmienić „Infinity” na 1/0 — zawsze to pięć znaków mniej, no nie?). Potem jakiś nie-idiota słusznie uznał, że to totalny debilizm — co zresztą powinien wcześniej ustalić ten pierwszy idiota, tylko że tego nie zrobił — więc ów nie-idiota postanowił być dupkiem i w swoim nowym kompilatorze zrobił z tego błąd krytyczny. A potem postanowił nikomu o tym nie mówić, bo jest dupkiem, i teraz wszystkie twoje płatki śniegu to szczyny, a kota nawet nie widać.
Jesteś ekspertem od wszystkich tych technologii, i to dobrze, bo dzięki tej wiedzy szukanie problemu zajęło ci tylko sześć godzin, a nie kosztowało cię utraty pracy. Masz teraz jeden dodatkowy okruch wiedzy do dodania do kupki z milionem innych okruchów wiedzy, o których musisz pamiętać, bo tak wiele programów, od których jesteś zależny, napisali dupki i idioci.
I to tylko w twojej własnej, wąskiej dziedzinie, która stanowi tak niewielki ułamek wszystkiego, co można wiedzieć w informatyce, że równie dobrze mógłbyś nie wiedzieć nic. Nawet najstarsi górale nie mają pojęcia, jak dokładnie działa wszystko w twoim pięcioletnim laptopie. Dlaczego mówimy „wyłącz i włącz jeszcze raz”? Bo nie mamy zielonego pojęcia, co się zepsuło, a wprowadzenie komputera w śpiączkę i pozwolenie jego wbudowanej ekipie automatycznych lekarzy, żeby sami to ogarnęli, jest naprawdę proste. Jedyny powód, dla którego komputery programistów działają lepiej niż komputery zwykłych ludzi, jest taki, że my wiemy, że komputery to małe dzieci ze schizofrenią i chorobami autoimmunologicznymi — i nie bijemy ich, kiedy się źle zachowują.
Sporo tej roboty dzieje się w internecie, a internet to osobny, specjalny krąg piekieł
Pamiętasz to o szaleńcach i chujowym kodzie? Internet to dokładnie to samo, tylko dosłownie miliard razy gorsze. Strony, które są uwznioślonymi koszykami zakupowymi z może trzema dynamicznymi podstronami, są utrzymywane przez całe zespoły ludzi na 24/7, bo prawda jest taka, że wszystko cały czas się psuje, wszędzie, u wszystkich. W tej chwili ktoś zatrudniony w Facebooku dostaje dziesiątki tysięcy komunikatów o błędach i w panice szuka przyczyny, zanim ten cały domek z kart runie. Gdzieś w biurze Google siedzi zespół, który nie spał od trzech dni. Gdzieś indziej programistka baz danych, otoczona pustymi puszkami po energetykach, ma męża przekonanego, że nie żyje. A jeśli ci wszyscy ludzie przestaną to robić — świat legnie w gruzach. Większość ludzi nie ma pojęcia, czym w ogóle zajmują się administratorzy systemów, ale uwierz mi: gdyby wszyscy poszli na piwo w tym samym momencie, nie zdążyliby dojść do najbliższego baru, zanim skończyłyby ci się naboje do obrony zapasów konserw przed hordami mutantów.
Nie da się zrestartować internetu. Biliony złotych zależą od chwiejnej pajęczyny nieoficjalnych ustaleń i kodu, który „jakoś działa”, z komentarzami w stylu „TODO: TRZEBA TO PRZEPISAĆ PO BOŻEMU, CHAMSKIE OBEJŚCIE ALE DZIAŁA I NIE WIEM DO KOŃCA DLACZEGO”, napisanymi dziesięć lat temu. Nawet nie wspominam o legionach ludzi, którzy atakują różne części internetu w celach szpiegowskich, dla zysku albo po prostu z nudów. Słyszałeś o 4chanie? Taka strona dla nerdów i internetowych świrów — mogą zniszczyć ci życie bo akurat pewnego popołudnia stwierdzili, że cię nie lubią, ale i tak się nimi za bardzo nie przejmujemy, bo jedna dodatkowa bomba atomowa niewiele zmienia w trakcie zimy nuklearnej.
W internecie można powiedzieć „wiesz, to jakoś działa, czasami, jeśli używasz odpowiedniej technologii” — i BUM, to już jest część internetu. Każdy, kto ma parę stówek i komputer, może zagarnąć sobie kawałek internetu i wrzucić tam, jakie tylko chce, okropne fragmenty naprędce sklejonego kodu, a potem podłączyć swój mały kawałek do kilku większych kawałków, i wszystko robi się odrobinę gorsze. Nawet dobrzy programiści nie zawracają sobie głowy uczeniem się tajemnych specyfikacji, które organizacje ustanawiają, próbując zaimplementować jakiś ósmy cud świata, więc wszyscy spędzają połowę czasu, radząc sobie z tym, że nic do niczego nie pasuje, nic nie ma sensu i wszystko może się zepsuć w każdej chwili — a my po prostu to zamiatamy pod dywan i mamy nadzieję, że nikt nie zauważy.
Oto sekretne reguły internetu: pięć minut po tym, jak tylko pierwszy raz otworzysz przeglądarkę, jakiś nastolatek z Rosji ma już twój PESEL. Utworzyłeś konto w jakimś serwisie społecznościowym? Od teraz jakiś komputer w NSA z automatu śledzi twoją lokalizację do końca życia. Wysłałeś maila? Nigeryjski „książę”, który ma tonę złota i leży na łożu śmierci, już go ma.
To wszystko nie dlatego, że nikogo to nie obchodzi i nikt nie próbuje temu zapobiec — tylko dlatego, że wszystko jest sklejane na ślinę i sznurki, bo nie ma czegoś takiego jak dobry kod, a każdy tylko próbuje, żeby to wszystko jakoś działało. Na tym właśnie polega twoja praca, jeśli pracujesz przy internecie: masz nadzieję, że ostatnia rzecz, którą napisałeś, przetrwa choćby kilka godzin, żebyś zdążył zjeść kolację i się zdrzemnąć.
Nie urodziliśmy się szaleni — jesteśmy doprowadzani do obłędu.
ERROR: Attempted to parse HTML with regular expression; system returned Cthulhu.
Zabawne, prawda? Nie? To może to:
— To się nazywa arrayReverse?
— s/camel/_/
— Spoko, dzięki.
Fajnie pomógł, co nie? Co tam robi wielbłąd? Wygląda na adekwatną odpowiedź do sytuacji? Nie? Dobrze. Wciąż jest dla ciebie nadzieja. Nie spędziłeś jeszcze na czytaniu kodu tyle życia, żeby zacząć nim mówić. Ludzki mózg nie jest szczególnie dobry w podstawowej logice, a jednak istnieje cała branża, w której nie robi się nic innego, jak naprawdę, naprawdę skomplikowaną logikę. Trzeba przebrnąć przez ogromne łańcuchy abstrakcyjnych warunków i wymagań, żeby znaleźć takie rzeczy jak brakujący przecinek. Rób to cały dzień, a wpadniesz w stan łagodnej afazji — patrzysz ludziom na twarze, kiedy mówią, i nie wiesz, czy skończyli, bo nie postawili średnika. Zanurzasz się w świecie totalnego bezsensu, gdzie liczy się tylko to, że jakiś ciąg cyfr wjechał do gigantycznego labiryntu symboli, a na drugim końcu wyjechał inny ciąg cyfr albo zdjęcie kotka.
Niszczący wpływ tego wszystkiego na mózg widać po językach programowania, które ludzie tworzą. Oto program:
#include <iostream>
int main( int argc, char** argv ) {
std::cout << "Hello World!" << std::endl;
return 0;
}Ten program robi dokładnie to samo, co ten:
`r```````````.H.e.l.l.o. .w.o.r.l.di
I ten:
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.
I ten:
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook.
A potem ktoś napisał język programowania, w którym da się napisać coś takiego:
#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while("){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|"
Według autora, jest to „dwie linijki kodu, które parsują dwie linijki komentarzy osadzonych w kodzie, żeby odczytać zapisane cyframi Majów liczby odpowiadające poszczególnym znakom ASCII składającym się na tytuł czasopisma, wyrenderowane jako ASCII-art obrócony o 90 stopni.”
Ten program wygrał konkurs — a jakże. Chcesz żyć w świecie takim jak ten? Nie. To świat, w którym możesz palić paczkę dziennie i nikt nawet nie mrugnie okiem. „No jasne, że pali paczkę dziennie, a kto by nie palił.” W końcu każdy programista budzi się pewnego dnia i, zanim jeszcze w pełni odzyska świadomość, widzi cały swój świat i każdy związek w swoim życiu jako kawałki kodu — i wymieniają się takimi historiami tak, jakby to było zupełnie normalne, że niedospanie wywołuje halucynacje na miarę kwasu. To świat, w którym ludzie rezygnują z seksu, żeby napisać język programowania dla orangutanów. Wszyscy programiści zmuszają swoje mózgi do robienia rzeczy, do których mózgi nigdy nie były stworzone, w sytuacji, której nigdy nie da się naprawić, po dziesięć–piętnaście godzin dziennie, pięć do siedmiu dni w tygodniu — i każdy z nich powoli traci rozum.
`</wkurw>`
Więc nie, nie muszę potrafić podnieść przedmiotu o wadze do dwudziestu pięciu kilo. W zamian za to dostałem możliwość przycinania włosów łonowych Szatana, podczas gdy ten zajada się z mojej otwartej czaszki, dzięki czemu kilka kawałków internetu będzie działać jeszcze przez kilka dni.
Footnotes
-
Zawsze zaczyna się od „Stary”. ↩