Search this blog/このブログの中でさがす:

poniedziałek, 24 grudnia 2018

Około Świątecznie: Dlaczego komputery (nie) są głupie?


Harmony Christmas by jpellgen  na licencji CC BY NC ND 2.0
Jakiś czas temu Pan F. zmienił pracę. W rozmowie z nowymi kolegami, miała kiedyś miejsce dyskusja na temat "domyślnych opcji w różnych programach". Niezmiennie - w zgodzie z Panem F. - twierdzę, że im mniej  komputery i maszyny za nas robią tym lepiej. Bo komputer, to głupia rzecz i niczego sama nie zrobi, tylko trzeba jej to zadać. A z każdym takim zadaniem, jest problem, którego źródłem jest "komputer nie myśli". A to bezpośrednio wiąże się z tym, że programowanie... jest nielogiczne. Komputery są głupie, ponieważ ludzie, którzy je wymyśli takimi je uczynili.A to wszystko, ponieważ nie wiedzą co to jest "Evil Overlord List".

Wpis z cyklu: nietypowo na Święta. ^_^

Zanim jednak powiemy sobie czemu tak jest, trzeba powiedzieć - w obronie programistów i programowania - że to nie zawsze jest ich wina. Po prostu pewne rzeczy będą trudne do oprogramowania, niezależnie od tego jakie współcześnie istniejące narzędzie im dać. Prosty przykład: zdanie zaczyna się od dużej litery. A jak powiedzieć maszynie, kiedy zaczyna się zdanie? Zwykle po kropce. O ile można jeszcze nauczyć komputer, że niektórych kropkach, takich jak w "np." czy "S.A." nie zawsze jest wielka litera, to jednak nikt nie wpadł jeszcze na to, że są inne kropki, po których czasem jest duża, a czasem nie. Ot na przykład "tys.", "itd." czy "itp." i często gęsto trzeba to samemu poprawiać. Bo widzicie, kiedy pracując w jakimś programie, nagle wyskoczy Ci okienko, które pojawia Ci się raz na 10 tys. przypadków, to komputer "zgłupieje", a ty je zamkniesz albo coś innego zrobisz. I tak samo jest z kropkami i wielkimi literami: to nie działa tak prosto.

Problem ten wiąże się z tym, że programiści męczą się nad tym jak oprogramować kolejne przypadki i scenariusze, ale jak nauczyć komputer rozpoznawać kiedy po "ul" dać kropkę (od "ulica"), a kiedy jest to pszczeli ul? Czy wiecie jak wiele rzeczy "musi" sprawdzić komputer by powiedzieć, kiedy w danym miesiącu jest każda z niedziel? Jest to nieustanna walka z tym, by komputer umiał jak najwięcej (bo użytkownik końcowy chciałby), a tym by jak najmniej popsuł (bo nie udało się zaprogramować wszystkich przypadków). W tej materii, jesteśmy za zdaniem, że najczęściej najlepiej działa opcja minimalna. To znaczy, że jeśli czegoś się nie da zrobić inaczej, to domyślnie powinno się wybrać opcję najmniej szkodliwą, czyli "najmniej czyniącą". Lepiej by maszyna nie zrobiła i trzeba było samemu zrobić, niż po niej poprawiać. Przecież sam sobie mogę tą kropkę wstawić i wielką literą uczynić.

Prosty przykład: czy wiecie, że w Excelu domyślnie zmieniany jest format dat i cyfr? Jeśli wpiszecie jakiś ciąg cyfr zaczynający się  od zer, to Excel je usunie? Przed chwilą wpisałam ciąg "123456789123456789", a w komórce wygląda on tak 1,23457E+17, a w jej podglądzie jako 123456789123456000. To są trzy inne liczby...  Dlatego o wiele lepiej by Excel sam z siebie nic nie poprawiał. Ale domyślnie ustawione formatowanie komórek mu na to nie pozwala. Zresztą, domyślne formatowanie Excela - tzn. ogólne - z powodzeniem i to lepiej zastąpiłoby "tekstowe".  

Na interesie tenże stoją jednak dwie rzeczy: pierwszą jest syndrom listy lektur obowiązkowych. A cóż to takiego? Jest to sposób myślenia, który nakazuje pewną rzecz zrobić według logiki i sposobu myślenia osoby, którą tą rzecz kreuje ("eksperta"), bez uwzględnienia tej, którą ją faktycznie będzie używać. Coś jak właśnie z listą lektur. Dzieciom i młodzieży próbuje się sprzedać "wielkie dzieła", które dla nich nie nadają się do czytania albo nie są wstanie ich zrozumieć bez "specjalistycznej" wiedzy.

