eRIZ’s weblog

PHP, webdesign, Linux, Windows i inne, bo nie samym chlebem człowiek żyje
Serdecznie zapraszam do udziału w ANKIECIE

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… :S 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. :P

Ale może by tak ktoś napisał frameworka do Brainfucka? :P Promujmy!

A co sądzicie Wy, Czytelnicy? Czy grozi nam hello world w kilku tysiącach linijek?

13 komentarzy

dopisz swój :: trackback :: RSS z komentarzami

RSS z komentarzami :: trackback

Skomentuj

Możesz używać znaczników XHTML. Dozwolone są następujące tagi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Wszystkie komentarze przechodzą przez moderację oraz filtry antyspamowe. Nie zostanie opublikowany komentarz, jeśli:

  • Jego treść obraża kogokolwiek.
  • W treści znajdują się wulgaryzmy i słownictwo ogólnie uznane za nieprzyzwoite.
  • Mam wątpliwości co do autora wpisu (Wszelkie anonimy są kasowane - niezależnie od zawartości - wpisz prawdziwy e-mail. Jeśli usunąłem, Twoim zdaniem, komentarz niesłusznie - daj znać). Zdarza się, iż sprawdzam kim jest komentujący.
  • Zawiera jakąkolwiek formę reklamy.

Szufladka