Czyli o dziwnym paradoksie informatyka w latach dwudziestych XXI wieku.
Zauważyłeś może, że na przestrzeni ostatnich lat rzeczy do tej pory łatwe stały się trudne, a dla odmiany niektóre skomplikowane kwestie można teraz rozwiązywać zadziwiająco łatwo? Możemy wskazać szereg zagadnień związanych z komputerem, które stały się albo trywialnie łatwe albo tak niemożliwie trudne, że nawet nie warto ich już próbować dotykać.
Taki oto paradoks
Zespół Moderna, który jako pierwszy stworzył szczepionkę COVID-19, zaprojektował ją tak naprawdę w dwa dni. To był weekendowy projekt w styczniu. W piątek wieczorem nie mieliśmy żadnej szczepionki a w poniedziałek rano otrzymaliśmy szczepionkę. Oczywiście wcześniej były badania, przygotowania itd. Ale nie zmienia to faktu, że webmasterzy spędzają więcej czasu próbując wyśrodkować tekst na stronie w pionie.
Znakiem współczesnego świata jest to, że potrafimy robić niesamowite rzeczy, ale nadal tkwimy w podstawowych problemach. Strony internetowe mogą pochwalić się zaawansowanymi systemami uwierzytelniania, uczeniem maszynowym, złożonymi algorytmami, a następnie nie wyświetlają się poprawnie w Firefoksie. Rozwiązaliśmy trudne problemy, ale potknęliśmy się o te łatwe.
Problem tkwi w nas, deweloperach?
Przyczyna tego jest być może to, że po prostu jesteśmy ludźmi i ciągle błądzimy. Witryna może nie działać w Firefoksie nie dlatego, że frontendowiec zawiódł w swojej pracy ale dlatego że w ogóle o tym zapomniano na etapie prac. Istnieje wiele różnych przeglądarek: Firefox, Safari, Edge, Chrome, przeglądarka w lodówce Samsung Smart a wszystko w niezliczonej ilości wersji. To jak z Pokemonami: nie możesz ich wszystkich złapać. Gdy programista zostanie powiadomiony o prostym błędzie renderowania, zwykle może go dość łatwo naprawić. Ale próba omówienia każdej sytuacji z wyprzedzeniem może nawet w ogóle nie być możliwa. Zadaniem na dziś nie jest więc intelekt czy umiejętności ale dokładność. Tysiące nieoczekiwanych przypadków brzegowych.
Największym wyzwaniem jest unikanie głupich błędów. Potrzebujemy sumienności bardziej niż czegokolwiek innego i odnosi się to do prostej strony internetowej jak i podstawowej infrastruktury bezpieczeństwa. Przykład? W 2014 roku firma Apple wydała poprawkę krytycznego błędu bezpieczeństwa w SSL/TLS. Błąd pojawił się nie dlatego, że ktoś popełnił pomyłkę w implementacji kryptografii liczb pierwszych. To dlatego, że zespół przegapił kilka nawiasów. Ich matematyka liczb pierwszych była doskonała. Ich formatowanie kodu: nie tak bardzo.
Być może niesprawiedliwe jest porównywanie drobnych błędów HTML z informatyką „wysokiego poziomu”. Mówimy o dwóch zupełnie różnych umiejętnościach. Nie ma powodu, aby ktoś, kto zarabia na życie pisaniem algorytmów, znał również CSS. Zmiana koloru tekstu lub zaokrąglenie krawędzi ramki może wydawać się prostszym zadaniem niż pisanie systemu operacyjnego, ale jest to łatwiejsze tylko wtedy, gdy znasz język. Sprowadź Einsteina z martwych, daj mu komputer, a nie byłby nawet w stanie pisać poziomo tekstu na stronie.
Trzeba mieć priorytety
I oczywiście priorytetowo traktujemy duże, ważne problemy, ale nie przejmowaliśmy się mniejszymi, prostszymi rzeczami. Właśnie dlatego mamy szczepionkę przeciw COVID, ale nasze pole tekstowe nadal nie jest prawidłowo wyśrodkowane w pionie. W końcu zwalczanie koronawirusa nie zależało od ustawienia wszystkich divów więc priorytety, priorytety...
Rzeczywistość nowoczesnego oprogramowania to to, że jedna firma nie pisze całego, ani nawet większości kodu w produkcie. Zamiast tego robią npm install
albo pod install
, pobierając kod zebrany przez dziesiątki tysięcy (setki tysięcy? miliony?) innych programistów.
Rekrutacja
Tymczasem rozmowy kwalifikacyjne z programistami nadal są znane jako wymagające intelektualnie, wyczerpujące rękawice, rzucone kandydatom piszącym złożone algorytmy z pamięci na tablicach. Zatrudniamy ludzi do zaawansowanej, trudnej pracy a czasami ta trudna praca wydaje się wysychać. Zamiast tego programiści edytują tagi <div>
dla wybrednych klientów. A co z tymi trudnymi problemami? Okazuje się, że są tak trudne, że nawet nie warto próbować. Zainstaluj pakiet, który napisał ktoś inny, kup usługę innej firmy lub nie przejmuj się. Nie pisz własnego frameworka. Nie pisz własnego krypto. Nie pisz własnego CMS. Nie pisz własnego parsera JSON. Lista rzeczy, których nie powinniśmy pisać, jest długa.
To pozostawia wspomniane na wstępie trudne problemy w jednej z dwóch kategorii: albo trywialnie łatwe — ktoś już wykonał pracę — albo tak trudne, że nie warto nawet się za nie brać. Żyjemy w binarnym świecie, w którym nie ma środka. Z drugiej strony, „łatwe” problemy mają pełne spektrum trudności, ponieważ jesteśmy zdani sobie na ich rozwiązanie. W ten sposób znaleźliśmy się w pokręconym świecie, w którym możemy tworzyć strony internetowe z bezpiecznymi loginami, bazami danych w czasie rzeczywistym, które mogą z łatwością skalować się do milionów użytkowników, ale gdy poproszą nas o przesunięcie pola trochę w lewo w wersji mobilnej strony, drapiemy się po głowach i walczymy z tym godzinami...