Analogicznie jest z maszynami i programami. Powinny być one tworzone pod użytkownika końcowego, tak by to on mógł ich używać bezproblemowo - o ile jest to możliwe, a nie programistę ("eksperta"), który zna mechanizmy, zasady działania i logikę programu. Może się mylę, ale większość użytkowników Excela oczekuje po domyślnym formatowaniu (tzn. ogólnym) tego, co daje im formatowanie tekstowe.  I tak dalej. Chodzi mi o to, że ktoś, kto napisał jakiś program powinien na niego patrzeć z perspektywy użytkownika końcowego, odbiorcy. Tak jak ucznia nie interesuje jak wspaniała jest "Lalka", tak użytkownika nie interesują tabele przestawne i ich milion funkcji, kiedy nie może on spokojnie po prostu wpisać do komórki numeru faktury, listu poleconego, ewidencyjnego czy liczby bez ich zmiany przez Excela. A odpowiedź "wystarczy wpisać przed apostrof/zmienić formatowanie komórki/cokolwiek" nie jest dobrą odpowiedzią, ponieważ to oznacza, że od użytkownika oczekuje się dodatkowej wiedzy (coś jakby od ucznia wymagać by znał od razu kontekst historyczny/kulturowy powstania lektury). To jest właśnie przykład pisania programu pod eksperta, a nie zwykłego użytkownika.

Z zrazu nie oznacza to, że programista ma być więźniem użytkownika końcowego. Ponieważ - to druga rzecz - trzeba pamiętać o prawie Murphy'ego: nie ma programów/algorytmów idioto odpornych. Część "błędów" programów i urządzeń wynika z błędu użytkownika. Dla przykładu: formatów zapisania daty jest kilkadziesiąt. Podobnie jak na kilkanaście sposobów da sie zapisać "Spółka z ograniczoną odpowiedzialnością". Znaczna większość z nich... jest błędna. I to z winy użytkownika. Ludzie mają problemy z zapisaniem kodu pocztowego... a przecież tu jest tylko jeden format, maksymalnie dwa. Programista jednak musi zawsze pamiętać: nie każdy użytkownik jest idiotą. Użytkownika trzeba traktować jak pięcioletnie dziecko, a wtedy wielu "idiotów" umiałoby by dane urządzenie/program obsłużyć poprawnie, gdyby zostało napisane z myślą o nich.

Powyższe można streścić parafrazą pewnego powiedzenia. Programy, w mojej opinii, są głupie ponieważ programowanie jest jak ustrój socjalistyczny. Dzielnie walczy z problemami nieznanymi w innych ustrojach. O ile część programistycznych problemów to po prostu walka z mnogością opcji do oprogramowania, uczynienia programu/algorytmu jak najbardziej idiotoodpornym oraz zgrywanie tego co się da zrobić z tym co chciałby użytkownik, to znaczną część tej walki zgotowali oni sobie sami. I to nie tylko pod postacią opisanych wyżej zachowań. Po prostu... wadliwa jest również metodologia.

Rozmawiałam z kilkoma programistami i niejednokrotnie pytałam się, a czemu nie zrobią tego inaczej, tzn. prościej. Nie mogą, ponieważ logika języka programowania im nie pozwala. Ludzie, którzy wymyślali języki programowania wymyślali je najwyraźniej takim samym sposobem jak się układa listę lektur: my wiemy jak to działa, a że każdy inny, włącznie z użytkownikiem końcowym ma już z tym problem... Powiem więcej: sami programiści mają problemy z tym, jak języki funkcjonują. Wchodząc w programowanie trzeba bowiem zrozumieć logikę języka, a ta jest inna od logiki "prawdziwej", zdroworozsądkowej.

Prosty przykład: W kuchni znajduje się kalendarz (tzn. przechowywana jest data). Jeśli wchodzisz do niej i widzisz komunikat sprawdź datę i ustaw na dzisiejszą, to po ustawieniu daty nie ulega ona zmianie aż innego dnia nie wejdziesz do kuchni ponownie i znowu jej nie poprawisz. Gdyby odnieść to do programu komputerowego: po wyjściu z kuchni data ulega skasowaniu (ustawiona zostaje taka, jak przed wejściem), chyba że kalendarz znajduje się i/lub w pokoju pomieszczeniu prowadzącym do kuchni. Innymi słowy: data musi być przechowywana nie tylko w samej kuchni, ale i poza nią. Wchodząc doń, data musi być znana. Po co?  Nie wiadomo.

