25 czerwca 2018

FORA ZE DWORA, Responsywny Designie


Cholerne dzieciaki, nie potrafią zachować poprawnych definicji słów.
Pamiętasz czasy, kiedy słowo "responsywny" znaczyło szybki? O tak, wtedy to miało poprawne znaczenie. Zwykle mówiliśmy coś w rodzaju: "O kurcze, ten system jest z pewnością responsywny!" albo "Musimy włożyć dużo pracy, żeby ten system pozostał responsywny."

Poniższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.


Ale teraz, nagle, te słowo znaczy: kompatybilny z urządzeniami mobilnymi. Co? Responsywny? W jaki sposób dorabianie GUI to wielkości ekranu czyni system responsywnym? Na co, do diabła, system odpowiada? Na ekran? O rany!
Chciałbym wiedzieć kto porwał ten termin i dlaczego? Chciałbym usiąść i odbyć długą rozmowę z tym gościem. Czy nie moglibyśmy nazwać to "adaptywny", albo może "przyjazny telefonom komórkowym". Dlaczego, do jasnej ciasnej, on wybrał słowo "responywny"; słowo, które już miało całkiem dobre znaczenie?
Siedziałem jednego dnia na spotkaniu i usłyszałem, jak ktoś mówił: "Ale kiedy zrobisz system responsywnym". Moja natychmiastowa reakcja była taka, że ten system jest za wolny. Odpowiedziałem (responded)[1], mówiąc, że w zasadzie czas odpowiedzi (response) był całkiem dobry. Wszyscy odwrócili się i popatrzyli na mnie jak na neandertalczyka.
A tak przy okazji, jak już jestem w temacie słów, które nagle zmieniły swoje znaczenie bez jakiegokolwiek dobrego powodu, co za głupek, który ukradł słowo "Design"? To znaczy czy pamiętasz czasy kiedy "Design" był technicznym terminem oznaczającym wewnętrzną strukturę systemu oprogramowania? Projektanci oprogramowania byli wówczas głównymi programistami. Każdy chciał zostać projektantem (designer). Każdy aspirował do nauki projektowania oprogramowania (software design).
Ale nie teraz. Ooo nie! Teraz design oprogramowania oznacza Projekt Graficzny (Graphic Design). Co było złego w nazywaniu Projektu Graficznego, Projektem Graficznym? Co było złego w nazywaniu Projektantów Graficznych, Projektantami Graficznymi? Dlaczego mieliby odebrać nam nazwę naszego zawodu.
Byłem projektantem (designer) psia krew. Projektowałem systemy oprogramowania. Teraz mówię ludziom, że jestem projektantem oprogramowania i myślą, że jestem gościem od UX! Jak, do diabła, to się stało.
Cholerne dzieciaki! FORA ZE DWORA.


[1] Widzisz/ To jest to, co słowo "odpowiedzieć (respond)" znaczy. Odpowiadasz na bodziec. Ekran nie jest bodźcem. Ekran jest urządzeniem wejścia/wyjścia. Nie odpowiadasz na format urządzenia wejścia/wyjścia. Odpowiadasz na Użytkowników. Cholerne dzieciaki.

Powyższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.


18 czerwca 2018

Trochę O Wzorcach


Czy możesz wymienić Wzorzec Projektowy?
Wzorzec Projektowy? Masz na myśli te z lat 90-tych?
Tak, one stały się popularne w 1995. Chociaż są znacznie starsze.

Poniższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.


Była tam też książka, prawda?
Napisana przez czterech gości.
Właśnie tak, "Gang Czterech": Eric Gamma, Richard Helm, Ralph Johnson, i John Vlissides.[1]
To już raczej staroć i dziś nie na czasie, co?


