Wieża Babel. Skąd tyle języków programowania? (część 3 z 3)

Tekst jest oparty na mojej prezentacji z konferencji Kariera IT. Poprzednia część wpisu jest dostępna tutaj.

To ostatnia (po 1 i 2) część mojego krótkiego przewodnika po językach programowania. Zaczynam ją dwoma dość ekstrawaganckimi przykładami, by wreszcie przejść do podsumowań: który język do czego się nadaje i który może uczynić z Ciebie milionera! Na samym końcu znajdziesz quiz 🙂 – a także listę lektur, na wypadek, gdybyś chciał dalej zgłębiać wiedzę na ten temat.

Języki wyspecjalizowane – R

Do tej pory – w poprzednich dwóch wpisach – koncentrowałam się na językach ogólnego przeznaczenia. Dla równowagi chcę pokazać przynajmniej jeden język programowania z innej, bardziej specjalistycznej grupy.

R to język programowania i środowisko przeznaczone do obliczeń statystycznych i wizualizacji wyników. Oferuje zaawansowane wsparcie w dziedzinach takich jak analiza danych i uczenie maszynowe. R jest interpretowanym językiem proceduralnym. Ma pewne ograniczenia wydajnościowe (np. wszystkie dane przetwarzane przez program są w całości ładowane do pamięci podręcznej komputera). Kod R można łączyć z kodem napisanym w innych językach, takich jak C++.

Skoro zadania wykonywane w R można wykonać w C++, do tego kod w innym języku może działać szybciej, po co w ogóle dotykać R? W poprzednim wpisie z tej serii pojawił się punkt „Wydajność języka a wydajność programisty”. W R implementacja zadań związanych ze statystyką i analizą danych jest nieporównywalnie szybsza niż w językach ogólnego przeznaczenia. Programista nie musi pisać wielu linii, a wszystkie tradycyjnie używane w tej dziedzinie algorytmy (np. regresja liniowa) są od ręki dostępne w postaci funkcji.

Poniższy fragment kodu pochodzi z artykułu Producing Simple Graphs with R. Zobacz, jak łatwo można wyświetlić dane i ocenić, czy zachodzi między nimi korelacja.

Co dostaniemy po uruchomieniu programu (np. w środowisku R Studio)? RJeśli nie podoba Ci się myląca etykietac „samochody” przy osi y, na stronie z oryginalnym przykładem dowiesz się, jak go zmienić.

Nie tylko dla dzieci – programowanie graficzne

Istnieją języki programowania, które bardziej niż tekst w obcym języku przypominają… hieroglify. Programowanie polega nie na wpisywaniu poleceń, ale na przeciąganiu i upuszczaniu na planszy bloków symbolizujących poszczególne instrukcje.

Naturalnym odbiorcą tego typu przyjaznych środowisk są dzieci, co jakiś czas jednak powraca temat „rewolucji” w tworzeniu aplikacji przez (pół)profesjonalnych programistów – ostatnio za sprawą projektu Eve.

Przykład tego typu programu pojawił się w opublikowanym przeze mnie w międzyczasie (pomiędzy kolejnymi częściami serii o językach programowania) wpisie Kup swojemu dziecku sobie robota Lego Mindstorms. Znajdziesz tam kompletny opis „najtańszego programowalnego robota”, którego możesz zbudować z klocków Lego.

Poniżej „fragment kodu” dla takiego robota, którego w akcji możesz zobaczyć tutaj:

nxt-codeCo widać na rysunku? Nieskończoną pętlę, w której raz po raz odczytujemy kolor przesyłany przez czujnik światła (bądź koloru). W zależności od tego, czy robot znajduje się na linii (odczyt czarny) czy nie (odczyt biały) albo jedziemy prosto (obrót obu kół o tyle samo stopni), albo skręcamy w prawo.

Wydaje się to banalne, ale w taki sposób można tworzyć zaskakująco złożone programy, o czym przekonałam się kiedyś podczas zawodów programistycznych dla gimnazjalistów.

Który do czego?

Poniższa tabela zawiera wpisy dla tylko kilku spośród najpopularniejszych języków. Zdecydowanie nie wyczerpuje tematu – spójrz, ile pozycji ma lista języków programowania w Wikipedii.

Język Przeznaczenie (najsilniejsze strony) Paradygmat
C System
Operacje niskopoziomowe
Imperatywny
 C++ System Imperatywny
Obiektowy
Funkcyjny
 C# Szybkie tworzenie aplikacji okienkowych
