Filozofia programowania – frameworki
Kto dzisiaj pisze aplikacje bez frameworków, hy? Znajdzie się ktoś? No dobra, może jacyś początkujący, ale tak, czy tak – prędzej, czy później – złapie za jakąś bibliotekę i będzie (oby ;)) rozwiązywać kolejne problemy. Kiedyś, kiedyś pojęcie frameworka było znane raczej tylko przez programistów Javy, w której pisanie bez zestawu odpowiednich bibliotek jest koszmarem (IMHO Java jest koszmarem ze względu na wydajność działających aplikacji :P).
Dzisiaj w praktycznie każdym języku programowania mamy do wyboru co najmniej kilka różnych frameworków.
sens?
Czas, to pieniądz
, to powiedzenie nie omija również świata zwykłych klepaczy kodu (kadzących?). A że zgodnie z kodeksem chakiera nigdy nie lubi się nudzić, więc chce sobie jakoś ułatwić swoją nędzną, wielobajtową egzystencję nie zawracając sobie gitary takimi pierdołami, jak np. zamykanie połączeń, obsługa protokołów, itp. Apogeum lenistwa występuje IMHO w Javie, gdzie garbage collector działa nawet jako osobny wątek. No i ten pomysł jednak się przyjął, gdyż inne języki sobie zaimplementowały uleniwiacza…
To były takie skrajne przypadki, ale do rzeczy. Piszę akurat o frameworkach, gdyż patrząc na coraz to nowsze twory zaczynam się zastanawiać, w jakim kierunku to wszystko zmierza. Skupię się tu bardziej na przypadku PHP, gdyż to w nim najwięcej kadzę. Frameworków powstało multum, w PHP5 poprawiono jako tako obiektówkę, co pozwoliło na zbieranie do kupy wszystkiego, co porozrzucane po całym projekcie.
Jakiś czas temu rozgryzałem Cake’a, przyznam, że nie było to zbyt przyjemne starcie. Przeciętny współczesny framework tak naprawdę tworzy nowy język programowania, nowe metody, których albo zabrakło w pierwotnym środowisku, albo stanowią ułatwiacz dla kodera. Niestety, wygoda idzie w przeciwnym zwrocie do wydajności. I tak, zamiast jakichś prostych konstrukcji, to w skrajnych przypadkach, w obiekty niedługo będzie się wciskało zwykłe „pierdnięcie”.
wzorce (projektowe :P)
A ile to już tzw. powstało… Huh, sporo nawet. Nad nimi nie mogą już zapanować twórcy danego języka programowania, powstają IMHO „z buszu”, tak naprawdę każdy może zrobić coś po swojemu, przekonać do stosowania odpowiednią grupę ludzi i wio. Chociażby przekazywanie zmiennych globalnych do konkretnej funkcji. Metod jest co najmniej trzy – Singleton, Registry, czy przekazywanie referencji w parametrach funkcji. Każde rozwiązanie ma swoje wady i zalety, zwolenników jest co najmniej tylu, ile rozwiązań.
I jak tu się dogadać? Jak wybrać najlepsze rozwiązanie? Moim zdaniem, nie da się. Taaa, nie da się. Zaproponujesz jedno rozwiązanie, zaraz odezwą się zwolennicy drugiego i będą piętnować pozostałe. Ot tak, jak odwieczna wojna obozów Windows-Linux.
Zadać jeszcze pytanie, który framework jest najlepszy, to już masochizm, pole do flamewaru…
fanatyzm?
To określenie coraz częściej przewija się w mojej głowie patrząc na problemy użyszkod… użytkowników różnych bibliotek. No tak. Niedługo do wyświetlenia hello world będzie inicjowanych kilkanaście obiektów, które wyciągną jakieś zupełnie niepotrzebne pierdoły.
Zadając pytanie leśne: po kiego grzyba?
No ludzie, przecież trzeba czasem zachować i umiar…
No rozumiem użycie frameworka w celu zmajstrowania jakiegoś zestawu bibliotek, które zautomatyzują często implementowaną funkcjonalność. Ale wynajdywania koła na nowo już zupełnie nie zdzierżę, jak to ma miejsce w np. Cake’u. Dawno miałem z nim styczność, ale przyznam, że funkcje samego języka stanowią mniej niż kilka, może kilkanaście procent całego kodu aplikacji. Reszta, to odwołania do obiektów. No i pseudofunkcje, które bardzij odwołują się do formy, a nie treści. Co z tego, że wygodniutkie, jak is_callable jest wywoływane kilkadziesiąt razy? Wydajność? Phi… Nie ta epoka, to nie C64.
Wielu się pewnie zasłoni, że takie rozwiązania umożliwiają uniezależnienie logiki od środowiska. Ale tak naprawdę, to czy w ten sposób osiągnie się maksimum efektów? Chociażby warstwy abstrakcji baz danych. Generowanie prostych zapytań przez sklejanie elementów tablicy. Albo pobieranie struktury bazy za każdym razem… Koszmar, jakich czasów ja dożyłem?
Zmiana silnika bazy danych, to są naprawdę małe przypadki (mam na myśli rozwiązania dedykowane, a nie skrypty do udostępniania), poza tym – można pójść na kompromis i stworzyć obiekty, które zawierają odpowiednie zapytania dostosowane do konkretnego systemu. Przecież można nieraz przerzucić odpowiednie instrukcje do procedur bazy…
herezje
Pewnie niektórzy z Was zaczną mnie teraz mieszać z błotem, że jestem nie z tej epoki
, że jestem staroświecki, mało elastyczny, czy jeszcze jakieś inne określenia. Owszem, jestem z poprzedniej epoki. 640 KiB wystarczy!
Jakoś programiści tworzący dla demosceny są w stanie wycisnąć wszystko max.
Patrząc tendencyjnie, to odnoszę wrażenie, że z roku na rok przybywa coraz więcej powodów do zastanawiania się… Chociażby wzorce projektowe. Cóż, nic nie stoi w miejscu, kto stoi w miejscu, ten się cofa
. Ale rozwijać się trzeba z głową, a nie wg owczego pędu.
Najbardziej zaskakuje mnie jednak to, że napisanie jednej biblioteki jest w stanie wypromować wymarły język. Tak było np. w przypadku Ruby i frameworka Rails… Nie pałam do niego sympatią, nie kryję tego.
Ale może by tak ktoś napisał frameworka do Brainfucka? Promujmy!
A co sądzicie Wy, Czytelnicy? Czy grozi nam hello world w kilku tysiącach linijek?
hmm, może ten sfabrykowany wywiad Ci powie po co: http://www.erenkrantz.com/Humor/FakeIEEEStroustrupInterview.shtml
A i drugi artykuł na slashdocie: http://slashdot.org/developers/00/02/25/1034222.shtml o rozwoju C++
W chwili obecnej Java bardzo się zmienia są zastosowania gdzie jest bardziej wydajna niż C++:
http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
oczywiście jeśli nie napiszemy sobie sami modułów do zarządzania pamięcią
(czy ktoś z nas chce pisać wszystko od 0 i wszędzie? – w końcu czas to pieniądz) a kod zarządzania pamięcią ma notke „This code is not written for elegance or security or whatever is simply a test in order to see if the memory result achived whit java is comparable with c++. I added 21 lines of code.”.
Hmm, jeśli chodzi o język każdy jest specyficzny, ale Java wydaje się być dobrym rozwiązaniem – piszesz raz i kompilujesz raz – uruchamiasz wszędzie.
Do tego masz wsparcie dla urządzeń mobilnych, apletów, JavaFX (czyli też OpenGL), możesz tworzyć obiektowo proste aplikacje wbudowane (embedded – SunSpot, Android, J2ME itd.) w Javie.
I znów zaczynam flame i wychodzę na fanboya Javy, no ale co tam – wole to niż wyjść na fanboya C#.
ps: zapomniałem o ważnej rzeczy: Java ma wsparcie komercyjne (Sun Microsystems), a pisanie kodu „tylko raz” ma swoje korzyści
np: nie masz wielu dyrektyw: „#ifdef __WINDOWS__” przez które wypada się czasami przebić (C/C++) ;). I wiem, że się nie zgodzisz z moim zdaniem w tej kwestii (też lubię programy w C/C++ bo są szybkie i mało pamięci zjadają – na ogół), ale próbuję się przekonać do Javy.
pps: Aplikacje biurkowe mogą być pisane w Javie (tak te których używa „pani Krysia” w gazowni), bo i tak co taka aplikacja może liczyć, jak dużą listę trzymać w pamięci? A jeśli gazownie przeportuje się na OSX, Linux, cokolwiek innego, Ona nie będzie musiała uczyć się obsługi systemu (gazowni) na nowo – dla mnie to dobry powód. Tak pisze, ten komentarz i pisze, w sumie nic sensownego z niego nie wynikło … każde zastosowanie ma swoje plusy i minusy – C++ z QT/GTK może dać prawie to samo co Java (tylko trzeba znać te wszystkie niuanse), język projektu to wybór kadry zarządzającej najczęściej, bo nie ma jednego języka który zadowoli wszystkich.