Języki programowania z perspektywy początkującego

Co tu dużo mówić czy pisać, umiejętność choćby podstawowego programowania nabiera przy stosowaniu komputera coraz większego znaczenia.Problem w tym,że łatwo powiedzieć,że się uczyć,pytanie brzmi przecież CZEGO się uczyć. Są tysiące języków programowania,nowe powstają każdego roku.Oczywiście są pewne standardy i najpopularniejsze języki.Niewątpliwie.Ale to nie pomaga tak do końca.

Generalnie na początek warto zapoznać się z tym,co napisał w różnych tematach np. gynvael.coldwind:

[na forum 4programmers], [na blogu gynvaela – poradnik początkującego programisty ]

Zasadniczo – nie sposób się z tym nie zgodzić, jeśli chodzi o naukę, gorzej jeśli chodzi o wybór preferowanego języka na którym warto się skupić ostatecznie.

Oczywiście dla każdego coś miłego,każdy język ma swoje zalety i wady co mówią przecietni absolwenci studiów informatycznych – no ale,na litość Boską –  czy w tym szaleństwie nie należałoby poszukać jakiejś metody ?

Ostatnio NSA wsparła badania na uniwersytecie Carnegie-Mellon nad językiem programowania Wyvern [Wikipedia] [strona domowa] którego zastosowanie miałoby na celu ogarnięcie jakoś wszystkich języków stosowanych do programowania w internecie w jednym narzędziu. Czy chodzi o inwigilację ? No niekoniecznie (choć to możliwe), chodzi też o problem łączenia funkcjonalności różnych języków i związanego z tym bezpieczeństwa. A łączenie kodu niewątpliwie jest jeden z koszmarów programistów którzy zajmują się również innymi problemami jak technologie związane z siecią. Jednak Wyvern jest dopiero projektem badawczym i co z niego wyjdzie to jedna wielka niewiadoma. I Wyvern to chyba jednak głównie aplikacje sieciowe.Tymczasem problem z użyciem wielu języków nie jest tylko problemem sieci.

Jest co prawda Lisp, ze swoimi implementacjami – teoretycznie można zaprogramować w nim wszystko – tylko jak to będzie wydajne i kto by chciał pisać wszystko w Lispie ? To potężny język,ale i mało wygodny język stąd stosunkowo niewielu programistów odważy się w nim programować,niewielu też poradzi z nim sobie. Osobiście wiem,że na pewno kiedyś powinienem się go nauczyć.Ale raczej później jak wcześniej.

Z drugiej strony mamy takie dość potężne cuda dla leniwych jak Haskell czy Go [Wiki: PL, ANG]. Z Go jeszcze nie eksperymentowałem,ale Haskell faktycznie wygląda na bardzo ciekawe narzędzie. Jednak typowo zawodowym programistom przydadzą się inne,bardzo przenośne języki takie jak Java i C#. Wreszcie – jest (wbrew pozorom nie taki łatwy) klasyk jak C którego rozszerzeniami są C++, oraz Objective-C i C# Microsoftu. Istnieje też póki co mało popularny język D.

W dodatku jest całkiem sporo języków działających w oparciu o maszynę wirtualną Javy. – Scala, implementacja Ruby o nazwie JRuby i wiele wiele innych. Jeśli dołożyć do tego frameworki,to można się w tym wszystkim pogubić.

Oczywiście istnieją pewne generalizacje:

Języki takie jak Pascal,C,C++,Fortran,Ada są generalnie kompilowalne -stąd są wydajne i bardziej dostosowane do konkretnego urządzenia. Dostosowanie to jednak może być obosieczną bronią (brak uniwersalności). Poza tym możliwość pełnego wykorzystania mocy obliczeniowej i rozkazów procesora zależy od kompilatora. Intel dla swoich mikroprocesorów stworzył np. dedykowany kompilator,który o te kilka procent (o które się walczy) jest podobno lepszy od gcc.

Java i C# to przykłady języków uniwersalnych,korzystających z tzw. maszyny wirtualnej i kodu bajtowego,stąd pomiędzy procesorem a programem istnieje tłumacząca warstwa software.Generalnie Java w ostatnich latach stała się dużo szybsza,niemniej kod bajtowy dzięki swojej niezależności od procesora nie jest też w stanie w pełni korzystać z jego możliwości i z reguły bywa wolniejszy.

Wreszcie klasyczne języki skryptowe potrafią operować na tekście z komendami,co czyni je często jeszcze wolniejszymi. Mimo to,nie znaczy to,że nawet takie języki które niemal nie są godne nazwy język programowania – jak VBA czy Cobol nie będą działać.

Jeśli chodzi o bardziej specyficzne języki:

  • Języki typowo sieciowe:
    • Java Script – jest językiem skryptowym dla stron http://www.Nie jest on w pełni kompatybilny z klasyczną Javą.Działa po stronie klienta.
    • PHP jest chyba podstawą współczesnych technologii internetowych jako język działający po stronie serwera
  • Języki najniższego poziomu – klasa języków Asembler. Nie istnieje jeden asembler,ponieważ każdy standard asemblera jest ściśle związany z urządzeniem / grupą urządzeń.
  • Języki typowe dla programowania wieloprocesorowego odpornego na awarie i współbieżnego z założenia: np. Erlang (Choć są i inne języki lub ich szczególne implementacje które też mogą do tego posłużyć.
  • Języki tworzone z myślą o przetwarzaniu języka,zwłaszcza Prolog czy Ciao – moim zdaniem, jego bardzo ciekawa implementacja.
  • Sprzętowe języki HDL – jak np. VHDL i Verilog.
  • Inne egzotyczne języki będące dziś raczej mało użyteczną ciekawostką. Do takich interesujących ciekawostek zaliczam języki QCL , LanQ i QML. Mogą być one za jakiś czas,  gdy pojawią się prawdziwe komputery kwantowe w miarę przydatnym narzędziem – a jeśli nawet nie, to być może zapoznanie się z nimi i ich specyfiką może być teoretycznie przydatne w pracy z komputerami kwantowymi.

Jednak przede wszystkim – przy wyborze języka programowania faktycznie trzeba uwzględnić również takie fakty,jak:

  • Popularność języka – ze względu na dostępność kodu
  • Własne preferencje nabyte w trakcie programowania.

Jeśli chodzi o popularność języków programowania,to istnieją powszechnie dostępne i aktualne statystyki:

Dla przykładu statystyki z serwisu github:

http://githut.info/  i http://adambard.com/blog/top-github-languages-for-2013-so-far/ – wyniki te jednak nie są do końca miarodajne ze względu na długość kodu jaki zazwyczaj jest tworzony w językach skryptowych,oraz preferencję dla projektów OpenSource w tych statystykach.

Bardzo interesujące wydają się też wyniki ze strony http://langpop.com/   Uwzględniają one nie tylko klasyczne projekty open-source, ponadto w istocie oprócz ilości projektów ważny jest również ich rozmiar. Co najlepsze te dane statystyczne można dowolnie skalować.

Przykładowy uśredniony wynik wygląda następująco:

Co ciekawe jednak – SQL nie wydaje się przecież w gruncie rzeczy pełnoprawnym językiem programowania w klasycznym zrozumieniu tego określenia.To język manipulacji danymi ! Nie zmienia to jednak faktu,że jego znajomość to we współczesnej branży informatycznej jedna z podstaw,nawet pomimo faktu,że model relacyjny i sam język SQL są tylko najpopularniejszym rozwiązaniem,a inne rozwiązania jak najbardziej istnieją.

Wróćmy jednak do bardziej klasycznych języków programowania. istotne, warto poznać pewne porównania języków programowania jakie oferuje wikipedia. Wskazany artykuł Wikipedii naprawdę robi wrażenie pod względem kompleksowości oceny; moim zdaniem warto to przeczytać. Warto też zapoznać się z opiniami na temat szybkości języków programowania dostępnymi na stronie http://benchmarksgame.alioth.debian.org i blogu Guillaume Marceau.

Na podstawie zebranych informacji można stwierdzić następujące istotne fakty:

  1. Oczywiście do nauki programowania nie wystarczy jeden język. Warto też zacząć od języków skryptowych,czy nieco „łatwiejszych” języków o większych możliwościach (np. Java). Niewątpliwie Java jest najpopularniejszym i najbardziej przenośnym standardem,a jej szybkość w zasadzie niemal dorównuje dziś językom kompilowalnym.
  2. Język C i języki pochodne wciąż się bardzo liczą, nawet pomimo swoich wad. Jest tak ze względu na dużą wydajność i elastyczność tego języka oraz jego długotrwałą popularność.
  3. Pomimo stosunkowo  wysokiego bezpieczeństwa i wydajności język Ada jest raczej mało popularny. Zapewne ze względu na przydługawe instrukcje. Wydaje się jednak,że kolejne języki programowania powinny skorzystać z części rozwiązań języka Ada.

Podsumowując:

Oczywistym wnioskiem jest,że długofalowo (jeśli chodzi o rynek pracy i najczęściej używany kod) konieczne jest opanowanie języków oprogramowania takich jak C i Java. Problemem jest wybór kolejnych języków programowania.

Ponadto wydaje się, że obecnie sensownymi,priorytetowymi językami do rozpoczęcia nauki programowania ( jeśli nie zaczyna się od języka Java) powinno być opanowanie języka Python, Perl lub wręcz posługiwanie się narzędziem takim jak JavaScript . Spośród wymienionych narzędzi, moim zdaniem to Python wydaje się najbardziej perspektywiczny jako samodzielny i użyteczny język (choć czy jest niezbędny to inna sprawa).

Ponadto interesującą decyzją jest specjalizacja bądź wybór dodatkowego języka stosowanego w rzadszych sytuacjach. Jak wspominałem,w kontekście oszczędności czasu programisty, moim zdaniem, szczególnie interesującym i godnym rozpatrzenia rozwiązaniem jest język Haskell – zwłaszcza ze względu na próby wykorzystania go w projektowaniu hardware (projekt CλasH)

Na większą uwagę zasługuje też bez wątpienia język Erlang, ze względu na zastosowanie rozwiązań, które pozwalają utrzymać stabilność oprogramowania w czasie rzeczywistym,nawet pomimo uaktualniania kodu..Innym,użytecznym rozwiązaniem może być (stosunkowo mało dziś znane narzędzie będące implementacją Prologu) Ciao bądź któraś z implementacji języka Lisp.

Moje osobiste wrażenia ? Osobiście uważam,że język C jest piękny ze względu na wiele operacji które można opisać pięknymi matematycznymi znakami specjalnymi zamiast długich słów, Pascal (którego dawno,dawno temu musiałem używać) jest na pierwszy rzut oka podobny do Ady (którą chyba jednak znieważono nazywając jej imieniem ten język) – tyle,że w przeciwieństwie do Ady, Pascal  naprawdę nie może uchodzić za nic szczególnie pięknego ani bezpiecznego. Java – po namyśle nie wydaje się już zabawką, a nawet coś tak niegodnego uwagi liczących się programistów jak VBA (którego uważam za taki COBOL na sterydach) dowiodło kiedyś,że może kiedyś uratować tyłek w pracy biurowej (jeśli pracuje się poniżej kwalifikacji np.) – co nie znaczy,że zamierzam się kiedykolwiek nauczyć pisać cokolwiek w VBA bez podręcznika. (Pewne rzeczy są po prostu poniżej godności). Zadziwiło mnie też kiedyś,że dziadek Fortran tak mocno się trzyma.

Ale pomimo tego,że COBOL podobno jest tak szeroko używany w finansach to podtrzymuję opinię wielkich guru programowania takich jak Dijkstra: „używanie COBOL-a kaleczy mózg, nauczanie COBOL-a powinno być uznane za przestępstwo”. Serio.Widziałem przypadkowy kod. Pascal i Ada wydają się przy tym więcej,niż piękne…

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s