Co masz na myśli?
Cóż, są nowsze książki.
Rzeczywiście, jest wiele nowszych książek na ten temat i niektóre są całkiem dobre; ale żadna nie jest tak wpływowa i wnikliwa jak oryginał.
Tak czy siak cały pomysł jest stary i trefny.
Trefny?
No tak, słyszałem, jak mówiono, że Wzorce Projektowe były wymyślone po to, żeby naprawić jakieś problemy w Programowaniu Zorientowanym Obiektowo.
Jakieś problemy? Jakie problemy?
No pojęcia nie mam. To tylko to, co słyszałem. Że, Wzorce Projektowe były tylko obejściem dla złych języków.
Złych języków? Jakich języków?
No nie wiem - no na przykład, może C++ albo Java. No wiesz Statycznych języków.
Może dziwnie to zabrzmi. Smalltalk, język dynamiczny, grał tam znaczącą rolę.
Cóż, w każdym razie, tak naprawdę nie da się ich zastosować w przyszłości, w Programowaniu Funkcyjnym i w ogóle.
O Niebiosa! Co za bzdury!
Cóż, to jest to co słyszałem.
Myślę, że słuchasz niewłaściwych ludzi.
To był tylko Twitter i Facebook i te rzeczy.
Aaa, rozumiem. Sieci Społecznościowe: Skarbnica wszelkiej mądrości i wiedzy.
Taaa, OK, rozumiem co chcesz przez to powiedzieć.
No mam nadzieję, ale żeby była jasność ....
To mówią politycy, którzy właśnie zamierzają cię okłamać.
.... (eeech) .... Posłuchaj .... Uważnie. Książka Wzorce Projektowe jest jedną z najważniejszych książek, jeżeli nie TĄ najważniejszą książką, traktującą o oprogramowaniu w przeciągu ostatnich 20 lat.
Oj, no daj spokój. Ona ma 20 lat. To znaczy, może była świetna w latach dziewięćdziesiątych; ale mamy jakby wiek dwudziesty pierwszy. Mamy Ruby. Mamy Clojure. Mamy Node, i Angular, i Rails i iOS i Platformy Mobilne i .... to znaczy ... Oprogramowanie zmieniło się bardzo! Wyrośliśmy z tych staroci.
Myślisz, że oprogramowanie zmieniło się w przeciągu ostatnich 20 lat?
Cóż, oczywiście! To znaczy ... No ba.
Musisz się jeszcze dużo nauczyć co znaczy słowo "Zmiana". W rzeczywistości, podstawy oprogramowania zmieniły się niewiele w przeciągu ostatnich czterech dekad.
Jak możesz tak mówić? To znaczy, zobacz na te wszystkie nowe rzeczy!
Masz na myśli błyskotki?
Błyskotki!! Nazywasz Rails, i Angulara, i Node'a błyskotkami?
Tak. Błyskotkami. Pobłyszczy przez chwilę, ale nie trwa to długo. Zawsze jest dużo błysku, za którym można pójść.
Ale są tam całkiem fajne pomysły w tych frameworkach. Jak możesz to nazywać błyskotkami?
Pomysły nie są błyskotkami. To frameworki są nimi. Większość pomysłów w tych frameworkach jest stara. Są z nami od dziesięcioleci. Te pomysły to ... Wzorce Projektowe.
Czekaj. Mówisz, że Active Record jest wzorcem projektowym?
Oczywiście, że jest. Lub raczej jest kilka Wzorców Obiektowych w środku Active Record. Active Record jest unikatową kombinacją wielu bardzo starych, wypróbowanych i prawdziwych wzorców projektowania oprogramowania.
OK. Zatrzymajmy się na chwilę. To co to jest wzorzec projektowy?
Wzorzec Projektowy jest nazwaną i uznaną formą połączenia struktur i procedur, które udowodniły swoją użyteczność na przestrzeni lat.
Nazwaną? Uznaną? Że, co?
Tak, każdy Wzorzec Projektowy ma swoją nazwę i uznany kształt. Profesjonalni projektanci oprogramowania używają tych nazw i kształtów do komunikowania się między sobą. Jeżeli widzą nazwę wzorca w oprogramowaniu, bądź rozpoznają kształt, od razu mogą poznać intencję projektanta.
Czy możesz podać mi jakiś przykład?
Pewnie, oto dwa, których nie ma w książce Wzorce Projektowe. Model-View-Controller i Wstrzykiwanie Zależności (Dependency Injection).
To są Wzorce Projektowe?
Oczywiście. Mają dobrze znaną nazwę i mają uznany kształt.
Rozumiem temat nazwy, ale o co chodzi z tym kształtem?
No więc, weźmy MVC. Oczekujesz, że będą tam trzy obiekty, obiekt modelu, obiekt kontrolera i obiekt widoku. Model zarządza regułami biznesowymi. Kontroler zarządza wejściem. Widok zarządza wyjściem.
I wrzucam modele, widoki i kontrolery w różne katalogi.
Eeech, cóż. Tak! W niektórych frameworkach stało się to częścią uznanej formy.
Co masz na myśli mówiąc w niektórych frameworkach?
Tylko tyle, że w oryginalnej specyfikacji MVC katalogi nie były wymienione. W rzeczywistości oryginalny kształt MVC jest dużo bardziej skomplikowany od tego co przed chwilą opisałem; ale to inna historia.
To znaczy, że jest w MVC więcej niż tylko trzy katalogi i trzy typy obiektów?
(chichot) Oooo, tak. Dużo, dużo więcej. Ale o tym później.
OK, zaczynam rozumieć pomysł. Jeżeli powiem "Wstrzykiwanie Zależności", wszyscy wiedzą dokładnie, co mam na myśli. Więc nie muszę się tłumaczyć.
Dokładnie. Pozwala to oszczędzić wiele czasu wtedy, kiedy wszyscy projektanci znają Wzorce Projektowe. Mogą po prostu, rozmawiać ze sobą używając tych nazw.
OK, czyli jeśli podążę za formą wzorca, to wszyscy będą wiedzieć czego mogą się spodziewać w kodzie.
Tak, właśnie. Poprzez podążanie za uznaną formą, odciążasz wszystkich innych od pracy odszyfrowania tego, co właśnie zrobiłeś. Oni rozpoznają kształt i mogą łatwo za nim podążać.
I mówisz, że jest mnóstwo tych wzorców?
Książka Wzorce Projektowe podaje nazwy i kształty dwudziestu trzech wypróbowanych i prawdziwych rozwiązań na częste problemy oprogramowania.
Hmmmm. Chyba powinienem był się ich kiedyś nauczyć.
Bez wątpienia! Czy potrafisz podać choć jeden?
Eee...
Chociaż jeden.
Eee...
Pomogę Ci. Fabryka Abstrakcyjna (Abstract Factory), Budowniczy (Builder), Metoda Wytwórcza (Factory Method), Prototyp (Prototype), Singleton, Adapter, Most (Bridge), Kompozyt (Composite), Dekorator (Decorator), Fasada (Facade), Pyłek (Flyweight), Pełnomocnik (Proxy), Łańcuch Zobowiązań (Chain of Responsibility), Polecenie (Command), Interpreter, Iterator, Mediator, Pamiątka (Memento), Obserwator (Observer), Stan (State), Strategia (Strategy), Metoda Szablonowa (Template Method), i Odwiedzający (Visitor).
Chyba mam dużo do nadrobienia
Tak, myślę, ze masz.

