Pewnego dnia przyszło mi do głowy proste spostrzeżenie: część programistów bardziej koncentruje się na zapisie programu i na języku- można ich nazwać "programistami-pisarzami", inni zaś myślą w większym stopniu o algorytmie- określmy ich mianem "programistów-konstruktorów". Przyznam, że przy okazji popełnilem błąd- napisałem o swoich spostrzeżeniach, ale zamiast zaprezentować tę diagnozę prosto i konkretnie, spróbowałem wtłoczyć ją w formę bliską felietonowej. Oto efekt:
Było to swoiste "ostrzenie pióra" trochę pozbawione dyscypliny co spowodowało, że "systematyka programistów" nie była w felietonie wystarczająco wyeksponowana.
Sporo osób ten tekst przeczytało, Jacek Laskowski interesująco go skomentował. Wszystkim, którzy się nim zainteresowali bardzo serdecznie dziękuję.
W felietonie wspominałem również o ochronie prawno-autorskiej oprogramowania, która obecnie polega na tym, że aspektem chronionym nie jest pomysł a sam tekst programu. Dość podobna zasada dotyczy literatury i dziennikarstwa. Wspominam o tym, gdyż doczekałem się nietypowej polemiki, w której mój tekst został potraktowany, jakby go w ogóle nie było.
Skoro pomysły nie są chronione, takie działanie jest jak najbardziej dozwolone prawnie. Moim zdaniem nie jest ono zgodne "tylko" z dobrymi obyczajami. Renomowanym bloggerem nie jestem, ale jdn.pl jest znanym serwisem, a autor drugiego artykułu, Pan Jakub Nabrdalik zarejestrował się w nim ponad rok temu.
Nie chcę jednak kontynuować tego dość przykrego wątku, postaram się za to odnieść merytorycznie do wniosków zawartych w przywołanym artykule.
O ile moim celem nie było wartościowanie tych modeli, o tyle Pan Nabrdalik stawia tezę, iż podejście programisty-pisarza po prostu bardziej się sprawdza.
Zasadniczo zgadzam się, że "pisarz" to model, w kierunku którego należy dążyć choć warto zauważyć, że "konstruktor" i "pisarz" to nie samo nastawienie. To w dużej mierze kwestia predyspozycji. Sukces modelu "pisarza" polega także na zmianach w "strukturze społecznej" środowiska programistów, które przyjmuje coraz więcej osób o zróżnicowanych zdolnościach. Postawiłbym tezę, że wielu "pisarzy" mogłoby wykonywać zawody stricte humanistyczne. Osoby o przewadze inteligencji werbalnej nad algorytmiczną mają po prostu naturalne predyspozycje do przykładania większej wagi do aspektów językowo-estetycznych kodu. Oczekiwanie ewolucji od konstruktora do pisarza wynika z tego, że "urodzeni algorytmicy" stali się mniejszością.
Nie postawiłbym przy tym znaku równości między "urodzonymi algorytmikami" a "urodzonymi programistami", gdyż nowoczesne programowanie to także sztuka integracji różnych rozwiązań. W sztuce tej sprawdzają się osoby lepiej "czytające interfejs", a więc obdarzone większymi zdolnościami werbalnymi. Dlatego uważam, że fascynacja frameworkami nie jest domeną "konstruktorów". Pomimo, że framework to "rusztowanie", nie stanowi on moim zdaniem "naturalnego środowiska" tego modelu programisty.
Można mówić o swoistym paradoksie językowym: "konstruktorzy" wolą biblioteki, "pisarze"- rusztowania. W moim pojęciu konstruktor jest bowiem typem developera, u którego przewaga podejścia "algorytmicznego" przejawia się nie tylko w pisaniu, ale i w stosunku do czytania kodu. Framework wymaga "wczytania się", zrozumienia na jakim etapie wywoływana jest dana metoda. Z tego względu stanowi formę bardziej przyjazną dla "pisarza", który jak to pisarz, jest także bardziej wnikliwym czytelnikiem. Biblioteka, jako zestaw funkcji o określonych wejściach i wyjściach to forma bliższą "konstruktorowi".
Jak już wspomniałem każdy z tych typów programisty ma swoje specyficzne szanse i zagrożenia. "Pisarz" to twórca przejrzystych modeli i dobrze rozumiejący frameworki, utalentowany integrator, którego opanować może tendencja do overengineeringu. W boju o DRY może zapomnieć o KISS. O ile nie ma tendencji do kruczków w modelu i algorytmie, o tyle potrafi "zabawić się" językiem w sposób budzący zmieszanie u początkujących. Choć trzeba przyznać, że robi to raczej rzadko.
"Konstruktor" jak napisał Pan Sławomir Sobótka (http://art-of-software.blogspot.com/2010/05/konstruktor-destruktor.html, przy okazji: wszystkiego dobrego z okazji imienin!) bywa "MacGyverem". Lepiej radzi sobie też z tworzeniem rozwiązań od podstaw.
Wady: oczywiste- potrafi być wręcz dumny z quick-and-dirty lub tworzyć nadmiarowy boilerplate code.
Warto zauważyć, że wady te najbardziej przejawiają się u "typowych pisarzy" i "konstruktorów w postaci czystej" . Optymalny jest model mieszany. W większości zastosowań: "z przewagą pisarza".
Pamiętajmy jednak, że poruszamy się w świecie Javy. Przy tworzeniu rozwiązania niskopoziomowego "model mieszany z przewagą konstruktora" może być typem programisty, którego poszukujemy najbardziej.
Andrzej Szczodrak
Comments
predyspozycje
Na wstępie dziękuję za życzenia:)
Przy najbliższej okazji stawiam imieninowe piwo...
Post zawiera wiele ciekawych spostrzeżeń w ujęciu systemowym/zintegrowanym. Zwrócę jeszcze tylko uwagę na kwestię, która została lekko dotknięta - predyspozycje. To ciekawe pytanie... na ile można ze sobą/z kimś "coś zrobić" a na ile jest to uwarunkowanie "sprzętowe", którego nie da się obejść (chyba, że elektrowstrząsami;)
Sam zawsze z dystansem podchodzę do różnego rodzaju poradników, które lansują jakąś postawę. Ludzie są jacy są i pewne zmiany wewnętrzne nie są możliwe przy rozsądnym nakładzie czasu i pracy. Samoświadomość to dodatkowo osobna bajka. Czy zatem po prostu nie lepiej szukać dla siebie odpowiedniego miejsca? Jest to też wyzwanie dla managerów i HR aby odpowiednio dobierać ludzi do zespołów na sadzie uzupełniania predyspozycji i odpowiednio przydzielać zadania.
Co do copyrightu
Ok, dziękuję.
Nie, nie chcę wyłączności na to rozróżnienie.
Napisałem, że prawo nie chroni samych pomysłów, dodam, że według mnie jest to rozwiązanie dobre. Objęcie ich prawem majątkowym byłoby wielkim utrudnieniem w naszym rozwoju.
Uważam jednak, że właśnie to zwiększa naszą odpowiedzialność za to, by oddać innym honory za ich pomysły, które mogą być jakimś małym wkładem w inżynierię oprogramowania. Stąd moje odwołania do felietonów Filipa Dregera czy wypowiedzi p. Sławomira Sobótki.
Następnym razem wal prosto z mostu na emaila :)
Drogi Andrzeju, czy dobrze rozumiem, że poczułeś się urażony faktem, że nie wspomniałem (nie podlinkowałem) Twojego felietonu w moim poście? Jeśli tak, słusznie, masz rację, nieładnie z mojej strony i jedyne co mogę powiedzieć na swoją obronę to, że nie pamiętałem o nim (tzn. źródle terminu 'konstruktor') w momencie pisania, choć jak widzisz samą ideę pisarz vs konstruktor zapamiętałem. Zaraz postaram się to uchybienie naprawić i honory adekwatne poczynić. Daj znać czy moje starania Cię satysfakcjonują.
Słusznie również zauważyłeś, że jeśli Twoim celem była "systematyka programistów", to umknęła ona odrobinę w gąszczu dywagacji, co jak widać pozostawiło sporo miejsca na interpretacje.
Jeśli natomiast, pisząc o braku ochrony prawnej pomysłów, chciałbyś zarezerwować wyrażenie pisarz vs konstruktor do użytku własnego (może przez dodanie Copyright lub TM), to obawiam się, że nie jest to możliwe. Ale przecież nie chcesz, prawda? W końcu sam podałeś źródło "pisarza" jako fragment "We Are Authors" pierwszego rozdziału z książki "Clean Code" wuja Boba.
Jako że obaj jesteśmy programistami i pracę zespołową mamy we krwi, pozwól że zasugeruję, by z takimi kwestiami jak brak oddania należytego honoru, czy też innymi problemami personalnymi uderzać bezpośrednio i bez ogródek na emaila/jabbera/telefon, sam link do artykułu nie oddał Twoich negatywnych odczuć. Wszak Agile ceni bezpośrednią interakcję i szczerość, prawda? Dziwnie mi czytać że ktoś, kto się do mnie nie odezwał słowem, obraził się na mnie lub poczuł urażony. Przypomina to niestety 'polemiki' uznanych pisarzy, drukowane w niektórych periodykach, a przecież aż tak daleko analogia wuja Boba raczej nie sięga.
Krótko: pisz następnym razem od razu na emaila lub dzwoń :)
Pozwalam sobie wysłać ten komentarz zarówno na jdn.pl jak i bezpośrednio do Twojego bloga, coby Ci nie umknął w gąszczu innych update'ów.
Co do scaffoldingu i frameworka
Rozumiem, że:
framework - szkielet aplikacyjny (do rozważenia: rusztowanie aplikacyjne)
(http://www.jaceklaskowski.pl/wiki/Słownik_pojęć_informatycznych)
było zanim pojawiła się technika scaffoldingu. Przypomniałem sobie, że rzeczownik "scaffolding" oznacza wprost rusztowanie (choć domyślam się, że w dziedzinach, z których to słowo zaczerpnięto "konstrukcja ramowa" czyli framework może być czasem jego synonimem: http://en.wikipedia.org/wiki/Scaffolding), ale mam wrażenie, że są dwa "scaffoldingi".
Jeden- taki jak w linku z wikipedii to rzeczownik zwykły, oznaczający przedmiot.
Drugi to rzeczownik odczasownikowy (gerund)- scaffolding od "to scaffold". Według mnie "scaffolding" w RoR czy Seamie to zdecydowanie ten drugi scaffolding- pisze się "to scaffold your app". Ponieważ w polszczyźnie słowo "rusztować" zanika jeśli będziemy trzymać się "scaffoldingu" jako rusztowania, wkrótce zaczniemy "scaffoldować". Paradoksalnie "scaffolding" widzę jako "generowanie szkieletu".
Gdyby nie te angielskojęzyczne wstawki...
...to tekst czytałoby się znacznie przyjemniej i byłby artykułem dla szerszej publiczności. A tak nie tylko, że nie przypadnie do gustu niewtajemniczonym, to jeszcze wtajemniczeni znajdą nieścisłości jak framework to "rusztowanie", co jest nieprawdą, gdyż framework to szkielet (aplikacyjny), a rusztowanie to scaffolding. Ich różnice są nadzwyczaj oczywiste dla pisarza...mnie wliczając :-)
Poza tymi lekko gorzkimi słowami, tekst mi się bardzo podobał, a wymienienie mnie z imienia i nazwiska utwierdził jeszcze bardziej w tym przekonaniu, gdyż...pojawić się w tekście niebanalnym stanowi dla mnie wyróżnienie :-)
Jacek