Podstawy większości języków proceduralnych są prawie takie same.
Oni oferują:
- Skalarne typy danych: zwykle wartości logiczne, liczby całkowite, zmiennoprzecinkowe i znaki
- Złożone typy danych: tablice (ciągi znaków są specjalnymi przypadkami) i struktury
- Podstawowe konstrukcje kodu: arytmetyka na skalarach, dostęp do tablicy / struktury, przypisania
- Proste struktury kontrolne: if-then, if-then-else, while, dla pętli
- Pakiety bloków kodu: funkcje, procedury z parametrami
- Zakresy: obszary, w których identyfikatory mają określone znaczenie
Jeśli to zrozumiesz, dobrze znasz 90% języków na naszej planecie. To, co sprawia, że te języki są nieco trudniejsze do zrozumienia, to niesamowita różnorodność dziwnej składni, której ludzie używają, by mówić te same podstawowe rzeczy. Niektórzy używają notacji zwięzłej z nieparzystą interpunkcją (APL to ekstremum). Niektóre używają wielu słów kluczowych (COBOL jest doskonałym przedstawicielem). To nie ma większego znaczenia. Liczy się to, że język jest wystarczająco kompletny, aby wykonywać złożone zadania bez powodowania odrywania włosów. (Spróbuj zakodować poważne hakowanie ciągów w skrypcie powłoki systemu Windows DOS: jest on zdolny do Turinga, ale jest naprawdę zły we wszystkim).
Bardziej interesująca oferta języków proceduralnych
- Zagnieżdżone lub leksykalne zakresy, przestrzenie nazw
- Wskaźniki pozwalające jednej jednostce odnosić się do drugiej z dynamicznym przydzielaniem pamięci
- Pakowanie powiązanego kodu: paczki, obiekty z metodami, cechy
- Bardziej zaawansowana kontrola: rekurencja, kontynuacje, zamykanie
- Wyspecjalizowane operatory: operacje na łańcuchach i tablicach, funkcje matematyczne
Choć technicznie nie jest to właściwość języka, ale właściwość ekosystemu, w którym żyją takie języki, są to biblioteki, które są łatwo dostępne lub wyposażone w język jako część narzędzia programistycznego. Posiadanie szerokiej gamy udogodnień bibliotecznych upraszcza / przyspiesza pisanie aplikacji po prostu dlatego, że nie trzeba wymyślać na nowo tego, co robią biblioteki. Podczas gdy Java i C # są powszechnie uważane za dobre języki same w sobie, tym, co czyni je naprawdę przydatnymi, są ogromne biblioteki, które się z nimi wiążą, i łatwo dostępne biblioteki rozszerzeń.
Trudniej zrozumieć języki, które nie są proceduralne:
- Języki czysto funkcjonalne, bez zadań i skutków ubocznych
- Języki logiczne, takie jak Prolog, w których występują obliczenia symboliczne i unifikacja
- Języki dopasowywania wzorów, w których określasz kształty dopasowane do problemu, a często akcje są wyzwalane przez dopasowanie
- Języki ograniczeń, które pozwalają określać relacje i automatycznie rozwiązywać równania
- Języki opisu sprzętu, w których wszystko działa równolegle
- Języki specyficzne dla domeny, takie jak SQL, kolorowe sieci Petriego itp.
Istnieją dwa główne style reprezentacji języków:
- Oparty na tekście, w którym identyfikatory nazywają encje i przepływy informacji są niejawnie kodowane w formułach, które używają identyfikatorów do nazwania encji (Java, APL, ...)
- Graficzny, w którym elementy są rysowane jako węzły, a relacje między elementami są rysowane jako wyraźne łuki między tymi węzłami (UML, Simulink, LabView)
Języki graficzne często dopuszczają podsieci tekstowe jako adnotacje w węzłach i na łukach. Języki graficzne Odera rekurencyjnie dopuszczają wykresy (z tekstem :) w węzłach i na łukach. Naprawdę dziwne języki graficzne pozwalają, aby wykresy adnotacyjne wskazywały na adnotowane wykresy.
Większość tych języków opiera się na bardzo małej liczbie modeli obliczeniowych:
- Rachunek lambda (podstawa dla Lisp i wszystkich języków funkcjonalnych)
- Systemy pocztowe (lub techniki przepisywania ciągów / drzewek / wykresów)
- Maszyny Turinga (modyfikacja stanu i wybór nowych komórek pamięci)
Biorąc pod uwagę fakt, że większość branży koncentruje się na językach proceduralnych i złożonych strukturach kontrolnych, możesz dobrze skorzystać, jeśli nauczysz się jednego z bardziej interesujących języków w tej kategorii, zwłaszcza jeśli zawiera on pewien rodzaj orientacji obiektowej.
Bardzo polecam naukę Schematu, w szczególności z naprawdę wspaniałej książki:
Struktura i interpretacja programów komputerowych . Opisuje wszystkie te podstawowe pojęcia. Jeśli znasz te rzeczy, inne języki będą wydawać się proste, z wyjątkiem głupiej składni.