Aplikacje klient-serwer
Aplikacje internetowe
Imperatywny
Obiektowy
Funkcyjny
 Erlang Aplikacje rozproszone
Telekomunikacja
Funkcyjny
 Haskell Aplikacje desktopowe i internetowe Funkcyjny
 Java Aplikacje serwerowe
Aplikacje mobilne (w tym Android)
Imperatywny
Obiektowy
Funkcyjny
JavaScript Aplikacje internetowe w przeglądarce, po stronie klienta Imperatywny
Obiektowy (prototypy!)
Funkcyjny
 Perl Skrypty
Przetwarzanie tekstu i dokumentów
Imperatywny
Obiektowy
Funkcyjny
 PHP  Aplikacje internetowe Imperatywny
Obiektowy
Proceduralny
 Prolog  Sztuczna inteligencja  Logiczny
 Python  Aplikacje internetowe
Skrypty
Imperatywny
Obiektowy
Funkcyjny
 R  Statystyka Imperatywny
Obiektowy
Funkcyjny
Proceduralny

Który da mi pracę?

Jeśli dopiero zaczynasz programować, jeśli myślisz o przekwalifikowaniu się, jeśli nudzi Cię Twoja obecna (może nawet informatyczna) praca, to pewnie zastanawiasz się, który z języków wybrać. O tym, który język najlepiej nadaje się jak pierwszy dla osoby, która nigdy wcześniej nie programowała, pisałam tutaj (tl;dr: Python).

Co z ofertami pracy? Gdybym miała odpowiedzieć bez namysłu, obserwując ruch na rynku pracy i wśród moich znajomych, powiedziałabym, że w Polsce dominują oferty dla programistów Javy (głównie serwerowej, czyli JEE) i, od niedawna, Pythona.

Na wszelki wypadek sprawdźmy też kilka poważnych źródeł.

A. Ranking RedMonk, oparty na popularności poszczególnych języków w repozytorium GitHub oraz na społecznościowej stronie z pomocą techniczną Stack Overflow (uwaga – prawdopodobnie zaniżona popularność języków używanych w firmach z zamkniętą bazą kodu).

Ranking RedMonk, oparty na danych z GitHub i Stack Overflow

1. JavaScript
2. Java
3. PHP
4. Python
5. C#
5. C++
5. Ruby
8. CSS
9. C
10. Objective-C
11. Perl
11. Shell
13. R
14. Scala
15. Haskell

B. Ranking zarobków programistów poszczególnych języków według Business Insider:

  1. Ruby on Rails
  2. Objective C
  3. Python
  4. JAVA
  5. C++
  6. JavaScript
  7. C
  8. R
  9. C#
  10. Visual Basic
  11. SQL
  12. PERL

C. Ranking na rok 2015 ze strony z konkursami programistycznymi CodeEval, oparty w dużej mierze na informacjach od pracodawców:

  1. Python
  2. Java
  3. C++
  4. C#
  5. Ruby
  6. JavaScript
  7. C
  8. PHP
  9. Go
  10. Perl

Bonus: Quiz!

Dla każdego z poniższych czterech fragmentów kodu spróbuj odpowiedzieć na następujące dwa pytania:

  • Jaki to język?
  • Co robi kod?

1. Na rozgrzewkę:

2. Dla spostrzegawczych:

 3. Na logikę:

4. Przypadek beznadziejny:

Poprawne odpowiedzi znajdziesz na dole strony.

PS.

Wróciłam ostatnio do grania na gitarze i doznałam nieoczekiwanego olśnienia informatycznego. C Sharp (zgodnie z zapisem C#) to po angielsku cis, czyli dźwięk o pół tonu wyższy od c 🙂

Polecane lektury

  1. Siedem języków w siedem tygodni. Praktyczny przewodnik nauki języków programowania (polskie wydanie Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages, polecam z całego serca!)
  2. Seven More Languages in Seven Weeks: Languages That Are Shaping the Future (kontynuacja poprzedniej pozycji, niestety na razie niedostępna w języku polskim)
  3. Programming Languages (kurs w portalu Coursera)
  4. Practical Foundations for Programming Languages (dla zaawansowanych)

Odpowiedzi do quizu

  1. Java, wypisze „dzień dobry”.
  2. C, wypisze liczbę Eulera (e), źródło: International Obfuscated C Code Contest.
  3. Prolog, rozwiązuje Sudoku, źródło: Programmable Life.
  4. Brainfuck, wypisze „Hello World”, źródło: Wikipedia.

Komentarze

Jedna myśl nt. „Wieża Babel. Skąd tyle języków programowania? (część 3 z 3)”

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *