Czym jest i jak działa język programowania?

Dużo się mówi o nauce programowania ale od czegoś trzeba zacząć i w końcu musisz wybrać język programowania którego będziesz się uczył.
Nie ma co wybierać kilku tylko zamiast rozpraszania się na wiele kierunków to lepiej wybrać jeden język i opanować go porządnie na takim poziomie aby być gotowym do rozpoczęcia pierwszej pracy jako junior developer.
Języki programowania służą do tworzenia programów komputerowych, czyli zestawów instrukcji, które mówią komputerowi, co ma robić. Kiedy program jest napisany w języku programowania, musi zostać przetłumaczony na kod maszynowy, który komputer może zrozumieć i wykonać.
Ten proces nazywany jest kompilacją lub interpretacją, zależnie od języka programowania.
Co to jest język programowania?
Język programowania to w zasadzie formalny język służący do przekazywania instrukcji komputerowi. Instrukcje te, zwane również kodem, są zapisane w określonej składni i gramatyce, którą komputer może zrozumieć i wykonać. Każdy język programowania ma swój własny, unikalny zestaw reguł i składni, których programiści muszą przestrzegać, aby tworzyć funkcjonalne programy.
Instrukcje mogą dotyczyć zarówno prostych obliczeń arytmetycznych, jak i złożonych algorytmów i mogą być wykorzystywane do tworzenia szerokiej gamy aplikacji, od aplikacji internetowych i mobilnych po programy, gry komputerowe, sztuczną inteligencję, robotykę i wiele wiele więcej.
Podobnie jak języki naturalne, języki programowania mają swoją własną gramatykę i słownictwo, które określają, jak programy napisane w tym języku są skonstruowane i rozumiane przez komputery.
Składnia określa zasady konstruowania poprawnych stwierdzeń i wyrażeń, takich jak stosowanie nawiasów, średników i innych symboli, natomiast semantyka opisuje znaczenie tych stwierdzeń i sposób ich wykonania przez komputer.
Języki programowania są zaprojektowane tak, by były precyzyjne i jednoznaczne, ponieważ komputery mogą zrozumieć i wykonać tylko te instrukcje, które są jednoznacznie zdefiniowane.
W przeciwieństwie do języków naturalnych, języki programowania wymagają od programisty określenia każdego szczegółu pożądanego zachowania, nie pozostawiając miejsca na interpretację czy niejednoznaczność.
Wiele języków programowania jest tworzonych na podstawie istniejących rozwiązań lub poprzez celowe upodabnianie języka do innego. Może to pomóc programistom, którzy są już zaznajomieni z konkretnym paradygmatem programowania lub składnią, szybko nauczyć się i zaadaptować do nowego języka.
Na przykład wiele nowoczesnych języków programowania opiera się na języku programowania C, który ma prostą składnię i jest powszechnie stosowany w programowaniu systemowym. Ułatwia to programistom naukę nowych języków, takich jak Java czy C++, które bazują na C, ponieważ mają wiele podobieństw w składni i strukturze.
Elementy języka programowania
Postać programu wyrażona w języku programowania określana jest jako kod źródłowy.
Czyli kod źródłowy to jest to co programiści piszą tworząc jakikolwiek program lub aplikację.
Jest to czytelna dla człowieka wersja programu komputerowego napisanego w języku programowania. Jest to zbiór instrukcji zapisanych w określonej składni i strukturze, które mogą być zrozumiane przez programistów.
Kod źródłowy jest zwykle pisany w Edytorze kodu źródłowego takim jak na przykład Visual Studio Code lub zintegrowanym środowisku programistycznym (IDE) i zapisywany w pliku o określonym rozszerzeniu. Kod źródłowy jest następnie kompilowany lub interpretowany na kod maszynowy, który może być wykonywany przez komputer.
Na język programowania składa się kilka elementów:
Składnia
Składnia jest jednym z kluczowych elementów języka programowania. Odnosi się do zbioru reguł, które określają, w jaki sposób można łączyć różne elementy języka programowania, aby tworzyć programy.
Składnia języka programowania określa strukturę i format poleceń, wyrażeń i konstrukcji programistycznych, takich jak pętle, instrukcje warunkowe, funkcje i inne. Zawiera zasady używania zmiennych, typów danych, operatorów i innych konstrukcji językowych.
Błędy składni występują, gdy program narusza zasady składni języka programowania. Błędy te mogą uniemożliwić uruchomienie programu lub spowodować nieoczekiwane zachowanie. Dlatego ważne jest, aby programiści dobrze rozumieli składnię języka programowania, którego używają, aby pisać poprawne i funkcjonalne programy.
Semantyka
Semantyka to kolejny ważny element języka programowania, który odnosi się do znaczenia kryjącego się za składnią programu.
Semantyka określa znaczenie poszczególnych symboli oraz ich funkcję w programie.
Najczęściej gdy mówimy o tym żeby pisać semantyczny kod na przykład HTML to chodzi o to żeby używać takich znaczników, które w jak największym stopniu odzwierciedlą znaczenie danej sekcji lub elementu. Przykładowo do tworzenia nagłówka powinno używać się znacznika <header> zamiast zwykłego kontenera czyli diva, który nie ma znaczenia semantycznego. Jest po prostu pojemnikiem do którego wrzucamy jakąś treść.
Zrozumienie semantyki języka programowania jest ważne dla pisania poprawnych i wydajnych programów. Pomaga też programistom w lepszym zrozumieniu, czemu tak wykonuje się dany kod i dlaczego tak się zachowuje program. Pomaga to przede wszystkim w debugowaniu i optymalizowaniu kodu ale też jest dobrą praktyką aby pisać jak najwięcej semantycznego kodu.
Typy danych
Każdy język programowania ma zestaw typów danych, które określają właściwości danych i operacje, jakie można na nich wykonywać. Konkretne typy danych dostępne w danym języku programowania i ich właściwości mogą być różne, ale większość języków zawiera następujące typy danych:
Liczby całkowite: Są to liczby całkowite takie jak 1, 2, -3 itd.
Liczby zmiennoprzecinkowe: Są to liczby z ułamkiem, czyli takie jak 3,14, -0,5 itd.
Znaki: Są to pojedyncze litery, cyfry lub symbole, takie jak 'a', '9', '$' itd.
Ciągi znaków czyli stringi: Są to ciągi znaków, takie jak 'hello', 'world' itd.
Booleans: Są to wartości, które mogą być prawdziwe lub fałszywe.
Tablice: Są to zbiory wartości tego samego typu danych, np. lista liczb całkowitych lub stringów.
Wskaźniki: Wskaźnik to zmienna przechowująca adres innej zmiennej. Inaczej mówiąc, jest to zmienna wskazująca na adres innej zmiennej lub struktur danych.
Klasy (typ obiektowy): Są to zdefiniowane przez użytkownika typy danych, które mogą zawierać zarówno dane, jak i metody określające zachowanie klasy. Zmienna typu klasy nazywa się obiektem. Pojęcie klasy spowodowało powstanie nowego paradygmatu programowania, zwanego programowaniem obiektowym
Różne języki programowania mogą mieć dodatkowe lub inne typy danych, ale te są najczęściej spotykane w wielu językach programowania.
Od strony sprzętowej wszystkie te informacje wyrażane są za pomocą sekwencji zer i jedynek. Język programowania nakłada jedynie odpowiednie ograniczenia i zasady ich przetwarzania.
Jak działa język programowania?
Języki programowania służą do tworzenia programów komputerowych, czyli zestawów instrukcji, które mówią komputerowi, co ma robić. Kiedy program jest napisany w języku programowania, musi zostać przetłumaczony na kod maszynowy, który komputer może zrozumieć i wykonać. Ten proces nazywany jest kompilacją lub interpretacją, zależnie od języka programowania.
Ogólnie rzecz biorąc, języki programowania dostarczają zestaw reguł i składni do definiowania struktury i zachowania programów. Programista używa składni języka do pisania linii kodu, które reprezentują określone działania lub obliczenia. Te linie kodu są następnie kompilowane lub interpretowane przez narzędzie programowe zwane odpowiednio kompilatorem lub interpreterem, które tłumaczy kod na czytelne instrukcje, które komputer może wykonać.
Kompilacja to proces tłumaczenia kodu źródłowego napisanego w języku programowania na kod maszynowy, który może być wykonywany bezpośrednio przez procesor komputera. Dokonuje się tego za pomocą specjalnych systemów programowych zwanych kompilatorami, który przyjmuje kod źródłowy jako dane wejściowe i generuje plik wykonywalny, który może być uruchomiony w systemie docelowym.
Podczas kompilacji kompilator najpierw sprawdza składnię kodu źródłowego, żeby upewnić się, że jest ona zgodna z regułami języka programowania. Jeśli wystąpią jakieś błędy w składni, kompilator zgłosi je programiście, aby mógł je poprawić.
Po sprawdzeniu składni kompilator tłumaczy kod źródłowy na kod maszynowy, czyli serię instrukcji binarnych, które mogą być wykonywane przez procesor komputera.
Po wygenerowaniu kodu maszynowego kompilator zazwyczaj łączy go z niezbędnymi bibliotekami i zasobami, tworząc plik wykonywalny. Plik ten można następnie uruchomić w systemie docelowym, który wykona instrukcje zawarte w kodzie maszynowym.
Kompilacja jest ważnym etapem procesu tworzenia oprogramowania, ponieważ zapewnia, że kod źródłowy został poprawnie przetłumaczony na kod maszynowy, a wszelkie błędy i problemy zostaną wychwycone przed uruchomieniem programu w systemie docelowym.
Interpretacja kodu to proces wykonywania kodu bezpośrednio z jego źródła, bez uprzedniej kompilacji do kodu maszynowego. W interpretowanym języku programowania interpreter czyta kod źródłowy linia po linii i wykonuje go w locie, nie wymagając osobnego etapu kompilacji.
Podczas interpretacji interpreter analizuje każdy wiersz kodu i natychmiast go wykonuje. Pozwala to na szybsze tworzenie i testowanie kodu, ponieważ zmiany w kodzie źródłowym mogą być wprowadzane i wykonywane natychmiast, bez konieczności rekompilacji całego programu.
Interpretowane języki programowania są zazwyczaj łatwiejsze do nauczenia się i używania niż języki kompilowane, ponieważ nie wymagają oddzielnego etapu kompilacji i zapewniają większą elastyczność w modyfikowaniu i wykonywaniu kodu. Jednak języki interpretowane mogą być wolniejsze od języków kompilowanych, ponieważ interpreter musi tłumaczyć każdy wiersz kodu na kod maszynowy w czasie wykonywania programu, a nie generować z góry zoptymalizowany kod maszynowy.
Interpretacja kodu jest szeroko stosowana w tworzeniu stron internetowych, tworzeniu skryptów i zadaniach automatyzacji, gdzie szybkość jest mniej istotna niż elastyczność i łatwość użycia.
Przykładami interpretowanych języków programowania są Python, Ruby, JavaScript i PHP. Języki te są powszechnie używane do tworzenia stron internetowych, pisania skryptów po stronie serwera i zadań automatyzacji, gdzie możliwość szybkiego modyfikowania i wykonywania kodu jest bardzo cenna.
Podział języków programowania
Języki programowania można podzielić na kilka kategorii ze względu na ich poziom abstrakcji, architekturę i przeznaczenie. Oto niektóre z popularnych kategorii języków programowania:
Języki programowania wysokiego poziomu: Są to języki bliższe językom ludzkim i zaprojektowane tak, aby łatwiej było je czytać i pisać. Przykładami są Python, Java, Ruby i JavaScript.
Języki programowania niskiego poziomu: Są to języki, które są bliższe kodowi maszynowemu i zostały zaprojektowane tak, aby mieć bardziej bezpośrednią kontrolę nad sprzętem. Przykłady: Asembler, C i C++.
Języki skryptowe: Są to języki używane głównie do automatyzacji i wykonywania skryptów, takich jak tworzenie stron internetowych, administracja systemami i przetwarzanie danych. Przykładami są JavaScript, Python, Ruby i Perl.
Języki programowania zorientowane obiektowo: Są to języki zaprojektowane wokół koncepcji obiektów, które są instancjami klas zawierających dane i metody. Przykładami są Java, C#, C++, PHP, JavaScript czy Python.
Funkcjonalne języki programowania: Są to języki zaprojektowane wokół koncepcji funkcji, które służą do wykonywania obliczeń i manipulowania danymi.
Języki dziedzinowe: Są to języki zaprojektowane do konkretnych zadań lub dziedzin, takie jak SQL do zarządzania bazami danych, MATLAB do obliczeń naukowych czy VHDL do projektowania sprzętu.
Proceduralne języki programowania: Są to języki, które zostały zaprojektowane w oparciu o koncepcję procedur lub podprogramów, z których każda realizuje określoną funkcję i może być wywoływana wielokrotnie przez program główny. Przykładami są C, Pascal i Fortran.
To tylko kilka przykładów różnych typów języków programowania, a istnieje wiele innych kategorii i podkategorii zależnych od przeznaczenia i architektury języka.