[1] John Matthew Vlissides odszedł 24 listopada 2005 roku. Był kolegą i przyjacielem. Pomógł mi wiele razy. Brakuje mi Go.




Powyższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.

11 czerwca 2018

My Programiści


Dobry


Gdzieś tam mały czerwony samochód sportowy zmierza w kierunku pasa asteroidów i to my programiści umieściliśmy go tam. Ooo, nie mam zamiaru umniejszać dokonań Elona Muska i wszystkich tych kosmicznych naukowców i inżynierów ze SpaceX. To była ich wizja i ich osiągnięcie. Ale oni nie mogliby tego dokonać bez nas.

Poniższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.


Pomyśl, przez chwilę, o tym całym oprogramowaniu zaangażowanym w ten projekt. Pomyśl o całej automatyce samego statku kosmicznego. Pomyśl o zdolności tych boosterów do wylądowania w duecie. Pomyśl o statecznikach sterujących, o stabilizatorach silnika, o przepustnicach. Pomyśl o kontroli naziemnej, i o protokołach komunikacyjnych, i ...
Pomyśl o tym, jak pracowali inżynierowie. Pomyśl o oprogramowaniu CAD / CAM. Pomyśl o maszynach CNC i oprogramowaniu do modelowania 3D. Pomyśl o symulacjach dynamiki płynów, analizie elementów skończonych, obliczeniach orbitalnych, arkuszach kalkulacyjnych, procesorach tekstu, e-mailach, SMS-ach, rozmowach telefonicznych...
Myślę, że widzisz, co chcę pokazać. Każdy malutki krok na ścieżce od marzenia do realizacji był oliwiony, umożliwiany, rozszerzany i ułatwiany przez oprogramowanie. Oprogramowanie, którego miliardy miliardów linii kodu napisaliśmy my programiści. [Tak, saganizm był zamierzony]
A teraz pomyśl co to oznacza dla naszej cywilizacji. Tak, to był znak - gest - zaledwie kropla w morzu możliwości. Ale co za kropla! Tylko pomyśl o tej zwykłej chucpie, ogromnym, żywiołowym, radosnym marnotrawstwie! To był paw okazujący swoje bogate pióra nad ogonem. To była antylopa widłoroga skacząca w górę w akcie zwykłego entuzjazmu. To był wyraz odrzucenia ograniczeń i nasza ochota do nonszalanckiego poświęcenia ogromnych zasobów w celu zrobienia małego kroku do spełnienia namiętnego marzenia.
To była wiadomość, którą wysłaliśmy do nas samych, i do całego wszechświata, mówiąc, że oto nadchodzimy i nic w tym wszechświecie nas nie powstrzyma. I to my programiści byliśmy tymi, którzy bardziej niż ktokolwiek inny umożliwili wysłanie tej wiadomości. To jest coś z czym Ty, ja, i wszyscy inni programiści powinniśmy czuć się bardzo dobrze.

