Spis treści

·         1 Rodzaje języków programowania

o    1.1 Poziom wysoki a poziom niski

o    1.2 Programowanie deklaratywne a obowiązkowe

o    1.3 Funkcjonalne vs. proceduralne

o    1.4 Stack based

o    1.5 Zorientowanie na obiekt

o    1.6 Zorientowanie na przepływ

·         2 Zasady

·         3 Programowanie ukierunkowane na obiekt (Object-Oriented Programming)

·         4 Przykłady

o    4.1 Przykład Visual Basic

o    4.2 Przykład Pythona

o    4.3 Przykład C#

o    4.4 Przykład Haskella

·         5 Powiązane strony

Język programowania to rodzaj języka pisanego, który mówi komputerom, co mają robić, aby pracować. Języki programowania są używane do tworzenia wszystkich programów komputerowych i oprogramowania komputerowego. Język programowania jest jak zestaw instrukcji, które komputer wykonuje, aby coś zrobić.

Programista zapisuje tekst kodu źródłowego w języku programowania w celu utworzenia programów. Zazwyczaj język programowania używa prawdziwych słów do niektórych poleceń, dzięki czemu język ten jest łatwiejszy do odczytania przez człowieka. Wiele języków programowania używa interpunkcji tak samo jak normalny język. Wiele programów jest teraz "kompilowanych". Oznacza to, że komputer tłumaczy kod źródłowy na inny język (taki jak język zespołu lub język maszyny), który jest znacznie szybszy i łatwiejszy do odczytania przez komputer, ale znacznie trudniejszy do odczytania przez człowieka.

Programy komputerowe muszą być napisane bardzo ostrożnie. Jeśli programista popełnia błędy, lub program próbuje zrobić coś, czego nie zaprojektował, program może wtedy "zawiesić się" lub przestać działać. Gdy program ma problem z powodu tego, jak został napisany, nazywa się to "błędem". Bardzo mały błąd może spowodować bardzo duży problem.

1. Rodzaje języków programowania

Języki programowania można klasyfikować na różne sposoby: według poziomu abstrakcji, paradygmatu programowania (czyli stylu programowania), sposobu wykonywania kodu oraz przeznaczenia. Poniżej znajdziesz najważniejsze podziały z krótkim opisem i przykładami.

1.1 Poziom — poziom wysoki a poziom niski
  • Języki niskiego poziomu — bliżej sprzętu, dają większą kontrolę nad pamięcią i rejestrami procesora. Przykłady: asembler, język maszynowy. Są szybkie, ale trudniejsze do pisania i przenoszenia między platformami.
  • Języki wysokiego poziomu — bliżej ludzkiego języka, ukrywają wiele szczegółów sprzętowych (zarządzanie pamięcią, instrukcje niskiego poziomu). Przykłady: Python, Java, C#, JavaScript. Ułatwiają rozwój i konserwację kodu.
1.2 Programowanie deklaratywne a imperatywne
  • Imperatywne — opisujemy krok po kroku, jak osiągnąć rezultat (instrukcje, zmienne, pętle). Przykłady: C, Python, Java.
  • Deklaratywne — opisujemy, co chcemy osiągnąć, a nie jak to osiągnąć. Przykłady: SQL (zapytania do baz danych), języki opisu konfiguracji, niektóre podejścia funkcyjne i logiki (Prolog).
1.3 Funkcjonalne vs. proceduralne
  • Funkcjonalne — program składa się z funkcji matematycznych, unika się stanów i efektów ubocznych; popularne w analizie danych i obliczeniach równoległych. Przykłady: Haskell, Erlang, częściowo Scala, Clojure.
  • Proceduralne — programy zorganizowane w procedury/funkcje, które zmieniają stan programu; przykłady: C, Pascal.
1.4 Stack based
  • Języki oparte na stosie wykonawczym operują na wartościach umieszczanych na stosie zamiast jawnych zmiennych. Przykłady w historii: Forth, PostScript; stosowe podejście występuje też w maszynach wirtualnych.
1.5 Zorientowanie na obiekt
  • Oparte na obiektach i klasach: łączą dane (pola) z metodami (funkcjami). Przykłady: Java, C++, C#, Python (obsługuje OOP).
