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:
- Chcesz się uczyć programowania z własnej, nieprzymuszonej woli.
- Masz ochotę zrealizować określony projekt.
- Interesują cię nowe technologie lub zagadnienia
- Chciałbyś zaimponować kolegom, znajomym, wykładowcom.
- 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:
- O'Reilly - History Of Programming Languages (do stycznia 2004)
- Computer Languages History (uaktualniany)
Języki programowania - szeroko rozumiane - można podzielić na następujące kategorie:
- skryptowe (np.: skrypty powłoki systemu operacyjnego)
- obsługi stron internetowych - po stronie serwera (np.: PHP, JSP)
- obsługi stron internetowych - po stronie klienta (np.: JavaScript, JScript, VBScript, ActionScript)
- opisu dokumentów (np.: HTML, TeX)
- opisu danych (np.: XML)
- przetwarzania tekstu i danych (np.: AWK, Perl)
- programowania baz danych (np.: PL/SQL)
- 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:
- 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.
- 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ę.
- 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ę.
- 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.
- 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:
- Wybrać wspólny język, który jedna z osób zna najlepiej.
- Wybrać języki pozwalające na tworzenie bibliotek lub modułów i i wykorzystanie tych, stworzonych w innych językach.
- 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:
- Programowanie liniowe
- Programowanie proceduralne
- Programowanie stanowe
- Programowanie funkcyjne
- Programowanie deklaratywne
- Programowanie strukturalne
- Programowanie obiektowe
- Programowanie aspektowe
- Programowanie logiczne
- Programowanie generyczne
- Programowanie intencyjne
- Programowanie ekstremalne
- Programowanie zdarzeniowe
- Programowanie agentowe
- 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:
- wypisanie danych na urządzenie wyjściowe (ekran, drukarka, etc),
- wczytanie danych z urządzenia wejściowego (klawiatura, myszką),
- prowadzenie obliczeń,
- 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
- NASM (DOS, Windows, Linux)
- FASM (DOS, Windows, Linux, Unix libc, MenuetOS)
- MASM32 (DOS, Windows)
- TASM (DOS, Windows)
- ASM'51 dla Linux (Linux: μC 8051)
- MacroAssembler 8051 dla DOS (DOS: μC 8051)
Metodologie
- Najpopularniejsze: liniowa, proceduralna
- 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:
- 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
- Microsoft Visual C++ Toolkit (Windows), Microsoft Visual C++ (Windows) (również jako składnik Visual Studio 2008, darmowe w wersji Express Edition)
- GNU Compiler Collection [gcc] (Windows, DOS, Unix, Linux, FreeBSD, OS/2, ELF, ...) - zawiera w sobie g++
- [Borland] C++ Builder (Windows), Borland BuilderX (Windows, Linux, Solaris)
- Bloodshed Dev C++ - oparty na gcc
- Intel C++ Compiler (Windows, Linux, embedded)
- Macintosh Programmer's Workshop (MacOS)
- LCC (Windows)
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
- [Borland] VCL
- 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
- Sun Java 2 Platform (Windows, Linux, Solaris)
- GNU Compiler Collection [gcc] (Windows, DOS, Unix, Linux, FreeBSD, OS/2, ELF, ...) - zawiera w sobie gcj
- Oracle JDeveloper (wymagana maszyna wirtualna Javy)
- NetBeans IDE (Windows, Linux, Mac OS X, Solaris)
- Eclipse (wymagana maszyna wirtualna Javy)
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:
- grafiki 2D
- grafiki 3D: PyOpenGL, PySDL, PyGame, PyQt4
- muzyki i dźwięku
- 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
- dostępne poprzez biblioteki języków programowania, m. in. w Perl, Python, C, PHP
- osadzone w przeglądarkach internetowych (XHTML, XSLT, XPath, XSL-FO)
- dostępne poprzez biblioteki serwerów baz danych lub środowisk je obsługujących (XQuery, XSQL
- samodzielne procesory:
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.



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ć
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).
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.
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?
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..
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
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ć
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
<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.
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++)
A mobilną Javę zwykle określa się w ogóle jako J2ME, czyż nie?
JME beginnerom nic nie powie, a Java JME jakoś kojarzy się z mobilną Javą. Proponuję to tak zostawić.
Tego DHTML-a zaraz poprawię.
Ogólnie gites!