Wpis z mikrobloga

Skoro wszystko jest takie samo, to po co różne języki?
Po poprzednim krótkim zrównaniu wszystkich języków do wspólnego mianownika za co zapewne koledzy po fachu gotowi są mnie wyśmiać i spalić na stosie (stosie, hehe..) - pora powoli zmierzać w kierunku różnic.

To, co jest wokół języka - bo ten, jako prosty (bo logiczny…) zbiór reguł nie miałby sensu istnienia w próżni. Dlatego zwykle mowa o całym środowisku - od kompilator/interpreterów poprzez narzędzia na bibliotekach skończywszy.
Kod Pythona uruchamia się wprost z pliku źródłowego, podobnie PHP, a Jave trzeba wpierw skompilować. W praktyce to jedno polecenie więcej niż w Pythonie (który de facto przeprowadza wstępną kompilacje…). Z punktu widzenia “typowego” programisty - program się uruchamia taką czy inną metodą.

Inna, często spotykaną opcją przy aplikacjach webowych jest to, że program uruchamiany jest przez serwer - ale znowu - z punktu widzenia “typowego” programisty - dostarczasz serwerowi program w jakiejś formie. Czy trzeba go wcześniej skompilować, spakować, czy wrzucić po prostu pliki z kodem - kwestia, jak w większości, wtórna. Zwykle zautomatyzowana skryptem czy innym narzędziem. Ustawiana raz do końca projektu.

To, gdzie zaczyna się faktyczna różnica - to biblioteki.
Nieprzypadkowo języki z przepastnymi bibliotekami są najpopularniejsze:
- C/Cpp - historia - z początku alternatyw nie było wiele, przez lata powstały więc dobre, dopracowane, biblioteki i narzędzia - chyba nie odbiegnę wiele od prawdy pisząć, że jest tam po prostu wszystko.
- Java/C# - pieniądze. Od momentu premiery oba języki posiadały solidne zaplecze - zwyczajnie opłacone z pieniędzy korporacji które je tworzyły. To przyciągnęło społeczność która utworzyła kolejne wysokiej klasy narzędzia i biblioteki.
- Python - prostota, która pchnęła go w objęcia ludzi związanych z różnego rodzaju “nauką akademicką” zaowocowało rozwojem w kierunku mnóstwa pakietów do metod obliczeniowych, data mining, różnych problemów inżynieryjnych czy matematycznych.

Oczywiście, chyba każdy język ma jakąś formę wrapperów, przez co można korzystać w mniej lub bardziej prosty sposób z natywnych bibliotek wg. standardu C - acz z wielu względów które w obecnym profesjonalnym wytwarzaniu oprogramowania są istotne - nie jest to preferowana metoda.

Tutaj dochodzimy do tematu częstych wojen i wojenek - który język jest lepszy - a odpowiedź jest oczywiście jedna - ZALEŻY DO CZEGO!
Ja wychodzę z założenia, że tak naprawdę o zastosowaniu języka stanową jego biblioteki. I tak, mając do rozwiązania problem obliczeniowy, matematyczny czy inżynierski skłonie się w kierunku Pythona - praca z pynum to przyjemność. Nie wyobrażam sobie za to tworzenia klienta WebService w Pythonie - gdyż zdecydowanie lepiej rozwiązane jest to w Javie (generalnie generuje się “samo”). Nie wyobrażam sobie też pisania poważnej gry w C# które to za mnie zadecyduje o dokładnym czasie zwolnienia pamięci (ja wiem, wiem - Unity - ale Unity nakłada spore ograniczenia na ichnią wersje C#) - tutaj świat nie bez przyczyny żyje w C/Cpp.Z trzeciej czy czwartej strony - do prostego bloga pewnie wziąłbym PHP z WordPressem zamiast odpalać IISa czy nie daj boże WebSphere. Poważna aplikacja “bankowa” czy obsługa płatności bez wielostopniowych transakcji z serwerów aplikacyjnych Javy nie brzmi przyjemnie.
Podczas moich przygód z Unity problemem nie jest dla mnie język - problemem jest zrozumienie jak działa wszystko wokoło, jak działa Unity (czyli biblioteka). Dopisanie pluginu do WordPressa nie wywołuje u mnie mdłości ze względu na PHP (bo w PHP nie ma nic odkrywczego…) - ale ze względu na bibliotekę w postaci WordPressa).

Należy zapytać - czy zatem biblioteki, tak jak języki czy środowiska - nie są po prostu zbiorem paru koncepcji, bo i tak w gruncie rzeczy sprowadzają się do tego samego - tj. kodu wykonywanego przez procesor?
Odpowiedź, moim zdaniem, nie jest tutaj tak jednoznaczna - w przypadku języków czy narzędzi - chodzi o uproszczenie, uabstrakcyjnienie owego “kodu maszynowego”. Biblioteki i frameworki - to z kolei kolejny, jeszcze wyższy poziom abstrakcji. Celem ich istnienia nie jest udawanie komputera, a realizacja mniej lub bardziej wymyślnych paradygmatów. Jasne, mnóstwo elementów się powtarza czy jest wspólnych - wzorce projektowe nie są tylko akademicką teorią - jednak, przynajmniej dla mnie, mnogość i różnorodność ma tutaj zdecydowanie mniej zastosowanie - i dopiero tutaj zaczyna się prawdziwa “nauka programowania”

#abstrakcjaprogramowania !

W kolejnej czesci odpowiemy sobie na pytanie - co jest najwiekszym problemem wspolczesnego programowania, czy raczej "wytwarzania oprogramowania" - i co robi sie, w celu rozwiazania tego "problemu"!
  • 1
  • Odpowiedz