Jaki język programowania wybrać


Spis treści

     1 Określenie żądanych cech języka
          1.1 Krok 1: Cel
          1.2 Krok 2: Przeznaczenie
          1.3 Krok 3: Platforma
          1.4 Krok 4: Środowisko programistyczne
     2 Wybór na podstawie przedsięwzięcia
          2.1 Krok 1: Wyznaczone zadanie
          2.2 Krok 2: Programowanie wspólnie z inną osobą
          2.3 Krok 3: Metodyka tworzenia oprogramowania
     3 Propozycja dla początkujących
          3.1 Krok 1: Zrozumienie idei programowania
          3.2 Krok 2: Zrozumienie działania systemu
          3.3 Krok 3: Specjalizacja zadań
          3.4 Krok 4: Poznanie teorii i doskonalenie
     4 Cechy popularnych języków programowania
          4.1 Języki ogólnego przeznaczenia
               4.1.1 Assembler
                    4.1.1.1 Kompilatory i środowiska
                    4.1.1.2 Metodologie
                    4.1.1.3 Wsparcie programowania multimediów
                    4.1.1.4 Programowanie systemów operacyjnych i urządzeń peryferyjnych
                    4.1.1.5 Komentarze
               4.1.2 Pascal, ObjectPascal
                    4.1.2.1 Kompilatory i środowiska
                    4.1.2.2 Metodologie:
                    4.1.2.3 Wsparcie programowania multimediów
                    4.1.2.4 Programowanie systemów operacyjnych i urządzeń peryferyjnych
                    4.1.2.5 Komentarze
               4.1.3 Delphi, Delphi .NET
                    4.1.3.1 Kompilatory i środowiska
                    4.1.3.2 Metodologie
                    4.1.3.3 Wsparcie programowania multimediów
                    4.1.3.4 Programowanie systemów operacyjnych i urządzeń peryferyjnych
                    4.1.3.5 Komentarze
               4.1.4 C/C++
                    4.1.4.1 Kompilatory i środowiska
                    4.1.4.2 Metodologie
                    4.1.4.3 Zastosowania
                    4.1.4.4 Komentarze
               4.1.5 C#
                    4.1.5.1 Kompilatory i środowiska
                    4.1.5.2 Wsparcie programowania multimediów
                    4.1.5.3 Komentarze
               4.1.6 Java
                    4.1.6.1 Kompilatory i środowiska
                    4.1.6.2 Metodologie
                    4.1.6.3 Wsparcie programowania multimediów
                    4.1.6.4 Programowanie systemów operacyjnych i urządzeń peryferyjnych
                    4.1.6.5 Wsparcie dla aplikacji sieciowych
                    4.1.6.6 Komentarze
               4.1.7 Python
                    4.1.7.1 Kompilatory/interpretery
                    4.1.7.2 Metodologie
                    4.1.7.3 Najczęstsze zastosowania
                    4.1.7.4 Komentarze
          4.2 Języki do obsługi stron internetowych - po stronie serwera
               4.2.1 PHP: Hypertext Preprocessor
                    4.2.1.1 Środowiska
                    4.2.1.2 Metodologie
                    4.2.1.3 Wsparcie programowania technologii
                    4.2.1.4 Programowanie urządzeń peryferyjnych
                    4.2.1.5 Komentarze
          4.3 Języki opisu oraz przetwarzania tekstu i danych
               4.3.1 Regex (wyrażenia regularne)
                    4.3.1.1 Kompilatory/interpretery
                    4.3.1.2 Metodologie
                    4.3.1.3 Komentarze
               4.3.2 XSL (XHTML, XSLT, XSL, XPath, XQuery, XSQL)
                    4.3.2.1 Kompilatory/interpretery
                    4.3.2.2 Metodologie
                    4.3.2.3 Komentarze:



Porada ta znalazła się tutaj, gdyż stanowi sedno działu FAQ (Frequently Asked Questions - Często Zadawane Pytania). Jest jednym z najczęściej zadawanych pytań, jakie okazje mają gościć na tym forum. Niniejszy tekst ma za zadanie pomóc Tobie, użytkowniku, w odpowiedzi na to pytanie, jednak sam nie zawiera bezpośredniej odpowiedzi, a jedynie wskazówki, czym się kierować, przy podejmowaniu decyzji.

Określenie żądanych cech języka



Krok 1: Cel



Określenie celu jest podstawowym pytaniem, od którego należy rozpocząć wybór języka. Z bardzo dużym prawdopodobieństwem zaliczasz się do przynajmniej jednej z kategorii:
  1. Chcesz się uczyć programowania z własnej, nieprzymuszonej woli.
  2. Masz ochotę zrealizować określony projekt.
  3. Interesują cię nowe technologie lub zagadnienia
  4. Chciałbyś zaimponować kolegom, znajomym, wykładowcom.
  5. Potrzebujesz się nauczyć programowania do szkoły, na studia, na egzamin, etc.

Jeśli nie zaliczasz się do 5 z wyżej wymienionych grup, polecam zapoznanie się z całą treścią porady. W przeciwnym wypadku, został Tobie prawdopodobnie narzucony język programowania oraz środowisko, a niejednokrotnie nawet i styl programowania. W takiej sytuacji raczej postaraj się zapoznać ze stawianymi wymaganiami, zamiast samemu podejmować decyzję. Oczywiście, jeśli mimo wszystko chcesz wybrać język programowania samemu, zapraszam do dalszej lektury.

Krok 2: Przeznaczenie



Języków programowania jest bardzo dużo. Ich zastosowanie jest również niebywale szerokie. Na poniższym plakacie możesz poznać najpopularniejsze z języków oraz czas ich opracowania:

Plakaty:


