• Seznam programovacích jazyků. Nízkoúrovňové a vysoké programovací jazyky

    Programátor William W. Vold říká

    Posledních šest měsíců jsem pracoval na programovacím jazyce (PL) s názvem Pinecone. Nebudu riskovat, že to budu nazývat kompletní, ale už je to použitelné – obsahuje k tomu dostatek prvků, jako jsou proměnné, funkce a uživatelsky definované datové struktury. Pokud si to chcete před čtením prohlédnout, doporučuji navštívit oficiální stránku a úložiště na GitHubu.

    Úvod

    Nejsem odborník. Když jsem s tímto projektem začínal, neměl jsem ponětí, co dělám a stále nevím. Nikdy jsem cíleně nestudoval principy tvorby jazyka – jen jsem četl nějaké materiály na webu a ani v nich jsem nenašel pro sebe téměř nic užitečného.

    Napsal jsem však zcela nový jazyk. A on pracuje. Asi dělám něco správně.

    V tomto článku se pokusím ukázat, jak Pinecone (a další programovací jazyky) mění zdrojový kód v to, co mnozí považují za magii. Zaměřím se také na situace, ve kterých jsem musel udělat kompromis, a vysvětlím, proč jsem se tak rozhodl.

    Text si nečiní zrovna nárok na to, že je úplným průvodcem k vytvoření programovacího jazyka, ale pro zvídavé bude dobrým výchozím bodem.

    První kroky

    "Kde začínáš?" je otázka, kterou si ostatní vývojáři často kladou, když zjistí, že píšu svůj vlastní jazyk. V této části se na to pokusím podrobně odpovědět.

    Zkompilovaný nebo interpretovaný?

    Kompilátor analyzuje program jako celek, převede jej na strojový kód a uloží jej pro pozdější spuštění. Interpret analyzuje a provádí program řádek po řádku v reálném čase.

    Technicky lze jakýkoli jazyk kompilovat i interpretovat. Ale pro každý jazyk je jedna z metod vhodnější než druhá a volba paradigmatu v rané fázi určuje další návrh. V obecném smyslu je interpretace flexibilní a kompilace poskytuje vysoký výkon, ale to je jen špička velmi složitého tématu.

    Chtěl jsem vytvořit jednoduchý, ale výkonný jazyk, který je vzácný, a tak jsem se od začátku rozhodl udělat Pinecone kompilovatelný. Přesto má Pinecone i interpret - zpočátku bylo spuštění možné jen s jeho pomocí, později vysvětlím proč.

    Poznámka. přel. Mimochodem, máme rychlý přehled – je to skvělé cvičení pro ty, kteří se učí Python.

    Výběr jazyka

    Jakýsi meta-krok: samotný programovací jazyk je program, který musí být napsán v nějakém jazyce. C++ jsem si vybral kvůli jeho výkonu, bohaté sadě funkcí a jednoduše proto, že se mi líbí.

    Ale obecně lze poradit takto:

    • vyložil PL vysoce doporučenonapsat na kompilovaném PL (C, C++, Swift). V opačném případě bude penalizace za výkon sněhová koule, protože meta interpret interpretuje vašeho interpreta;
    • sestavil PL můžeš psát v interpretovaném PL (Python, JS). Doba kompilace se prodlouží, ale ne doba provádění programu.

    architektonický design

    Struktura programovacího jazyka má několik kroků od zdrojového kódu po spustitelný soubor, z nichž každý určitým způsobem formátuje data, a také funkce pro pohyb mezi těmito kroky. Promluvme si o tom podrobněji.

    Lexikální analyzátor / lexer

    Řetězec zdrojového kódu je předán přes lexer a přeměněn na seznam tokenů.

    Prvním krokem ve většině PL je lexikální analýza. Zjednodušeně jde o rozdělení textu na tokeny, tedy jednotky jazyka: proměnné, názvy funkcí (identifikátory), operátory, čísla. Tím, že do lexeru dodáme řetězec se zdrojovým kódem, získáme jako výstup seznam všech tokenů, které obsahuje.

    Odkazy na zdrojový kód se v následujících fázích již nebudou vyskytovat, takže všechny potřebné informace musí poskytnout lexer.

    Flex

    Když jsem vytvářel jazyk, první věc, kterou jsem udělal, bylo napsat lexer. Později jsem studoval nástroje, které by mohly usnadnit lexikální analýzu a snížit počet chyb.

    Jedním z hlavních takových nástrojů je Flex, generátor lexikálního analyzátoru. Vezme soubor s popisem gramatiky jazyka jako vstup a poté vytvoří program C, který zase analyzuje řetězec a vytvoří požadovaný výsledek.

    Mé rozhodnutí

    Rozhodl jsem se ponechat si analyzátor, který jsem napsal. Nakonec jsem pro Flex neviděl žádné zvláštní výhody a jeho použití by vytvořilo pouze další závislosti, které komplikují proces sestavování. Moje volba navíc poskytuje větší flexibilitu – například můžete do jazyka přidat operátor, aniž byste museli upravovat více souborů.

    Analyzátor / analyzátor

    Seznam žetonů prochází analyzátorem a mění se ve strom.

    Další fází je analyzátor. Transformuje zdrojový text, tedy seznam tokenů (s přihlédnutím k závorkám a pořadí operací), na abstraktní syntaktický strom, který umožňuje strukturálně reprezentovat pravidla vytvořeného jazyka. Samotný proces lze nazvat jednoduchým, ale s nárůstem počtu jazykových konstruktů se stává mnohem komplikovanějším.

    Bizon

    V tomto kroku jsem také přemýšlel o použití knihovny třetí strany a zvažoval jsem, že Bison vygeneruje analyzátor. V mnoha ohledech je podobný Flexu – uživatelský soubor s pravidly syntaxe je strukturován pomocí programu C. Opět jsem ale opustil automatizační nástroje.

    Výhody zakázkových programů

    S lexerem bylo mé rozhodnutí napsat a použít svůj vlastní kód (asi 200 řádků dlouhý) docela zřejmé: miluji hádanky a tento je také relativně triviální. Analyzátor je jiný příběh: nyní je délka jeho kódu 750 řádků a toto je třetí pokus (první dva byly prostě hrozné).

    Rozhodl jsem se však, že si parser udělám sám. Zde jsou hlavní důvody:

    • minimalizace přepínání kontextu;
    • zjednodušení montáže;
    • ochotu dělat věci po svém.

    O účelnosti řešení mě přesvědčil výrok Waltera Brighta (tvůrce jazyka D) v jednom z jeho článků:

    Nedoporučoval bych používat generátory lexerů a parserů, stejně jako další takzvané "kompilátory". Psaní lexeru a parseru nezabere mnoho času a použití generátoru vás k němu při budoucí práci pevně připoutá (což je důležité při portování kompilátoru na novou platformu). Kromě toho jsou generátory pozoruhodné tím, že vydávají irelevantní chybová hlášení.

    Abstraktní sémantický graf

    Přechod ze stromu syntaxe do sémantického grafu

    V této části jsem implementoval strukturu, která je v LLVM v podstatě nejblíže „intermediate representation“ (intermediate representation). Mezi abstraktním syntaxovým stromem (AST) a abstraktním sémantickým grafem (ASG) je malý, ale důležitý rozdíl.

    ASG vs ASD

    Zhruba řečeno, sémantický graf je syntaktický strom s kontextem. To znamená, že obsahuje informace, jako je typ, který funkce vrací, nebo kde je použita stejná proměnná. Protože graf potřebuje rozpoznat a zapamatovat si všechny tyto souvislosti, potřebuje kód, který jej generuje, podporu ve formě mnoha různých vysvětlujících tabulek.

    zahájení

    Jakmile je graf na svém místě, spuštění programu se stává poměrně jednoduchým úkolem. Každý uzel obsahuje implementaci funkce, která přijímá nějaký vstup, dělá to, k čemu je naprogramována (včetně případného volání pomocných funkcí) a vrací výsledek. Toto je tlumočník v akci.

    Možnosti kompilace

    Možná se ptáte, kde se vzal interpret, když jsem původně definoval Pinecone jako kompilovaný jazyk. Jde o to, že kompilace je mnohem složitější než interpretace – dříve jsem se zmínil, že jsem v tomto kroku narazil na nějaké problémy.

    Napište si vlastní kompilátor

    Zpočátku se mi tento nápad líbil - rád dělám věci sám, kromě toho jsem se už dlouho chtěl naučit jazyk symbolických instrukcí. Ale vytvořit multiplatformní kompilátor od nuly je obtížnější než psát strojový kód pro každý prvek jazyka. Zjistil jsem, že tento nápad je absolutně nepraktický a nestojí za vynaložené prostředky.

    Každý, kdo se rozhodne zvládnout základy procesu tvorby počítačových programů, si klade otázku, jaké jsou dnes nejoblíbenější programovací jazyky a které je nejlepší se naučit. A pokud je velmi snadné odpovědět na první otázku, pak bude muset student sám hledat odpověď na druhou na základě svých plánů a potřeb.

    Pojďme se rychle podívat na nejoblíbenější programovací jazyky, abyste si mohli vybrat ten, který vás láká, a začít se ho učit.

    programování?

    Před rozebráním hlavních programovacích jazyků a jejich popisem je nutné rozebrat samotný koncept.

    Programovací jazyk je formální znakový systém, který se používá k psaní počítačových programů. Jako každý jiný jazyk má svá vlastní lexikální, sémantická a syntaktická pravidla.

    Přidělte jazyky nízké a vysoké úrovně programování. K dnešnímu dni se používá hlavně ten druhý.

    Programovací jazyky vysoké a nízké úrovně

    Nízkoúrovňový programovací jazyk má strukturu blízkou struktuře.V tomto případě se příkazy neoznačují nulami a jedničkami, ale pomocí mnemotechnického zápisu. Nejznámějším nízkým programovacím jazykem je jazyk symbolických instrukcí.

    Práce s kterýmkoli z jazyků vyžaduje vysokou kvalifikaci, porozumění, psaní programů navíc zabere spoustu času. Zároveň pomocí nízkých můžete vytvářet malé, ale zároveň efektivní programy. Začínajícím programátorům se nedoporučuje, aby se s nimi seznamovali.

    Programovací jazyky na vysoké úrovni se vyznačují přítomností sémantických struktur pro popis operací. Jejich studium zabere mnoho času a jejich aplikace v praxi vyžaduje pozornost a pochopení základních struktur a pravidel syntaxe a slovní zásoby. Ale zároveň vám znalost jazyků na vysoké úrovni umožňuje vytvářet velké, barevné, multifunkční projekty v rekordním čase.

    Vysoká úroveň zahrnuje Pascal, Java, C, C++, C#, Delphi a mnoho dalších. Používají se k psaní softwaru a aplikačních programů.

    Nejoblíbenější programovací jazyky

    Jaké jsou dnes nejoblíbenější programovací jazyky?

    V posledních letech jsou za nejoblíbenější a nejžádanější považovány Java, C, C++, Python, C#, které patří mezi špičkové programovací jazyky. Tvoří základ moderních programů a používají se při psaní jakéhokoli velkého projektu. S těmito jazyky pracuje více než 70 % programátorů. Předpokládá se, že v příštích 10 letech po nich bude stále stejná poptávka jako dnes.

    Ruby, PHP, JavaScript jsou považovány za neméně populární. Většina odborníků se na ně zaměřuje.

    Obecně, bez ohledu na popularitu, každý více či méně seberespektující specialista musí znát alespoň několik jazyků různých úrovní. To je způsobeno tím, že většina velkých projektů je vyvíjena v různých jazycích. Například některé moduly jsou napsány pomocí C, jiné jsou vyvíjeny v Javě a další jsou napsány v Delphi.

    C, C++ a C#

    Začněme s rodinou C.

    Jazyk C je sestaven a vyvinut v 70. letech. Na jeho základě byly následně vytvořeny jazyky jako C ++ a C #, Java.

    C++ je výkonný jazyk navržený pro vytváření jak nízkoúrovňových utilit a ovladačů, tak velmi působivých aplikací a softwarových balíků.

    C# je moderní objektově orientovaný jazyk založený na C a C++. Má systém bezpečného typu. Jedním z jeho charakteristických rysů je, že je také velmi podobný dalšímu oblíbenému programovacímu jazyku - Javě.

    Jednou z nevýhod jazyka je, že umožňuje vytvářet aplikace pouze pro operační systém Windows a navíc je velmi těžký, což znamená, že programy v něm napsané zabírají hodně místa.

    Lze poznamenat, že v mnoha ohledech jsou C, C++ a C# programovací jazyky pro začátečníky. Po jejich zvládnutí si můžete být jisti, že učení nového jazyka vám zabere minimum času.

    Můžete se s nimi seznámit a psát své první aplikace ve speciálním prostředí Borland nebo Visual Studio.

    JavaScript

    JavaScript je jazyk s objektově orientovanými schopnostmi. Vyvinutý v roce 1996 a dnes jeden z nejpopulárnějších. Jazyk se používá hlavně ve webovém skriptování a funguje ve velkých prohlížečích, jako je Internet Explorer, Firefox, Opera. Úzce souvisí i s HTML a CSS, takže než se to začnete učit, musíte si osvojit základy těchto jazyků.

    Stojí za zmínku, že navzdory podobnosti názvu jsou JavaScript a Java dva zcela odlišné jazyky.

    Tento jazyk je vhodný pro ty, kteří jsou zaměřeni na tvorbu prohlížečů a skriptů, aplikací a doplňků k nim. Pokud plánujete vytvářet vlastní stránky, musíte ho také lépe poznat.

    Jáva

    Vzhledem k nejpopulárnějším programovacím jazykům nelze nezmínit Javu. Jedná se o objektově orientovaný programovací jazyk, který se používá od roku 1995. Je velmi lehký a běží na jakémkoli stroji Java jakékoli architektury. Slouží k vývoji aplikací pro Android a iOS.

    Krajta

    Python - jehož hlavním úkolem je zvýšit produktivitu vývojáře, učinit kód čitelnějším. Má malý seznam syntaktických konstrukcí a velmi působivou standardní knihovnu funkcí. Vývoj jazyka začal v 90. letech a pokračuje dodnes. Slouží k vývoji různých projektů, rozšíření a integrace dříve vyvinutých aplikací.

    Základy jazyka Python se lze naučit jak jako začátek programování, tak jako druhý doplňkový jazyk.

    rubín

    Ruby je programovací jazyk na vysoké úrovni, který obsahuje části Perl, Smalltalk, Eiffel, Ada a Lisp. Používá se od roku 1995. Hlavní předností jazyka je jeho jednoduchost a flexibilita. Vhodné jak pro psaní malých aplikací, tak pro vývoj seriózních programů.

    jazyk PHP

    PHP je poměrně populární skriptovací jazyk určený pro tvorbu webových aplikací. Poměrně často je také zařazen do seznamu „Programovacích jazyků pro začátečníky“ a doporučen ke studiu.

    S ním vytvoříte kvalitní webové aplikace ve velmi krátkém čase. Jazyk má jednoduchou a srozumitelnou strukturu, která vám umožňuje se jej naučit během několika dní.

    Závěr

    Zkontrolovali jsme nejoblíbenější programovací jazyky, jejichž studium vám pomůže v budoucnu úspěšně vytvářet vaše projekty a vydělávat peníze jako programátor. Neexistuje shoda na tom, který jazyk studovat, ale zároveň odborníci poznamenávají, že je žádoucí znát několik programovacích jazyků, protože to dále rozšíří pole činnosti a usnadní práci na různých týmových projektech.

    Programovací jazyk

    Programovací jazyk- formální znakový systém určený k záznamu počítačových programů. Programovací jazyk definuje sadu lexikálních, syntaktických a sémantických pravidel, která definují vzhled programu a akce, které bude exekutor (počítač) provádět pod jeho kontrolou.

    • Funkce: programovací jazyk je navržen pro psaní počítačových programů, které se používají k přenosu instrukcí do počítače pro provádění konkrétního výpočetního procesu a organizování řízení jednotlivých zařízení.
    • Úkol: Programovací jazyk se liší od přirozených jazyků v tom, že je určen k přenosu příkazů a dat z osoby do počítače, zatímco přirozené jazyky se používají ke komunikaci mezi lidmi. Definici „programovacích jazyků“ můžete zobecnit – jde o způsob předávání příkazů, příkazů, jasný návod k jednání; zatímco lidské jazyky slouží také k výměně informací.
    • Provedení: Programovací jazyk může používat speciální konstrukce k definování a manipulaci s datovými strukturami a řízení procesu výpočtu.

    Standardizace programovacích jazyků

    Programovací jazyk může být reprezentován jako soubor specifikací, které definují jeho syntaxi a sémantiku.

    Pro mnoho široce používaných programovacích jazyků byly vytvořeny mezinárodní standardy. Speciální organizace pravidelně aktualizují a zveřejňují specifikace a formální definice odpovídajícího jazyka. V rámci těchto komisí pokračuje vývoj a modernizace programovacích jazyků a řeší se otázky rozšiřování či podpory stávajících a nových jazykových konstrukcí.

    Typy dat

    Moderní digitální počítače jsou obvykle binární a data jsou uložena v binárním (binárním) kódu (ačkoli implementace v jiných číselných soustavách jsou možné). Tato data obvykle odrážejí informace ze skutečného světa (jména, bankovní účty, míry atd.) představující koncepty na vysoké úrovni.

    Speciální systém, podle kterého jsou data organizována v programu, je typový systém programovací jazyk; vývoj a studium typových systémů je známé jako teorie typů. Jazyky lze klasifikovat jako systémy se statickým psaním a jazyky z dynamické psaní.

    Jazyky statického typu lze dále rozdělit na jazyky s povinné prohlášení, kde každá deklarace proměnné a funkce má povinnou deklaraci typu a jazyky s odvozené typy. Někdy se nazývají dynamicky typované jazyky latentně napsaný.

    Datové struktury

    Typové systémy ve vyšších jazycích umožňují definici složitých, složených typů, takzvaných datových struktur. Typicky jsou strukturální datové typy tvořeny jako kartézský součin základních (atomových) typů a dříve definovaných kompozitních typů.

    Základní datové struktury (seznamy, fronty, hashovací tabulky, binární stromy a páry) jsou ve vyšších jazycích často reprezentovány speciálními syntaktickými konstrukcemi. Taková data jsou strukturována automaticky.

    Sémantika programovacích jazyků

    Existuje několik přístupů k definování sémantiky programovacích jazyků.

    Nejrozšířenější odrůdy z následujících tří: operační, derivační (axiomatická) a denotační (matematická).

    • Při popisu sémantiky v rámci provozní Provádění konstruktů programovacího jazyka je obvykle interpretováno pomocí nějakého imaginárního (abstraktního) počítače.
    • Derivát sémantika popisuje důsledky provádění jazykových konstruktů pomocí jazyka logiky a nastavení pre- a post-podmínek.
    • denotační sémantika operuje s pojmy typickými pro matematiku – množinami, korespondencemi, ale i úsudky, výroky atp.

    Programovací paradigma

    Programovací jazyk je postaven podle jednoho nebo druhého základního výpočetního modelu a programovacího paradigmatu.

    Navzdory skutečnosti, že většina jazyků je zaměřena na imperativní model počítání, daný von Neumannovou počítačovou architekturou, existují i ​​jiné přístupy. Můžeme zmínit jazyky se zásobníkovým výpočetním modelem (Forth, Factor, PostScript atd.), dále funkční (Lisp, Haskell atd.) a logické programování (Prolog) a jazyk REFAL, založený na výpočetním modelu. představil sovětský matematik A A. Markov ml.

    V současné době se také aktivně vyvíjejí doménově specifické, deklarativní a vizuální programovací jazyky.

    Způsoby implementace jazyků

    Programovací jazyky lze implementovat jako kompilované a interpretované.

    Program v kompilovaném jazyce pomocí kompilátoru (speciálního programu) je převeden (zkompilován) do strojového kódu (souboru instrukcí) pro daný typ procesoru a poté sestaven do spustitelného modulu, který lze spustit ke spuštění. jako samostatný program. Jinými slovy, překladač překládá zdrojový kód programu z vysokoúrovňového programovacího jazyka do binárních kódů instrukcí procesoru.

    Pokud je program napsán v interpretovaném jazyce, pak interpret přímo provádí (interpretuje) zdrojový text bez předchozího překladu. Program zůstává ve svém původním jazyce a nelze jej spustit bez tlumočníka. Procesor počítače lze v této souvislosti nazvat interpretem strojového kódu.

    Rozdělení na kompilované a interpretované jazyky je podmíněné. Takže pro jakýkoli tradičně kompilovaný jazyk, jako je Pascal, můžete napsat interpret. Navíc většina moderních "čistých" interpretů neprovádí jazykové konstrukce přímo, ale kompiluje je do nějaké střední reprezentace na vysoké úrovni (například s proměnnou dereferencí a makroexpanzí).

    Pro jakýkoli interpretovaný jazyk můžete vytvořit kompilátor - například jazyk Lisp, původně interpretovaný, lze zkompilovat bez jakýchkoli omezení. Kód generovaný za běhu lze také dynamicky kompilovat za běhu.

    Kompilované programy zpravidla běží rychleji a nevyžadují další programy ke spuštění, protože jsou již přeloženy do strojového jazyka. Zároveň při každé změně textu programu je potřeba jej překompilovat, což zpomaluje proces vývoje. Navíc zkompilovaný program může běžet pouze na stejném typu počítače a obvykle pod stejným operačním systémem, pro který byl kompilátor navržen. Chcete-li vytvořit spustitelný soubor pro jiný typ počítače, je vyžadována nová kompilace.

    Interpretované jazyky mají některé specifické doplňkové funkce (viz výše), navíc programy v nich lze spouštět ihned po úpravě, což usnadňuje vývoj. Interpretovaný jazykový program lze často spustit na mnoha různých typech strojů a operačních systémů bez dalšího úsilí.

    Interpretované programy však běží znatelně pomaleji než zkompilované programy a nemohou běžet bez překladačového programu.

    Tento přístup v jistém smyslu umožňuje využívat výhody jak interpretů, tak kompilátorů. Je třeba zmínit, že existují jazyky, které mají jak tlumočníka, tak kompilátor (Forth).

    Použité symboly

    Moderní programovací jazyky jsou navrženy tak, aby používaly ASCII, tedy dostupnost všech grafický ASCII znaky jsou nezbytnou a postačující podmínkou pro psaní jakýchkoliv jazykových konstrukcí. Manažeři Znaky ASCII se používají v omezené míře: povoleny jsou pouze návrat vozíku CR, posun řádku LF a horizontální tabelátor HT (někdy také vertikální tabelátor VT a další stránka FF).

    Rané jazyky, které se objevily během éry 6bitových znaků, používaly omezenější sadu. Fortranská abeceda má například 49 znaků (včetně mezery): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $" :

    Pozoruhodnou výjimkou je jazyk APL, který používá spoustu speciálních znaků.

    Použití jiných než ASCII znaků (jako jsou znaky KOI8-R nebo znaky Unicode) je závislé na implementaci: někdy jsou povoleny pouze v komentářích a znakových/řetězcových konstantách a někdy jsou povoleny také v identifikátorech. V SSSR existovaly jazyky, kde byla všechna klíčová slova napsána ruskými písmeny, ale tyto jazyky nezískaly velkou popularitu (výjimkou je vestavěný programovací jazyk 1C: Enterprise).

    Rozšíření používané znakové sady je omezeno skutečností, že mnoho projektů vývoje softwaru je mezinárodních. Bylo by velmi obtížné pracovat s kódem, kde jsou názvy některých proměnných psány ruskými písmeny, jiné arabsky a další čínskými znaky. Programovací jazyky nové generace (Delphi 2006, Java) zároveň podporují Unicode pro práci s textovými daty.

    Kurzy programovacích jazyků

    viz také

    Poznámky

    Literatura

    • Hal Abelson, Gerald Jay Sussman. Struktura a interpretace počítačových programů
    • Robert W. Šebesta. Základní pojmy programovacích jazyků \u003d Koncepty programovacích jazyků / Per. z angličtiny. - 5. vyd. - M.: Williams, 2001. - 672 s. - 5000 výtisků. - ISBN 5-8459-0192-8 (ruština), ISBN 0-201-75295-6 (anglicky)
    • Wolfenhagen V.E. Návrhy programovacích jazyků. Metody popisu. - M.: Center YurInfoR, 2001. - 276 s. - ISBN 5-89158-079-9
    • Parondžanov V.D. Jak zlepšit práci mysli. Algoritmy bez programátorů - je to velmi jednoduché! - M .: Delo, 2001. - 360 s. - ISBN 5-7749-0211-0
    • F. Biancuzzi, S. Worden. Průkopníci programování. Dialogy s tvůrci nejoblíbenějších programovacích jazyků. - Petrohrad. : Symbol-Plus, 2010. - 608 s. - ISBN 978-5-93286-170-7

    Odkazy

    • Seznam jazyků (angličtina) - více než 2500 jazyků se stručným popisem
    • Historie počítačových jazyků (anglicky) - historie programovacích jazyků (od roku 1954 do května 2004) (obsahuje pravidelně aktualizovanou tabulku)
    • Příklady (anglicky) - příklady programování ve 162 jazycích
    • Popularita programovacího jazyka (anglicky) - 2004 Průzkum popularity programovacího jazyka
    • 10 programovacích jazyků, které je třeba se naučit (2006)
    • Programming Community Index (angl.) - pravidelně aktualizovaný žebříček oblíbenosti programovacích jazyků
    • Computer Language Shootout Benchmarks (anglicky) - srovnání programovacích jazyků z hlediska efektivity
    • Programovací jazyky, které jsou milovány (anglicky) - srovnání programovacích jazyků podle "lásky" a "nenávist" k nim

    Nadace Wikimedia. 2010 .

    Zalina 13. ledna 2016 v 15:42

    Různé programovací jazyky a jejich oblasti použití. Přednáška v Yandexu

    • Blog společnosti Yandex,
    • Vývoj webových stránek ,
    • programování,
    • Průmyslové programování

    Náš první letošní příspěvek jsme se rozhodli věnovat zcela základnímu tématu, o kterém zazněla přednáška na Malém SHAD. Navštěvují ji středoškoláci, kteří se zajímají o techniku, proto ta specifičnost prezentace – přednáška zaujme především ty, kteří s programováním teprve začínají a přemýšlí, jakým směrem se dále rozvíjet. Pro ně má Yandex kurz „Úvod do programování (C++)“, který lze absolvovat na platformě Stepic.org.

    Přednášející Michail Gustokashin - kurátor akademických programů na Yandex, ředitel Centra studentských olympiád Fakulty informatiky HSE. Michail připravil desítky vítězů a laureátů celoruských programovacích olympiád.

    Přednáška vypráví o tom, jaké programovací jazyky jsou, čím se liší, jak se objevily a které jsou lepší a které horší. Na začátku si povíme něco o historii jazyků - jak se objevily, jak lidé začali programovat, jak se vše vyvíjelo, co se děje nyní. Druhá část se dotkne toho, pro jaké úkoly se který jazyk hodí, jak si „vybrat svůj oblíbený jazyk a užívat si života“. Lektor také něco málo povypráví o tom, jak se to vše podle jeho názoru naučit a následně získat práci.

    Jako vždy je pod střihem podrobný přepis přednášky, abyste se mohli orientovat v jejím obsahu.

    Historie programovacích jazyků

    Začněme úplně od začátku. Na začátku počítače neměly ani klávesnice! To znamená, že všechno bylo velmi špatné - neměli ani klávesnici, ani obrazovku, měli děrné štítky (to jsou takové drobnosti s dírami nebo bez dírek). Podle toho tam byly buď ty čepy naražené, nebo tam svítily světlem. Pokud je tam díra (nebo naopak ne) - znamenalo to nulu nebo jedničku. A programy se v té době psaly pomocí strojových kódů – každá operace v počítači (sčítání, odčítání, některé složitější operace) měla nějaký strojový kód. Lidé si sami vybrali tento kód z talíře, všemožné adresy v paměti, všechno to vyklepali rukama a vrazili do čtečky – a bylo to zváženo. Samozřejmě, že práce programátora tehdy asi nebyla moc zajímavá - dělat díry - a s rozvojem vědy a techniky samozřejmě začali vymýšlet nejrůznější „zajímavější“ věci. Například assembler (Assembler), který už život trochu usnadnil.

    No a jak si usnadnil život? Místo toho, abychom si pamatovali, že pro příkaz existuje nějaký „magický“ kód, byly použity nejrůznější slova podobná „lidské“ angličtině – nějaké add nebo mov – no, a pak byly vypsány registry nebo paměťové oblasti, proměnné, se kterými tyto provádět operace. Ale je jasné, že to obecně vyžadovalo i dostatečně velké mentální úsilí, abychom měli na paměti, v jakém registru máme co leží, kde jsou proměnné a co se obecně děje. Proč se to stalo? Protože počítače byly "hloupé" a nedokázaly pochopit nic "chytřejšího". Sestavení strojového kódu z assembleru ve skutečnosti také vyžaduje čas a paměť (v té době ho samozřejmě nebylo dost).

    Postupně se ukázalo, že je velmi obtížné vyvinout tak rozsáhlé komplexní programy. Produktivita programátora v těchto příkazech byla extrémně nízká - to znamená, že psal několik řádků denně (smysluplné) a každý řádek nedělal nic zvláštního - nějaké jednoduché aritmetické operace. A lidé chtěli, aby se jazyky mnohem více podobaly lidskému jazyku, zejména angličtině, aby bylo jednodušší a pohodlnější psát programy. A jedeme!

    Staré a mrtvé jazyky

    Jedním z prvních jazyků byl Fortran. Mimochodem, vytloukalo se to i na děrných štítcích - na vytloukání programů Fortranu existovaly speciální děrné štítky. Ale když si teď vezmeš tenhle Fortran - podle mě je to dokonce někde mezi 50-60 lety. se objevil - a zkuste na to něco napsat, bude to pro vás velmi nepříjemné, to vám garantuji! Moderní Fortran je stále živý, ale již zcela odlišný od toho, co byl předtím.

    Jiné jazyky - teď napíšu jednu věc, o které jste pravděpodobně slyšeli, ale pouze na nejrůznějších akcích, kde se mluví o historii programování - to je COBOL. Byl to jazyk pro psaní obchodních aplikací. Co jsou obchodní aplikace? Nějaké transakce v bankách, něco jiného, ​​to vše bylo napsáno v Cobolu. Nejsme samozřejmě moc oblíbení. Myslím, že programátora Cobolu v Moskvě najdete jen velmi obtížně. A někde ne v Moskvě – s ještě většími obtížemi. Ale překvapivě ještě před 10 lety byla více než polovina veškerého kódu napsaného lidstvem napsána v Cobolu. A doteď značná část všech bankovních transakcí probíhá pomocí programů na tom napsaných (COBOL) a lidé na to stále něco píší.

    Existuje také „vtipný“ jazyk, jmenoval se Algol (68. verze, která charakterizuje rok svého vzniku). Je to algoritmický jazyk. Obecně tam něco věděli, ale teď nás moc nezajímá, co umí. A tím může být náš exkurz do starověku a relativně nepoužívaných jazyků završen a můžeme přejít k tomu, co stále žije (a aktivně žije).

    Staré, ale živé jazyky

    Algol byl vynalezen v Evropě a Fortran se používal hlavně ve Státech - nejsou tam žádné velké rozdíly. Jaký trend je patrný? Zpočátku bylo všechno těžké a abyste mohli psát, museli jste být téměř inženýr, elektroinženýr, abyste pochopili, kde jsou které kontakty sepnuté, a něco jiného na programování. Pak bylo také nutné sedět s listy a počítat vzpomínku, hlídat ji. A postupně se pro programátora vše zjednodušovalo, zjednodušovalo, zjednodušovalo a dále ještě usnadňovalo – co nejméně, aby člověk myslel, co nejvíce dělal automaticky. Kolem konce tohoto období (přednášející ukazuje na Algol a Kobol) se začínají objevovat jazyky, které v jistém smyslu „přežily“ dodnes.

    ZÁKLADNÍ. Snad na to ještě někteří něco píšou, alespoň jsem viděl, že v některých institucích učí v QBasicu - takové modré okénko, kde je napsáno „1989“. Obecně platí, že „s mocnými a hlavními“ životy! Byl koncipován jako jazyk pro neprogramátory. V té době byl programátor taková velmi specializovaná profese. A tady vám řeknou: "Tady máme skvělý Basic jazyk a každý rozumný člověk si v něm vezme a napíše program - je to snadné." Opět platí, že BASIC a moderní BASIC je obrovský rozdíl. Všechny tyto řádky od 10, všelijaké GOTO a další hrůzy - s moderním BASICem už nemají nic společného a dokonce ani s BASICem 89. ročníku mají pramálo společného.

    Další úsměvnou historkou je jazyk Pascal, široce známý v univerzitních kruzích, především v Rusku a v zemích bývalého Sovětského svazu. Překvapivě byl a stále je používán jako vyučovací jazyk. Ve zbytku světa je méně častý, ale také živý a zdravý. Existuje takový člověk Wirth - tady je to vědec, teoretik. Zúčastnil se diskuse o Algolu, nelíbilo se mu, co se stalo, a přišel s vlastním jazykem - Pascalem. A pak to vzala společnost Borland (a předtím mnoho dalších společností - konkrétně Apple) a všechno zničila. Měl krásnou teorii, štíhlou – „všechno bude v pořádku“ – a vzali ji a nacpali do ní to, co lidé potřebují k práci. No, nedopadlo to tak hezky, jak chtěl.

    A nakonec, . C vynalezli inženýři. Jestliže Pascal vynalezl vědec, pak C vynalezli Kernighan a Ritchie, pracovali jako inženýři v Bell. Jak se to stalo? V té době v těchto jazycích (přednášející ukazuje na Fortran, COBOL, Algol) nebylo možné napsat nic systémového. Co je to "systémové"? Například operační systém, nějaké ovladače, něco jiného. Tyto jazyky byly určeny pro matematické výpočty, pro obchodní výpočty, pro všechno. A vše ostatní bylo napsáno v assembleru. Některé jazyky byly, nyní jsou mrtvé, to znamená, že jazyk C se neobjevil okamžitě z Assembleru, ale prostřednictvím některých přechodných věcí.

    Jaký je smysl? Kernighan a Ritchie si rádi hráli na hračku Asteroids - letí vesmírná loď a jsou tam asteroidy, střílí na ně a ony se rozpadnou. Měli server, kde hráli, ale bylo tam hodně lidí a hračka se zpomalila. A někde ve své kanceláři zjistili, že mají nějaký počítač, který nikdo nepoužívá. Byl tu ale problém – měla jinou architekturu a hra byla napsána v assembleru.

    Samozřejmě ho přepsali, dokonce přidali nějaké funkce, které na něm lze hrát. To je ale přivedlo na myšlenku, že přepisovat pokaždé na novou architekturu není moc chytré. A rozhodli se napsat vysokoúrovňový jazyk, který by byl vhodný pro systémové programování, tedy ve kterém by bylo možné spravovat paměť, ve kterém by bylo možné pochopit, kde co leží a jak se k těmto částem paměti dostat. . A tak se objevil jazyk C, který měl obrovský dopad na vše, co následovalo. Všechny (přednášející ukazuje na Algol, Fortran a další zmíněné jazyky) měly velký vliv, ale C - správně, ano ...

    V souladu s tím to byl hlavní jazyk v Unixu, operačním systému, který byl tehdy ještě populárnější než nyní. A kolem 80. let byla situace něco takového (přednášející ukazuje v Basicu, C a dalších zmíněných jazycích). Předpokládejme, že tohle všechno už s námi pomalu zemřelo (přednášející maže zmínku o Assembleru, Fortranu a Algolu) ... A v 80. letech se počítače zmenšovaly, chytřely, zlevňovaly a lidé chtěli nejrůznější podivnosti, aby žít ještě lépe, žít ještě zábavněji.

    Jazyky z 80. let

    Jednou z prvních zvláštností byl jazyk C++. Jazyk C má obrovské množství nedostatků (no prostě jeden obrovský) - můžete v něm dělat všechno, včetně střelby do nohy, střelby do nohy fikcí, do druhé nohy, střelby jednou nohou dovnitř druhá noha, obecně - to, co chcete dělat. Ale zároveň jsou tam některé architektonické věci dost ztížené – opět jako v Assembleru musíme mít přehled o tom, kde jsme, jakou a jakou paměť jsme alokovali; neustále někde tato paměť "teče" - to znamená, že jsme alokovali, zapomněli smazat, smazali špatnou věc, vylezli z paměti, obecně - shráblo spoustu problémů.

    C++ byl původně vytvořen jako sada rozšíření jazyka C, která by usnadnila vývoj. V té době přišlo do módy objektově orientované programování a lidé usoudili, že vše lze popsat jako hierarchii, to znamená, že máte míč (abstraktní), zdědíte z něj fotbalový míč, volejbalový míč, další abstraktní míč. Tehdy bylo v módě, že „teď vše píšeme formou nějaké hierarchie a všechno bude v pořádku, život se zlepší, všechno bude v pořádku a hotovo“. C++ v jistém smyslu implementovalo tento objektový přístup – nebyl to první objektově orientovaný programovací jazyk, ale stal se docela populární a začaly se v něm objevovat nejrůznější funkce. C++ si přitom zachovalo téměř úplnou kompatibilitu (v té době) s jazykem C, program napsaný v C byl v 99 % případů úspěšně zkompilován jako C++ a dokonce fungoval stejně. Cílem bylo usnadnit migraci z C do C++.

    Kromě objektového přístupu (v C++) se poměrně rychle objevila standardní knihovna šablon (STL). Myslím, že ve škole ti, kteří ještě studovali Pascal, zjistili, že za prvé nemáte vestavěné třídění (ve starověkém, modrém Borland Pascalu, nyní je již v moderních verzích) - existuje příklad (zdroj) třídění , lze jej zkopírovat a vložit. Ale pokud zde chcete třídit celá čísla, chcete zde reálná čísla a zde chcete řetězce, které lze mezi sebou porovnávat, museli jste napsat tři různá řazení, která dělají úplně to samé, jen mají různé datové typy. To není příliš dobré a šablony, které se v C ++ okamžitě neobjevily, tento problém značně usnadnily. To znamená, že jste měli abstraktní program, který úspěšně třídil něco, co se dalo vzájemně porovnávat.

    Skriptovací jazyky z 90

    Čas se ale nezastavil, v 80. letech se událo mnoho zajímavého. Jenže někde na přelomu 80. a 90. let se počítače staly tak dobrými, že už bylo možné dělat velmi podivné a velmi neefektivní věci. Konkrétně se jednalo o skriptovací jazyky, které nebyly kompilovány do strojového kódu, ale interpretovány. BASIC byl někdy také interpretován, ale tyto skriptovací jazyky byly určeny hlavně pro zpracování textu - například Perl, Python (tenkrát to nebylo příliš slavné), PHP, Ruby - to jsou skriptovací jazyky ​​že v jednom nebo do určité míry stále žijí (všem se podařilo objevit před rokem 2000, dokonce mnohem dříve).

    Pojďme si je trochu projít, protože to jsou specifické věci a nyní se používají na spoustě míst. co je to za nápad? Pokud nezkompilujeme, můžeme povolit mnohem více. Program se například může podívat na svůj kód a nějak ho použít; ví, co se v ní děje, a díky tomu můžete dělat spoustu zajímavých věcí.

    Perl byl navržen pro zpracování textu - v té době už bylo v počítačích tolik paměti, že jste tam mohli vložit nějaký text a udělat s tímto textem něco užitečného (například počítat slova, nějaká hledat). Ale podle mého názoru to bylo navrženo lidmi, kteří byli tak trochu blázni, protože je o tom takový vtip: "Jakákoli znaková sada napsaná v Perlu je správný program." Podle mě se na to dá jen psát, nedá se to číst. Když se podívám na kód v Perlu a snažím se něčemu porozumět, nerozumím ničemu. Možná, kdybych ho znal lépe, něco bych pochopil, ale jak jsem slyšel od těch lidí, kteří to ještě umí, říkají, že je to jednodušší přepsat. To znamená, že programy jsou krátké a opravdu snadněji se přepisují, než zjišťovat, co tam je, a opravovat to.

    Zhruba v té době, v polovině 90. let, se objevil internet. Nejdřív to byla pošta, stránky se statickým HTML, ale lidé tam chtěli přidat nějakou dynamiku, aby se vše dělo dynamicky, daly se vyplňovat nějaké formuláře, dělat knihy hostů, něco jiného. V souladu s tím to vyžadovalo určitý druh interakce, přišli s protokolem, jak to interaguje, a co je nejdůležitější, s generováním těchto statických (podmíněně) stránek, které budou uživateli „vyplivnuty“ v reakci na jeho požadavek.

    Obecně se nic jiného než Pearl v té době nehodilo. Psát v čistě C nebo C++ handleru byl špatný nápad. A pro nedostatek lepšího v té době (a dostatečně dlouho), Pearl byl jazykem pro vývoj webových aplikací. Samozřejmě, že rozsah nelze srovnávat s tím, co se děje nyní.

    PHP se objevilo jako ... náhodou. Jeden člověk s tím docela rychle přestal - udělal si nějakou vlastní stránku, měl nějakou knihu návštěv, něco jiného, ​​něco. A napsal sadu některých maker pro Perl, která vypadala jako C, protože věděl, jak používat C, jednoduše proto, že to pro něj bylo tak pohodlné. A nazval to Osobní domovská stránka. Sdílel to a řekl: "Lidé, podívejte se, co jsem napsal, tady je všechno mnohem jasnější než na Perlu a můžete to upravit." A lidem se to líbilo.

    Pak tu věc nechal. Obecně lze říci, že díky tomu začalo toto PHP žít a postupem času se stalo mnohem populárnějším než Perl. Ale toto jeho "porodní trauma" (nápad jako soubor maker pro Pearl) si s ním zahrálo dost krutý vtip. Jazyk je zvláštní. To znamená, že se to vyvíjelo samo, nikdo to nenavrhoval, nikdo neřídil vývojový proces (ani společnost, ani nikdo), ale bylo mnoho skupin, z nichž každá pila, co se jí líbilo. Tím pádem se tam funkce volají jinak, není tam ani styl, vše je přes podtržení, obecně i tak, nastavení je tu a tam a jak to všechno bude fungovat, není moc jasné. Ale můžete si sednout a psát v PHP za dvě hodiny, protože si to myslel.

    Python a Ruby: Ruby je nyní méně populární, Python je tak nějak lépe "hoblovaný", o tom později. Je jasné, že v té době to byly (přednášející ukazuje na Perl, Python, Ruby, PHP) vysoce specializované jazyky pro vysoce specializované účely. V obecném případě v té době nikdo nenapsal žádné systémové programování, žádnou obchodní logiku a nyní to moc nedělá.

    Kompilované jazyky z 90

    Půjdeme přibližně ve stejný čas, ale jiným směrem. C++ se u nás tehdy používalo skoro na všechno, co bylo potřeba napsat ne pro web, ne pro zpracování textu, ale právě pro aplikace, pro operační systémy, pro hračky - obecně pro cokoliv. Ale C++ je strašidelný jazyk, opravdu. Proč? Protože za prvé zdědil všechny problémy C kvůli zpětné kompatibilitě. Tam jste se stále mohli zabít milionem různých způsobů, stejnými, které byly v C (přirozeně byly přidány nové způsoby v C ++). Přitom pokud vše dobře a správně napíšete, jak to zamýšleli autoři C++, tak už se samozřejmě nedalo zabít starými céčkovými způsoby a zdá se, že tam bylo jich méně. Měl však velmi zvláštní vlastní objektový model. Rozdělení programu na moduly, na kousky, nějak přišlo z C (pokud víte, jak napsat include v C nebo C++ - ve skutečnosti to bylo koncipováno jako pouhé vložení textu knihovny do vašeho programu, v důsledku toho, když napíšete hromadu include, máte vše - pokud je to „primitivní“, jako to bylo na úplném začátku - vše se vloží do jednoho souboru a pak se to všechno strašně dlouho kompiluje, protože to jde několikrát Stejný Pascal, Virtovský, byl v tomto ohledu mnohem promyšlenější, pozdější verze jsou ještě lepší.

    Obecně má C++ spoustu nedostatků. Kvalifikace programátora musela být vysoká, aby mohla psát v C++, a takoví programátoři byli drahí (jak školení, tak něco jiného, ​​to znamená, že je těžké najít programátory na trhu, musí hodně platit, no, obecně o to nejde... ). A naše počítače počítají stále rychleji, zlevňují, lidé si kupují nové počítače pro sebe a chtějí více aplikací, více hraček pro své telefony, obecně více radosti.

    Tak se zrodila Java. Existuje také docela úsměvná historka o tom, jak tento jazyk dostal své jméno. Existují programátoři, pijí kávu neustále a v té době bylo v módě pít kávu, která rostla na ostrově Jáva. Jazyk byl koncipován jako jazyk pro vestavěná zařízení, zejména pro kávovar. Tak vznikl název...
    Co u ní obecně začalo, co v ní bylo dobrého a proč si získala velkou oblibu? Nejprve se úplně zbavili Sishnoiova dědictví. Žádné ukazatele, tím méně způsoby, jak si ustřelit část těla a všechno rozbít. Za druhé, představili mnohem novější nápady, pokud jde o objektový model - to znamená, že C++ se objevil mnohem dříve než Java a používal archaičtější, "divoký" objektový model. No a tady (přednášející ukazuje na Javu) už to bylo tenkrát promyšlenější a teoreticky lidé přemýšleli, aplikovali v praxi a vše udělali mnohem cool.

    A konečně třetí. Naše programy v Javě nebyly sestaveny do strojového kódu, ale do kódu pro virtuální stroj. To znamená, že jste měli virtuální stroj (VM) JVM - Java. Vaše programy byly sestaveny do jakési mezilehlé reprezentace a poté s pomocí tohoto stroje již byly provedeny. co to dalo? Za prvé se zpomalil, za druhé žral paměť strašnou silou, za třetí byl přenosný kamkoli (teoreticky) - i do kávovaru, dokonce i do mlýnku na kávu, dokonce i do počítače, dokonce i do mobilu. Na jednu stranu je to dobře, to znamená, že jste právě napsali implementaci virtuálního stroje a pak všude spouštíte své Java programy. Ale na druhou stranu je špatné, že v té době bylo na stejném telefonu málo paměti, byl nízký výkon a to vše se navíc začalo otupovat a zpomalovat.

    Ale ani to není to hlavní, pro co byl jazyk obecně vynalezen. Jazyk Java byl vynalezen, aby snížil požadavky na kvalifikaci programátorů. To znamená, že horší programátoři mohou psát dobré programy v Javě, protože vám nedovolí psát špatné programy - neexistují prostředky, jak psát programy špatně. Tam můžete psát jen dobré programy. Tedy v chápání tvůrců jazyka.

    To znamená, že pokud v C, v C++, v Pythonu, na čemkoli můžeme vypěstovat nějakou strašlivou smetiště z našeho projektu, kde máme všechno pomíchané, běžící hodiny a ještě něco. Na Jávě je také možné chovat popelnici, ale k tomu už musíte vynaložit určité úsilí. To znamená, že ve výchozím nastavení to není „skládka odpadu“, ukazují se další problémy, že se tam něco zdědilo, zdědilo - obecně se deset nepříliš smysluplných ukazuje jako jedna smysluplná linie. Ale možná takový středně zkušený programátor dokáže napsat docela kvalitní kód.
    Už jsme skoro na konci. U nás se jako další objevilo .Net (dotnet) a konkrétně nás zajímá C # (téměř to samé [přednášející ukazuje na Javu], tedy rozdíly v detailech, pokud si mezi nimi vyberete - podívejte se, kde zaplatíte více peněz).

    A ještě jedna věc - JavaScript. Nemá nic společného s jazykem Java, objevil se ve stejném roce - slovo bylo módní, licencovali ochrannou známku k použití.

    Na co je nejdůležitější si dát pozor? (Přednášející kreslí šipky z C++ do Javy, .Net, C#, JavaScript a PHP). Chcete-li napsat jednoduchý program v jednom z těchto jazyků a v mnoha dalších - pokud znáte C ++, obecně nepotřebujete znát nic jiného - vezmete a napíšete v C ++ a pak na začátku přidáte dolary , něco jiného udělá maličkosti a na čemkoli vám to začne fungovat (lektor ukazuje na jazyky, ke kterým byly šipky z C++ přiřazeny). To znamená, že jsou si v některých jednoduchých věcech extrémně podobní. Pokud řešíte nějaké školní problémy, vzdělávací problémy, něco jiného (nenavrhujete velký projekt - máte jeden soubor, který čte čísla, zobrazuje čísla v konzoli, dělá něco jiného), tak mezi těmito jazyky není téměř žádný rozdíl . Je vidět, že JavaScript a PHP jsou specializované, všechno mají trochu jinak. A zde (přednášející ukazuje na Javu a C #) je rozdíl velmi malý.

    Od té doby se objevily všechny možné další zajímavosti, ale není jasné, zda budou žít nebo úspěšně zemřít. Co teď, pro jaké úkoly to používají?

    Výběr jazyka v závislosti na úkolu

    Předpokládejme, že stojíte před úkolem napsat ovladač pro grafickou kartu. Jaký jazyk dnes použijete? (Křičte z publika: Java!) Proč… Java je skvělá, ale proč ne v Ruby nebo PHP? (Přednášející mluví sarkasticky.)

    nízkoúrovňové programování

    Pokud píšete něco nízkoúrovňového, pak je nejlepší volbou C, ale slyšel jsem (ale neviděl), že se k tomu používá C++. Ale moc tomu nevěřím, protože v C můžete jasně ovládat - protože jste dali tolik bajtů paměti, znamená to, že jich bude tolik. A jak je v C++ (STL) implementován řetězec? No, nějak implementováno. A nakonec nevíme, jak a co se tam stane, možná nám dojde paměť na naší grafické kartě nebo se stane něco jiného. Proto C stále žije a neumírá, stále existují takové úkoly programování systému - napsat operační systém, napsat ovladače, napsat něco jiného - C je na to skvělé. Navíc se nyní objevují všemožná zařízení (Internet věcí slibuje, že to brzy přijde), která žijí na baterie (a samozřejmě jich budou miliony, všechno bude ovíjeno tímto internetem věcí) , musí být velmi levné a spotřebovávají velmi málo elektřiny. V souladu s tím zde budou 2 KB paměti, procesor na 5 kHz a samozřejmě nebude možné v blízké budoucnosti našroubovat nějaký virtuální stroj nebo skriptovací jazyk - což znamená, že budete muset psát něco v C. A dokonce i nyní, například výpočty na grafické kartě (OpenCL nebo nějaká jiná technologie) - nepřicházejí s novým jazykem pro psaní programů pro ně - dělají C s určitými velkými omezeními. Jen proto, že lidé už vědí jak, proč se učit něco nového? Formálně je to pravděpodobně také v jistém smyslu C.

    Webové programování

    Řekněme, že chcete napsat nový Facebook (sociální síť). Na co to napíšeš? (Z publika se mluví o HTML a CSS.) HTML, CSS je design a my chceme, aby tam bylo možné přidávat fotky, spřátelit se, zanechávat komentáře.

    Pro skriptovou část – tedy to, co se bude dít na straně klienta – je to JavaScript. Navíc se někdy JavaScript vygeneruje v jiném jazyce a odešle (stane se, že se skript vygeneruje ... protože je někdy jednodušší zpracovat některé změny v logice).

    Překvapivě je to napsané v PHP – a Facebooku a mnoha dalších velkých projektech. Samozřejmě jsem si musel psát své vlastní věci, aby to stále fungovalo dobře, a ne jako dělané, ale udělali to. V principu je jedno v čem píšeš, ale Perl nedoporučuji. Tady a teď samozřejmě nikdo nepíše pro web nic od začátku. Každý píše nějaký rámec nebo něco jiného. Internetový obchod? Stáhli jsme si framework pro internetový obchod – to je vše, napsali jsme internetový obchod.

    Obchodní programování

    Dále chcete napsat nějakou nudnou bankovní aplikaci. Nebo máte například někoho, kdo prodává sim karty? Možná jste si někdy koupili telefon nebo tak něco a řekli vám: „Tady systém visí, nemůžeme nic dělat.“ Na co takovou žádost napíšete? (Výkřik publika o Pythonu) Takové věci nemůžete psát v Pythonu, co jste?! V Pythonu by nemělo být napsáno nic pro podnikání. Proč? Protože když něco píšete v Pythonu, nemůžete v procesu psaní najít významný počet chyb. Python je dynamicky typován všemi možnými způsoby a obecně tam můžete skrýt chybu tak, že se objeví v takové situaci, že ani nechápete, co tam ti pokřivení uživatelé udělali, že se vám všechno porouchalo. To znamená, že je lepší psát v Pythonu pro sebe, malé skripty - rozumíte tomu, co se tam děje a co se dělá. No, nebo něco, co vám nevadí vyhodit: chcete něco uvést před konkurencí, tak co když se to pokaždé porouchá. Napsali jste v Pythonu a to je vše - zachytili jste trh. A pokud něco píšete delší dobu, například nějakou bankovní aplikaci (aby schvalovala půjčky, něco jiného) - napíšete to v Javě. Protože tam jde o vážnou věc, papíry, peníze, doklady, ještě něco, ale nesmí se to tak pokazit, aby se všechno rozbilo, jinak se lidi urazí - peníze jim odešly a nikam nedosáhly, protože máte v určité chvíli se řetězec změnil v číslo nebo naopak. Takže to znamená, že metodicky bereš a píšeš v Javě, píšeš... No, nebo na .Netu se takové situace v zásadě také stávají. Tam samozřejmě můžete také narazit na problémy, ale pravděpodobnost je stále o něco nižší.

    Programování pro armádu, letecký průmysl

    A teď si představte, že se rozhodli poslat vás na Měsíc v raketě. Čemu byste dali přednost při psaní kódu, který ovládá motory rakety? Pojďme se podívat. To asi (přednášející ukazuje na Perl, Python, PHP, Ruby) nestojí za to - zpomaluje se, děje se něco jiného, ​​no, obecně bych nesouhlasil s létáním na takové raketě. V C++? Abych byl upřímný, ani bych ne, protože v C++ je příliš mnoho způsobů, jak se zabít. Když jste někde ve vesmíru, není to moc dobré.

    Možná v Javě? Všechno se tam zdá být docela spolehlivé a architektura je dobrá, žádné divoké typy, žádné přetečení paměti navíc. Řekněme, že nastal ten nejzásadnější okamžik a naše Java se rozhodla, že za nás bude sbírat odpadky. Musíme přistát, zpomalit a ona říká: "Ne, odpadky jdou." Obecně ani moc ne.

    Abych byl upřímný, byl bych raději, kdyby byl tento program napsán v Pascalu. Samozřejmě nemám Pascala rád, ale v takových věcech by to bylo velmi cool.

    Použití více jazyků pro vývoj softwaru najednou

    Co by se mělo říci o moderních jazycích obecně. Nyní mnoho projektů nežije v jednom jazyce, to znamená, že některé z nich žijí v jednom jazyce, některé v jiném a některé více ve třetím. Například, pokud máte nějakou webovou aplikaci, která zpracovává divoké množství informací, přístupy na disky (dokonce ani do databází, ty jsou tak obrovské, že i tam již zapsaná databáze se nedá ani stáhnout) jsou pravděpodobně zapsány v některých low-level C, zapisovat na disk divoce rychle a tak dále. Přirozeně nemá cenu psát celý projekt v C. Možná existuje nějaká přechodná logika napsaná v Javě, která volá funkce C pro rychlé volání. No a frontend (to, na co se uživatel dívá), už je samozřejmě na něčem napsaný, na nějakých skriptech, na tom, co přímo spouští prohlížeč (JavaScript). A to vše spolu žije a úspěšně interaguje.

    Při vývoji některých aplikací, i těch velkých, někdy lidé dělají co? Vezmou to a napíší prototyp v Pythonu (jak to všechno bude fungovat), načrtnou to, přemýšlejí o nějaké architektuře. Psaní na něm je opravdu velmi rychlé - hodili prototyp, experimentovali s ním a řekli: „Páni! To je tak hustý! A kompletně přepsaný. Zdálo by se, že práci udělali dvakrát, což trvalo dvakrát déle (dobře, jeden a půl). Ale ne! Často se ukáže, že tento způsob není špatný, protože pokud okamžitě napíšete do něčeho, například v Javě, a pak se rozhodnete: „Ne, pojďme refaktorovat, úplně změnit architekturu a tak,“ strávíte 10krát více času. I takové věci existují a žijí.

    Podmínky úspěchu jakéhokoli programovacího jazyka

    Nyní si promluvme o tom, proč některé dobře vypadající jazyky nepřežily nebo nežily ve velmi omezeném prostoru. Když Wirth viděl, co špatné společnosti Apple, Borland a všechno, co udělaly s jeho Pascalem, přišel s ještě lepším jazykem - Oberon. Bylo to prostě divoce minimalistické - to znamená, že tam bylo velmi málo příkazů (Řetězce? Proč potřebujeme řetězce? Vytvoříme pole znaků!). No, něco se mu nepovedlo, do té míry, do jaké to šlo.

    Ještě jedna věc. Americká armáda je požádala, aby vyvinuli skvělý jazyk, ve kterém vše funguje a vše lze napsat. Výsledkem byl poměrně obludný jazyk Ada, ve kterém se však stále něco píše, ale opět - pouze pro armádu.

    Co je za problém? Proč některé jazyky jako Python, které zpočátku žádná společnost nepodporovala, převzaly trh. PHP, které je také špatně navržené, se také ujalo a ukořistilo trh (většinu) samo. A všelijaké miliardy dolarů byly investovány (přednášející ukazuje na Adu) a nikam nešly, nic se nedělo. S čím to souvisí? Je to proto, že kolem těchto jazyků neexistuje žádná infrastruktura. To znamená, že jazyk může být vynikající, ale pokud neexistuje žádná dokumentace, pokud neexistuje komunita, která by mohla odpovídat na otázky (na Stack Overflow), a konečně, což je nejdůležitější, pokud neexistuje velká počet knihoven, jazyk nestřílí. To znamená, že jste například chtěli napsat web na Oberon. A co to je, proč ne? A problém začíná... Nemůžete nastavit svůj webový server na Oberonu tak, aby jej lehce otestoval, nemůžete připojit žádné knihovny, protože na Oberonu nejsou. A to vše se děje přes jakési berličky, síly jdou stranou a celkově plivete a píšete své stránky v čistém C místo Oberonu. A ty jazyky, které jsou schopny používat knihovny z jiných jazyků, žijí dobře. Stejný Python v těch místech, kde se zpomaluje. Obecně platí, že v C jsou napsány všechny možné standardní věci jako třídění a něco jiného a on (Python) ví, jak s nimi pracovat.

    Java má také nativní rozhraní Java. Toto je v podstatě C, to znamená, že tam (podle mého názoru chtějí vždy zakázat, ale zdá se, že ještě nezakázali) tyto jazyky mohou interagovat s existujícími knihovnami (hlavně Cs). A díky tomu berou a pracují. Chápete myšlenku, kterou se vám snažím sdělit, že? Nepište v těch jazycích, které nevědí, jak připojit C-knihovnu. No, pokud chcete použít něco skvělého. No a postupně získávají (jazyky) jakousi infrastrukturu. A žijí dobře.

    Programovací jazyk a kariérové ​​poradenství

    Nyní si promluvme o tom, jak porozumět tomu, co v životě chcete. Co se stane ze skvělých věcí? Můžeš dělat nějaké systémové programování, že? Je skvělé tam počítat tyto bajty, chcete spustit kvadrokoptéry, nějaké kamery, udělat něco jiného. Pak je C pravděpodobně vaše volba.

    Pokud chcete psát, možná ne ty nejzajímavější aplikace v životě, ale je pro vás skvělé je navrhovat, přemýšlet o tom všem a vydělávat spoustu peněz za to, že většinu času sedíte a nudíte se (za tohle musíte zaplatit pokud jste dobří, chybíte mi), tady jsou - Java, .Net. Jdeš pracovat do nějaké banky, píšeš, chodíš do práce v devět v bílé košili, máš dobrý plat a píšeš podle doporučení nejlepších Java vývojářů, oveček .Net a toho všeho ...

    Pokud chcete psát nějaké aplikace, nějaký prohlížeč, nějaké hračky, něco jiného, ​​pak je C++ skvělé. Pokud chcete psát weby, tak tady jsou, jazyky dle vašeho výběru (přednášející ukazuje Perl, Python, PHP, Ruby), není velký rozdíl. Jediná věc je, že PHP zemře dříve než Python, takže pokud jste příliš líní učit se nové věci, naučte se Python. Nevšimnete si velkého rozdílu, ale déle vydržíte.

    Co se stane s Ruby, je také nejasné. No, můžete také PHP, pokud jste se to již naučili, protože jsou tak jednoduché, že netrvá tak dlouho se tam znovu učit.

    A konečně je tu další oblast použití programovacích jazyků - to je, když je používá neprogramátor. Řekněme, že jste matematik, fyzik, chemik, analytik, kdokoli a potřebujete rychle něco spočítat, analyzovat nějaká data (biologům například, kolik lišek žije na Velitelských ostrovech). To vše můžete vložit do tabulky v Excelu nebo to něčím analyzovat. Dobře se k tomu hodí i Python, umí pracovat s textem a knihovny jsou plné všeho druhu, statistické a tak dále. Pokud chcete dělat nějaký druh strojového učení, zpracovávat nějaká data, předpovídat, pak to Python nyní dělá také nejrychleji. Je pravda, že je třeba poznamenat, že úkoly jsou velmi odlišné. Pokud například chcete okamžitě obchodovat na burze v podmínkách, kdy se kotace neustále mění, pak bez ohledu na to, jak cool Machine Learning napíšete v Pythonu, lidé, kteří to mají napsané v něčem rychlejším, budou mít čas koupit si vše dříve, dokud nebudete počítáni, i když jejich algoritmy jsou horší. Proto i tyto úlohy strojového učení (některé z nich) vyžadují vysoký výkon (a extrémně vysoký), a tedy i další jazyky.

    Jediný způsob, jak pochopit, co chcete, je vyzkoušet všechno. Teď řeknu jako jednu z vizí, jak si všechno můžete vyzkoušet. Jak se stát programátorem a být šťastný? Tak. Začínáme od nuly. Zde se ve škole učíte svou matematiku, ruský jazyk a další povinné i volitelné předměty a na tabuli (lektor ukazuje na prázdnou tabuli) se momentálně promítají vaše znalosti z oblasti programování. A chcete se stát šťastným člověkem, dělat to, co milujete, vydělávat spoustu peněz a nic si neodpírat a být šťastný.

    Jeden ze způsobů, jak toho dosáhnout. Existují samozřejmě nejrůznější inspirativní příběhy o lidech, kteří vůbec nechodili na vysoké školy, nebo je nechali a stali se miliardáři, majiteli firem a podobně. Ale je třeba poznamenat, že většina lidí, kteří se možná nestali miliardáři, ale také si dobře žijí, univerzitu v určitém okamžiku vystudovala.

    Jaká je naše situace se vstupem na vysokou školu (nyní studujete školu)? Zatímco jste ve škole, musíte pochopit, že dalším krokem je zapsat se a postarat se o to. Složte zkoušku nebo vyhrajte olympiádu. Na zkoušce lze použít Pascal, C ++ (včetně čistého C), Python (nebudu je dále uvádět). Na olympiádě - stejný Pascal, stejný C++, stejný Python (teď si povíme o jeho problémech) a nejčastěji je tam Java. Cokoli jiného se stane v závislosti na olympiádě, ale o to nejde.

    Jak vypadá harmonogram distribuce jazyků na celoruské olympiádě v informatice? Lidé, kteří se účastní celoruské, nejlepší olympiády, o čem píší? Vypadá to takto (zde to znamená Pascal a tady je to asi 2000 a tady je to asi nula, tady je to C ++ a tady je to 2015).

    V roce 2000 skoro nikdo nepsal C++. Uplynulo 15 let a téměř nikdo nepíše v Pascalu, přestože Pascal je moderní. Je to jazyk, který umí v podstatě to samé. Je to tak, že všichni jsou příliš líní se to naučit se všemi druhy nových trendů a všichni pokračují v psaní v Borland Pascal, což samozřejmě nemůže nic dělat. V C++ lidé píší nějaké algoritmy (STL) pro řazení - skvělé, napsali sort () a je to. Na Pascalu, na obvyklém, na starém - to je problém. Napsali nějakou sadu (potřebu) - vynikající, napsali to v C ++, v Pascalu zase samá muka. Na nových Pascalech to samozřejmě můžete udělat, ale obecně stojí peníze. Možná jste si toho nevšimli, ale je to tak.

    Existuje také Java, ale v Javě je spousta písmen. Je to pro velké projekty, ale pro malé jednorázové programy to dopadá dost špatně, protože je tam spousta písmen navíc. Ale i někteří lidé píší, můžete se na tom naučit psát. Ale není k dispozici na USE a USE bude muset být stále z větší části.

    Co je na zkoušku nejlepší? Na zkoušku je nejlepší (pokud nic neumíte a ve škole vás nic nenaučí) naučit se Python. Některé zkouškové otázky jsou na něm dobře vyřešeny. Na olympiádě se obecně ukazuje, že C ++ je (používá se), protože Python je hodně pomalý, ne všechno se na něm řeší.

    Takže jste se naučili nějakou malou podmnožinu jazyka a nějaké algoritmy (možná) a vyřešili spoustu problémů, abyste získali diplom z olympiády a šli na univerzitu, abyste získali vyšší vzdělání.

    Nyní budu mluvit o tom, jak budujeme kurz na HSE, v jakém pořadí se jazyky vyučují, jak se studují v aplikované matematice a informatice Fakulty aplikovaných věd, což děláme s Yandexem. V prvním semestru - Python (ne v plném rozsahu, o tom, jak by vás měli učit ve škole) a C++ (již širší, mnohem širší, než se běžně učí na školách). Řekněme hned, abyste se nebáli, když to najednou chcete udělat, řeknete si: „Co, já už to všechno vím, proč bych měl jít někam studovat? Raději půjdu jinam." Pro ty, kteří již umí dobře programovat, je tu možnost jít rovnou na studium algoritmů, a to ve spíše teoretické přípravě. Teď se na ně nedíváme, tohle (ukazuje na tabuli) je pro ty, kteří programují průměrně nebo vůbec.

    První semestr vás naučí základy Pythonu, jen aby se lidé naučili programovat a aby se nikdo moc neurazil. Python se ve školách vyučuje jen zřídka, většinou lidé přicházejí se znalostí Pascalu nebo C++. V podstatě i Pascal, pokud je to masová škola. No, aby se nikdo nepohoršoval, všichni se učí nový jazyk (jakoby si byli rovni). A C++, jednoduše proto, že z C++ pak můžete jít kamkoli.

    Následuje kurz "Algoritmy" a samostatný projekt kurzu. Klasické algoritmy s implementací. Ne že bychom teoreticky něco vzali, vypočítali složitost. Na přednášce jsme vzali, vypočítali složitost, na semináři - vzali, implementovali algoritmus. Projekt je, že studenti dělají něco hotového. Jeden z projektů byl například: vypočítat... Řekněme, že máte v Moskvě hodně bytů a rozumíte: „Ach, mám spoustu věcí navíc, jeden si pronajmu. A stanoví nějakou cenu a nikdo si od vás nechce pronajmout byt - pravděpodobně příliš drahý. Nebo vám nasadili nějakou cenu, hned vám to stáhli a vy si říkáte: „Ach, asi jsem to levně minul“ – a vy jste také naštvaní. To znamená, že bylo nutné spočítat, kolik stojí pronájem bytu? Vy zadáváte data – vytvoří hodnocení za vás. Takový web, který se skládal z několika věcí: vzít věty, analyzovat, aplikovat nějaký algoritmus strojového učení (pravděpodobně) jednoduše a vytvořit krásnou webovou tvář, ve které si můžete něco vybrat, něco zajet, pár metrů, nějaký počet místností, počet saun, počet jacuzzi ve vašem bytě a zhruba odhadněte náklady. Tedy nějakou hotovou, nepříliš složitou věc. Zde to znamená (přednášející ukazuje na kurz o algoritmech) takový rázný C++, s konzolovým I/O. No a tady (přednášející ukazuje na nápis „projekt“) něco pod vedením mentora, třeba s databázemi, možná s parsováním textu a ještě něco.
    Pak přichází třetí semestr – předmět s názvem „Počítačové systémy“. K pochopení je potřeba docela dost assembleru (velmi málo) a pak něco podobného čistému C a interakci s operačními systémy, v podstatě systémové programování. A projekt na seminář je i něco na téma všemožných síťových interakcí, docela nízkoúrovňové: vyvinout nějakou utilitu, třeba rsync (synchronizace, asi znáte. V čistém C víceméně napište analog rsync, který budete mít přes síť synchronizované složky s veškerým přístupem k souborům a tak dále).

    A konečně čtvrtý. Ani nevím, jak to nazvat, je to taková směsice technologií potřebných pro skutečný vývoj, jako je vývoj webu. To znamená, že se jedná o praktickou aplikaci databází, opět něco podobného, ​​co se dělalo v projektu (lektor ukazuje 2 kurzy k projektu), ale již více do hloubky. Tedy už takové víceméně konkrétní věci, praktické programování. Paralelně s tím existuje nějaká teorie, no, tady se pořád dělá věda.

    A po dvou kurzech se lidé rozejdou dělat to, co je zajímá, protože tato věc pokrývá takové základy programování poměrně široce a v tuto chvíli už lidé chápou, že se počítačovými systémy nechtějí nijak zabývat (např. neměli rádi systémové programování), ale chtějí se zabývat nějakými teoretickými algoritmy, složitostí počítání, vymýšlením nějakých nových věcí, distribuovanými nebo něčím jiným. Nebo si naopak myslí, že toho tu moc nemají ( lektor ukazuje na řádek prvního kurzu s Pythonem a C++) šel, pak ( lektor ukazuje na linii třetího kurzu se systémovým programováním) - jak se ti to nelíbí, počítej bajty a nastav si všemožná omezení čtení-zápis, dělej streamy, vlákna a něco jiného. A v souladu s tím si lidé vybírají nějaký směr a studují. Tedy v zásadě proto, aby se u vás nerozvinul „syndrom káčátka“ – jako první jste viděli svého Pascala a teď si řekli „Pascal je síla“; nebo pokročilejší - viděl jsi C++ a začal jsi o všech mluvit, že C++ je síla a všechno ostatní tam není moc dobré.

    Zde je potřeba se na to podívat (lektor ukazuje na seznam předmětů na tabuli) šířeji - to je jedna z metod, která byla zvolena zejména na HSE (objevila se nedávno, takže je celkem moderní) . Jsou i jiné způsoby, jak se seznámit. Jiné dobré univerzity mají trochu jiné pořadí a jiné akcenty. Ale také se snaží lidi seznámit se vším, co mají.

    Jak najít práci programátora

    Ty jsi ( lektor ukazuje na seznam kurzů) udělal všechno, naučil se na univerzitě, ještě dva roky dělal něco produktivnějšího a je potřeba jít do práce. Jak si vybíráte něco, s čím budete pracovat? Za prvé, všechno jste poznali, šli někam hluboko a už víte, co máte rádi. Musíte si přirozeně vybrat, co se vám líbí. Protože pokud milujete, budete investovat své úsilí, budete mít motivaci a obecně bude vše v pořádku. Protože nejde jen o peníze, ale o to, aby to pro vás bylo zajímavé a příjemné. No, a chcete se dostat do skvělé společnosti, najděte si práci. Jakého člověka bych osobně rád viděl? Řekněme, že ke mně přijde sto studentů – musím vzít dva do práce nebo jednoho. Proč přicházejí, vůbec nechápu, kdo jsou, co jsou, jak se mají? V lepším případě mi ukážou diplom, který dostali na univerzitě, a já řeknu: „Páni! To je skvělý diplom, ale tohle není tak cool!” A mimochodem, mohu se mýlit. Možná měl ten člověk hodně volného času a mnohem lépe se učil.

    co by bylo skvělé? Nejprve nějaký open source projekt, který jste napsali od začátku do konce. Nejlépe, když dělám nějakou infrastrukturu, aby se data rychle četla, nebo něco jiného, ​​tak by mě samozřejmě zajímalo něco open-source napsat. Neudělali nějaký web, ale něco k tématu. Proč je to pro mě zajímavé? Mohu se podívat na váš kód, vidím, jak často se zavazujete, vidím, jak jste reagovali na chyby od uživatelů, chyby od vývojářů, kteří jej používají – vše se zaznamenává, podívám se na všechno a pomyslím si: „Páni, tato chyba má byl dva roky zavřený, pak jsi uživateli nezdvořile odpověděl, je tu něco jiného - neberu to. Takže toto je váš osobní projekt.

    Dále, co jiného by bylo skvělé? Chtěl bych vidět, jak jste pracovali v týmu. To znamená, že za mnou přijdete na pohovor a řeknete: „S kluky z univerzity jsme spláchli nějakou dobrou přihlášku. Udělal jsem tam databázi, udělali tam nějakou mobilní aplikaci a taky jsme tam měli jednoho kluka, designéra, kluka z technické podpory. Bylo nás pět a vytvořili jsme skvělý projekt.“ Dobře, podívám se na to, jaký je skutečně váš projekt, a říkám: "Jaký je váš?" Znovu se podívám na kód a pochopím, že umíte pracovat v týmu s lidmi.

    Programátor není ten, kdo sedí sám (takový indie) v garáži, někde se zhasnutým světlem, s nikým nemluví, nechá si narůst vousy a píše. Přesto existuje určitý druh interakce s lidmi. Třeba se šéfem, který vám může občas nadávat (šéfové jsou takoví, ne vždy laskaví). A vidím, že umíte pracovat s lidmi a dělá mi radost, když máte nějaký dobrý tým. I když to není dobré, je to lepší než žádné.

    Co bych si osobně ještě přál? Pokud jste se ukázali ve velkých projektech. Například jste něco svěřili linuxovému jádru, pokud se zabýváte programováním systému, opravili jste nějakou chybu. To znamená, že ukázali, že můžete číst kód někoho jiného a vědět, jak v něm provést nějaké změny. Podívám se: "Oh, opravdu, přišel jsi na něco složitého a opravil jsi nějaké chyby!" A začíná mě to opravdu bavit. Protože jsem... no, já nevím... tak můj programátor skončil, protože mu jeho konkurenti nabídli vyšší plat, a já naléhavě potřebuji někoho, kdo by mu zastrčil místo - vás. Vypadám, jako byste psal od začátku a nevíte, jak číst a upravovat kód někoho jiného, ​​a jsem naštvaný.

    A nakonec, v závislosti na konkrétní pozici, existují různé další věci. Pokud se ucházíte o práci analytika, rád bych, abyste vyřešili problémy s analýzou dat na Kaggle. Pokud získáte práci v nějakých algoritmických věcech, rád bych, abyste udělali nějaké algoritmy ve sportovním programování. A nakonec, pokud jste přemýšleli o profesi, přečetli jste si, jak probíhají pohovory, setkali jste se s tím, že tam někteří lidé vyjadřují velkou nespokojenost: „Přišel jsem a ptají se mě, jaký je můj koníček. Sedím jako sova a neodpovídám, protože nemám koníčka,“ a myslí si, že to personalisté dělají. Ve skutečnosti se snaží pochopit, jak přátelští a adekvátní jste. Pokud jste nepřátelští a neadekvátní, pak bez ohledu na to, jak jste génius a workoholik, skvělý specialista s velkými znalostmi, bude pro tým obtížné s vámi spolupracovat a projekt nemůžete vytáhnout sami. Navíc, i když ho vytáhnete, dokážete si představit, jaká zátěž společnost čelí. A co zítra přijdeš a řekneš: "Zvyš mi plat 10x, jinak tě opustím." Firmy se samozřejmě do takové situace nechtějí dostat. Pěstování přiměřenosti a dobré vůle je proto v sobě samém stejně důležité (přinejmenším) jako rozvoj některých odborných dovedností.

    Suma sumárum, co k tomu říct? Které jazyky jsou dobré a které špatné? No a v rámci nějaké skupiny jazyků, například mezi Ruby, Pythonem a PHP, co si vybrat? Správná odpověď je samozřejmě Python, ale ve skutečnosti je rozdíl mezi nimi v počtu povolených chyb, v množství něčeho jiného - 5%, dobře, možná 10%. To znamená, že pokud již máte hotový projekt napsaný v PHP, pak nikdo se zdravým rozumem neřekne: „Přepišme vše v Pythonu.“ Řeknou: "Najmeme více vývojářů PHP a budeme pokračovat v psaní v PHP." Dobře, to je dobrá volba. Samozřejmě, pokud náhle začnete psát nějaký projekt, pak může být moudré zvolit Python hned. I když, také záleží. Možná máte na trhu spoustu levných PHP vývojářů a ty Pythonové jsou drahé a říkáte si: „Ano, technologie je více cool, ale ušetřím peníze za hotové vývojáře.“ A všechno je v pořádku, už tam chodíš a pracuješ.
    Jak si vybrat mezi Java a C++? Ano, děje se přesně to samé. Myslím, že ve chvíli, kdy se rozhodnete, v jakém jazyce začít nový velký projekt, získáte znalosti ve své profesní oblasti a budete si moci správně vybrat. Právě teď si tuto volbu ještě nemusíte dělat, a tak vám radím, abyste dělali to, co vás baví.

    Základy, jak jsem řekl, samotné základy programování (co je funkce, co jsou if’s, for’s, pole, něco jiného) se lze naučit víceméně v jakémkoli jazyce. Například v C++, protože mnoho věcí je mu podobných a specifika v něm (na této úrovni) jsou nejméně a nejméně zbytečných písmen k psaní. Když se tedy naučíte nějaké složité architektonické věci, naučíte se a nemusíte se o to moc starat. To znamená, že hlavní je zkoušet, hledat, co se vám líbí, a když si uvědomíte, že už jsou 4 hodiny ráno, sedíte a píšete pro zábavu, protože se vám to líbí - pravděpodobně, v tomto v okamžiku je jasné, že jste našli svůj .

    Stroj nerozumí lidské řeči. Samozřejmě nemluvíme o Siri a dalších hlasových rozpoznávačích – mluvíme o vytváření nového softwaru. Aby bylo možné vyrobit kalkulačku, musí stroj dostat úkol stejným způsobem, jakým mistr vysvětluje dělníkům, jak pokládat cihly. Ale "Vasya, jo, no, musíš být vyrovnanější!" musí být popsána v programovacím jazyce. Odkud se tyto jazyky vzaly?

    Výchozím bodem moderního počítače je Babbageův analytický stroj, ale jazyky byly vynalezeny dříve: v 19. století bylo vynalezeno mechanické piano a tkalcovský stav, pro které inženýři popsali logiku práce. Tato sada instrukcí je prototypem toho, co dnes programátoři píší.

    V polovině 20. století se objevuje Turingův stroj, poté první počítače a první moderní programovací jazyk Plankalkül. První skok ve vývoji nastal, když armáda věnovala pozornost počítačům – DARPA a jim podobní začali aktivně investovat do mladého odvětví. Druhá přišla s rozšířením internetu – čím hlouběji se lidé noří do digitálního věku, tím žádanější jsou hlavní tvůrci prostředí této doby – programátoři. A stále více lidí se k nim chce přidat.

    Touha je přiměřená a pochopitelná, ale první otázka v hlavě se často stává nepřekonatelnou bariérou – v jakém jazyce se začít učit programovat? Strach ze špatného výběru je založen na strachu ze ztráty času. Výsledkem je, že začínající programátor hledal „svůj“ jazyk několik let, aniž by se pohnul ke svému oblíbenému cíli. Tak, sakra, jaký jazyk si mám vybrat?

    Kritéria pro výběr prvního programovacího jazyka

    Volba jazyka závisí na úkolech, které chce programátor řešit. Pro internetové projekty je oblíbený Python, který ve svých projektech používá Google a Facebook, pro mobilní aplikace pro Android je nejlepší kamarád Java a pro iOS Swift.

    Skutečným problémem výběru je nedostatek konkrétního úkolu. To je normální, protože přesně pochopíte, co chcete dělat, pouze když jste uvnitř prostředí. Odborníci proto doporučují vzít si jako první jazyk ten, se kterým vyřešíte nejširší spektrum problémů.

    Samozřejmě, že vysoce specializované jazyky jsou lepší při řešení úkolů, pro které jsou naostřeny, ale toto je další krok. Začátečník stále potřebuje svobodu volby.

    Na rozdíl od univerzálnost, existují další kritéria:

    • Jednoduchost- klopýtat nad složitou syntaxí a uvíznout v divočině nečitelného kódu není nejpříjemnější začátek učení.
    • Popularita- jazyk by měl být často aktualizován, mít velkou komunitu vývojářů, být žádaný ve velkých společnostech. Dalším plusem je, že čím je jazyk oblíbenější, tím snáze se najde odpověď na pracovní otázku, která vyvstala.

    Tyto tři popisy nejlépe vyhovují Pythonu, C#, Javě a Ruby.

    Vyvinul ho v 80. letech nizozemský programátor Guido van Rossum. S Pythonem spolupracují velké technologické společnosti: Yandex, Google, Facebook a YouTube. To je takzvaný skriptovací jazyk – píšou v něm, co má program pod kapotou. Používá se pro webové aplikace, vývoj her, serverový software...

    Jednoduchost Popularita Všestrannost

    Kód je snadno čitelný a má jasnou strukturu. Pro začátek učení stačí standardní nástroje.

    Umístěn #1 v programech základního programování na amerických univerzitách.

    Pravidelně aktualizováno - každé 2,5 roku. Od ledna 2016 zahrnuto v pěti nejoblíbenějších jazycích podle analytické společnosti TIOBE Software.

    Téměř vše je napsáno v Pythonu: skripty pro správu systémů, webové stránky, systémy strojového učení, hry.

    Jazyk byl vyvinut na konci 90. let na základě C++ a Java. Používá se hlavně pro velké podnikové projekty, ale neomezuje se na ně. Například skripty v herním enginu Unity jsou napsány v C#.

    Jednoduchost Popularita Všestrannost

    Strukturálně se blíží C++ a Javě – syntaxe (struktura kódu) je složitější než u Pythonu a Ruby, ale naučit se příbuzné jazyky zabere méně času. Rozhraní knihoven dobře zapadají do návrhových vzorů, takže je snadné se je naučit.

    Poslední aktualizace proběhla v roce 2015.

    C# je napsáno pro Windows Phone, iOS a Android. Velké množství dokumentace, ale knihoven s volnou licencí není mnoho – to znamená, že programátor může použít cizí kód pro školení, ale za použití v komerčním produktu musíte zaplatit.

    Jazyk vymysleli programátoři z Microsoftu pro vývoj aplikací pro Windows. Přesto se používá i v jiných systémech. Funguje také na vestavěných, stolních a serverových platformách.


    rubín

    Vytvořeno japonským vývojářem ovlivněným jazykem Perl. Zahájeno v roce 1995. Napsáno v Ruby: Shopify, Github, Groupon, Zlaté stránky, Twitter a Slideshare. Získává na popularitě, ale je častější ve startupech než ve velkých společnostech. Dobré pro vytvoření jednoduchého internetového projektu.

    Jednoduchost Popularita Všestrannost

    Stejně jako Python je kód snadno čitelný. Struktura je také totožná s Pythonem. Oproti jiným jazykům je výběr standardních knihoven chudší – je potřeba věnovat čas vyhledávání.

    Velká a loajální vývojářská komunita – uzavírá první desítku nejoblíbenějších jazyků podle TIOBE Software. Mnoho knihoven je volně dostupných.

    Nejméně univerzální ze čtyř – vhodný především pro vývoj webu. Na druhou stranu v rámci internetových projektů s ním můžete dělat velmi odlišné a velmi cool věci.


    Jáva

    První verze jazyka byla vydána v květnu 1995. Javu používají Amazon, eBay, LinkedIn a Yahoo!

    Jednoduchost Popularita Všestrannost

    Jak již bylo zmíněno dříve, Java a C# mají velmi podobnou syntaxi – jednu se naučili, druhou téměř znali. Ale stejně jako v prvním případě je syntaxe složitější než u Ruby a Pythonu.

    Na světě jsou 3 miliardy smartphonů s Androidem, což znamená, že Java bude žádaná ještě dlouho. První v popularitě podle TIOBE Software.

    Nejčastěji se používá pro podnikový vývoj a aplikace pro Android.


    Výsledek přípravy

    Je těžké vyvodit závěr. Na jednu stranu láká schopnost zabít dvě mouchy jednou ranou a vzít si Javu nebo C #, ale Python láká svou všestranností a Ruby jednoduchostí.

    Měli jsme pochybnosti a šli jsme si promluvit se zkušenými vývojáři - stále doporučují zastavit se v Pythonu. Zde je to, co říká Grigory Petrov, profesionální vývojář, evangelista VoxImplant:

    Programovací jazyk Python je často označován jako „spustitelný pseudokód“, protože syntaxe jazyka a standardní knihovny kladou důraz na čitelnost a srozumitelnost. Přidejte k tomu nejširší výběr vývojových nástrojů, knihoven, školicích materiálů – a máme jeden z nejlepších programovacích jazyků pro začátečníky.

    Závěr: i když neexistují jasné úkoly a jasné cíle, ale existuje pouze touha kódovat, stojí za to zastavit se u Pythonu - je jednoduchý, oblíbený a univerzální. Nikita Sobolev, učitel programování pro začátečníky na #tceh, také považuje volbu tohoto jazyka za optimální pro začátečníka - vzdělávací program se ukázal být složitější a delší než v kurzu Ruby, ale svoboda ve výběru směru stojí to za to.