Zen programowania
Od mojego ostatniego wpisu upłynęło wiele wierszy kodu. Przez ten czas opanowałem kilka nowych technologii i języków programowania. Przekonałem się też, że warto pisać testy do źródła nie tylko dla samego sprawdzenia programu. Ale po kolei …
Mniej więcej w połowie ferii zimowych, w trakcie trekking’ów narciarskich (na biegówkach rzecz jasna) odkryłem w sobie potrzebę opanowania jakiegoś języka paradygmatu funkcyjnego. Padło na Haskell, ponieważ najlepiej spełniał moją zachciankę, dążąc w swoich założeniach do minimalizacji kodu posiadającego tzw. „Efekty uboczne”. Dzięki temu kod już na początku swojego istnienia zawiera o wiele mniej błędów, niż jego imperatywna wersja. Czas przeznaczony przeze mnie na opanowanie idiomatycznej składni i nietypowego sposobu myślenia nie był czasem straconym, a programowanie znów stało się wielką przyjemnością. Każdemu chętnemu do pójścia w moje ślady polecam książki „Learn you a Haskell for great good”, „Real World Haskell”, „Haskell Road to Logic, Math and Programming” oraz kanał IRC #haskell istniejący w sieci freenode. Każda z siedmiuset obecnych tam non stop osób, stara się pomóc każdemu, kto tylko o to poprosi.
Doświadczenie mówi, że każde narzędzie powinno zostać dokładnie sprawdzone w praktyce, więc i mój nowy nabytek intelektualny musiał przejść szereg prób w warunkach bojowych. Zacząłem dlatego pisać webowy frontend serwisu internetowego, wspomagając się frameworkiem Happstack. Nie jest to biblioteka stworzona do wielkich projektów, więc szybko okazało się, że wyczerpałem jej możliwości. Będzie ona natomiast najodpowiedniejszym wyborem dla osób chcących stworzyć mały serwis na własny użytek. W charakterze bazy danych świetnie sprawdza się acid-state, rekomendowany przez autorów happstack’a. Jeśli z jakiś przyczyn jego użycie jest niemożliwe, wtedy konieczne może okazać się użycie HaskellDB i HDBC. Po tym rozczarowującym doświadczeniu spróbowałem czegoś innego — YesodWeb. Zapowiadał się świetnie, jednak dość szybko pokazał swoje prawdziwe oblicze — 100% zużycia procesora i czas kompilacji ciągnący się w nieskończoność. Zniecierpliwieni współuczestniczący w projekcie nijako wymusili na mnie użycie jakiegoś sprawdzonego i niezawodnego („normalnego”) rozwiązania. W ten sposób dzieło miesiąca pracy z Haskell’em zostało zniweczone z użyciem Django w niecałe 2 dni.
Rozważałem również użycie Ruby on Rails, jednak wtedy jeszcze nic nie wiedziałem o tej technologii. Obecnie uważam, że ruby to znakomity i uporządkowany język, a popularność rails’ów jest wysoce uzasadniona.
TBC
18 kwietnia 2012
Wstęp do paradygmatu obiektowego
Stworzenie programu komputerowego najczęściej sprowadza się to do wyrażenia jakiegoś algorytmu w postaci kodu źródłowego. Ta forma zapisu nie jest jednoznaczna, co oznacza, że ten sam algorytm można zapisać na wiele różnych sposobów. Kiedy pominiemy detale takie jak składnia konkretnego języka programowania, poszczególne implementacje będą różnić się tylko abstrakcyjnym sposobem opisu problemu — paradygmatem. Idee, które niesie ze sobą paradygmat obiektowy są dla nas bardzo naturalne o czym świadczy nasze odwieczne dążenie do sklasyfikowania i zdefiniowania otaczającego nas świata. Każda poprawnie sformułowana definicja jest pewnym szablonem, który z ogółu wybiera tylko spełniające ją elementy — „instancje definicji”. Dodatkowo definicje często składają się ze słowa kluczowego i zestawu cech odróżniającego je od definicji słowa klucza. Przenosząc powyższe fakty na język programowania obiektowego:
- definicja to klasa
- ‘instancja definicji’ to obiekt
- słowo kluczowe to klasa bazowa
- cecha obiektu to pole
Wyróżniamy jeszcze metody — pola, które zawierają funkcje (dla uproszczenia można przyjąć, że metody to funkcje wpływające na stan obiektu). Pozostało już tylko wspomnieć o czterech podstawowych filarach programowania obiektowego:
- Abstrakcja — działanie obiektu nie wymaga od niego ujawniania implementacji,
- Hermetyzacja — zmian w środowisku obiektu mogą dokonywać tylko jego własne metody,
- Polimorfizm — zachowanie obiektu może zależeć od kontekstu jego użycia,
- Dziedziczenie — klasy mogą być definiowane z użyciem innych — bardziej ogólnych.
I ot cała filozofia …
9 stycznia 2012
Wraca nowe
Od zawsze moja strona była poligonem doświadczalnym, używanym przeze mnie do testowania różnorakich rozwiązań webowych. Jej formę zmieniałem już siedem razy, jednak nigdy nie miałem czasu dodać treści. Tak więc po raz siódmy obiecuje sobie i innym „poprawę”. Co z tego wyjdzie — czas pokaże …
9 stycznia 2012