Aplikację internetową można stworzyć w dowolnym języku programowania. Dlaczego zatem języki takie jak: PHP, Python czy Ruby zdobyły tak dużą popularność, podczas gdy inne, są wykorzystywane sporadycznie? Dlaczego język Java – dziś bezapelacyjnie najpopularniejszy język programowania – jest internetowym przeciętniakiem? Czy można wyróżnić pewne cechy języków, które sprawiają, że proces tworzenia aplikacji internetowych jest łatwy, szybki i przyjemny? Spróbujmy skatalogować języki pod kątem ich użyteczności w Internecie.
Interpretowane a kompilowane
Program napisany w języku kompilowanym, zanim zostanie uruchomiony musi zostać skompilowany do kodu maszynowego. Co więcej, kompilator zazwyczaj tworzy kod maszynowy, który działa jedynie na określonej architekturze np. tylko na procesorach x86. Niektóre języki, jak na przykład Java, kompilują kod źródłowy do kodu pośredniego zwanego bajtkodem. Taki kod pośredni jest następnie wykonywany przez maszynę wirtualną.
Programy napisane w językach interpretowanych, są wykonywane przez interpreter linijka po linijce i nie muszą być wcześniej skompilowane. Programista nie musi podczas każdej edycji kodu źródłowego kompilować programu, co w środowisku w którym modyfikacje kodu są codziennością jest ogromną zaletą. Języki interpretowane chociaż pochłaniają więcej zasobów systemowych i są wolniejsze od kompilowanych, to jednocześnie oszczędzają najcenniejszy zasób – czas programisty.
Obiektowe, proceduralne czy funkcyjne
Dominującym dziś paradygmatem w programowaniu jest paradygmat obiektowy. Jest to sprawdzona technika budowania średnich i dużych programów komputerowych. Na przestrzeni lat technika ta wykształciła wzorce projektowe, czyli sprawdzone sposoby rozwiązywania najczęstszych problemów. Istnieją także i inne paradygmaty, jak choćby programowanie strukturalne czy funkcyjne. Niektóre języki programowania są multiparadygmatowe, co znaczy, że pozwalają wybrać programiście sposób myślenia o programie jako np. o zbiorze obiektów, bądź jako o zbiorze procedur. Przykładowo PHP umożliwia programowanie zarówno obiektowe jak i proceduralne. Inne języki starają się promować tylko jeden paradygmat. Przykładowo Java i Ruby są językami czysto obiektowymi (wszystko jest obiektem).
Większość programistów tworzy dzisiaj programy zgodne z podejściem obiektowym i przekonanie ich do programowania np. funkcyjnego, jest bardzo trudne ze względu na długą krzywą uczenia. Nauka drugiego języka obiektowego jest łatwiejsza niż nauka nowego paradygmatu programowania. To tłumaczy dlaczego Lisp, mimo silnych matematycznych fudamentów, nie cieszy się dużą popularnością w sieci.
Paradygmat obiektowy ma jeszcze jedną zaletę – najpopularniejszy obecnie język modelowania czyli UML. Wielu programistów nie wyobraża sobie komunikacji wewnątrz zespołu bez tego języka.
Nie twierdzę, że programowanie funkcyjne skazane jest na powolną śmierć. Projekty takie jak Clojure czy NodeJS pokazują jak mocny jest ten paradymat programowania. Co więcej, funkcje są lepszą abstrakcją w środowisku wieloprocesorowym niż obiekty (ze względu na brak tzw. efektów ubocznych), co w przyszłości może oznaczać drugą młodość programowania funkcyjnego.
Dynamiczne i statyczne
Języki dynamiczne podczas działania programu wykonają wiele operacji, normalnie wykonywanych na etapie kompilacji. Do działań tych zaliczamy: dołączanie kodu, rozszerzanie definicji klas, zmianę typów zmiennych. Dzięki tym mechanizmom możliwe jest tworzenie kodu bardziej zwięzłego i elastycznego. Programiści zwolnieni są z definiowania każdej zmiennej, co z jednej strony znacznie zmniejsza ilość kodu do napisania, ale z drugiej strony, może przy nieuważnym kodowaniu generować trudne do wychwycenia błędy.
Wysokiego poziomu i bardzo wysokiego poziomu
Językami wysokiego poziomu nazwano języki takie jak C czy C++ . W odróżnieniu od języków asemblerowych, kod w takim języku jest czytelny dla człowieka i składa się ze słów pochodzących z języka angielskiego. Języki takie jak Ruby są czasami określane jako języki bardzo wysokiego poziomu ponieważ umożliwiają pisanie kodu jeszcze bardziej zbliżonego do języka naturalnego. Oczywiście kwestia czytelności kodu jest zawsze rzeczą subiektywną.
Poniżej znajduje się program generujący liczby pierwsze napisany w Perlu i Ruby. Który kod jest bardziej czytelny?
Perl
$o=1;{$_{$o}=print$o.$/if++$o&& !grep!($o%$_),keys%_;redo}
Ruby
list = []
gen = Prime.new
100.times {list << gen.succ}
Język programowania powinien być maksymalnie czytelny. Wiele osób zachwyca się magicznym jednolinijkowym kodem takim jak powyższy przykład w Perlu. W rzeczywistośći pisanie większych programów w ten magiczny, hakerski sposób, przynosi więcej problemów niż korzyści. Po pierwsze, nie wiadomo czy osoba pisząca taki kod będzie go w stanie odczytać rok później, po drugie, szanse na to, że ten kod szybko zrozumie inny programista są minimalne. Dlatego zasada najmniejszego zaskoczenia powinna zawsze być przestrzegana przez programistów.
Podsumowanie
Wymieńmy cechy idealnego języka do pisania aplikacji WWW . Z pewnością powinien to być język co najmniej wysokiego poziomu. Pozostałe cechy są na tyle dyskusyjne, że trudno jednoznacznie określić, które rozwiązania są lepsze. Zarówno języki kompilowane jak i interpretowane mają swoich zwolenników jak i przeciwników. Kiedy przyjrzymy się najbardziej popularnym językom, zauważymy że tworzą one dwa obozy. Pierwszy obóz stanowią języki statyczne i kompilowane takie jak Java oraz C#, drugi języki interpretowane i dynamiczne takie jak Python, PHP i Ruby.