Poprzedni wpis (Wypatrzyłem) | Następny wpis (Postępy postępu)

Rzeczy proste, rzeczy skomplikowane

Kiedyś o tym ktoś już napisał (może Joel Spolsky, a może ktoś inny, nie mogę sobie przypomnieć). A teraz dotknęło to mnie osobiście.

Są rzeczy proste i są rzeczy skomplikowane. Naturą rzeczy prostych jest to, że łatwo jest ich używać (my to nazywamy, że mają prosty interfejs). Są jednak także rzeczy, które są skomplikowane same z siebie. A jak jest z ich używaniem?

Podobnie jak z rzeczami prostymi, rzeczy skomplikowane są... skomplikowane w użyciu. Rzeczy skomplikowane mają skomplikowany interfejs właśnie dlatego, że ze swej natury są skomplikowane i ich funkcji nie da się wyrazić w sposób uproszczony. Można to porównać do dwóch narzędzi, które służą do wyciągania gwoździ: obcęgów i tzw. łapki. Obcęgi są dość skomplikowanym narzędziem, które spełnia kilka funkcji (na kilka sposobów), więc jego interfejs jest nieco bardziej skomplikowany, niż łapki. Oczekiwanie, że obcęgi będą miały prostszy interfejs, doprowadzi do degeneracji obcęgów do poziomu łapki. Podobnie, nikomu nie wpadnie do głowy, by żądać od 50-tonowej lokomotywy, by miała interfejs Hondy Civic.

A teraz zdążam na skróty ku poincie. Dużo ludzi uważa, że zadaniem nas, czyli developerów, jest zapewnianie prostego interfejsu. Abstrahując od tego, że jest to piramidalną bzdurą, jest to także niemożliwe. Rzeczy skomplikowane nie mogą mieć prostego interfejsu, dopóki są skomplikowane. I nie będą miały prostszego interfejsu, dopóki będą realizować skomplikowane funkcje w skomplikowany sposób. A takie działanie jest chyba immanentne dla aplikacji webowych...

Komentarze (6)

#1 meak skomentował(-a) 6 grudnia 2007 o 23:09

Proste wyjaśnienie skomplikowanej sprawy. Żeby tak można było skomplikowany interfejs przedstawić.

#2 jarek skomentował(-a) 6 grudnia 2007 o 23:58

"Skomplikowany" nie oznacza "bezużyteczny".

Kiedyś natknąłem się na takie zdanie: "jeżeli coś jest dla ciebie zbyt trudne, to znaczy, że nie jest dla ciebie".

#3 dpc skomentował(-a) 7 grudnia 2007 o 00:32

To jest w ogóle problem z całą informatyką. Daje się człowiekowi do ręki narzędzie wieloktrotnie bardziej skomplikowane i potężne niż np. piła mechaniczna, a oczekuje się, że będzie się je obsługiwać intuicyjnie i zupełnie prosto. A nikt dzieciom na komunie nie kupuje piły mechanicznej!

Nie da się i tyle.

#4 sprae skomentował(-a) 7 grudnia 2007 o 02:27

Są różne aspekty skomplikowania. Czasem można przegiąć i w drugą stronę - komplikując rzeczy proste. Niedawno spotkałem się z (jak to autor górnolotnie nazwał) "aplikacją" w excelu. Twórca tego czegoś miał chyba wysokie mniemanie o sobie, bo obsługa była czarną magią. 0 formularzy, 0 raportów. Pracowało się tam jak jakaś księgowa na gołym arkuszu, ze wstawkami vba. Myślę, że to naleciałości korporacyjne w których takie wymysły to normalka.
Wysilając się na 2 dni zrobiliśmy coś lepszego i łatwiejszego w accesie. Użyłem go drugi raz w życiu, ale dzięki praktyce w kilku frameworkach poszło jak z nut.
Z innej strony, jakoś nie mogę się zgodzić na porównywanie świata rzeczywistego do programowania. Na obcęgi nie możemy założyć jakiejś kolejnej warstwy abstrakcji, tak jak już dawno gui nie jest rysowane przez każdy program w Framebuffer-ze. Świat składa się z coraz łatwiejszych w użyciu klocków. Już nawet nowoczesne lokomotywy nie wymagają sterowania wzbudzeniem silnika. Utrudnienia (niższa warstwa abstrakcji) raczej zostawiane są tam, gdzie wymagane jest, by człowiek mógł mieć na te warstwy wpływ (duszenie reaktora, ustalanie z dokładnością do pixel-a).
Głównym napędem ułatwiania jest dziś wydajność pracy. Komputery mogą robić wszystko to na co pozwala im wydajność i pojemność.
XKCD o pythonie powala :-)

#5 a skomentował(-a) 7 grudnia 2007 o 13:01

http://penguinpetes.com/b2evo/index.php?title=stealth_bombers_are_more_difficult_to_op_1

Podobna obserwacja, mniej grzecznie, świetne porównanie i powiedzonko.
Bo potrafią latać. Indeed.

PS Czy w komentarzach da się jakoś wstawić 'ładne' linki?

#6 jarek skomentował(-a) 7 grudnia 2007 o 14:18

Mogłoby się dać, jakbym usiadł trochę do kodu... ;)

Skomentujesz?

* 


* 


* oznacza pole wymagane

Technikalia

  • XP-Dev.com: Free Subversion Hosting
  • A Django joint.
  • Python powered