Języki programowania - szeroko rozumiane - można podzielić na następujące kategorie:
  1. skryptowe (np.: skrypty powłoki systemu operacyjnego)
  2. obsługi stron internetowych - po stronie serwera (np.: PHP, JSP)
  3. obsługi stron internetowych - po stronie klienta (np.: JavaScript, JScript, VBScript, ActionScript)
  4. opisu dokumentów (np.: HTML, TeX)
  5. opisu danych (np.: XML)
  6. przetwarzania tekstu i danych (np.: AWK, Perl)
  7. programowania baz danych (np.: PL/SQL)
  8. ogólnego przeznaczenia (np.: C++, C#, Delphi, Java, Assembler)

Powyższy podział nie jest formalną kategoryzacją, ale orientacyjnym zestawieniem, głównie dla osób początkujących, które decydują się na wybór języka. Wiele języków ma bardzo podobną składnię (na przykład C++ oraz PHP). Jeśli po prostu chcesz tworzyć programy i powyższy podział nic Ci nie mówi, zapewne zainteresują Cię języki ogólnego przeznaczenia lub języki obsługi stron internetowych. Podjęcie określonej decyzji na tym etapie może narzucać dalszy wybór, więc - jeśli jeszcze nie podjąłeś decyzji - zapoznaj się z dalszą częścią tego opracowania.

Krok 3: Platforma



Jako platformę przyjmijmy ogół programowania systemowego oraz dodatkowego, wraz ze sprzętem, na których bazował będzie stworzony przez Ciebie program. Platformą może być sam sprzęt (np.: Assembler na procesory 8051), system operacyjny (większość języków ogólnego przeznaczenia), specjalne oprogramowanie tworzące 'maszynę wirtualną' (np.: Java), oprogramowanie dedykowane (języki skryptowe, języki obsługi stron internetowych, języki programowania baz danych), system operacyjny z określonymi dodatkowymi bibliotekami (np.: języki z rodziny .NET).

Możesz skupić się na określonym rozwiązaniu, na przykład wybierając programowanie wyłącznie pod systemy Windows lub pisanie skryptów pod powłoki dla systemów Linux, albo możesz skierować swoje działania w stronę rozwiązań przenośnych (crossplatform - wieloplatformowych) (np.: Java, języki opisu danych, języki obsługi stron internetowych), albo wręcz rozwiązań mobilnych (np.: Java - JME).

Krok 4: Środowisko programistyczne



O tym, jakie wybierzesz środowisko programistyczne, w dużej mierze zadecydują nie tylko twoje chęci, ale również zasobność portfela. Jeśli chcesz pisać skrypty dla aplikacji, musisz liczyć się z tym, że twoja platforma docelowa nie będzie darmowa. Tak samo jest w przypadku języków ogólnego przeznaczenia - środowisko programistyczne, kompilator oraz debugger mogą być kosztowne.

Jeśli chcesz się tylko pobawić w programowanie lub nauczyć i korzystać wyłącznie do własnych potrzeb, rozejrzyj się za darmowymi środowiskami, a nawet oprogramowaniem open-source. W przypadku tego segmentu rynku aplikacji, open-source nie koniecznie musi oznaczać oprogramowanie gorsze lub uboższe, a niejednokrotnie oznacza właśnie oprogramowanie bardziej popularne i dostępne. Warto przemyśleć taki wybór.

Wiele dużych korporacji również wydaje wersje darmowe swoich produktów. Często - choć nie zawsze - są one ograniczone pod względem funkcjonalności lub licencji, ale czy naprawdę potrzebujesz zaawansowanych modułów lub bibliotek, kiedy uczysz się podstaw? Sądzę, że nie. Jednak warto zwrócić uwagę na treść licencji: czy zezwala na wykorzystanie komercyjne lub rozpowszechnianie.

Pewne języki programowania mogą nie być dostępne pod niektóre platformy, lub nie mieć darmowych środowisk programistycznych. Wybierając narzędzie dostosowane dla swoich potrzeb, weź to pod uwagę.

Wybór na podstawie przedsięwzięcia



Krok 1: Wyznaczone zadanie



Często zdarza się tak, że zdecydowałeś już, co chcesz robić, a jedynym znakiem zapytania jest język programowania. Zanim zaczniejsz realizować zadanie, zastanów się, czy wybrane narzędzie jest dla ciebie najlepszym. Poniżej znajdziesz kilka porad, zastanów się nad każdą z nich:
  1. Wybierz język, który jest podobny do czegoś, co znasz. Jeśli znasz doskonale język C, może lepiej będzie zrealizować projekt w C++ zamiast w Delphi, albo w PHP zamiast CGI - zależnie jaki projekt realizujesz.
  2. Wybierz język, do którego środowisko jest popularne i dostępne - będziesz miał większą szansę, że ktoś odpowie na twoje pytania lub znajdziesz dla siebie odpowiednią publikację.
  3. Wybierz język, do którego dostępne są biblioteki, przykłady lub moduły, mogące pomóc w realizacji zadania. Zwróć uwagę na ich dostępność, zgodność, poprawność działania i licencję.
  4. Zastanów się, czy przy wykonaniu projektu nie będzie potrzebna dodatkowa nauka, której początkowo nie przewidziałeś. Jeśli znasz jakiś język z rodziny .NET, z bardzo dużym prawdopodobieństwem w innym języku .NET określone zadanie realizuje się w podobny lub taki sam sposób.
  5. Wybierz język, który oszczędzi Ci pracy - po co pisać w assemblerze, skoro skrypt (*.bat) dla systemu Windows wykona zadanie równie dobrze, a jego kod będzie krótszy i mniej skomplikowany - co ułatwi ewentualną modyfikację.


Krok 2: Programowanie wspólnie z inną osobą



Gdy pisanie programu będzie wspierane fragmentami kodu, stworzonymi przez inną osobę, lub będzie ona współtworzyła program na bieżąco, warto zainteresować się trzema rozwiązaniami:
  1. Wybrać wspólny język, który jedna z osób zna najlepiej.
  2. Wybrać języki pozwalające na tworzenie bibliotek lub modułów i i wykorzystanie tych, stworzonych w innych językach.
  3. Wybrać języki, które potrafią ze sobą współpracować (np.: PHP + JavaScript)

Powyższe rozwiązania mogą być przydatne nawet wtedy, gdy aplikację tworzy tylko jedna osoba. Pewne elementy łatwiej tworzyć w określonych językach i środowiskach, inne w innych.

Krok 3: Metodyka tworzenia oprogramowania



Jeśli już znasz jakieś języki programowania, może przywykłeś do określonej metodyki programowania. Jeśli jesteś początkującym, łatwiej będzie się Tobie dostosować do narzuconego podejścia, a możliwości są następujące:
  1. Programowanie liniowe
  2. Programowanie proceduralne
  3. Programowanie stanowe
  4. Programowanie funkcyjne
  5. Programowanie deklaratywne
  6. Programowanie strukturalne
  7. Programowanie obiektowe
  8. Programowanie aspektowe
  9. Programowanie logiczne
  10. Programowanie generyczne
  11. Programowanie intencyjne
  12. Programowanie ekstremalne
  13. Programowanie zdarzeniowe
  14. Programowanie agentowe
  15. Programowanie wieloparadygmetowe

Określone języki programowania nie zezwalają lub po prostu nie dają możliwości użycia niektórych z powyższych podejść, faworyzując inne. Ucząc się kolejnego języka, zwróć uwagę, czy nowy język programowania wspiera podejście, do którego jesteś przyzwyczajony.

Propozycja dla początkujących



Jeśli, mimo przeczytania powyższego tekstu, nie wiesz co wybrać, programowanie wciąż kojarzy Ci się wyłącznie z tworzeniem plików wykonywalnych, a pojęcie metodyka jest Ci całkowicie obce, w tym artykule znajdziesz wskazówki, jak możesz zacząć. Ponieważ podejście do tego tematu jest całkowicie subiektywne, należy je traktować wyłącznie jako propozycję dla początkujących.

Krok 1: Zrozumienie idei programowania



Początek przygody z programowaniem warto rozpocząć od wysokopoziomowego programowania w języku ogólnego przeznaczenia (na przykład C/C++, C#, Java czy Delphi) z wykorzystaniem środowiska RAD (Rapid Application Development). Z jednej strony, łatwość skomponowania aplikacji z gotowych komponentów i kontrolek pozwala na szybkie osiąganie widocznych efektów i nie zniechęca. Z drugiej, podstawowym na tym etapie nie jest wcale poznanie dostępnych komponentów i ich właściwości, ale zrozumienie budowy programu komputerowego, jego zadań oraz sposobów opisu jego działania. Celem jest zrozumienie takich konstrukcji jak pętle, warunki, funkcje czy wykorzystanie zmiennych i stałych. Dlatego też niepolecanym jest rozpoczynanie nauki od języków bez ścisłego typowania (PHP, języki skryptowe) - trudniej przyzwyczaić się potem do "ograniczeń" innych języków.

Po pierwsze, naucz się pisać programy Hello world!. Są to proste aplikacje, których jedynym zadaniem jest pokazanie użytkownikowi napisu o określonej treści. Musisz zrozumieć, że cztery podstawowe funkcje programu komputerowego to:
  1. wypisanie danych na urządzenie wyjściowe (ekran, drukarka, etc),
  2. wczytanie danych z urządzenia wejściowego (klawiatura, myszką),
  3. prowadzenie obliczeń,
  4. obsługa urządzeń.


Program Hello world! pokaże Ci, jak wykonuje się pierwszą z nich.

Po drugie, sięgaj do kursów - nie jesteś jedyną osobą, która uczyła się danego języka programowania. Na pewno znajdziesz opis krok po kroku, jak zacząć programować; zapoznaj się z językiem i poczytaj o nim, zanim zaczniesz o niego pytać innych.

Po trzecie, znajdź i poznaj dokumentację. To chyba najważniejsze i najtrudniejsze zadanie w nauce programowania. Nie da się programować, nie znając dostępnych procedur czy komponentów. Często dokumentację znajdziesz w samym środowisku programowania lub instalowaną razem z kompilatorem, czasem będziesz musiał pobrać ją z internetu. Naucz się z niej korzystać sprawnie.

Krok 2: Zrozumienie działania systemu



Z czasem zaczniesz się zastanawiać dlaczego coś działa tak, a nie inaczej, albo jak wykonać jakieś zadanie. Na tym etapie nie tylko dokumentacja do języka programowania może być przydatna, ale również opisy architektury komputerów czy systemu operacyjnego. Typowymi problemami na tym etapie mogą być na przykład zaobserwowanie niedokładności obliczeń na liczbach rzeczywistych (zmiennoprzecinkowych) czy zbyt małe rozmiary typów zmiennych.

Zamiast zakładać, że tak po prostu jest, dowiedz się dlaczego. Może znajdziesz opis w dokumentacji do języka programowania, może w odpowiedzi na jakimś forum, a może na Google.

Krok 3: Specjalizacja zadań



W pewnym momencie dostrzeżesz, że w tematach zadań, które starasz się realizować pojawiają się pewne standardy pokrewne (z przechowywaniem danych wiążą się między innymi języki zapytań SQL lub dokumenty XML; z generowaniem stron internetowych PHP czy JSP, a z ich prezentacją HTML czy Java Script). Zacznij z nich korzystać: nie dość, że ułatwią realizację Twojego zadania, to jeszcze poszerzą Twoją wiedzę.

Cóż z tego, że jest to inny język? Skoro wykonałeś dwa powyższe kroki, znasz mechanizmy i ideę działania komputerów oraz programowania - pozostaje tylko poznać podejście do zagadnienia oraz polecenia nowego języka. W pewnym momencie dojdziesz do wniosku, że języki tworzą pewne rodziny o podobnej składni lub z dostępnymi tymi samymi funkcjami, a tylko odmiennym zastosowaniu.

Krok 4: Poznanie teorii i doskonalenie



Ostatni krok jest niezbędny do opanowania programowania, a jednocześnie bardzo często pomijany przez osoby uczące się samodzielnie.

Każda dziedzina posiada podstawy teoretyczne. Tak samo dziedzina informatyki, jaką jest programowanie - w skład teorii wchodzi nie tylko wykorzystanie języka, nomenklatura (wykorzystywane pojęcia i terminy), ale i projektowanie aplikacji. Tymi pierwszymi zagadnieniami zajmuje się algorytmika, ostatnimi z kolei się dział zwany inżynierią programowania.

Algorytmika pozwala znaleźć dopracowane rozwiązania typowych problemów programistycznych lub matematycznych, w tym sortowania, szukania ekstremów funkcji, synchronizacji zadań. Znajomość kilku języków programowania nie oznacza, że wszystko, co da się napisać, Ty potrafisz stworzyć w sposób optymalny. Warto poznać dostępną literaturę i rozwiązania proponowane przez innych.

Inżynieria oprogramowania definiuje sposoby modelowania i opisu pracy aplikacji, sposoby opisu danych, a nawet interakcji z systemem. Poznanie tej dziedziny daje możliwość szerszego spojrzenia na problem, jego analizy z różnych perspektyw, a także ułatwia komunikację z innymi osobami.

Cechy popularnych języków programowania



Języki ogólnego przeznaczenia



Assembler



Kompilatory i środowiska




Metodologie


  1. Najpopularniejsze: liniowa, proceduralna
  2. Niedostępne: funkcyjna, deklaratywna, generyczna, zdarzeniowa, agentowa


Wsparcie programowania multimediów


  • Grafika 2D:
    • liczne biblioteki dodatkowe
  • Grafika 3D:
    • liczne biblioteki dodatkowe
  • Dźwięk:
    • liczne biblioteki dodatkowe
  • Filmy:
    • liczne biblioteki dodatkowe
  • Kontrolery gier:
    • liczne biblioteki dodatkowe


Programowanie systemów operacyjnych i urządzeń peryferyjnych


  • Możliwe
  • Wygodne
  • Zalecane
  • Popularne i szeroko propagowane
  • Popularne programowanie sterowników sprzętowych i mikrokomputerów


Komentarze


  • Często nauczany
  • Trudny do nauki podstaw programowania
  • Łatwy do nauki podstaw architektury komputerów
  • Dobrze napisany program może działać bardzo szybko i mieć małe rozmiary
  • Kod jest na ogół obszerny i mniej czytelny niż kod języków wyższego poziomu
  • Istnieje możliwość odtworzenia każdego kodu maszynowego do kodu assemblera
  • W innych językach istnieje możliwość tworzenia wstawek kodu assemblera
  • Ponieważ programy pisane w assemblerach, dedykowanych systemom operacyjnym komputerów osobistych, bazują bezpośrendnio na rozkazach procesora i funkcjach systemu operacyjnego, możliwe jest wykorzystanie bibliotek tworzonych dla innych języków, na przykład do obsługi multimediów
  • Popularny


Pascal, ObjectPascal



Kompilatory i środowiska


  • [Borland] Pascal (DOS, Windows)
  • FreePascal (DOS, Windows, Linux, FreeBSD, Mac OS classic, Mac OS X/Darwin, OS/2, Netware classic, Netware libc, MorphOS, SkyOS)


Metodologie:


  • Najpopularniejsze: liniowa, proceduralna, strukturalna
  • Niedostępne: logiczna, deklaratywna, generyczna, zdarzeniowa, agentowa


Wsparcie programowania multimediów


  • Grafika 2D:
    • [Borland] (DOS) BGI
    • [Borland] (Windows) OWL
  • Grafika 3D:
    • liczne biblioteki dodatkowe
  • Dźwięk:
    • liczne biblioteki dodatkowe
  • Filmy:
    • brak
  • Kontrolery gier:
    • liczne biblioteki dodatkowe


Programowanie systemów operacyjnych i urządzeń peryferyjnych


  • Możliwe
  • Niewygodne
  • Mało popularne


Komentarze


  • Często nauczany
  • Łatwy do nauki podstaw
  • Popularny


Delphi, Delphi .NET



Kompilatory i środowiska


  • [Borland] Delphi (Windows)
  • [Borland] Kylix (Linux)
  • Lazarus oparty na kompilatorze FreePascal - wykorzystanie środowiska Lazarus pozwala wprowadzić do użycia metodologię zdarzeniową i agentową, przez co programowanie w nim jest bliższe Delphi niż ObjectPascal


Metodologie


  • Najpopularniejsze: proceduralna, obiektowa, zdarzeniowa, agentowa
  • Niedostępne: Logiczna, deklaratywna, generyczna


Wsparcie programowania multimediów


  • Grafika 2D:
    • [Borland] VCL
    • liczne biblioteki dodatkowe
  • Grafika 3D:
    • liczne biblioteki dodatkowe
  • Dźwięk:
    • liczne biblioteki dodatkowe
  • Filmy:
    • liczne biblioteki dodatkowe
  • Kontrolery gier:
    • liczne biblioteki dodatkowe


Programowanie systemów operacyjnych i urządzeń peryferyjnych


  • Nie możliwe


Komentarze


  • W niektórych wersjach obsługuje platformę .NET
  • Wiele nagłówków bibliotek dodatkowych musi być przepisanych spacjalnie dla Delphi, przez co często najnowsze wersje bibliotek nie są szybko dostępne
  • Często nauczany
  • Łatwy do nauki podstaw
  • Łatwy w użyciu
  • Środowiska są narzędziami RAD
  • Popularny


C/C++



Kompilatory i środowiska




Metodologie


- najpopularniejsze: programowanie proceduralne, programowanie obiektowe, programowanie zdarzeniowe, programowanie generyczne (poprzez wzorce)
- dostępna z wykorzystaniem zewnętrznych bibliotek: programowanie aspektowe, programowanie agentowe
- niedostępne: programowanie deklaratywne, programowanie logiczne

Zastosowania


- programowanie gui

- programowanie aplikacji sieciowych
- programowanie gier
  • [Microsoft] DirectX

- analiza gramatyczna (parsing)
- obliczenia naukowe, numeryczne, symulacje
- programowania multimediów:
  • grafiki 2D
    • [DJGPP]Allegro
    • [Microsoft] DirectDraw
  • grafiki 3D
    • [Microsoft] Direct3D
    • [SGI] OpenGL
    • GLUT
  • muzyki i dźwięku
    • [Microsoft] DirectSound, DirectMusic
    • OpenAL
    • ALUT
    • [Creative] EAX
    • ALSA

- programowanie systemów operacyjnych i urządzeń peryferyjnych
  • Możliwe
  • Wygodne
  • Zalecane
  • Popularne i szeroko propagowane (często we współpracy z assemblerem)
  • Popularne programowanie sterowników sprzętowych i mikrokomputerów


Komentarze


  • W niektórych wersjach obsługuje platformę .NET
  • Wiele nagłówków bibliotek jest początkowo pisanych dla C/C++, przez co są bardzo szybko dostępne.
  • W dużej mierze programowanie systemów Linux/Unix opiera się na języku C, podobnie jak WinAPI (które można oczywiście wykorzystać w wielu językach, na przykład w Delphi)
  • Bardzo często nauczany
  • Łatwy do nauki podstaw
  • Łatwy w użyciu
  • W większości środowiska są narzędziami RAD
  • Popularny


C#

(zalążek)

Kompilatory i środowiska


  • Csc darmowy kompilator sterowany z wiersza poleceń, dostępny po zainstalowaniu Microsoft .NET Framework
  • Microsoft Visual C# (Windows) (również jako składnik Visual Studio 2008, darmowe w wersji Express Edition)
  • Borland C# Builder (w pakiecie Developer Studio 2006 lub Delphi 2005)
  • SharpDevelop - open-sourcowe IDE na platformę .NET
  • MonoDevelop - open-sourcowe IDE na platformę Mono (stworzony na podstawie SharpDevelop)


Wsparcie programowania multimediów


  • Grafika 2D:
    • Managed DirectX
    • liczne biblioteki dodatkowe
  • Grafika 3D:
    • Managed DirectX
    • OpenGL
    • liczne biblioteki dodatkowe
  • Dźwięk:
    • Managed DirectX
    • liczne biblioteki dodatkowe
  • Filmy:
    • Managed DirectX
    • liczne biblioteki dodatkowe
  • Kontrolery gier:
    • Managed DirectX
    • liczbe biblioteki dodatkowe

- programowanie systemów operacyjnych i urządzeń peryferyjnych:
  • Niemożliwe tworzenie systemów operacyjnych (aczkolwiek ciekawostkę stanowi system Microsoft Singularity, w większości tworzony w C#)


Komentarze


  • Przeznaczony do pisania pod platformą .NET i w jej obrębie całkowicie przenośny
  • Dostępne środowiska są narzędziami RAD
  • Coraz bardziej popularny
  • Bardzo dobrze wyposażona biblioteka standardowa (przestrzeń nazw System)


Java



Kompilatory i środowiska




Metodologie


  • Najpopularniejsze: obiektowa, zdarzeniowa; od wersji 5: deklaratywna, generyczna
  • Niedostępne: liniowa, logiczna


Wsparcie programowania multimediów


  • Grafika 2D:
    • wbudowane w środowisko
    • AWT
    • JFC/Swing
    • Java2D
    • liczne biblioteki dodatkowe
  • Grafika 3D:
    • wbudowane w środowisko
    • Java3D
    • Java OpenGL
    • Xith3D
    • liczne biblioteki dodatkowe
  • Dźwięk:
    • wbudowane w środowisko
    • Java Media Framework
    • liczne biblioteki dodatkowe
  • Filmy:
    • Java Media Framework
  • Kontrolery gier:
    • JInput
    • liczne biblioteki dodatkowe


Programowanie systemów operacyjnych i urządzeń peryferyjnych


  • Tworzenie systemów operacyjnych jest możliwe, ale część kodu musi być w innym języku, np. JNode
  • Bardzo popularne programowanie urządzeń mobilnych (w tym telefonów komórkowych)
  • Popularne programowanie urządzeń o ograniczonych zasobach, w tym sterowników np. AGD


Wsparcie dla aplikacji sieciowych


  • Specyfikacja EE (Enterprise Edition) przeznaczona do tworzenia aplikacji sieciowych
  • Dużo dobrych i rozbudowanych frameworków sieciowych; najpopularniejsze:
    • Apache Struts
    • Spring Framework


Komentarze


  • Często nauczany
  • Bardzo popularny
  • Aplikacje, dedykowane pod maszynę wirtualną, bez ponownej kompilacji uruchamiają się na każdym systemie z zainstalowaną maszyną wirtualną Javy
  • Programy w trybie maszyny wirtualnej uruchamiają się wolniej niż programy kompilowane pod specyficzny system
  • Od wersji 6 posiada wsparcie dla języków skryptowych (Ruby, Java Script, Perl itp.)
  • Maszyna wirtualna Javy zapewnia wysoki poziom bezpieczeństwa, pozwala dokładnie określić przywileje aplikacji
  • W niektórych wersjach obsługuje platformę .NET


Python



Kompilatory/interpretery


- CPython (DOS, Windows, Unix)
- MacPython (MacOS X)
- ActivePython (Windows, Unix, MacOS)
- Jython (Java Virtal Machine)
- IronPython (.NET/Mono)
- na urządzenia przenośne: Palm OS, Psion, Sharp Zaurus, Symian OS series 60, Windows CE (Pocket PC), dostępne na oficjalnej stronie Python Software Fundation.
- ponadto z oficjalnej strony Python Software Fundation można pobrać wersje dla kilkunastu innych platform, m. in. PlayStation.

Metodologie


- najpopularniejsze:
  • programowanie obiektowe,
  • programowanie strukturalne,
  • programowanie funkcyjne
  • programowanie zdarzeniowe,
  • programowanie generyczne,

- popularne, dostępne przez zewnętrzne biblioteki:
  • programowanie aspektowe,
  • programowanie agentowe,

- niepopularne:
  • programowanie logiczne,
  • programowanie z ograniczeniami,
  • programowanie stanowe

- niedostępne:
  • programowanie deklaratywne


Najczęstsze zastosowania


- programowanie gui
- programowanie stron internetowych oraz aplikacji sieciowych
- programowanie gier
- analiza gramatyczna (parsing)
- obliczenia naukowe, numeryczne, symulacje
- język skryptowy osadzony m. in. w GIMP, Vim, Blender, Maya. Więcej aplikacji...
- programowania multimediów:

- programowanie urządzeń peryferyjnych:
  • możliwość oprogramowania mikrokontrolerów (np. PyMite) oraz niektórych urządzeń zewnętrznych z wbudowanym interpreterem. Istnieje też możliwość oprogramowania sterowników przy wykorzystaniu modułów napisanych w C. Jednak żadne z tych zastosowań nie jest popularne.


Komentarze


- niektóre wersje potrafią działać na platformach .NET (IronPython), Java Virtual Machine (Jython), Parrot, PyPy
- bardzo czytelny (konstrukcje zbliżone do pisanego języka angielskiego) i łatwy do nauki podstaw programowania
- umożliwia wydajne tworzenie oprogramowania
- zawiera dużą bibliotekę modułów
- zalecany jako język do tworzenia prototypów (możliwość szybkiego stworzenia działającego oprogramowania)
- umożliwia łatwą współpracę z modułami napisanymi w C/C++ (m. in. CPython), dzięki czemu może być wykorzystywany również w systemach wymagających dużej wydajności (pomimo, że program wykonywany jest na maszynie wirtualnej)
- zapewnia dużą przenośność
- łatwy w osadzaniu w większych aplikacjach jako język skryptowy

Języki do obsługi stron internetowych - po stronie serwera



PHP: Hypertext Preprocessor



Środowiska


  • Serwer HTTP (np. Apache, Microsoft IIS lub inny) ze skonfigurowanym silnikiem PHP
  • Zend Studio - IDE dla Windows, Linux, Macintosh
  • WinBinder - tworzenie aplikacji z GUI dla Windows


Metodologie


  • Najpopularniejsze: proceduralna, strukturalna, obiektowa
  • Niedostępne: zdarzeniowa


Wsparcie programowania technologii


  • Grafika 2D:
  • Bazy danych:
    • ogólna biblioteka PDO
    • liczne biblioteki dedykowane konkretnym systemom bazodanowym
  • Usługi sieciowe:
    • liczne biblioteki dedykowane usługom


Programowanie urządzeń peryferyjnych


  • Możliwe generowanie stron dostępnych przez urządzenia przenośne i mobilne (na przykład stron WAP)


Komentarze


  • Darmowy silnik rozpowszechniany na zasadach Open-Source
  • Przejrzysta i łatwa do opanowania składnia z rodziny języków "C-podobnych"
  • Bardzo popularny, jako język bazowy, do tworzenia dynamicznych serwisów www
  • Posiada szerokie wsparcie komunikacji z serwerami baz danych i usług sieciowych


Języki opisu oraz przetwarzania tekstu i danych



Regex (wyrażenia regularne)



Kompilatory/interpretery


  • mini język osadzany w wielu innych językach i programach m. in. edytorach tekstu (np. VIM, EditPlus), narzędziach systemowych (np. grep, find, sed)


Metodologie


  • Najpopularniejsze: deklaratywna


Komentarze


  • Występuje w wielu odmianach m. in. Unix, POSIX, Emacs i Perl
  • Składnia Perl jest jedną z najbardziej rozbudowanych i czytelnych, z tego względu jest stosowana (czasem z niewielkimi zmianami) w wielu językach programowania (m. in. PHP, Python, C#), stąd często są określane mianem PCRE (ang. Perl Compatible Regular Expressions).


XSL (XHTML, XSLT, XSL, XPath, XQuery, XSQL)



Kompilatory/interpretery




Metodologie


  • deklaratywna,
  • funkcyjna


Komentarze:


  • Wszystkie języki z tej grupy mają składnię zgodną ze standardem XML (n.p.: XSL-FO) lub są wykorzystywane poprzez zagnieżdżanie ich instrukcji wewnątrz zapisu zgodnego z XML (n.p.: XSQL - język SQL osadzony w dokumencie zgodnym z XML).
  • Zależnie od konkretnego języka opisu, mogą służyć do akwizycji (XQuery, XSQL), przechowywania (czysta postać XML), prezentacji (XHTML) i transformacji (XSL, XSLT) lub nawigacji (XPath) w treści lub danych.
Informacje
Ostatnia modyfikacja 05-10-2009 22:34 Ostatni autor __krzysiek85
Ilość wyświetleń 24031 Wersja 49
Komentarz
Demonical Monk dnia 07-10-2009 21:54
To je popraw ^^
komputer098 dnia 23-04-2009 15:12
Chciałbym tylko dodać, że w artykule jest kilkanaście błędów ortograficznych, m.in. "nie możliwe", a powinno być "niemożliwe".
Szczawik dnia 01-07-2008 11:13
Cały artykuł o tym jest - widać nie czytałeś dokładnie.. :/
Adrianos16 dnia 20-05-2008 16:10
Zaproponujcie mi jaki wybrać język i program bo nie mogę sie zdecydować
Dryobates dnia 02-11-2007 20:07
Postaram się pomóc, ale jak zwykle 10 innych spraw na głowie :P
Szczawik dnia 02-11-2007 13:30
Co do 2. oraz 3. też już o tym myślałem i doszedłem do podobnych wniosków. Jak znajdę zapał i chęci to to jakoś przeredaguję. (Chyba, że ktoś zrobić to przede mną ;) ).
Dryobates dnia 01-11-2007 20:02
Widzę, że przeformatowaniu uległa też pozostała część artykułu. Cieszę się.

Jednak mam jeszcze 3 propozycje:
1. Czy nie lepiej jest stosować terminu np. "programowanie obiektowe" zamiast "metodyka obiektowa", skoro w części wprowadzającej mamy takie sformułowanie? Ponadto łatwiej jest wyrażać niektóre z tych metody jako np. "programowanie z ograniczeniami" (constraint programming) niż "metodyka ograniczeniowa" czy jakkolwiek by to miało brzmieć :P
2. Moim zdaniem dobrze byłoby podzielić metodyki nie tyle na najpopularniejsze i niedostępne co przynajmniej na te, które są możliwe do zastosowania w języku oraz te, których się nie da. A co najwyżej z tej pierwszej grupy wyodrębnić te najpopularniejsze. Wiele metodyk jest co prawda dostępna często tylko przez oddzielne przez zewnętrzne biblioteki, ale są bardzo popularne, szczególnie w pewnych zastosowaniach. Inne teoretycznie są wspierane przez język, ale są mało popularne w najczęstszych zastosowaniach.
3. Proponowałbym troszkę inaczej opisać "wsparcie". Chyba bardziej istotną informacją jest w jakich zastosowaniach jest używany język i wtedy ew. wymienić biblioteki wspierające te zastosowania. Bo jeżeli się uprzeć, to prawie każdy język będzie miał "wsparcie" do prawie wszystkiego co sobie wymyślimy. Ale te języki ogólnego przeznaczenia jednak zajęły już pewne obszary informatyki i np. sterowniki najczęściej się pisze w C/C++, chociaż można też w innych, a aplety www najczęściej w Javie lub Flashu, chociaż też można w innych.

I jeszcze takie pytanie nie związane już całkiem: jak w javie można programować deklaratywnie? Wyszukałem jakieś linki na google, ale nie bardzo one przypominały programowanie deklaratywne (chyba, ze ja mam troszkę inne pojęcie o programowaniu deklaratywnym).
Szczawik dnia 30-12-2006 11:24
> Zdarzeniowe jest np. WndProc, które równie dobrze można napisać w assemblerze; 'zdarzeniowo' można imho pisać w każdym języku, nawet w basicu.

To, co odróżnia metodologię zdarzeniową od proceduralnej czy strukturalnej, to właśnie to, czy pętle zdarzeniową musisz pisać ręcznie i w niej wywoływać procedury obsługi zdarzeń dla aplikacji, czy też pętla jest uznawana za niezależną od kodu (najczęściej ukryta w postaci kodu w którejś z bibliotek, choć nie koniecznie). Dodatkowo idea zdarzeniowej metodologii polega na tym, że jedyne co piszesz to obsługa zdarzeń, powiązanych z aplikacją, jak i z jej komponentami - nic więcej.

Assembler po prostu nie udostępnia metodologii zdarzeniowej.

Ani DirectX, ani Allegro, a tym bardziej VCL nie jest dedykowane dla assemblera. DirectX jest dedykowany pod C# (ogólnie pod cały .NET), C++ oraz Visual Basic. Dlaczego? Bo sam producent udostępnia nagłówki do tych języków. Wychodzi nowa wersja DirectX, ściągasz SDK i masz te nagłówki, proste. Natomiast do Delphi musisz czekać, aż jakiś opensource'owiec usiądzie i przetłumaczy - też pytanie czy całość i na ile aktualnie. Dodatkowo, producent nie gwarantuje, że będzie działało pod innymi językami, a ze wspomnianymi na początku tak, bo musi.
fr3 dnia 29-12-2006 23:00
>Co do metodyk - nie wspiera wszystkich (żadne istniejące środowisko do ASM, jakie znam, nie >wspiera metodologii aspektowej, intencyjnej, agentowej).
Tutaj masz racje, też takich nie znam. Jednakże sam assembler (język) to po prostu bezpośrednie użycie instrukcji procesora, metodologia zalezy tylko od danego kompilatora/assemblera.
>Jakość wsparcia dla zdarzeniowej czy logicznej też jest bardzo dyskusyjna.
Zdarzeniowe jest np. WndProc, które równie dobrze można napisać w assemblerze; 'zdarzeniowo' można imho pisać w każdym języku, nawet w basicu.

Co do logicznego, to tak samo jak wcześniej-przy obecnych narzędziach raczej trudno byłoby to osiągnąć.

Co do bibliotek-czy DirectDraw (itd) jest dedykowane pod c/c++? Nie. Jedyna rzecz która jest niejako 'dedykowana' to allegro (no i borland VCL, tutaj już na pewno). Myślę, że w dostępnych bibliotekach należy umieścić te które są dostępne (jak nawet nazwa podkategorii (?) wskazuje) z danego języka, nie dedykowane.
Np. Soldat jest zdaje się napisany w delphi z użyciem DirectX. (nie jestem tego pewny, niemniej jednak zarówno OpenGL jak i DirectX są dostępne z tego języka).

Za to w przypadku Pythona, PHP (javy?) jedyne dostępne to te dedykowane.

Można by stworzyć kategorię 'biblioteki dedykowane' tylko po co?
Szczawik dnia 28-12-2006 00:26
Ot mam kłopot - co zrobić z poprawkami Fr3m3n'a? Assembler nie ma bezpośredniego wsparcia w żadnych z wyżej wymienionych bibliotek, a że korzystając ze swojej specyfiki potrafi się podpiąć pod biblioteki dowolnego języka kompilowanego (lub ma wręcz dołączone translacje nagłówków) to inna sprawa. Moim zdaniem przy bibliotekach multimediów powinien zostać brak, chyba, że ktoś zna dedykowane, a w komentarzu dopisać tekst o powyższym.

Co do metodyk - nie wspiera wszystkich (żadne istniejące środowisko do ASM, jakie znam, nie wspiera metodologii aspektowej, intencyjnej, agentowej). Jakość wsparcia dla zdarzeniowej czy logicznej też jest bardzo dyskusyjna. O metodologii stanowej już nie wspomnę. Tym bardziej, że jest to parametr 'najpopularniejsze metodologie'.

Poradźcie coś, bo waham się czy nie przywrócić do wersji Kooby.. :/
Szczawik dnia 02-09-2006 22:29
Nie no; jasne, że masz rację, tylko że podziały zawsze są sztuczne i zbyt sztywne. Jakkolwiek, ale poukładane i będzie dobrze. Jakby komuś któreś przyporządkowanie nie pasowało - dawać znać; tylko z rzeczowym komentarzem, proszę.
Dryobates dnia 02-09-2006 00:13
Java, C#, Python czy Ruby są w programowaniu www stosowane na szeroką skalę.

No, ale jak już tak patrzymy, to można by uznać, że "ogólnego przeznaczenia" mogą być zastosowane też w innych dziedzinach, a te zakwalifikowane do jakiegoś bardziej wyspecjalizowanego podpunktu nie są zbyt popularne w innych zastosowaniach (PL/SQL przy pisaniu kompilatorów ;) )
Szczawik dnia 01-09-2006 23:23
No rozumiem, ale starałem się tu zachować podział, jaki dałem w rozdziale "Krok 2: Przeznaczenie". Pamiętajcie też, że to porada w dużej mierze dla początkujących, a nie wyjadaczy, którzy, aby ułatwić sobie obsługę server-side, napiszą sobie serwer HTTP w Delphi :P Oczywiście przesadzam, ale przecież tak też się da.. Rozważcie to.
Dryobates dnia 01-09-2006 15:46
Mi również nie bardzo pasuje to oddzielenie. Ja strony w pythonie piszę. Ruby, język ogólnego przeznaczenia, jest najbardziej sławny dzięki Ruby on Rails - zastosowanie internetowe.

Również w drugą stronę: php niektórzy stosują tam, gdzie zwykle perl królował - w przetwarzaniu tekstu. Niektórzy nawet kompilatory/interpretery w nim piszą.

Wydaje mi się, że nie należy tutaj dzielić na zastosowania. Po prostu opisywać języki, a czytający z opisu wywnioskuje, do czego można go zastosować
Kooba dnia 01-09-2006 09:45
Języki do obsługi stron internetowych - po stronie serwera


Troche nie pasuje.. w Pythonie, C#, Perlu (którego jeszcze nie ma opisanego) a nawet w C można przecież tworzyć strony.. rozumiem intencje stworzenia tej sekcji ale należało by jakoś rozwiac wątpliwosci. Np napisac ze da sie tworzyc strony we wspomnianych jezykach or sth :/
Szczawik dnia 31-08-2006 21:00
To oddzieliłem od ogólnego przeznaczenia i powinien być już porządek :)
jrCoder dnia 06-07-2006 19:54
Mimo iż PHP NIE NALEŻY do języków ogólnego przeznaczenia to tak jak napsał Szczawik, cytuje:

<cite>"Dobrze by było, aby każdy z najpopularniejszych języków został opisany."</cite>

Tak i ja też zachęcam do rozwijania arta poprzez krótkie, schematyczne opisy popularnych języków programowania, to napewno pomoże niezdecydowanym początkujęcym.
TeWuX dnia 05-07-2006 19:30
Dodałem język C#, jest jeszcze trochę informacji do uzupełnienia o nim.
O metodologii nic nie pisałem, ponieważ nie znam wszystkich metod programowania, a nie chce strzelać które z nich są możliwe w C# (domyślam się ze podobne jak w Javie i C++) :P
Ktos dnia 08-02-2006 14:29
DHTML to jest takie coś jak AJAX - niewiadomo co to, ale wszyscy tego używają (no, akurat DHTML-a to parę lat temu, teraz nie, teraz jest Web2.0...). Znaczy połączenie W3C DOM + niestandardowe rozszerzenia IE4/NN4 + JavaScript/JScript daje DHTML.

A mobilną Javę zwykle określa się w ogóle jako J2ME, czyż nie?
Dryobates dnia 08-02-2006 02:33
Do metodyk (chociaż ja bym tego tak nie nazywał) dorzuciłbym programowanie funkcyjne, deklaratywne czy logiczne, aby czytający nie odniósł wrażenia, że tylko w jednym kierunku rozwijają się języki.
Szczawik dnia 07-02-2006 22:20
Wiem o co chodziło, domyśliłem się i już wcześniej w tekście dałem 'Java - JME'. Jak nie pasuje za bardzo, to może zmień.
Marooned dnia 07-02-2006 22:07
Chodzi o to, że "Java JME" to "Java Java Microedition" - chodziło mi o napisanie Java ME jak to się zwykło robić.
Szczawik dnia 07-02-2006 21:50
Nie traktujcie mnie jak wyrocznię nieomylną. Co do DHTML, to jest to DocumentObjectModel, nie jest to JavaScript (mam gdzieś na dysku tabelę z W3C, które elementy są elementami JS zawartego w W3C DOM, a które dynamicznego HTML z DHTML DOM - z książki JavaScript Bible, 4th Edition by Danny Goodman). Co do tego, czy opis budowy dokumentu to język programowania - może i nie jest, ale jednak zajmujemy się tym jak językami programowania, więc niech to w tekście zostanie.

JME beginnerom nic nie powie, a Java JME jakoś kojarzy się z mobilną Javą. Proponuję to tak zostawić.
Ktos dnia 07-02-2006 21:06
Gites. Ale czy język opisu dokumentów/danych to język programowania? W przypadku HTML-a jestem całym sercem za tym, że nie jest on językiem programowania. Co innego PostScript - ktoś napisał nawet w nim serwer WWW ;)

Tego DHTML-a zaraz poprawię.
Marooned dnia 07-02-2006 20:21
Możnaby wrzucić na początek spis treści.

obsługi stron internetowych - po stronie klienta (np.: JavaScript, DHTML)
DHTML to określenie Dynamic HTML - czyli odnosi się to do JavaSctipt [i modyfikacji Microsoft: JScript] - sam w sobie nie jest językiem.

(np.: Java JME)
JME to chyba Java MicroEdition więc Java ME :)

Wybierając narzędzie dostosowane dla swoich, weź to pod uwagę.
Zbrakło 'potrzeb' ?

Ogólnie gites!
Szczawik dnia 07-02-2006 18:31
Zapraszam do rozwijania tego tematu, ale w sposób jak najbardziej obiektywny. Dobrze by było, aby każdy z najpopularniejszych języków został opisany.

Katalog
Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.2188 sek. (zapytań SQL: 9)