Gdybym trzeba było to wszystko podsumować, to trzeba powiedzieć tylko jedno. W Internecie krąży "Evil Overlord List". I jest tam taki punkt 12. "One of my advisors will be an average five-year-old child. Any flaws in my plan that he is able to spot will be corrected before implementation.". Summa summarum: jeśli kiedykolwiek zastanawiałeś się czemu jakieś urządzenie, maszyna czy program jest "głupi" to odpowiadam: ponieważ ludzie, którzy stworzyli narzędzia do programowania nie wykonali beta testów tenże na pięciolatkach. W związku z tym stworzyli sobie ułomne narzędzie i ułomną logikę tenże. A po zastosowaniu obu dziwią się, że "pięcioletnie dziecko" nie rozumie.Tą zasadę można zastosować do wszystkiego. Jeśli "Święta nie działają", to znaczy, że albo masz dziurę w planie albo coś jest nie tak ze Świętami. Z tymi konkretnymi, a nie w ogóle.Innymi słowy: Wesołych Świąt Bożego Narodzenia. Nie pozwól by ktokolwiek Ci zepsuł Święta próbując albo być ekspertem od twoich Świąt lub próbując Ci sprzedać swoje Święta. Święta są każdego, a każdy jest inny, więc nie ma jednych Świąt.



メリークリスマス!




*Nie jest. Albo przynajmniej, ja nie jestem wstanie zrozumieć czemu miałaby być i dlaczego katuje się nią uczniów.

Postać Kitsune Copyright by me (Konrad Włodarczyk) 2015, all rights reserved. 

2 komentarze:

  1. Chyba zapomnieliśmy, że excel to dość specjalistyczny program i wymaga nauki obsługi (że trafił pod strzechy to inna sprawa, ale to własnie powoduje, że wszyscy uważają, że się na nim znają). Na tej zasadzie można przyjąć (odnośnie formatowania domyślnego w excelu) dlaczego samochody pedał gazu mają z prawej strony, wiele osób wolało by z lewej albo w kierownicy itp. (w sumie niektóre samochody tak mają dla inwalidów). Po prostu wymaga nauki obsługi. Nie wspomniałeś o sztucznej inteligencji wprawdzie w pakiecie office może tego nie widać, ale w innych dziedzinach dość ładnie sobie radzi i wiele programów nie jest już tak głupich jak 20 lat temu.

    OdpowiedzUsuń
    Odpowiedzi
    1. Dlatego napisaliśmy "jeśli się nie da to należy wybrać opcję minimalną". Inaczej "jeśli się da i to działa, to programować/robić". Dlatego programy stają się coraz mniej głupie, ponieważ coraz więcej się da. Co nie zmienia faktu, że im mniej tym lepiej, naszym zdaniem.


      A Excela wybraliśmy specjalnie, jako wyjątkowo perfidny program. Powyższe przemyślenia były pisane na podstawie doświadczeń naszych oraz kilku specjalistów, którzy swoje już na nim zjedli i to od różnych stron. I każdy z nich narzeka na to, że Excel "nie działa". Nie znamy nikogo, kto by nie, ale to akurat nie jest argument - "grupa badawcza" jest bowiem dość specyficzna. Niemniej jednak, naszym zdaniem podstawowa jego funkcja nie działa poprawnie właśnie przez niezbyt trafny dobór domyślnej opcji formatowania

      Pomijając nawet ten fakt i samego Excela. Jeśli jakikolwiek program, procedura, cokolwiek jest przygotowane pod ekspertów i ich wiedzę (np. lista lektur), to nie dziwne, że Ci którzy faktycznie z tego korzystają, mają problemy. Szerzej mówiąc: wielu użytkowników ma problem z Photoshopem, ale to faktycznie jest program dla specjalistów i nie powinno nas dziwić, że jest przygotowany pod nich czyli faktycznego użytkownika końcowego. Office od wielu lat jest podstawowym programem biurowym, służącym do pracy "nie ekspertom" i nadal - chyba - się Microsoft nie skapnął, że pewne opcje trzeba poprawić pod nich.

      Niestety, z pewnych względów prawnych, więcej szczegółów podać nie możemy.

      A już ogólniej: niezależnie co programujesz/robisz (choćbyś pisał książkę czy bloga) i dla kogo, to zrób sobie test pięciolatka w celu wykrycia głupich błędów (co znaczy również, że jesteśmy otwarci na wszelakie uwagi i komentarze), ale też bądź z tym ostrożny. To jest test pięciolatka, a pięciolatek ma... cóż... pięć lat.

      Usuń