1.6 Zorientowanie na przepływ
  • Paradygmaty typu dataflow/flow-based koncentrują się na przepływie danych przez moduły/komponenty; popularne w systemach przetwarzania strumieni i narzędziach ETL.

2. Zasady

Bez względu na język, istnieją podstawowe elementy i zasady, które kod powinien spełniać:

  • Składnia (syntax) — reguły pisowni i budowy instrukcji.
  • Semantyka — sens instrukcji, czyli co program robi po uruchomieniu.
  • Typowanie — statyczne vs dynamiczne; silne vs słabe typowanie wpływają na bezpieczeństwo i wykrywanie błędów.
  • Kompilacja vs interpretacja — kompilowane programy są tłumaczone przed uruchomieniem; interpretery wykonują kod w czasie rzeczywistym. Są też hybrydy (np. bytecode + maszyna wirtualna).
  • Modularność i czytelność — podział kodu na moduły/funkcje, czytelne nazwy, komentarze.
  • Testowalność — projektowanie kodu tak, by można go było łatwo przetestować jednostkowo i integracyjnie.
  • Bezpieczeństwo — unikanie podatności (np. wstrzyknięć, przepełnień bufora), walidacja danych wejściowych.
  • Wydajność i optymalizacja — analiza kosztów pamięciowych i czasowych, profile i optymalizacje tam, gdzie są potrzebne.

3. Programowanie ukierunkowane na obiekt (Object-Oriented Programming)

Programowanie zorientowane na obiekty (OOP) to paradygmat, w którym programy są modelowane jako zbiór obiektów współpracujących ze sobą. Każdy obiekt łączy dane i zachowanie.

Główne koncepcje OOP:

  • Klasa — szablon definiujący strukturę i zachowanie obiektów.
  • Obiekt — egzemplarz klasy, posiadający stan (pola) i metody.
  • Enkapsulacja — ukrywanie wewnętrznych szczegółów i udostępnianie tylko interfejsu.
  • Dziedziczenie — tworzenie nowych klas na podstawie istniejących, pozwalające na ponowne użycie kodu.
  • Polimorfizm — możliwość używania interfejsu klasy bazowej do obsługi obiektów różnych klas pochodnych.

Zalety OOP: ułatwia modelowanie skomplikowanych systemów, promuje modularność i ponowne użycie kodu. Wady: może prowadzić do nadmiernej złożoności (zimne "overengineering") i czasem mniejszej wydajności niż proste rozwiązania proceduralne.

4. Przykłady

Poniżej krótkie, ilustrujące przykłady w różnych językach, pokazujące sposób zapisu prostych programów „Hello, World!” oraz krótkie użycie funkcji/klasy.

4.1 Przykład Visual Basic
 ' Visual Basic (VBScript / VB.NET) - prosty przykład wyświetlenia tekstu Module Module1     Sub Main()         System.Console.WriteLine("Witaj, świecie!")     End Sub End Module 
4.2 Przykład Pythona
 # Python - funkcja i wywołanie def powitanie(imie):     print(f"Witaj, {imie}!")  if __name__ == "__main__":     powitanie("świecie") 
4.3 Przykład C#
 // C# - klasa i metoda Main using System;  class Program {     static void Main()     {         Console.WriteLine("Witaj, świecie!");     } } 
4.4 Przykład Haskella
 -- Haskell - funkcja czystego stylu main :: IO () main = putStrLn "Witaj, świecie!"  -- Przykład funkcji bez efektów ubocznych: square x = x * x 

5. Powiązane strony

Jeżeli chcesz dowiedzieć się więcej, poszukaj materiałów o:

  • konkretnych językach programowania (np. Python, Java, C#),
  • paradygmatach programowania (funkcjonalne, reaktywne, proceduralne),
  • narzędziach deweloperskich: kompilatory, interpretery, IDE, systemy kontroli wersji (np. Git),
  • dobre praktyki i wzorce projektowe (design patterns),
  • bezpieczeństwo aplikacji i testy jednostkowe.

Artykuł ten wprowadza podstawy i klasyfikacje. W zależności od celu — nauki, tworzenia aplikacji webowych, systemowych, gier czy analiz danych — warto wybrać język i paradygmat najlepiej dopasowany do zadania.