Tudjon meg mindent a programozási nyelvek

Amikor én egy újonc, aztán találkoztam egy másik hallgató, aki azt állította, hogy képes írni a kódot bármilyen programozási nyelv, amit lehet hívni. Én kissé sokkolta a bohóckodás, és azt mondta:

- Mi az, még abban az olvashatatlan ezoterikus nyelv, ahol csak néhány csapat, amely alig szimulálni egy Turing-gép?
- Igen, ez a nyelv az úgynevezett brainfuck. Tudom brainfuck.

És ez nem volt egy trükk - ellenőriztük. Hívtam, hogy tudom, hogy egy programozási nyelv, töltött néhány percet az interneten, hogy frissíteni tudásukat rajta -, és képes volt, hogy írjon az algoritmus működik ezen a nyelven. Nem tudtam megérteni. Úgy, mint én, ekkor mintegy 18 éves -, ahogy csak tudott ebben a korban tudni ezeket a nyelveket?


Brainfuck tolmács írt brainfuck

Ma még mindig tiszteletet parancsol a bemutató a tehetség társam tanuló, de nem voltam döbbenve általa. Miután én magam többet tanultam, mint egy nyelvet, világossá vált, hogy különböznek egymástól azok lényegesen kisebb, mint várható lett volna. Egy bizonyos ponton az én képzés, azt figyelt volna, nem annyira a szintaxis a programozási nyelv, hanem a mögöttes gondolatok, a memória modell elvei utasítás végrehajtását. Mindez lehet nevezni az elmélet a programozási nyelvek, tekintve, amelyek a különböző nyelvek egyszerűen végre néhány különböző változatai azonos alapvető elképzeléseket.

És azonnal - nyilatkozatot :)


  • Soha nem mondom, hogy meg kell, hogy valóban felfedezni a 500+ (vagy hány van most a tényleges?) Programozási nyelvek. Arról beszélek, hogy mit kell érteni az alapvető paradigmák és végrehajtása mintákat, hogy megadja a lehetőséget, hogy észre szinte bármilyen tervezési szinte bármilyen nyelven. A zabyvsheesya kulcsszót vagy funkciót a standard könyvtár mindig kandikál a dokumentációban
  • Ez nem egy öt perces munka. Talán akkor előre amennyiben ilyen módon néhány éve. De, tudja, lehet, hagyja, és évtizedben
  • Majd meg kell tanulni néhány már elavult vagy még nem szerepel a divat fogalma
  • Attól függően, hogy a fő feladat (vagy életcélok), mindezt tudja teljesen soha nem jöhet

Akkor miért ez?


Ha valami jelentős része pályafutása kapcsolódó írás a szoftvert, akkor lenne egy jó ötlet, hogy ismeri programozási nyelvek:

  • Még kijelölése nélkül konkrét programozási nyelv (vagy válasszuk csak egy) pár évig dolgozott programozóként azt találjuk, hogy már írt (vagy olvasás) a kód különböző nyelveken. Akkor miért mindig történik valami
  • Meg fogja találni, hogy miután a tudás több programozási nyelv, akkor eldönthetjük, hogy minden alkalommal ki lehet választani, az egyiket a megoldás, hogy bizonyos problémákkal
  • Programozási nyelvek fejlődésének és elavult. Ismerete többen megadja a lehetőséget, hogy maradjon az élvonalban a haladás, van, hogy több érdekes projekt, vagy a jó társaság
  • Sok fontos projekt igényel alapvető megértését a fordító és a tudás a több programozási nyelv. Ez végrehajtása fejlesztőeszközök, szabványos könyvtárak, objektumorientált nyelvek, IDE, böngészők, adatbázisok, statikus elemzés, stb

Személy szerint úgy gondolom, hogy nagyon fontos az utolsó pontot. Ras Bodik is hangsúlyozta ezt a pontot előadásában a diákoknak a Berkeley, amikor elmagyarázta a fontosságát, hogy tanulmányozzák a fejlődés során a fordítóprogramok:

Ne legyen egy sablont fejlesztők szoftver a tömeges fogyasztás. Ehelyett próbálja új eszközök kifejlesztése a felhasználók és más programozók. Ha húzunk egy történelmi analógia, mit nem akart lenni: a munkavállaló, a szövőszék, teljesítő napi házimunkát, vagy a fejlesztő az új modellek ezeket a gépeket?

Lépés száma 0: Stop nevezi magát "programozó on Rails (helyettesítse a nyelv \ platform)"


Ez egy egyszerű, de fontos lépés. Igen, akkor valószínűleg már van valamilyen specializáció és lehet büszke rá, és továbbra is, hogy javítsa meg - ez jó. De ugyanakkor egy ilyen önmeghatározása létrehoz egy mentális gátat a fejedben. Minden új technológia, minden új nyelv érzékelhető egy csipetnyi szkepticizmussal vagy a kritika, és talán elhanyagolása - és ez rossz. Kezdje nevezik magukat egyszerűen a „mérnök szoftver kifejlesztésére” vagy „programozó”.