Zły



Elaine Herzberg jest martwa. Została uderzona przez "autonomiczny" samochód przeprowadzając swój rower przez drogę. I to my programiści ją zabiliśmy. Ooo, nie mam na myśli tego, że jakikolwiek programista złośliwie, czy przez niedbalstwo napisał kod, który ją zabił. Ale, bez jakichkolwiek wątpliwości, to kod ją zabił.
Być może była tam, gdzieś w kodzie, instrukcja IF, która, przy odwrotnej wartości predykatu, uchroniłaby od wypadku. Albo być może była tam funkcja, która wygenerowałaby wynik różny o kilka bitów i to uchroniłoby od wypadku.
Możemy nigdy nie wychwycić tej instrukcji IF lub tej funkcji. Sieci neuronowe uczone maszynowo są zdradliwie trudne do zrozumienia. Nawet, gdy pliki logu samochodu zawierają wszystkie wejścia, i możemy powtarzać zdarzenie w kółko i w kółko, możemy nigdy nie zrozumieć, w głębinie wag, średnich i pętli zwrotnych, dlaczego samochód zachował się tak, jak się zachował.
Jedyne co możemy powiedzieć, to to, że my programiści napisaliśmy kod, który ją zabił. I to jest coś, z czym Ty, ja, i wszyscy inni programiści powinniśmy się czuć bardzo źle.

Brzydki

Jest przekonanie wśród programistów, że argumenty etyczne i moralność nie powinny brać udziału w naszych dyskusjach o dyscyplinach i praktykach. Ci, którzy mają takie przekonanie sugerują, że nasze praktyki i dyscypliny powinny być sprawą czystej logiki i ekonomii. Biorąc pod uwagę te dwa scenariusze powyżej uważam to za niepokojące. Mi wydaje się, że etyka i moralność stały się nieodłączne od wszystkiego, co my programiści robimy; ponieważ tak wiele zależy od jakości naszej pracy.

Nasze Motto

Już dawno minął czas, w którym my programiści mogliśmy bezpiecznie odizolować się od reszty świata. My programiści nie możemy dłużej chować się w naszych technologicznych bańkach. Kod, który my programiści piszemy ma znaczenie. Ma znaczenie dla nadziei i marzeń naszego społeczeństwa i naszej cywilizacji. Ma znaczenie dla ludzi przeprowadzających swoje rowery przez ulice. Ma znaczenie dla wszystkich i każdego, ponieważ kod, który my programiści piszemy oliwi, umożliwia, rozszerza i ułatwia praktycznie każdy aspekt naszego codziennego życia. Od czegoś tak małego, jak monitor oddechu, którym młoda mama sprawdza swoje dziecko, po coś tak ogromnego jak międzynarodowe polityki broni nuklearnej i podróże międzyplanetarne, nasz kod ma znaczenie.
Ostatnio Grady Booch twittnął coś, co myślę, że my programiści powinniśmy przyjąć jako nasze motto:
Każda linia kodu reprezentuje etyczną i moralną decyzję.


Powyższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.

Podstawy Programowania Funkcyjnego Epizod 3

Czy wszystkie Zasady Się Zmieniają? Kiedy tylko zaczynamy używać nowego paradygmatu , porównujemy z nim na...