Lidské jazyky vs. programovací jazyky

Stručné srovnání z pohledu lingvisty (brzy bude) programátora

Stále si pamatuji den, kdy jsem se poprvé naučil o počítačové lingvistice. Právě jsem absolvoval střední školu specializovanou na vědu a čelil tvrdému rozhodnutí o tom, co studovat. Z jakéhokoli důvodu jsem se rozhodl jít s jazyky a právě na jedné z prvních přednášek jsem se dozvěděl o aplikované lingvistice a jejích četných členění. Ze všech těchto oborů mě upoutala počítačová lingvistika. Vzpomínám si, že to musí být dokonalá rovnováha dvou velmi odlišných disciplín, ideální pro nerozhodné typy, jako jsem já, kteří odmítají volit mezi humanitními vědami a vědou.

Zdroj: 3: AM Magazine

O devět let později se znovu učím, ale tentokrát jsem na druhé straně mince - učení o programování. Vzpomínky na studentské dny se vrátily, ale tentokrát mohu udělat víc než snít o tomto dokonale vyváženém poli. Využívám této příležitosti, abych se dozvěděl více o lingvistice, programování a všem, co mají společné. Začněme tedy od samotných základů.

Co je to jazyk?

Definování jazyka se může zdát snadné, ale stránky a stránky o něm mohou být (a byly) napsány. Důvodem je složitá povaha jazyka jako jevu, jakož i různé způsoby, jak k němu přistoupit a vysvětlit jej. Jazyk lze definovat jako systém mluvených, manuálních nebo písemných symbolů, které lidé používají k vyjádření sebe sama, své identity, představivosti a emocí. Postupem času se jazyky vyvíjely a vyvíjely a našli jsme způsob, jak tyto změny popsat a systematizovat. Jejich hlavní účel - komunikace - se však nezměnil.
Programovací jazyky se točí kolem stejného principu komunikace. Byli stvořeni lidmi jako systém symbolů a pravidel používaných k předávání sady pokynů stroji / počítači. Programovací jazyky, i když jsou ve své podstatě mnohem jednodušší, vyvinuly také vlastní klasifikaci a historii.

Jaké jsou tedy podobnosti a rozdíly mezi programovacími jazyky a lidskými jazyky?

Podobnosti

Už jsme to získali z předchozího odstavce, ale opakujme to znovu: hlavní funkcí jazyků, ať už je to Python nebo čínština, je komunikace. Toto je nejdůležitější podobnost mezi nimi a jeden z hlavních důvodů, které oba označujeme jako jazyky.

Dalším důležitým rysem, který mají společné, je struktura. Dva z hlavních pojmů v lingvistice jsou sémantika a syntaxe. Sémantika odkazuje na význam určitého slova, nebo spíše informace spojené s určitým konceptem. Například slovo jíst se vztahuje na konkrétní akci, kterou mohou živé organismy dělat. Syntaxe je naopak sada pravidel, která nám říkají, jak uspořádat a kombinovat slova a fráze. Oba jsou úzce propojeni a pouze společně mohou vytvořit plně funkční výraz. Jako příklad si vezměme větu Bed: zatímco je správná z pohledu syntaxe, sémanticky je to špatně, protože postel není naživu, a proto nemůže jíst. Podobně jako v přirozených jazycích, programovací jazyky rozlišují mezi syntaxí a sémantikou. Každý programovací jazyk je psán s určitým nápadem nebo záměrem (sémantika), zatímco sleduje sadu pravidel kolem použití proměnných, funkcí, různých druhů závorek, dvojteček atd. (Syntaxe).

Je také důležité zdůraznit, že obě tvoří jazykové rodiny nebo skupiny souvisejících jazyků, které od sebe oddělují. Všichni jsme slyšeli o indoevropské jazykové rodině, mezi které patří i angličtina. Programovací jazyky mají své vlastní rodiny jazyků s relativně podobnou syntaxí a / nebo sémantikou. Na obrázku níže vidíte některé ze známějších programovacích jazyků (podrobnější genealogický strom najdete zde).

Zdroj: Historie programovacích jazyků Ursula Lewis

Rozdíly

Když mluvíme o struktuře jazyků, nezapomeňme zmínit morfologii. Morfologie je studium slov, jejich formování, jejich vztah k jiným slovům ve stejném jazyce, jakož i způsobů, jak může kontext změnit výslovnost a význam slova. I když morfologie hraje velmi důležitou roli v analýze lidských jazyků, nelze skutečně říci, že programovací jazyky mají něco podobného.

Za prvé, programovací jazyky jsou umělé výtvory. To znamená, že všechna jejich pravidla a definice byly vytvořeny předem, což umožňuje, aby byly plně popsány a studovány v plném rozsahu. Jejich gramatika je definovatelná a v závislosti na kontextu se nemění. Přemýšlejte o tom tímto způsobem: každý řádek kódu má buď nulový, nebo jeden význam (jinými slovy, obsahuje buď chybu nebo je to platný program, který můžete spustit). Neexistují žádná synonyma (ačkoli Ruby's .map a .collect lze nahlížet jako na synonyma), alegorie, analogie, historické nebo kulturní odkazy. Z tohoto důvodu programovací jazyky ve skutečnosti nemají morfologii, přinejmenším ne stejným způsobem jako lidské jazyky.

Zdroj: Steve the vagabond a hloupý lingvista

Za druhé, vzhledem k tomu, že se řídí velmi přísnými pravidly, programovací jazyky se nemohou vyvíjet a rozvíjet stejným způsobem jako lidské jazyky (i když bychom mohli říci, že programovací jazyky se vyvíjejí prostřednictvím různých knihoven). Neexistuje prostor pro chyby ani improvizaci. Na druhé straně jsou lidské jazyky plné nedokonalostí. Jen pomyslete na dialekt, slang, žargon, argot (tajný jazyk používaný určitou skupinou, který je nepochopitelný pro cizince), jmenovec, přízvuky, nesprávná slova, překlepy, nepravidelná interpunkce a mnoho dalších aspektů lidských jazyků, které nenarušují zprávu, kterou my Snažím se komunikovat.

Zdroj: Steve the vagabond a hloupý lingvista

A zpráva, kterou lidské jazyky komunikují, je logická i emotivní. Pokud je řeč, zahrnuje řeč těla, intonaci, hlasitost a mnoho dalších neverbálních vodítek. Ve skutečnosti jsou jazyky hodně definovány fyzickými atributy lidských těl (oči, jazyk, ruce) a jsou proto pro člověka jedinečné. Nic z toho se nevztahuje na programovací jazyky. Ačkoli vysoce kvalifikovaní programátoři mohou rozvíjet své vlastní styly psaní kódu, povaha tohoto kódu zůstává stejná: logická, přesná, naprosto jednoznačná. Což by nemělo být překvapením, protože základem všech programovacích jazyků jsou miliardy a miliardy 1s a 0s.

Proč je toto důležité?

Pochopení rozdílu mezi programovacími jazyky a lidskými jazyky má velký význam pro mnoho oblastí, které pracují na vytváření nástrojů pro důležité praktické úkoly, jako je strojový překlad, rozpoznávání řeči, syntéza řeči, extrakce informací z textu, kontrola gramatiky, dolování textu a další. Pomyslete na Google Translate nebo Siri a pokuste se pochopit vše, co potřebujete k tomu, abyste z jednoduché věty v angličtině proměnili zprávu, kterou může počítač zpracovat. Nyní pomyslete na první konverzaci ve španělštině, kterou jste měli mimo třídu. Cítili jste se závratě, že?

Zdroj: Steve vagabond a hloupý lingvista