Egy példa lenne Alex Gaynor - nagy Python szakértő, az egyik fő fejlesztők dolgok, mint Django és PyPy, tagja a Python Software Foundation igazgatótanácsának. De ha már egyszer kért segítséget Egyesült Államok Digital Service - és Alex több évet töltött az ASP projekt (nem is egy ASP.NET, de a régi ASP). Tudja, hogy miért? Mert - „mérnök szoftverfejlesztő”, hanem „a Python-fejlesztő.”

Lépés 1: Menj a meta-szinten


Van egy ilyen régi anekdota, hogyan Applied Physics véletlenül megüt a konferencia elméleti fizikusok. Megfordult, hogy az egyik hangszóróból és megkérdezte, hogy ő is sikerül gondolni mindezeket zajló 11. méretei? Elméleti fizikus így válaszolt: „Ó, ez könnyű. Képzeljük csak el, N mérést, majd zárja le a N egyenlő 11”.

Egy jó programozó használhatja ugyanazt a trükköt. Tudod hallgatni ezeket a történeteket a marketingesek, hogy «Go - egy új és ambiciózus programozási nyelv”, és egyszerűen határozza meg magát, mint egy statikusan fordított nyelv tipizálható a szemétgyűjtő, és CSP-stílusú versenyt. Swift lehet „új és gondosan megtervezett” is, vagy csak össze többparadigmás általános célú nyelv végrehajtott alapján LLVM.

A kanonikus referencia könyv összeállítói: «Fordítóprogramok: elvek, technikák Eszközök ». Ez - Book of the Dragon. Mint minden könyv ezt a szintet, azt mind fanatikus rajongó és kérlelhetetlen kritikusa. Személy szerint úgy gondolom, hogy ez egy kiváló anyag, de készüljön fel arra, hogy egyes részei akkor újra kell olvasni többször is, mielőtt egy teljes megértése. Vannak egyszerűbb és célja a szakemberek a könyv - ez Nyelv végrehajtása minták. Ha érdeklődését korlátozódik egy konkrét gyakorlati probléma a kis léptékű (mint az írás szakterület-specifikus nyelv), ez a könyv alkalmas jobb, mint a klasszikus könyve a Sárkány.

2. számot: Kezdjük az elsődleges források


Egy jó elméleti alapot könnyebb lesz megtanulni új nyelveket, de még mindig nem olyan könnyű felvenni és tanulni minden 500+ többé vagy kevésbé fontos ma programozási nyelven. Ezért, meg lehet kezdeni a meghatározása nyelvek, amelyeket először feltárni és végre valami radikálisan új ötletek. Alapján a tanulmány a hasonló jogi aktusok újabb nyelven lesz egyszerű feladat.

Peter Norvig ad néhány tippet, hogy mit paradigma nagyon fontos, és milyen nyelven azokat először végre:

Tudjon legalább 5 nyelven. A boltban a tudás tartalmaznia kell legalább egy nyelvet a klasszikus „osztály” absztrakció (ez lehet a Java vagy C ++), funkcionális nyelv (mint a Lisp, ML vagy Haskell), a nyelv, amely támogatja a szintaktikai absztrakció (mint Lisp) deklaratív nyelv (Prolog vagy a C ++ sablonok), egy nyelv fejlett támogatása konkurencia (Clojure vagy Go).
Azt hiszem, ezt a tanácsot egy jó alap, de lehet menni ezen az úton a jövőben. Először is, azt javasoljuk, hogy tanulni a C nyelvet a lehető leghamarabb. Ez annyira elterjedt, és fontos, hogy egyszerűen nem lehet elkerülni. Ezen kívül a tanulmány, hogy sokkal könnyebb a tanulás és más nyelveken is, így sokan közülük bármilyen ötlete vagy annak egy részét a szintaxis S.

Azt is javasoljuk, hogy vizsgálja meg néhány szerelő. Ez lehet MIPS (ha azt szeretnénk, hogy kevesebb időt töltsenek képzés) vagy x86 (ha azt akarjuk, hogy a gyakorlati használat). Ez ad több ismeretet számítógépes architektúra és a készülék processzora, mint a programozási nyelvek, de ha a jövőben szeretne írni egy fordító, éppen ez a tudás és szükség van rájuk. Talán egy nap, ahelyett, hogy a szerelvény lesz, hogy javasolja a tanulmány méret LLVM köztes kódot.

Peter Norvig ajánlja tanulmány deklaratív nyelv, de én lenne konkrét itt és azt javasolja, hogy vizsgálja meg a logikai programozási nyelv. Ez lehet egy klasszikus Prolog és miniKanren.

A „Nyelvek támogatásával konkurencia” részben a fenti lehetőségek Hozzáteszem több és CUDA. Ez minőségileg különböző léptékű párhuzamosság, mert a több száz GPU magok nem lehet összehasonlítani a bármilyen hagyományos 4-core processzorok. Akkor nem csak, hogy jobban megértsük GPU eszköz, hanem feküdt a maguk számára egy jó alapot a további vizsgálatot a gépi tanulás (van párhuzamosság és a GPU számítási nagyon hasznos). De fontos, hogy megértsük, hogy szükség van a CUDA a tudás, és az egyik ilyen nyelv párhuzamos CPU (mint a Go, Clojure és Erlang).

Vector programozás egy másik hatékony paradigma. Norvig hiába hiányzott nyelvek támogatását, mert elég konkrét alkalmazásait. Klasszikus példák lehetnek APL / J / K / Q, valamint a Matlab.

Emellett van olyan dolog, mint egy nagyon speciális nyelven. Előfordul, hogy a teremtés az erősen szaknyelv néhány konkrét feladatokat lehet a helyes döntés. De ahhoz, hogy határoz e, meg kell vizsgálni, konkrét példákat, ahol ez a megközelítés sikeresnek. Azt tanácsolom, hogy nézd meg az ilyen típusú dolog Frink.

Lépés No. 3: Practice


Egyszerűen, hogy a nyelvek listáját szeretné megvizsgálni. De itt van az igazán megy, és fedezze fel - némi időt vesz igénybe. Ha szerencséd van, egy részük nem lesz képes alkalmazni, hogy főállásban. De még ha ez nem történik meg, akkor meg kell próbálnia, hogy megtalálja a maga módján, hogy egy új nyelvet tanulni nem csak elméleti, hanem gyakorlati szempontból. Elmélete nélkül a fejlődés lassú, de gyakorlat nélkül még elakad.

Egy jó így kezdeni egy új nyelv tanulásának, hogy olvasni egy rövid megszorítások Hyperpolyglot vagy Tudjon X Y jegyzőkönyvet. Ez ad egy hozzávetőleges megértése a legfontosabb fogalmak a nyelv és megszüntetné a félelem az ismeretlen szintaxis. Ha már ismeri néhány hasonló nyelv, Hyperpolyglot nagyon hasznos funkció összehasonlítására nyelv - ez meglepően gyorsan hajt téged egy új nyelv tanulásának.

A leggyorsabb módja annak, hogy csatlakozzon az új nyelvet, véleményem az, hogy talál egy sor kisebb feladatok és fokozatosan megoldani őket. Egy jó forrás lehet Exercism.io. Emellett probléma ott van, sőt vannak olyan vizsgálatok, amelyek képesek gyorsan minőségének értékelésére a megvalósítástól. Megoldás kisebb feladatok összhangban van a tanulmány az elmélet és alapvető munka más projektekben.

Ha megismerik a szintaxist és kis feladat lesz többé problémát okozhatna, azt tanácsolom, hogy megtalálja a nagy projekt ezen a nyelven. És meg kell, hogy a projekt a mezőn van, melyek ezen a nyelven jött létre. Például, ha megtanulod a C vagy Go - levelet parancssori segédprogramot nagyszámú rendszer hívásokat. Ha tanulni Python vagy Ruby - próbálja, hogy írjon valamit algoritmikus és nem túl igényes a teljesítmény (AI keresztek noughts :)) is, stb

Tartsa ásás


Tekintettel a világ nyelveinek és az a tény, hogy valóban használható még nagyon régi nyelvek, mint a C, könnyű arra következtetni, hogy az emberiség feltalált mindent, amire szüksége programozási nyelven. De ez nagyon megkérdőjelezhető feltételezéseket. Van egy nagyon jelentős különbség, hogy mi tekinthető lehet programozni, és az a tény, hogy ma már megtanult programot. A probléma nem a számítási erőforrások - az összes jelenlegi hardver platformok ma, és a felhők, ahol még vezetni kódot. A probléma az, mi módon kommunikál a számítógéppel, hogy tudjuk nem mindig kényelmes, hogy kifejezze, amit szeretnénk, hogy a program kimenete, és hogyan kell kiszámítani.

Gerald Jay Sussman hívta fel a figyelmet, hogy ez a jelentésében a lenyűgöző Mi tényleg nem tudom, hogyan kell kiszámítani. Ez használ kissé elavult eszközöket, hanem eszköz áll ma nem ad nekünk minőségileg új megközelítéseket a problémák megoldásához kivilágított őket.

Melyek a programozási nyelvek

Triangle illúzió. A férfi azonnal látja ezen az ábrán egy háromszög, de meg kell tölteni nagyon nehéz tanítani egy számítógépes programot csinálni.

Az egyik ember dolgozik az élvonalbeli tudomány a fejlesztés iránya a programozási nyelvek, Chris Granger, dolgozó Éva. Azt akarja, hogy dolgozzon ki nemcsak a nyelvet, hanem az összes kapcsolódó eszközökkel. A nyelv csak az egyik fontos összetevője a teljes platform. Nem tudom, hogy lesz-e az új generációs Éva többségi állványok, de úgy vélem, hogy ez a megközelítés kiterjeszti és kiegészíti nyelvi támogató eszközök részévé válhat a jövőben. Legalábbis ez adja a lehetőséget, hogy jobb, ha elmondom a számítógépnek, hogy mit akarunk tőle. Mint már említettük Ras Bodik (és azt mondtam), szeretném, hogy legyen része ennek a folyamatnak. Tudjon meg mindent a programozási nyelvek, és nem egy olyan nyelvet. Megértése alapjait és elveit, amely lehetővé teszi, hogy több, és legyen óvatos, hogy a megjelenése az új.