Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Programi
  • Razine programskih jezika. Programski jezici visoke i niske razine: koje biste trebali naučiti

Razine programskih jezika. Programski jezici visoke i niske razine: koje biste trebali naučiti

Programski jezik

Programski jezik- službeni znakovni sustav za snimanje računalnih programa. Programski jezik definira skup leksičkih, sintaktičkih i semantičkih pravila koja određuju izgled programa i radnje koje će izvršitelj (računalo) izvoditi pod njegovom kontrolom.

  • Funkcija: programski jezik namijenjen je za pisanje računalnih programa koji služe za prijenos instrukcija na računalo za izvođenje određenog računskog procesa i organiziranje upravljanja pojedinim uređajima.
  • Zadatak: programski jezik razlikuje se od prirodnih jezika po tome što je dizajniran za prijenos naredbi i podataka s osobe na računalo, dok se prirodni jezici koriste za komunikaciju među ljudima. Definiciju „programskih jezika“ moguće je generalizirati – to je način prenošenja naredbi, zapovijedi, jasnog vođenja za akciju; dok ljudski jezici također služe za razmjenu informacija.
  • Izvršenje: programski jezik može koristiti posebne konstrukcije za definiranje i manipuliranje strukturama podataka i kontrolu procesa izračunavanja.

Standardizacija programskih jezika

Programski jezik može se predstaviti kao skup specifikacija koje definiraju njegovu sintaksu i semantiku.

Međunarodni standardi stvoreni su za mnoge od raširenih programskih jezika. Određene organizacije redovito ažuriraju i objavljuju specifikacije i formalne definicije relevantnog jezika. U okviru takvih odbora nastavlja se razvoj i modernizacija programskih jezika te se rješavaju pitanja proširenja ili podržavanja postojećih i novih jezičnih konstrukcija.

Vrste podataka

Moderna digitalna računala su obično binarna i podaci se pohranjuju u binarnom (binarnom) kodu (iako su moguće implementacije u drugim brojevnim sustavima). Ovi podaci obično odražavaju informacije iz stvarnog svijeta (imena, bankovni računi, mjerenja, itd.) koji predstavljaju koncepte visoke razine.

Poseban sustav kojim se podaci organiziraju u programu je tipski sustav programski jezik; razvoj i proučavanje sustava tipova poznato je kao teorija tipova. Jezici se mogu klasificirati kao sustavi statički tipiziran i jezicima sa dinamičko tipkanje.

Statički tipizirani jezici mogu se dalje podijeliti na jezike s obavezna deklaracija gdje svaka deklaracija varijable i funkcije ima obveznu deklaraciju tipa, a jezici s zaključeni tipovi... Ponekad se nazivaju dinamički upisani jezici latentno otkucane.

Strukture podataka

Sustavi tipova u jezicima visoke razine omogućuju definiranje složenih, složenih tipova, takozvanih struktura podataka. Tipično, strukturni tipovi podataka se formiraju kao kartezijanski proizvod osnovnih (atomskih) tipova i prethodno definiranih kompozitnih tipova.

Osnovne strukture podataka (popisi, redovi, hash tablice, binarna stabla i parovi) često su predstavljene posebnom sintaksom u jezicima visoke razine. Takvi su podaci strukturirani automatski.

Semantika programskih jezika

Postoji nekoliko pristupa definiranju semantike programskih jezika.

Najraširenije varijante od sljedeća tri su: operacionalna, derivacijska (aksiomatska) i denotacijska (matematička).

  • Prilikom opisivanja semantike unutar operativni pristupa, izvođenje konstrukcija programskog jezika obično se tumači uz pomoć nekog imaginarnog (apstraktnog) računala.
  • Derivacijska semantika opisuje posljedice izvršavanja jezičnih konstrukcija korištenjem jezika logike i postavljanja pred- i postuvjeta.
  • Denacionalni semantika operira pojmovima tipičnim za matematiku - skupovi, korespondencije, kao i sudovi, iskazi itd.

Paradigma programiranja

Programski jezik se gradi u skladu s jednim ili drugim osnovnim računskim modelom i programskom paradigmom.

Unatoč činjenici da je većina jezika usredotočena na imperativni računski model specificiran von Neumannovom arhitekturom računala, postoje i drugi pristupi. Možemo spomenuti jezike sa složenim računskim modelom (Fort, Factor, PostScript, itd.), kao i funkcionalno (Lisp, Haskell, itd.) i logičko programiranje (Prolog) i jezik REFAL, koji se temelji na računanju model koji je uveo sovjetski matematičar A. A. Markov ml.

Trenutno se također aktivno razvijaju problemski orijentirani, deklarativni i vizualni programski jezici.

Načini implementacije jezika

Programski jezici mogu se implementirati kao kompilirani i interpretirani.

Program na prevedenom jeziku pomoću kompajlera (posebnog programa) pretvara se (kompilira) u strojni kod (skup instrukcija) za danu vrstu procesora, a zatim se sastavlja u izvršni modul koji se može pokrenuti za izvršenje kao zaseban program . Drugim riječima, prevodilac prevodi izvorni kod programa iz programskog jezika visoke razine u binarne kodove procesorskih instrukcija.

Ako je program napisan na interpretiranom jeziku, onda tumač izravno izvršava (tumači) izvorni tekst bez prethodnog prijevoda. U tom slučaju program ostaje na izvornom jeziku i ne može se pokrenuti bez tumača. Računalni procesor, u tom smislu, može se nazvati tumačem za strojni kod.

Podjela na sastavljene i interpretirane jezike je uvjetna. Dakle, za bilo koji tradicionalno kompilirani jezik, kao što je Pascal, možete napisati tumač. Osim toga, većina modernih "čistih" tumača ne izvode izravno jezične konstrukcije, već ih kompiliraju u neki srednji prikaz visoke razine (na primjer, s promjenjivim dereferenciranjem i makro proširenjem).

Možete stvoriti kompajler za bilo koji interpretirani jezik — na primjer, izvorno interpretirani jezik Lisp može se prevesti bez ikakvih ograničenja. Kod kreiran u vrijeme izvođenja također se može dinamički kompajlirati tijekom izvođenja.

Prevedeni programi u pravilu rade brže i ne zahtijevaju dodatne programe za izvođenje, budući da su već prevedeni na strojni jezik. Istodobno, svaki put kada se promijeni tekst programa, potrebno ga je ponovno kompajlirati, što usporava razvojni proces. Osim toga, prevedeni program može se izvoditi samo na istoj vrsti računala i, u pravilu, pod istim operativnim sustavom za koji je kompajler dizajniran. Potrebna je nova kompilacija za stvaranje izvršne datoteke za drugu vrstu stroja.

Interpretirani jezici imaju neke specifične dodatne mogućnosti (vidi gore), osim toga, programi u njima mogu se pokrenuti odmah nakon izmjene, što olakšava razvoj. Program interpretiranog jezika često se može izvoditi na različitim vrstama strojeva i operativnih sustava bez dodatnog napora.

Međutim, interpretirani programi se primjetno sporije izvode od kompajliranih programa; štoviše, ne mogu se izvršiti bez programa tumača.

Ovaj pristup vam u određenom smislu omogućuje korištenje prednosti i interpretatora i prevoditelja. Treba napomenuti da postoje jezici koji imaju i prevoditelja i prevoditelja (Forth).

Upotrijebljeni simboli

Moderni programski jezici dizajnirani su za korištenje ASCII-a, odnosno dostupnosti svih grafički ASCII znakovi su neophodan i dovoljan uvjet za snimanje bilo koje jezične konstrukcije. Menadžeri ASCII znakovi se koriste u ograničenom opsegu: dopušteni su samo povratni CR, pomak reda LF i vodoravni jezičak HT (ponekad i okomita kartica VT i pomicanje stranice FF).

Rani jezici, koji datiraju iz ere 6-bitnih znakova, koristili su ograničeniji skup. Na primjer, Fortran abeceda sadrži 49 znakova (uključujući razmak): 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 = + - * / (). , $ ":

Značajna iznimka je APL jezik, koji koristi puno posebnih znakova.

Upotreba znakova koji nisu ASCII (kao što su KOI8-R znakovi ili Unicode znakovi) ovisi o implementaciji: ponekad su dopušteni samo u komentarima i konstantama znakova/niza, a ponekad su dopušteni samo u identifikatorima. U SSSR-u su postojali jezici na kojima su sve ključne riječi bile napisane ruskim slovima, ali takvi jezici nisu stekli veliku popularnost (s izuzetkom ugrađenog programskog jezika 1C: Enterprise).

Proširenje skupa znakova ograničeno je činjenicom da su mnogi projekti razvoja softvera međunarodni. Bilo bi vrlo teško raditi s kodom u kojem su imena nekih varijabli napisana ruskim slovima, drugih arapskim, a trećih kineskim slovima. Istodobno, za rad s tekstualnim podacima, programski jezici nove generacije (Delphi 2006,, Java) podržavaju Unicode.

Klase programskih jezika

vidi također

Bilješke (uredi)

Književnost

  • Hal Abelson, Gerald Jay Sussman. Struktura i interpretacija računalnih programa
  • Robert W. Sebesta. Osnovni pojmovi programskih jezika = Concepts of Programming Languages ​​/ Per. s engleskog - 5. izd. - M .: Williams, 2001. - 672 str. - 5000 primjeraka. - ISBN 5-8459-0192-8 (ruski), ISBN 0-201-75295-6 (engleski)
  • Wolfenhagen V.E. Konstrukcije programskih jezika. Metode opisa. - M .: Centar YurInfoR, 2001 .-- 276 str. - ISBN 5-89158-079-9
  • Parondzhanov V.D. Kako poboljšati rad uma. Algoritmi bez programera - vrlo je jednostavno! - M .: Delo, 2001 .-- 360 str. - ISBN 5-7749-0211-0
  • F. Biancuzzi, C. Warden. Pioniri programiranja. Razgovori s tvorcima najpopularnijih programskih jezika. - SPb. : Simbol-Plus, 2010 .-- 608 str. - ISBN 978-5-93286-170-7

Linkovi

  • Popis jezika (engleski) - više od 2500 jezika s kratkim opisom
  • Povijest računalnih jezika (engleski) - povijest programskih jezika (od 1954. do svibnja 2004.) (sadrži redovito ažurirani dijagram)
  • Primjeri - primjeri programiranja na 162 jezika
  • Popularnost programskog jezika - 2004 studija popularnosti programskih jezika
  • 10 programskih jezika za učenje (2006.)
  • Programming Community Index (eng.) - redovito ažurirana ocjena popularnosti programskih jezika
  • Mjerila za izbacivanje računalnih jezika - Usporedba programskih jezika prema učinkovitosti
  • Programming Languages ​​that are Loved (eng.) - usporedba programskih jezika za "ljubav" i "mržnju" prema njima

Zaklada Wikimedia. 2010.

Klasifikacija programskih jezika

U zoru računalne ere, strojni kod je bio jedino sredstvo komunikacije između čovjeka i računala. Veliko postignuće kreatora programskih jezika bilo je to što su uspjeli učiniti da samo računalo radi kao prevoditelj s ovih jezika u strojni kod.

Postojeći programski jezici mogu se podijeliti u dvije skupine: proceduralne i neproceduralne (vidi sliku 4.1).

Proceduralni (ili algoritamski) programi su sustav recepata za rješavanje određenog problema. Uloga računala svodi se na mehaničku provedbu ovih uputa.

Proceduralni jezici se dijele na jezike niske i visoke razine.

Različite vrste procesora imaju različite skupove instrukcija. Ako je programski jezik usmjeren na određenu vrstu procesora i uzima u obzir njegove značajke, onda se naziva programski jezik niske razine.
To znači da su operatori jezika bliski strojnom kodu i fokusirani su na specifične upute procesora.

Riža. 4.1. Opća klasifikacija programskih jezika

Jezici niske razine (strojno orijentirani) omogućuju stvaranje programa iz strojnih kodova, obično u heksadecimalnom obliku. S njima je teško raditi, ali programi koje je uz njihovu pomoć izradio visoko vješt programer zauzimaju manje memorijskog prostora i rade brže. Koristeći ove jezike, prikladnije je razvijati sistemske programe, upravljačke programe (programe za upravljanje računalnim uređajima) i neke druge vrste programa.

Jezik niske razine (strojno orijentiran) je Asembler, koji jednostavno predstavlja svaku instrukciju strojnog koda, ne kao brojeve, već koristeći konvencionalne simboličke oznake tzv
mnemotehnika.

Uz pomoć jezika niske razine stvaraju se vrlo učinkoviti i kompaktni programi, budući da programer dobiva pristup svim mogućnostima procesora.

Programski jezici visoke razine puno bliže i razumljivije osobi nego računalu. U njima se ne uzimaju u obzir osobitosti specifičnih računalnih arhitektura, stoga su programi stvoreni na razini izvornog koda lako prenosivi na druge platforme za koje je stvoren prevoditelj ovog jezika. Mnogo je lakše razvijati programe na jezicima visoke razine s jasnim i moćnim naredbama, a manje je pogrešaka pri izradi programa.

Glavna prednost algoritamskih jezika visoke razine je sposobnost opisivanja programa za rješavanje problema u obliku koji je najprikladniji za ljudsku percepciju. No budući da svaka obitelj računala ima svoj, specifičan interni (strojni) jezik i može izvršiti samo one instrukcije koje su napisane na tom jeziku, za prevođenje izvornih programa u strojni jezik koriste se posebni programi prevoditelji.

Svi prevoditelji rade prema jednom od dva principa: tumačenju ili kompilaciji.

Tumačenje podrazumijeva prevođenje od operatora do operatora i naknadno izvršavanje prevedenog operatora izvornog programa. S tim u vezi mogu se uočiti dvije mana metode interpretacije: prvo, program za tumačenje mora biti u memoriji računala tijekom cijelog procesa izvršavanja izvornog programa, odnosno mora zauzimati određenu količinu memorije; drugo, proces prevođenja istog operatora ponavlja se onoliko puta koliko bi se ova naredba trebala izvršiti u programu, što naglo smanjuje performanse programa.

Unatoč navedenim nedostacima, tumači prevoditelji dobili su dovoljnu distribuciju, budući da su prikladni za razvoj i otklanjanje pogrešaka izvornih programa.

Na kompilacija procesi prijevoda i izvođenja vremenski su razdvojeni: prvo se originalni program u potpunosti prevodi na strojni jezik (nakon čega prisutnost prevoditelja u RAM-u postaje nepotrebna), a zatim se prevedeni program može izvršiti više puta. Posljedično, za isti program, prijevod kompilacijskim metodom osigurava veće performanse računalnog sustava uz smanjenje potrebne RAM-a.

Velika poteškoća u razvoju prevoditelja u usporedbi s interpretatorom iz istog jezika objašnjava se činjenicom da sastavljanje programa uključuje dva koraka: analizu, odnosno utvrđivanje ispravnosti pisanja izvornog programa u skladu s pravilima za građenje jezičnih konstrukcija. ulaznog jezika, i sinteza - generiranje ekvivalentnih programa u strojnim kodovima. Kompilacijski prijevod zahtijeva višestruko "gledanje" emitiranog programa, tj. prevodioci-prevodioci su višeprolazni: tijekom prvog prolaza provjeravaju ispravnost sintakse jezičnih konstrukcija pojedinih operatora neovisno jedan o drugom, u sljedećem prolazu provjeravaju ispravnost sintaktičkih odnosa između operatora itd.

Rezultirajući prevedeni program se poziva objektni modul, koji je ekvivalentan program u strojnim kodovima, ali nije "vezan" za određene adrese RAM-a. Stoga, prije izvršenja, objektni modul mora se obraditi posebnim programom operativnog sustava (ureditelj linkova) i pretvoriti u modul za punjenje.

Uz navedene prevoditelje-tumače i prevoditelje-sastavljače, u praksi se koriste i prevoditelji prevodioci-kompilatori, koji kombiniraju prednosti oba principa prijevoda: u fazi razvoja i otklanjanja pogrešaka programa, prevoditelj radi u interpreterskom modu, a nakon što je proces otklanjanja pogrešaka završen, izvorni program se ponovno prevodi u objektni modul (tj. , metodom kompilacije). Time je moguće značajno pojednostaviti i ubrzati proces sastavljanja i otklanjanja pogrešaka programa te, uslijed naknadnog primitka objektnog modula, osigurati učinkovitije izvođenje programa.

Klasično proceduralno programiranje zahtijeva od programera da detaljno opiše kako riješiti problem, tj. formulirati algoritam i njegovu posebnu notaciju. Međutim, očekivana svojstva rezultata obično nisu navedena. Osnovni koncepti jezika ovih grupa su operator i podaci.
U proceduralnom pristupu operatori se kombiniraju u grupe – procedure. Strukturirano programiranje u cjelini ne izlazi iz okvira ovog smjera, samo dodatno popravlja neke korisne tehnike
tehnologije programiranja.

Temeljno drugačiji smjer u programiranju povezan je s metodologijama (ponekad nazvanim "paradigme") neproceduralnog programiranja. To uključuje objektno orijentirano i deklarativno programiranje. Objektno orijentirani jezik stvara okruženje u obliku mnogih neovisnih objekata. Svaki objekt se ponaša kao zasebno računalo, može se koristiti za rješavanje problema kao "crne kutije" bez upuštanja u unutarnje mehanizme njihova funkcioniranja. Od objektnih programskih jezika popularnih među profesionalcima prije svega treba spomenuti C ++; za širi krug programera preferiraju se okruženja kao što su Delphi i Visual Basic.



Kada se koristi deklarativni jezik, programer ukazuje na početne informacijske strukture, odnose između njih i koja svojstva bi rezultat trebao imati. Istodobno, programer ne gradi proceduru za njegovo dobivanje ("algoritam") (barem, idealno). Ovim jezicima nedostaje koncept "operator" ("naredba"). Deklarativni jezici mogu se podijeliti u dvije obitelji - logičku (tipični predstavnik je Prolog) i funkcionalnu (Lisp).

Okarakterizirajmo najpoznatije programske jezike.

1.Fortran(Sustav prevođenja FORmula - sustav prevođenja formula); najstariji jezik koji se do danas aktivno koristi u rješavanju problema matematičke orijentacije. Klasični je jezik za računalno programiranje matematičkih i inženjerskih problema

2.OSNOVNI, TEMELJNI(Beginner's All-purpose Symbolic Instruction Code - univerzalni simbolički kod uputa za početnike); unatoč mnogim nedostacima i obilju loše kompatibilnih verzija - najpopularniji s obzirom na broj korisnika. Široko se koristi pri pisanju jednostavnih programa.

3.ALGOL(ALGOritamski jezik - algoritamski jezik); igrao je veliku ulogu u teoriji, ali se sada gotovo nikad ne koristi za praktično programiranje.

4.PL / 1(PL / 1 programski jezik je prvi programski jezik); višenamjenski jezik; sada se skoro nikad ne koristi.

5.Pascal(Pascal - nazvan po znanstveniku Blaiseu Pascalu); iznimno popularan i kod učenja programiranja i među profesionalcima. Stvorio ga je ranih 70-ih švicarski znanstvenik Niklaus Wirth. Pascal je izvorno razvijen kao obrazovni jezik, a sada je jedan od glavnih jezika za poučavanje programiranja u školama i sveučilištima. Međutim, njegove kvalitete u zbiru su se pokazale toliko visokom da ga i profesionalni programeri rado koriste. Philippe Kahn, Francuz koji je razvio Turbo-Pascal sustav, postigao je ništa manje impresivan, uključujući i financijski uspjeh. Bit njegove ideje bila je kombinirati uzastopne faze programske obrade - kompilaciju, uređivanje poveznica, otklanjanje pogrešaka i dijagnosticiranje pogrešaka - u jednom sučelju. Verzije Turbo-Pascala preplavile su gotovo sve obrazovne institucije, programske centre i privatne tvrtke. Na temelju Pascal jezika stvoreno je nekoliko moćnijih jezika (Modula, Ada, Delphi).

6.Cobol(COMmon Business Oriented Language - opći poslovni jezik); uvelike izašla iz upotrebe. Zamišljen je kao primarni jezik za masovnu obradu podataka u područjima upravljanja
i posao.

7.ADA; je pobjednički jezik (svibanj 1979.) na Pentagonovom univerzalnom jezičnom natjecanju od 1975. godine. Programeri su skupina znanstvenika koju vodi Jean Ihbia. Pobjednički jezik nazvan je ADA, po Augusti Adi Lovelace. ADA jezik je izravni nasljednik jezika
Pascal. Ovaj jezik je namijenjen kreiranju i dugoročnom (dugotrajnom) održavanju velikih softverskih sustava, omogućuje mogućnost paralelne obrade, kontrole procesa u stvarnom vremenu i još mnogo toga, što je teško ili nemoguće postići jednostavnijim Jezici.

8.Si(C - "si"); široko se koristi u razvoju sistemskog softvera. Ostavio je veliki pečat na moderno programiranje (prva verzija - 1972.), vrlo je popularan među programerima softverskih sustava (uključujući operacijske sustave). C kombinira značajke jezika visoke razine i strojno orijentiranog jezika, omogućujući programeru pristup svim resursima stroja, što jezici kao što su Basic i Pascal nemaju.

9.C ++(C ++); objektno orijentirano proširenje C jezika, koje je stvorio Bjarne Stroustrup 1980. godine. Mnoge moćne nove značajke koje su dramatično poboljšale produktivnost programera su superponirane na određenu nisku razinu naslijeđenu iz C jezika.

10.Delphi(Delphi); jezik objektno orijentiranog "vizualnog" programiranja; iznimno popularan u ovom trenutku. Jezik Delphi kreiran na temelju jezika Pascal od strane stručnjaka Borlanda, koji posjeduje snagu i fleksibilnost jezika C i C ++, nadmašuje ih u praktičnosti i jednostavnosti sučelja pri razvoju aplikacija koje osiguravaju interakciju s bazama podataka i podršku razne vrste rada unutar korporativnih mreža i interneta...

11.Java(Java); platformski neovisni objektno orijentirani programski jezik, iznimno učinkovit za kreiranje interaktivnih web stranica. Ovaj jezik je stvorio Sun ranih 90-ih na temelju C++. Dizajniran je da pojednostavi razvoj aplikacija temeljenih na C ++ isključujući sve značajke niske razine iz njega.

12.Lisp(Lisp) je funkcionalni programski jezik. Usredotočen je na strukturu podataka u obliku popisa i omogućuje vam organiziranje učinkovite obrade velikih količina tekstualnih informacija.

13.Prolog(PROgramiranje u LOGICU - logičko programiranje). Glavna svrha jezika je razvoj inteligentnih programa i sustava. Prolog je programski jezik kreiran posebno za rad s bazama znanja temeljenim na činjenicama i pravilima (jedan od elemenata sustava umjetne inteligencije). Jezik implementira mehanizam povratnog praćenja za izvođenje obrnutog lanca zaključivanja, u kojem se pretpostavlja da su neki zaključci ili zaključci istiniti, a zatim se te pretpostavke testiraju u bazi znanja koja sadrži činjenice i pravila zaključivanja.
Ako nagađanje nije potvrđeno, vraća se i napreduje novo nagađanje. Jezik se temelji na matematičkom modelu teorije predikatskog računa.

Programski jezici za internet:

1. HTML. Dobro poznati jezik za papirologiju. Vrlo je jednostavan i sadrži osnovne naredbe za oblikovanje teksta, dodavanje slika, postavljanje fontova i boja, organiziranje poveznica i tablica.

2. PERL. Zamišljen je kao alat za učinkovitu obradu velikih tekstualnih datoteka, generiranje tekstualnih izvješća i upravljanje zadacima.
Perl je mnogo moćniji od jezika poput C. Uvodi mnoge često korištene funkcije za rad sa nizovima, nizovima, upravljanje procesorima, rad s informacijama o sustavu.

3. Tcl / Tk. Ovaj jezik je usmjeren na automatizaciju rutinskih procesa i sastoji se od moćnih naredbi. Neovisna je od sustava i istovremeno vam omogućuje izradu programa s grafičkim sučeljem.

4. VRML. Stvoren za organiziranje virtualnih 3D sučelja na Internetu. Omogućuje vam da u tekstualnom obliku opišete razne trodimenzionalne scene, osvjetljenje i sjene, teksture.

Izbor programskog jezika ovisi o mnogim čimbenicima: namjeni, jednostavnosti pisanja izvornih programa, učinkovitosti rezultirajućih objektnih programa itd. Raznolikost problema koje rješava računalo određuje raznolikost programskih jezika.

Kontrolna pitanja

1. Što su programski sustavi i kojoj klasi programa pripadaju?

2. Što je uključeno u sustave programiranja?

3. U kojem su programskom jeziku nastali prvi programi?

4. Na koje se jezike dijele proceduralni jezici?

5. Opišite jezike niske razine.

6. Koji je jezik jezik niske razine?

7. Prednosti jezika niske razine.

8. Opišite jezike visoke razine.

9. Prednosti jezika visoke razine.

10. Navedite primjere jezika visoke razine.

11. Čemu služe prevoditelji?

12. Koja je razlika između prevoditelja i interpretatora?

13. Nedostaci u tumačenju (kao vrsta prevoditelja).

14. Kakav je postupak sastavljanja programa?

15. Koje se radnje izvode tijekom kompilacije?

16. Koja je razlika između modula opterećenja i modula objekta?

17. Koja je razlika između proceduralnog programiranja i neproceduralnog programiranja?

18. Koje vrste programiranja su neproceduralne
programiranje?

19. Značajka deklarativnih jezika.

20. Opišite ukratko programske jezike: Fortran, BASIC, Pascal, Cobol.

21. Opišite ukratko programske jezike: Ada, C, C ++, Delphi, Java.

22. Navedite primjere objektno orijentiranih jezika.

23. Kojoj klasi jezika pripada Lisp jezik?

24. Kojoj klasi jezika pripada Prolog jezik?

Zalina 13. siječnja 2016. u 15:42

Razni programski jezici i njihova područja primjene. Predavanje u Yandexu

  • blog tvrtke Yandex,
  • Izrada web stranica,
  • Programiranje,
  • Industrijsko programiranje

Svoj prvi ovogodišnji post odlučili smo posvetiti jednoj vrlo osnovnoj temi, o kojoj je predavanje održano u Malom SHAD-u. Angažirani su u tome srednjoškolci koji se zanimaju za tehnologiju, otuda i specifičnost izlaganja – predavanje će biti posebno zanimljivo onima koji tek počinju programirati i razmišljaju o smjeru razvoja. Za njih Yandex ima tečaj "Uvod u programiranje (C ++)", koji se može polagati na platformi Stepic.org.

Predavač Mikhail Gustokashin - kustos akademskih programa u Yandexu, direktor Centra za studentske olimpijade Fakulteta računalnih znanosti, HSE. Mikhail je trenirao desetke pobjednika i nagrađenih sveruskih olimpijada u programiranju.

U okviru predavanja govori se o tome što su programski jezici, po čemu se razlikuju, kako su se pojavili i koji su bolji, a koji lošiji. Na početku ćemo malo govoriti o povijesti jezika - kako su se pojavili, kako su ljudi počeli programirati, kako se sve razvijalo, što se sada događa. U drugom dijelu će se dotaknuti za koje zadatke koji jezik odgovara, kako “odabrati svoj omiljeni jezik i uživati ​​u životu”. Predavač će također malo pričati o tome kako, po njegovom mišljenju, sve to naučiti i onda se zaposliti.

Kao i uvijek, ispod reza je detaljan transkript predavanja kako biste se mogli kretati njegovim sadržajem.

Povijest programskih jezika

Krenimo od početka. U početku računala nisu imala ni tipkovnicu! Odnosno, sve je bilo jako loše - nisu imali tipkovnicu ni ekran, imali su bušene kartice (to su takve stvari s rupama ili bez rupa). U skladu s tim, ili su igle tu zabačene, ili su tamo sjale svjetlom. Ako postoji rupa (ili obrnuto), to je značilo nula ili jedan. A programi su se u to vrijeme pisali strojnim kodovima – svaka operacija u računalu (zbrajanje, oduzimanje, neke složenije operacije) imala je neku vrstu strojnog koda. Ljudi su sami birali ovu šifru s pločice, svakakve adrese u memoriji, sve su to izbijali rukama i gurali u čitač - i sve se izbrojilo. Naravno, posao programera tada vjerojatno nije bio baš zanimljiv – praviti rupe – a s razvojem znanosti i tehnologije, naravno, počeli su smišljati svakakve „zanimljivije“ stvari. Na primjer asembler (Assembler), koji je već malo olakšao život.

Pa, kako je olakšao život? Umjesto pamćenja da postoji neka vrsta "čarobnog" koda za naredbu, korištene su svakakve riječi slične "ljudskom" engleskom - neki add ili mov - pa, a zatim registri ili memorijska područja, varijable s kojima su to potrebne za obavljanje operacija. No, jasno je da je to, općenito, zahtijevalo i dovoljno veliki mentalni napor da se ima na umu u kojem registru što leži, gdje koje varijable i što se općenito događa. Zašto se to dogodilo? Zato što su računala bila "glupa" i nisu mogla razumjeti ništa "pametnije". Zapravo, za prevođenje strojnog koda iz asemblera također je potrebno vrijeme, memorija (u to vrijeme, naravno, nije je bilo dovoljno).

Postupno je postalo jasno da je vrlo teško razviti tako velike složene programe. Programerova produktivnost u ovim naredbama bila je iznimno niska – to jest, pisao je nekoliko redaka dnevno (značajno), a svaki redak nije radio ništa posebno – neke jednostavne aritmetičke operacije. I ljudi su željeli jezike učiniti mnogo sličnijim ljudskom jeziku, posebno engleskom, kako bi bilo lakše i praktičnije pisati programe. I idemo!

Stari i mrtvi jezici

Fortran je postao jedan od prvih jezika. Inače, nokautiran je i na bušenim karticama - postojale su posebne bušene kartice za nokautiranje Fortran programa. Ali ako sad uzmete ovaj Fortran - po meni je čak negdje između 50-60. pojavio - i pokušajte nešto napisati na njemu, bit će vam jako neugodno, jamčim vam! Moderni Fortran i danas je živ, ali je dosta drugačiji od onoga što je bio.

Drugi jezici - sada ću napisati jednu stvar za koju ste vjerojatno čuli, tada samo na svim događajima na kojima govore o povijesti programiranja - ovo je COBOL. Bio je to jezik za pisanje poslovnih aplikacija. Što su poslovne aplikacije? Bilo kakve transakcije u bankama, nešto drugo, sve je to napisano u Kobolu. Kod nas, naravno, nije baš popularan. Mislim da ćete teško naći programera na Kobolu, u Moskvi. I negdje ne u Moskvi - s još većim poteškoćama. Ali, iznenađujuće, čak i prije 10 godina, više od polovice svih kodova koje je čovječanstvo napisalo bilo je napisano u Cobolu. I do sada se značajan dio svih bankovnih transakcija obavlja pomoću programa napisanih u njemu (COBOL), a ljudi još uvijek na njemu nešto pišu.

Postoji i "smiješni" jezik, zvao se Algol (68. verzija, koja karakterizira godinu njegovog nastanka). To je algoritamski jezik. Općenito, tamo su nešto mogli, ali sad nas ne zanima baš što mogu. I tu naš izlet u antiku i relativno nekorištene jezike može završiti i prijeći na ono što je još živo (i aktivno živi).

Stari, ali živi jezici

Algol je izmišljen u Europi, a Fortran se uglavnom koristio u Sjedinjenim Državama - nema velikih razlika. Koji je trend vidljiv? Isprva je sve bilo teško i za pisanje moraš biti gotovo inženjer, elektrotehničar, razumjeti gdje su zatvoreni kontakti i još nešto za programiranje. I tada je trebalo sjediti s lišćem i brojati uspomenu, paziti na nju. I postupno je sve postalo jednostavnije, jednostavnije, jednostavnije i onda još lakše za programera - da čovjek što manje misli, da što više radi automatski. Potkraj tog razdoblja (predavač ukazuje na Algol i Kobol) počinju se pojavljivati ​​jezici koji su u izvjesnom smislu "preživjeli" do danas.

OSNOVNI, TEMELJNI. Možda neki ipak nešto pišu na njemu, barem sam vidio da u nekim ustanovama predaju na QBasicu - takav plavi prozorčić gdje piše "1989". Općenito, on živi "s silom i glavom"! Izmišljen je kao jezik za ne-programere. U to vrijeme programer je bio vrlo specijalizirana profesija. I ovdje vam kažu: “Ovdje imamo cool Basic jezik, i svaka razumna osoba će uzeti i napisati program na njemu - lako”. Opet, taj BASIC i moderni BASIC je ogromna razlika. Svi ovi redovi su numerirani svakih 10, svakakvi GOTO i drugi horori - nemaju nikakve veze s modernim BASIC-om, a nemaju čak ni s BASIC-om od 89.

Još jedna smiješna priča je Pascal jezik, nadaleko poznat u sveučilišnim krugovima, uglavnom u Rusiji i zemljama bivšeg Sovjetskog Saveza. Iznenađujuće se koristio i nastavlja se koristiti kao nastavni jezik. U ostatku svijeta je rjeđi, ali je i živ i zdrav. Postoji takva osoba Wirth - ovdje je znanstvenik, teoretičar. Sudjelovao je u raspravi o Algolu, nije mu se svidjelo to što se dogodilo i smislio je svoj jezik - Pascal. A onda je tvrtka Borland (a prije toga i mnoge druge tvrtke - Apple je bio angažiran, posebice) uzela i sve pokvarila. Imao je lijepu teoriju, vitak – “sve će biti dobro” – i tamo su uzeli i trpali što ljudima treba za posao. Pa, nije išlo onako lijepo kako je želio.

I konačno,. Xi su izmislili inženjeri. Ako je Pascal izumio znanstvenik, onda su C izmislili Kernighan i Ritchie, oni su radili kao inženjeri u Bellu. Kako je do toga došlo? U to vrijeme bilo je nemoguće napisati bilo što sustavno na tim jezicima (predavač pokazuje na Fortran, COBOL, Algol). Što je "sustavno"? Na primjer, operativni sustav, neki drajveri, nešto drugo. Ovi jezici su bili za matematiku, za posao, za sve te stvari. A sve ostalo je napisano u Assembleru. Bilo je nekih jezika, sada su mrtvi, odnosno C jezik se nije pojavio odmah iz Assemblera, već kroz neke međustvari.

Što je bit? Kernighan i Ritchie su se voljeli igrati igračkom Asteroidi - leti svemirski brod, a postoje asteroidi, on puca na njih i oni se raspadaju. Imali su server na kojem su igrali, ali bilo je puno ljudi, a igračka je bila spora. I otkrili su negdje u svom uredu da imaju nekakvo računalo koje nitko ne koristi. No, postojao je problem - bila je drugačije arhitekture, a igra je napisana u Assembleru.

Prepisali su ga, naravno, čak su i izrezali neke značajke kako bi se na njemu igrali. Ali to ih je navelo na pomisao da prepisivanje za novu arhitekturu svaki put nije baš pametno. I odlučili su napisati jezik visoke razine koji bi bio prikladan za sistemsko programiranje, odnosno u kojem bi bilo moguće upravljati memorijom, u kojem bi bilo moguće razumjeti gdje se nešto nalazi i kako pristupiti tim dijelovima memorije . I tako se pojavio jezik C, koji je imao ogroman utjecaj na sve kasnije. Svi su oni (predavač ukazuje na Algol, Fortran i ostale spomenute jezike) imali veliki utjecaj, ali C - da...

Sukladno tome, to je bio glavni jezik u Unixu – operativnom sustavu koji je u to vrijeme bio još popularniji nego sada. A otprilike 80-ih godina situacija je bila otprilike ovakva (predavač pokazuje na Basic-u, C i drugim jezicima koji su spomenuti). Recimo da je sve to već potajno zamrlo (predavač briše reference na Assembler, Fortran i Algol)... A 80-ih su računala postala manja, pametnija, jeftinija, a ljudi su htjeli svakakve neobičnosti, kako bi živjeti još bolje, živjeti još zabavnije.

Jezici izvorni iz 80-ih

Jedna od prvih neobičnosti bio je jezik C ++. C jezik ima ogroman broj nedostataka (pa, stvarno je ogroman) - u njemu možete učiniti sve, uključujući pucati sebi u nogu, pucati sebi u nogu s fikcijom, u drugu nogu, pucati jednom nogom u drugoj nozi, općenito - što želite učiniti. No, u isto vrijeme, neke arhitektonske stvari se tamo rade prilično teško - opet, kao u Assembleru, moramo pratiti gdje smo, što i koju memoriju smo dodijelili; tu je cijelo vrijeme ta memorija negdje "teče" - to jest, odabrali smo, zaboravili obrisati, izbrisali pogrešnu stvar, izašli iz memorije, općenito - dobili smo hrpu problema.

C ++ je izvorno stvoren kao skup dodataka jeziku C koji bi olakšao razvoj. U to vrijeme je objektno orijentirano programiranje postalo moderno i ljudi su odlučili da se sve može opisati u obliku hijerarhije, odnosno da imate loptu (apstraktnu), od nje nasljeđujete nogometnu loptu, odbojku, drugu apstraktnu loptu . Tada je bilo moderno da "sada sve pišemo u obliku neke hijerarhije, i sve će biti u redu, život će se poboljšati, sve će biti dobro i sve." U određenom smislu, C ++ je implementirao ovaj objektni pristup - to nije bio prvi objektno orijentirani programski jezik, ali je postao prilično popularan i u njemu su se počele pojavljivati ​​sve vrste značajki. Istodobno, C ++ je zadržao gotovo potpunu kompatibilnost (u to vrijeme) s jezikom C, program napisan u C-u uspješno je kompiliran kao C ++ u 99% slučajeva i čak je radio na isti način. Namjera je bila olakšati prelazak s C na C ++.

Uz objektni pristup (u C++), brzo se pojavila Standard Template Library (STL). Mislim da su u školi oni koji su još učili Pascal otkrili da, prvo, tamo niste imali ugrađeno sortiranje (u drevnom, plavom Borland Pascalu, sada je već u modernim verzijama) - postoji primjer (izvor) sortirati, možete ga kopirati i zalijepiti. Ali ako ovdje želite sortirati cijele brojeve, ovdje želite realne brojeve, a ovdje su nizovi koji se mogu međusobno usporediti, morali ste napisati tri različite vrste koje rade potpuno istu stvar, samo imaju različite tipove podataka. To nije baš dobro, a predlošci koji se nisu odmah pojavili u C ++ znatno su olakšali ovaj problem. Odnosno, imali ste apstraktni program koji je uspješno sortirao nešto što se može usporediti jedno s drugim.

Skriptni jezici iz 90-ih

Ali vrijeme nije stalo, 80-ih se dogodilo puno zanimljivih stvari. Ali negdje na prijelazu iz 80-ih u 90-e, računala su postala toliko dobra da je već bilo moguće raditi vrlo čudne i vrlo neučinkovite stvari. Konkretno, to su bili skriptni jezici koji nisu kompajlirani u strojni kod, već interpretirani. BASIC se također tumačio neko vrijeme, ali ti su skriptni jezici bili namijenjeni uglavnom za obradu teksta - na primjer, Perl, Python (tada nije bio jako poznat), PHP, Ruby - to su skriptni jezici koji se nalaze u u jednom ili drugom stupnju još uvijek žive (svi su se uspjeli pojaviti prije 2000. godine, čak i mnogo ranije).

Idemo malo preko njih, jer su to specifične stvari i sada se koriste na mnogim mjestima. Koja je ideja? Ako ne kompajliramo, onda se može dopustiti puno više. Na primjer, program može pogledati svoj kod i nekako ga koristiti; ona zna što se u njoj događa i zahvaljujući tome može učiniti puno zanimljivih stvari.

Perl je bio dizajniran za obradu teksta - u to je vrijeme već bilo toliko memorije u računalima da je bilo moguće ubaciti neki tekst u njega i učiniti nešto korisno s tim tekstom (na primjer, brojati riječi, tražiti neku vrstu). Ali, po mom mišljenju, osmislili su ga ljudi koji su bili malo izvan sebe, jer postoji jedna šala o njemu: "Svaki skup znakova napisan je ispravan program u Pearlu." Po mom mišljenju, na njemu možete samo pisati, ne možete ga čitati. Kad pogledam kod u Perlu i pokušam nešto shvatiti, ništa ne razumijem. Možda bih da ga bolje poznajem nešto i razumio, ali kako sam čuo od onih ljudi koji još znaju kako, kažu da je lakše prepisati. Odnosno, programi su kratki i stvarno ih je lakše prepisati nego shvatiti što postoji i popraviti.

Otprilike u to vrijeme, sredinom 90-ih, pojavio se internet. Isprva je to bila pošta, stranice sa statičkim HTML-om, ali ljudi su tu htjeli dodati nekakvu dinamiku kako bi nam se sve odvijalo dinamički, mogli se ispuniti neki obrasci, knjige gostiju i još nešto. Sukladno tome, za to je bila potrebna neka vrsta interakcije, osmislili su protokol, kako on komunicira, i, što je najvažnije, generiranje tih statičnih (uvjetno) stranica koje će se "ispljunuti" korisniku na njegov zahtjev.

Općenito, ništa osim Pearl nije bilo prikladno u to vrijeme. Bila je loša ideja pisati rukovalac u čistom C ili C++. A zbog nedostatka boljeg jezika u to vrijeme (i dovoljno dugo), Pearl je bio popularan jezik za web razvoj. Naravno, razmjeri nisu usporedivi s onim što se sada događa.

PHP je nastao kao ... slučajno. Jedna osoba je brzo prestala s tim - napravio je nekakvu svoju stranicu, imao je nekakvu knjigu gostiju, nešto drugo, neke stvari. I napisao je skup makronaredbi neke vrste za Pearl, koji je izgledao kao C, jer je znao koristiti C, samo zato što mu je bilo tako udobno. I nazvao sam je Personal HomePage. Podijelio i rekao: "Ljudi, pogledajte koji sam komad napisao, ovdje je sve puno jasnije nego na Pearlu i možete ga urediti." I ljudima se svidjelo.

Onda je odustao od slučaja. Općenito, kao rezultat toga, ovaj PHP je počeo živjeti i s vremenom je postao mnogo popularniji od Perla. Ali ta njegova "porođajna trauma" (ideja je poput skupa makronaredbi za Pearl) s njim se poprilično našalila. Jezik se pokazao čudnim. Odnosno, razvijao se sam, nitko ga nije dizajnirao, nitko nije upravljao razvojnim procesom (ni tvrtka, niti bilo koja osoba), ali bilo je mnogo grupa, od kojih je svaka pila ono što im se sviđa. Kao rezultat toga, funkcije se tamo nazivaju drugačije, nema čak ni stila, sve je podcrtano, općenito, svejedno, postavke su tu i tamo, a kako će sve to funkcionirati nije baš jasno. Ali možete sjesti i pisati u PHP-u za dva sata, jer je on to tako namjeravao.

Python i Ruby: Ruby je sada manje popularan, Python je nekako bolje "izrezan", ajmo o tome kasnije. Jasno je da su u to vrijeme to bili (predavač ukazuje na Perl, Python, Ruby, PHP) visokospecijalizirani jezici za visokospecijalizirane svrhe. Općenito, tada se u njima nije pisalo sistemsko programiranje, nikakva poslovna logika, a sada ne radi puno toga.

Sastavljeni jezici iz 90-ih

Ići ćemo otprilike u isto vrijeme, ali u drugom smjeru. U to vrijeme koristili smo C ++ za gotovo sve što je trebalo napisati ne za web, ne za obradu teksta, već za jednostavne aplikacije, za operacijske sustave, za igračke - općenito, za bilo što. Ali C++ je zapravo jeziv jezik. Zašto? Jer, kao prvo, naslijedio je sve probleme sa C zbog kompatibilnosti unatrag. Tamo se još uvijek moglo ubiti na milijun različitih načina, istih onih koji su bili u C-u (naravno, dodani su novi načini u C++). U isto vrijeme, ako sve napišete dobro i ispravno, kako su zamislili autori C++, tada se, naravno, nije bilo moguće ubiti starim metodama, a čini se da ih je bilo manje. Međutim, imao je vrlo neobičan model objekta. Podjela programa na module, na dijelove neke vrste općenito dolazi iz C (ako možete napisati uključiti u C ili C ++ - zapravo, zamišljeno je kao jednostavno umetanje teksta biblioteke u vaš program, u kraj, kad napišeš hrpu inkluzija, imaš sve - ako je "primitivno", kao što je bilo na samom početku - sve se ubaci u jednu datoteku i onda se sve to užasno dugo kompajlira, jer ide nekoliko puta, verzije su još bolje.

Općenito, C ++ ima puno nedostataka. Kvalifikacije programera su morale biti visoke da bi pisao na C++, a takvi programeri su bili skupi (i obuka i nešto drugo, odnosno teško je pronaći programere na tržištu, moraju puno platiti, pa, općenito, to nije slučaj...). A naša računala sve brže broje, sve su jeftinija, ljudi si kupuju nova računala i žele više aplikacija, više igračaka za telefon, općenito - više radosti.

Tako se pojavila Java (Java). Tu je također povezana prilično smiješna priča kako se ime pojavilo na ovom jeziku. Ima programera, stalno piju kavu i u to vrijeme je bilo moderno piti kavu koja je rasla na otoku Javi. Jezik je zamišljen kao jezik za ugradbene uređaje, posebno za aparat za kavu. Ovako je nastao naziv...
Što je počelo s njom, što je bilo dobro u njoj i zašto je stekla toliku popularnost? Prvo su se potpuno riješili Sishnyne ostavštine. Bez pokazivača, mnogo manje načina da odbijete bilo koji dio tijela i razbijete sve. Drugo, uveli su mnogo novije ideje u smislu objektnog modela - to jest, C++ se pojavio mnogo ranije od Jave i koristio je arhaičniji, "divlji" model objekta. Eto, ovdje (predavač pokazuje na Javu) je već tada bilo više smišljeno, a u teoriji su ljudi mislili, a u praksi su primjenjivali i radili sve puno kul.

I na kraju, treći. Naši Java programi nisu sastavljeni u strojni kod, već u kod za virtualni stroj. Odnosno, imali ste JVM virtualni stroj (VM) - Javovsky. Vaši su programi skupljeni u nekakvu međuprezentaciju i onda su, uz pomoć ovog stroja, već izvršeni. Što je to učinilo? Prvo, usporio je, kao drugo, strašnom je silinom pojeo memoriju, a treće je bio prenosiv bilo gdje (teoretski) - čak i na aparat za kavu, čak i na mlin za kavu, čak i na računalo, čak i na mobitel. S jedne strane, ovo je dobro, odnosno upravo ste napisali implementaciju virtualnog stroja, a zatim svuda pokrećete svoje Java programe. No, s druge strane, loše je što je isti telefon u to vrijeme imao malo memorije, slabe performanse, a sve je to dodatno počelo zatupljivati ​​i usporavati.

Ali ni to nije glavni razlog zašto je jezik uopće izmišljen. Jezik Java je izmišljen kako bi se smanjili zahtjevi za kvalifikacijama programera. Odnosno, lošiji programeri mogu pisati dobre programe u Javi, jer Java ne dopušta pisanje loših programa - tamo nema sredstava za pisanje loših programa. Tamo možete pisati samo dobre programe. Pa u shvaćanju tvoraca jezika.

Odnosno, ako u C, u C++, u Pythonu, na bilo čemu, možemo otopiti nekakvo jezivo smeće iz našeg projekta, gdje imamo sve pomiješano, skupljeno satima i tamo još nešto. U Javi možete otopiti i kantu za smeće, ali za to se već morate malo potruditi. Odnosno, po defaultu ne ispadne "gomila smeća", nastaju drugi problemi, da je tu nešto naslijeđeno ili naslijeđeno - općenito, na jedan suvisli red dolazi deset ne baš smislenih. S druge strane, možda tako srednje vješt programer može napisati prilično kvalitetan kod.
Skoro smo pri kraju. Kod nas se sljedeće što se pojavilo je .Net (doći će), dobro, a posebno nas zanima C# (gotovo isto [predavač pokazuje na Javu], odnosno postoje razlike u detaljima, ako birate između njih - pogledajte gdje platite više novca).

I još jedna stvar je JavaScript. Nema nikakve veze s jezikom Java, pojavio se iste godine - riječ je bila moderna, licencirali su zaštitni znak za korištenje.

Na što je najvažnije obratiti pažnju? (Predavač crta strelice od C++ do Java, .Net, C#, JavaScript i PHP). Da biste napisali jednostavan program na jednom od ovih jezika, i na mnogim drugim - ako znate C++, općenito ne morate znati ništa drugo - uzmete i pišete na C++, a zatim na početku dodate dolare , nešto drugo radi male stvari i počinje vam raditi na bilo čemu (predavač pokazuje na jezike kojima su dodijeljene strelice iz C++). Odnosno, izrazito su slični u nekim jednostavnim stvarima. Ako rješavate neke školske probleme, obrazovne zadatke, nešto drugo (ne osmišljavate veliki projekt – imate jednu datoteku koja čita brojeve, prikazuje brojeve u konzoli, radi nešto drugo), onda gotovo da i nema razlike između tih jezika. Jasno je da su JavaScript i PHP specijalizirani, imaju sve malo drugačije. I ovdje (predavač ukazuje na Javu i C #) općenito je vrlo mala razlika.

Od tada su se pojavile razne druge zanimljivosti, ali nije jasno hoće li uspješno živjeti ili umrijeti. Što sada koriste, za koje zadatke?

Odabir jezika ovisno o zadatku

Recimo da ste suočeni sa zadatkom pisanja upravljačkog programa za video karticu. Koji jezik ćete koristiti danas? (Kliknite iz publike: Java!) Zašto... Java je super, ali zašto ne Ruby ili PHP? (Predavač govori sarkastično.)

Programiranje na niskoj razini

Ako pišete nešto niske razine, onda je C najbolji izbor, ali zapravo sam čuo nešto (ali nisam vidio) da se C ++ koristi za to. Ali jedva vjerujem u ovo, jer u C-u možete jasno kontrolirati - budući da ste dali toliko bajtova memorije, bit će tako i tako. A u C ++ (STL), kako se implementira niz? Pa, nekako implementirano. I na kraju ne znamo kako i što se tamo događa, možda će nam ponestati memorije na našoj video kartici ili će se dogoditi nešto drugo. Dakle, C još uvijek živi i ne umire, takvi zadaci programiranja sustava i dalje postoje - napišite operativni sustav, napišite drajvere, napišite nešto drugo - C je odličan za ovo. Osim toga, sada postoje razni uređaji (Internet stvari obećava da će uskoro doći) koji žive na baterije (i, naravno, bit će ih milijuni, sve će biti obješeno s ovim Internetom stvari), trebali bi biti vrlo jeftini i troše vrlo malo električne energije. Sukladno tome, bit će 2 KB memorije, procesor od 5 kHz, pa, naravno, neće uspjeti u skorije vrijeme ubaciti nekakav virtualni stroj ili skriptni jezik, što znači da morate nešto napisati u C. Pa čak i sada npr. kalkulacije na video kartici (OpenCL ili neka druga tehnologija) - ne smisle im novi jezik da im napišu programe - tamo rade C uz neka velika ograničenja. Samo zato što ljudi već znaju kako, zašto učiti nešto novo? Formalno, ovo je vjerojatno također, u određenom smislu, C.

Web programiranje

Recimo da želite napisati novi Facebook (društvena mreža). Na čemu ćeš ovo napisati? (Iz publike govore o HTML-u i CSS-u.) HTML, CSS je dizajn, a mi želimo tu moći dodavati fotografije, prijatelje, ostavljati komentare.

Za dio skriptiranja - to jest, ono što će se dogoditi na strani klijenta - to je JavaScript. A ponekad se JavaScript generira na drugom jeziku i šalje (događa se da se skripta generira... jer je ponekad lakše upravljati nekim promjenama u logici na ovaj način).

Iznenađujuće, to je napisano u PHP-u - i Facebooku i mnogim drugim velikim projektima. Naravno, morao sam napisati neke svoje stvari kako bi i dalje funkcioniralo kako treba, a ne kao što je "tyap-blooper", ali oni su to učinili. Uglavnom, nije bitno u što pišete, ali ne preporučujem Perl. Ovdje i sada, naravno, nitko ništa ne piše ispočetka za web. Svatko piše nekakav okvir ili nešto slično. Online kupovina? Skinuli smo okvir za online trgovinu – eto, to je to, napisali smo internetsku trgovinu.

Poslovno programiranje

Zatim, želite napisati neku dosadnu bankovnu aplikaciju. Ili, na primjer, imate li nekoga tko prodaje sim kartice? Možda ste ikada kupili telefon ili nešto drugo pa su vam rekli: "Sustav visi, ne možemo ništa." Na što ćete napisati takvu prijavu? (Poklič publike o Pythonu) Ne možeš tako nešto napisati u Pythonu, što si ti?! Ne isplati se pisati ništa za posao u Pythonu. Zašto? Jer kada nešto napišete u Pythonu, ne možete pronaći značajan broj grešaka u procesu pisanja. Python se dinamički tipka na sve moguće načine i općenito tamo možete sakriti bug tako da iskrsne u takvoj situaciji da ne možete ni shvatiti što su ti pokvareni korisnici tu radili, da vam je sve puklo. Odnosno, bolje je pisati male skripte za sebe u Pythonu - razumijete što se tamo događa i što se radi. Pa, ili nešto što nije šteta izbaciti: hoćeš nešto izvaljati prije konkurencije, pa što ako će se svaki drugi put pokvariti. Napisali ste na Pythonu i to je to – preuzeli ste tržište. A ako nešto dugo pišeš npr. nekakvu bankovnu aplikaciju (pa da odobrava kredite, nešto drugo) - to napišeš u Javi. Jer postoji ozbiljna stvar, komadići papira, novac, dokumenti, nešto drugo, ali ne možete u tome zabrljati toliko da će se sve pokvariti, inače će se ljudi uvrijediti - njihov novac je otišao i nikuda nije stigao, u trenutku kada se niz pretvorio u broj ili obrnuto. Dakle, to znači da metodično uzimate Javu i pišete, pišete... Pa, ili na.Netu, takve se situacije, u principu, također događaju. Tu, naravno, također možete naići na probleme, ali vjerojatnost za to je ipak nešto manja.

Programiranje za vojsku, zrakoplovstvo

Sada zamislite da su vas odlučili poslati na Mjesec u raketi. Što biste radije upotrijebili za pisanje koda koji kontrolira raketne motore? Idemo pogledati. Ovo, vjerojatno (predavač pokazuje u Perlu, Pythonu, PHP-u, Rubyju), ne vrijedi - usporava, događa se nešto drugo, pa, općenito, ne bih pristao letjeti na takvoj raketi. U C++? Iskreno govoreći, ni meni ne bih vjerovao, jer postoji previše načina da se ubijete u C ++. Kad si tamo negdje u svemiru, nije baš dobro.

Možda u Javi? Čini se da je tamo sve prilično pouzdano, a arhitektura dobra, nema divljih tipova, nema viška memorije. Recimo da je došao najpresudniji trenutak, a naša Java je odlučila skupljati smeće umjesto nas. Moramo sletjeti, usporiti, a ona kaže: "Ne, smeće ide." Općenito, ni ne baš dobro.

Da budem iskren, radije bih dao ovaj program napisan na Pascalu. Ja, naravno, ne volim Pascal, ali nekako bi u takvim stvarima bilo jako cool.

Korištenje nekoliko jezika odjednom za razvoj softvera

Pa, što bi uopće trebalo reći o modernim jezicima. Danas mnogi projekti ne žive ni na jednom jeziku, odnosno neki od njih žive na jednom jeziku, neki na drugom, a neki na trećem. Na primjer, ako imate neku vrstu web aplikacije koja obrađuje divlje količine informacija, pristup diskovima (čak ni bazama podataka, oni su toliko ogromni da čak ni baza podataka ne podržava neku već napisanu) vjerojatno su napisani u nekim tada niskim -razina C za nevjerovatno brzo pisanje na disk i sve to. Naravno, pisati cijeli projekt u C-u se ne isplati. Možda postoji neka srednja logika napisana u Javi koja poziva Cis funkcije za brze pozive. Pa, frontend (ono što korisnik gleda), naravno, već je napisan u nečemu, u nekim skriptama, u nečemu što se izravno izvršava od strane preglednika (JavaScript). I sve to živi zajedno i uspješno djeluje.

Što ljudi ponekad rade u razvoju nekih aplikacija, čak i velikih? Uzimaju i napišu prototip u Pythonu (kako će sve to funkcionirati), skiciraju, promišljaju nekakvu arhitekturu. Pisanje na njemu je stvarno vrlo brzo - ubacili su prototip, eksperimentirali s njim i rekli: “Wow! To je tako cool! " I potpuno prepisan. Činilo bi se da su posao odradili dvaput, trebalo je duplo duže (pa, jedan i pol). Ali ne! Često se pokaže da ova metoda nije loša, jer ako odmah napišete nešto, na primjer, u Javi, a zatim odlučite: "Ne, idemo refaktorirati, potpuno promijeniti arhitekturu i sve to", - onda ćete potrošiti 10 puta više vremena... Takve stvari također postoje i žive.

Uvjeti za uspjeh bilo kojeg programskog jezika

Sada razgovarajmo o tome zašto neki zgodni jezici nisu preživjeli ili žive u vrlo ograničenom prostoru. Kada je Wirth vidio što su loše tvrtke Apple, Borland i sve to učinili njegovom Pascalu, smislio je još bolji jezik - Oberon. Bilo je jednostavno divlje minimalistički - to jest, bilo je vrlo malo naredbi (Strings? Zašto su nam potrebni nizovi? Napravit ćemo niz znakova!). Pa mu nešto nije išlo, u mjeri u kojoj je moglo.

Još jedna stvar. Američka vojska ih je zamolila da razviju i cool jezik na kojem sve funkcionira i sve se može napisati. Rezultat je prilično monstruozan jezik zvan Ada, na kojem, međutim, ipak nešto pišu, ali opet - samo za vojsku.

U čemu je problem? Zašto su neki jezici poput Pythona, kojega nijedna tvrtka u početku nije podržavala, preuzeli tržište. PHP, koji je također loše dizajniran, također je sam preuzeo i zauzeo tržište (većinu). A uložene su svakakve milijarde dolara (predavač pokazuje na Adu) i nikamo nisu otišli, ništa se nije dogodilo. Koji je razlog tome? To je zbog činjenice da oko ovih jezika nema infrastrukture. Odnosno, jezik je možda izvrstan, ali sve dok nema dokumentacije, dok ne postoji zajednica koja može odgovoriti na pitanja (na Stack Overflowu) i, na kraju, što je najvažnije, sve dok nema velikog broja knjižnica, jezik se ne pali. To jest, vi ste, na primjer, htjeli napisati web stranicu na Oberonu. Zašto ne? I počinje zbrka... Ne možete podići svoj web poslužitelj na Oberonu da biste lagano testirali, ne možete spojiti nijednu knjižnicu, jer one nisu na Oberonu. I sve se to radi preko nekakvih štaka, sile odlaze, i općenito pljuješ i pišeš svoju stranicu na čistom C umjesto Oberona. A oni jezici koji mogu koristiti biblioteke drugih jezika dobro žive. Isti Python na onim mjestima gdje usporava. Pa, općenito, svakakve standardne stvari poput sortiranja i nečega drugog su napisane u C-u, a on (Python) zna kako s njima komunicirati.

Java također ima izvorno Java sučelje. Ovo je u biti C, odnosno tamo (po mom mišljenju, žele zabraniti cijelo vrijeme, ali čini se da još nisu zabranili) ovi jezici mogu komunicirati s već postojećim bibliotekama (uglavnom onim Sishny). I zbog toga uzimaju i rade. Ideja koju vam pokušavam prenijeti je jasna, zar ne? Nemojte pisati na jezicima koji ne znaju kako povezati C biblioteku. Pa, ako želite uživati ​​u nečemu cool. Pa, i postupno su oni (jezici) obrasli svojom infrastrukturom. I žive nekako dobro.

Programski jezik i karijerno vođenje

Sada razgovarajmo o tome kako razumjeti što želite u životu. Što su cool stvari? Možete napraviti neku vrstu programiranja sustava, zar ne? Super je brojati ove bicikle tamo, želite pokrenuti kvadrokoptere, neke kamere i još nešto za raditi. Onda je C vjerojatno vaš izbor.

Ako želite pisati, možda i ne najzanimljivije aplikacije u životu, ali vam je super da ih dizajnirate, razmislite o svemu i zaradite puno novca za sjedenje i dosadu većinu vremena (za ovo morate platiti ako vi ste kvalitetna miss), evo ih - Java, .Net. Odeš raditi u banku, pišeš, ideš na posao u devet u bijeloj košulji, dobiješ dobru plaću i pišeš po preporuci najboljih Java-izvora, .Net-ovce i sve to...

Ako želite pisati bilo koju aplikaciju, neki preglednik, neke igračke, nešto drugo, onda je C ++ izvrstan. Ako želite pisati web stranice, evo ih, na jezicima po vašem izboru (predavač pokazuje Perl, Python, PHP, Ruby), nema velike razlike. Jedino što će PHP umrijeti prije Pythona, pa ako ste lijeni učiti nove stvari, onda naučite Python. Nećete primijetiti veliku razliku, ali izdržat ćete duže.

Nejasno je i što se događa s Ruby. Pa, možete i PHP, ako ste ga već naučili, jer su toliko jednostavni da ne treba toliko dugo za ponovno učenje.

I, konačno, postoji još jedno područje primjene programskih jezika - to je kada ih koristi ne-programer. Recimo da ste matematičar, fizičar, kemičar, analitičar, bilo tko, i trebate brzo nešto izračunati, analizirati neke podatke (za biologe npr. koliko arktičkih lisica živi na Zapovjedničkim otocima). Sve to možete ugurati u tablicu u Excelu ili analizirati nečim. Python je također dobar za to, zna raditi s tekstom, a knjižnice su pune svih vrsta, statističkih i svega toga. Ako želite napraviti neku vrstu strojnog učenja, obraditi neke podatke, predvidjeti, onda se i to sada najbrže radi u Pythonu. Međutim, treba napomenuti da su zadaci vrlo različiti. Na primjer, ako želite trenutno trgovati na burzi u uvjetima kada se kotacije stalno mijenjaju, onda bez obzira na to koliko cool Machine Learning pišete u Pythonu, ljudi koji imaju to napisano u nečem bržem će imati vremena kupiti sve ranije, dok ćete biti pobrojani, čak i ako su njihovi algoritmi lošiji. Stoga čak i ovi zadaci strojnog učenja (neki od njih) zahtijevaju visoke performanse (i iznimno visoke), a prema tome i druge jezike.

Jedini način da znate što želite je isprobati sve. Sada ću to reći kao jednu od vizija kako možete isprobati sve. Kako postati programer, i to sretan? Tako. Počinjemo od nule. Ovdje u školi učite matematiku, ruski jezik i ostale obavezne i izborne predmete, a vaše znanje iz područja programiranja trenutno se odražava na ploči (predavač pokazuje na praznu ploču). I želite postati sretna osoba, raditi ono što volite, zaraditi puno novca i ništa sebi ne uskraćivati ​​i biti sretni.

Jedan od načina da to učinite. Postoje, naravno, svakakve inspirativne priče o ljudima koji uopće nisu išli na fakultet, ili su ih napustili i postali milijarderi, vlasnici tvrtki i tako dalje. No, treba napomenuti da je većina ljudi koji možda nisu postali milijarderi, ali i dobro žive, u nekom trenutku ipak završila fakultet.

Kakva je naša situacija s upisom na sveučilište (sada studirate u školi)? Dok ste u školi, morate shvatiti da je sljedeći korak upisati se i pobrinuti se za to. Položite ispit ili pobijedite na olimpijadi. Na ispitu možete koristiti Pascal, C ++ (uključujući čisti C), Python (neću ih dalje spominjati). Na olimpijadi - isti Pascal, isti C ++, isti Python (sada ćemo govoriti o njegovim problemima) i, najčešće, postoji Java. I dalje se sve može dogoditi ovisno o olimpijadi, ali ne i o suštini.

Kako izgleda graf distribucije jezika na Sveruskoj olimpijadi iz informatike? Ljudi koji sudjeluju na Sveruskoj, najkul olimpijadi, o čemu pišu? To izgleda ovako (ovdje znači Pascal, a ovdje je oko 2000, a ovdje je oko nule, ovdje je C++, a ovdje je 2015).

Godine 2000. gotovo nitko nije pisao na C ++. Petnaest godina kasnije, gotovo nitko ne piše na Pascalu, unatoč činjenici da je Pascal moderan. Ovo je jezik koji može učiniti gotovo sve isto. Samo su svi postali prelijeni da bi to naučili, svaki novi trend, i svi nastavljaju pisati u Borland Pascalu, koji naravno ne može ništa. U C ++ ljudi pišu neke algoritme za sortiranje (STL) - super, napisali su sort () i to je to. Na Pascalu, na regularnom, na starom - to je problem. Napisali su neki skup (potreban) - super, napisali su ga u C++, u Pascalu opet muka je kontinuirana. Na novim Pascalima, naravno, možete to učiniti, ali oni zapravo koštaju. Možda niste primijetili, ali jest.

Postoji i Java, ali Java ima puno slova. To je za velike projekte, ali za male jednokratne programe ispada prilično loše, jer ima puno nepotrebnih slova. Ali također neki ljudi pišu, možete naučiti pisati na tome. Ali na Jedinstvenom državnom ispitu nije i još će se najvećim dijelom morati položiti Jedinstveni državni ispit.

Što je najbolje za ispit? Za ispit je najbolje (ako ništa ne znaš i ako te ništa ne uče u školi) naučiti Python. Neki zadaci ispita na njemu su savršeno riješeni. Na olimpijadi se, općenito, pokazalo da se C ++ (koristi), jer je Python jako spor, tu nije sve riješeno.

Dakle, proučili ste neki mali podskup jezika i neke algoritme (eventualno) i riješili puno problema kako biste dobili diplomu svoje olimpijade i otišli na sveučilište da biste stekli visoko obrazovanje.

Sada ću vam ispričati kako mi u HSE-u gradimo tečaj, kojim redoslijedom su jezici, kako se predaju primijenjena matematika i informatika na Fakultetu primijenjenih znanosti, što Yandex i ja radimo. U prvom semestru - Python (ne u cijelosti, o tome kako treba učiti u školi) i C ++ (širi, puno širi nego što se inače uči u školama). Odmah da vam kažem da se ne uplašite, ako odjednom poželite ući, recite: „Zašto, ja sve to već znam, zašto ću negdje studirati? Radije bih otišao negdje drugdje." Za one koji već znaju dobro programirati, postoji mogućnost izravnog proučavanja algoritama i to na prilično teorijskoj obuci. Ne gledamo ih sada, ovo (pokazuje na ploču) je za one koji programiraju srednje ili nikako.

U prvom semestru uče osnove Pythona, samo da ljudi nauče programirati i da se nitko posebno ne uvrijedi. Python se rijetko uči u školama, uglavnom ljudi dolaze sa znanjem Pascala ili C++. Uglavnom čak i Pascal, ako se radi o masovnoj školi. Pa da se nitko ne uvrijedi, svi uče novi jezik (kao da su ravnopravni). A C ++ jednostavno zato što onda možete otići bilo gdje iz C ++.

Zatim slijedi kolegij „Algoritmi“ i poseban kolegij projekt. Klasični algoritmi s implementacijom. Nije da smo u teoriji nešto uzeli, izračunali složenost. Na predavanju smo uzeli, izračunali složenost, na seminaru - uzeli, implementirali algoritam. Projekt je o tome da učenici rade nešto završeno. Na primjer, jedan od projekata je bio: prebrojati ... Recimo da imate puno stanova u Moskvi i razumijete: „Oh, imam puno nepotrebnih stvari, iznajmit ću neke. I određuju cijenu, a nitko ne želi od vas iznajmiti stan – vjerojatno preskupo. Ili daju nekakvu cijenu, odmah ga skinu i pomisliš: “Ma, vjerojatno sam ga jeftino prodao”, pa se i ti naljutiš. Odnosno, trebalo je izračunati koliko je koštao najam stana? Unosite podatke - oni za vas izrađuju procjenu. Takva stranica, koja se sastojala od nekoliko stvari: uzeti prijedloge, analizirati, primijeniti nekakav algoritam strojnog učenja (vjerojatno) nepretenciozan i napraviti lijepo web lice u kojem možeš nešto odabrati, ubaciti nešto, nekoliko metara, bilo koji broj soba , broj sauna, broj jacuzzija u vašem stanu i okvirno procijenite trošak. Odnosno, neka gotova, ne baš komplicirana stvar. Ovdje to znači (predavač pokazuje na tečaj o algoritmima) tako snažan C++, s konzolnim I/O. Eto, ovdje (predavač pokazuje na natpis "projekt") je nešto pod vodstvom mentora, eventualno s bazama podataka, možda s raščlanjivanjem tekstova i s nečim drugim.
Zatim slijedi treći semestar – kolegij pod nazivom „Računalni sustavi“. Postoji dosta asemblera za razumijevanje (vrlo malo) i onda, nešto slično čistom C-u i interakciji s operativnim sustavima, programiranje sustava u biti. A projekt za seminar također je nešto na temu svih mrežnih interakcija, prilično niske razine: razviti neki uslužni program, na primjer rsync (sinkronizacija, možda znate. U čistom C-u, manje-više, napišite analog rsync, koje ćete imati preko mrežnih mapa za sinkronizaciju sa svim pristupima datotekama i tako dalje).

I konačno, četvrti. Ne znam ni kako bih to nazvao, ovo je takav vinaigrette tehnologija potrebnih za pravi razvoj, na primjer, za razvoj weba. Odnosno, radi se o praktičnoj primjeni baza podataka, opet nešto slično onome što je urađeno u projektu (predavač ukazuje na projekt 2. godine), ali dublje. Odnosno, takve manje-više konkretne stvari su već praktično programiranje. Paralelno s tim, postoji bilo kakva teorija, pa, ovdje se bave i znanošću.

I nakon dva tečaja, ljudi se raziđu da rade ono što ih zanima, jer ova stvar pokriva prilično široko takve osnove programiranja i ljudi u ovom trenutku već razumiju da se ne žele ni na koji način baviti računalnim sustavima (oni npr. nije volio sistemsko programiranje), ali se žele pozabaviti nekim teoretskim algoritmima, poteškoćama u proračunu, smišljanju nekih novih stvari, distribuiranih ili nečim trećim. Ili, naprotiv, misle da ovdje nemaju baš puno ( predavač pokazuje na prvu liniju tečaja s Pythonom i C++) Idi onda ( Predavač pokazuje na treću liniju kolegija, sa sustavnim programiranjem) - kako vam se ne sviđa, brojite bajtove i postavljajte razna ograničenja za čitanje-pisanje, radite streamove, niti i nešto drugo. I u skladu s tim ljudi biraju neki smjer i uče. Odnosno, u principu, da ne biste razvili "sindrom pačeta" - prvo ste vidjeli svog Pascala pa sada recite "Pascal je moć"; ili napredniji - vidjeli ste C ++ i počeli govoriti o svima da je C ++ moćan, a sve ostalo nije baš dobro.

Ovdje to trebamo sagledati šire (predavač pokazuje na popis kolegija na ploči) - to je jedna od metoda koja je odabrana, posebice na HSE-u (pojavila se nedavno, pa je dosta moderna). Postoje i drugi načini da se međusobno upoznate. Na drugim dobrim sveučilištima malo drugačijim redoslijedom i drugi naglasci su stavljeni. Ali također pokušavaju upoznati ljude sa svime što imaju.

Kako programer traži posao

ti si ovo ( predavač pokazuje na popis kolegija) sve je radio, studirao na sveučilištu, učio nešto produktivnije još dvije godine i trebaš ići na posao. Kako birate nešto s čime ćete raditi? Prvo si sve upoznao, otišao negdje duboko i već znaš što voliš. Morate odabrati ono što volite prirodno. Jer ako voliš, uložit ćeš energiju, imat ćeš motivaciju i općenito će sve biti u redu. Jer nije riječ samo o novcu, već o tome da vam bude zanimljivo i ugodno. Pa, a ako želiš ući u kul tvrtku, zaposli se. Kakvu bih osobu osobno volio vidjeti? Dođe mi, recimo, sto studenata – moram po dvoje ili jednog na posao. Zašto dolaze, uopće ne razumijem tko su, što su, kako su? U najboljem slučaju, pokazat će mi diplomu koju su dobili na fakultetu, a ja ću reći: “Jao! Ovo je kul diploma, ali ovo nije tako cool!" A mogao bih i pogriješiti, usput. Možda je osoba imala puno slobodnog vremena i puno bolje naučila.

Što bi bilo super? Prvo, neki open source projekt koji ste napisali od početka do kraja. Poželjno je, ako radim nekakvu infrastrukturu da se podaci brzo čitaju, ili nešto drugo, onda bi me, naravno, zanimalo da mi napiše nešto open source. Nije napravljena web stranica, nego nešto na temu. Zašto me ovo zanima? Mogu pogledati tvoj kod, vidim koliko si se često bavio, vidim kako si reagirao na bugove korisnika, bugove programera koji ga koriste - sve je zapisano, gledam sve i mislim: „Opa, ovaj bug nije bilo dvije godine. zatvoreno, evo ti si neljubazno odgovorio korisniku, onda ne uzimam nešto drugo”. Odnosno, ovo je vaš osobni projekt.

Dalje, što bi još bilo cool? Volio bih vidjeti kako ste radili timski rad. Odnosno, dođeš mi na razgovor i kažeš: „Dečki sa fakulteta i ja smo napravili dobru prijavu. Tamo sam pravio bazu podataka, tamo su pravili nekakvu mobilnu aplikaciju, a radili smo i dečko, cura dizajnerica, dečko na tehničkoj podršci. Bilo nas je petero i napravili smo sjajan projekt." Pa vidim što je zapravo tvoj projekt, kažem: "Koji je tvoj?" Opet pogledam kod i shvatim da znaš raditi u timu s ljudima.

Nije programer onaj koji sjedi sam (takav indie) u garaži, negdje s ugašenim svjetlom, ni s kim ne priča, hvata bradu i piše. Svejedno, postoji neka vrsta interakcije s ljudima. Sa šefom, na primjer, koji vas ponekad može opsovati (šefovi, oni su takvi, nisu uvijek ljubazni). A vidim da znaš raditi s ljudima i veseli me ako imaš kakav-takav dobar tim. Čak i ako nije dobro, bolje je nego ga nemati.

Što bih ja osobno još volio? Ako ste se pokazali u velikim projektima. Na primjer, nešto smo predali Linux kernelu, ako se bavite programiranjem sustava, popravili smo neki bug. Odnosno, pokazali su da možete čitati tuđi kod i da ste u mogućnosti napraviti neke promjene u njemu. Gledam: "Oh, doista, shvatio si nešto komplicirano i popravio neke greške!" I počinjem biti jako sretan zbog toga. Jer imam... pa ne znam... moj programer je dao otkaz jer su mu konkurenti nudili veću plaću, a ja moram hitno nekoga ušutkati - tebe. Izgledam kao da si pisao samo od nule, ali ne znaš čitati i uređivati ​​tuđi kod i uzrujam se.

I na kraju, ovisno o konkretnoj poziciji, postoje razne druge stvari. Ako ste analitičar posla, želio bih da rješavate zadatke analize podataka na Kaggleu. Ako dobiješ posao na nekim algoritamskim stvarima, volio bih da radiš neke algoritme u sportskom programiranju. I na kraju, ako ste razmišljali o struci, pročitali kako se vode intervjui, vidjeli ste da neki ljudi tamo izražavaju veliko nezadovoljstvo: “Došao sam, pitaju me koji mi je hobi. Sjedim kao sova i ne odgovaram, jer nemam hobi “- i misle da to rade HR. Zapravo, pokušavaju shvatiti koliko ste prijateljski raspoloženi i primjereni. Ako ste neprijateljski raspoloženi i neadekvatni, onda koliko god bili genijalni i radoholičar, teški stručnjak s velikim znanjem, timu će biti teško raditi s vama, a projekt nećete izvući sami. Osim toga, čak i ako se rastegnete, možete zamisliti kakvo opterećenje za tvrtku. I da ćeš sutra doći i reći: "Povećaj mi plaću 10 puta, inače ću te ostaviti." Razumljivo je da tvrtke ne žele doći u ovu situaciju. Stoga je odgoj primjerenosti i dobre volje u sebi jednako važan (barem) kao i razvoj neke vrste profesionalnih vještina.

Da rezimiramo, što možete reći? Koji su jezici dobri, a koji loši? Pa, unutar grupe jezika, na primjer između Ruby, Python i PHP, koji odabrati? Naravno, točan odgovor je Python, ali zapravo razlika između njih je u broju dopuštenih grešaka, u količini nečeg drugog – 5%, pa, možda 10%. Odnosno, ako već imate gotov projekt napisan u PHP-u, onda nitko pri zdravoj pameti neće reći: "Idemo prepisati sve u Pythonu." Oni će reći: "Unajmimo više PHP programera i nastavimo pisati u PHP-u." Super, to nije loš izbor. Jasno je da ako iznenada počnete pisati projekt, onda bi možda bilo pametno odabrati Python sada. Iako, i to ovisi. Možda imate hrpu jeftinih PHP programera na tržištu, ali oni na Pythonu su skupi i mislite: "Da, tehnologija je hladnija, ali uštedjet ću novac na gotovim programerima." I to je sve, super, već si došao i tamo radiš.
Kako da biram između Jave i C++? Da, isto se događa. Mislim da ćete dok se odlučite na kojem jeziku započeti novi veliki projekt steći znanja iz svog profesionalnog područja i moći ćete napraviti pravi izbor. Trenutno se još ne morate odlučiti za taj izbor, pa vam savjetujem da radite što želite.

Osnove, kao što sam već rekao, same, same osnove programiranja (što je funkcija, što su ako je, za, nizovi, nešto drugo) mogu se naučiti manje-više na bilo kojem jeziku. Na primjer, u C ++, jer izgleda kao puno stvari, a specifičnosti u njemu (na ovoj razini) su najmanje, a slova su najmanje nepotrebna za pisanje. Pa, onda, kada naučite neke složene arhitektonske stvari, učite i brinite se previše o tome. Odnosno, glavno je - probaj, traži što ti se sviđa, a kad shvatiš da je već 4 sata ujutro, a ti sjediš i pišeš iz zabave, jer ti se sviđa, vjerojatno je u ovom trenutak kada ste pronašli svoju...

Svaka osoba koja odluči ovladati osnovama procesa stvaranja računalnih programa, postavlja se pitanje koji su danas najpopularniji programski jezici, a koje je najbolje naučiti. A ako je na prvo pitanje vrlo lako odgovoriti, onda na drugo mora odgovoriti sam učenik, na temelju svojih planova i potreba.

Pogledajmo na brzinu najpopularnije programske jezike kako biste mogli odabrati onaj koji vas privlači i početi ga učiti.

programiranje?

Prije nego što rastavite glavne programske jezike i opišete ih, potrebno je rastaviti sam koncept.

Programski jezik je formalni znakovni sustav koji se koristi za pisanje računalnih programa. Kao i svaki drugi jezik, ima svoja leksička, semantička i sintaktička pravila.

Razlikovati jezike niske i visoke razine programiranja. Danas uglavnom koriste drugi.

Programski jezici visoke i niske razine

Programski jezik niske razine ima strukturu blisku strukturi.U ovom slučaju naredbe se označavaju ne pomoću nula i jedinica, već pomoću mnemoničkih zapisa. Najpoznatiji programski jezik niske razine je asemblerski jezik.

Rad s bilo kojim od jezika zahtijeva visoke kvalifikacije, a razumijevanje, osim toga, oduzima puno vremena za pisanje programa. Istodobno, koristeći niske, možete stvoriti male, ali istodobno učinkovite programe. Programerima početnicima ne preporučuje se da započnu svoje poznanstvo s njima.

Programske jezike visoke razine karakterizira prisutnost semantičkih konstrukcija za opisivanje operacija. Njihovo proučavanje oduzima puno vremena, a njihova primjena u praksi zahtijeva brigu i razumijevanje osnovnih struktura i pravila sintakse i rječnika. Ali u isto vrijeme, poznavanje jezika visoke razine omogućuje vam stvaranje velikih, šarenih, višenamjenskih projekata u rekordnom vremenu.

Visoka razina uključuje Pascal, Java, C, C ++, C #, Delphi i mnoge druge. Koriste se za pisanje softvera i aplikacija.

Najpopularniji programski jezici

Koji su danas najpopularniji programski jezici?

Posljednjih godina najpopularniji i najtraženiji su Java, C, C++, Python, C#, koji se ubrajaju u top programske jezike. Oni čine osnovu modernih programa i koriste se pri pisanju bilo kojeg velikog projekta. Više od 70% programera radi s tim jezicima. Predviđa se da će u sljedećih 10 godina i dalje biti traženi kao danas.

Ruby, PHP, JavaScript ne smatraju se manje popularnim. Većina stručnjaka se također fokusira na njih.

Općenito, bez obzira na popularnost, svaki stručnjak, manje-više poštujući sebe, mora znati barem nekoliko jezika različitih razina. To je zbog činjenice da se većina velikih projekata razvija na različitim jezicima. Na primjer, neki moduli su napisani pomoću C, drugi su razvijeni u Javi, a treći u Delphiju.

C, C ++ i C #

Počnimo s obitelji C.

C jezik je sastavljen i razvijen 70-ih godina. Na njegovoj osnovi kasnije su stvoreni jezici kao što su C++ i C#, Java.

C ++ je moćan jezik dizajniran za stvaranje uslužnih programa i upravljačkih programa niske razine te vrlo impresivnih aplikacija i softverskih kompleksa.

C # je moderni objektno orijentirani jezik baziran na jezicima C i C ++. Ima sustav sigurnog tipa. Jedna od njegovih značajki je da je također vrlo sličan drugom popularnom programskom jeziku - Javi.

Jedan od nedostataka jezika je to što vam omogućuje izradu aplikacija samo za Windows operativni sustav, a osim toga, vrlo je glomazan, što znači da programi napisani na njemu zauzimaju puno prostora.

Može se primijetiti da su C, C++ i C# na mnogo načina programski jezici za početnike. Nakon što ih savladate, možete biti sigurni da će učenje novog jezika trajati najmanje vremena.

Možete se upoznati s njima i napisati svoje prve aplikacije u posebnom Borland okruženju ili Visual Studiju.

JavaScript

JavaScript je jezik s objektno orijentiranim mogućnostima. Razvijen 1996. godine i danas jedan od najpopularnijih. Jezik se uglavnom koristi za pisanje skripti na Internetu i radi u glavnim preglednicima kao što su Internet Explorer, Firefox, Opera. Također je usko povezan s HTML-om i CSS-om, tako da morate savladati osnove ovih jezika prije nego što ga počnete učiti.

Vrijedi napomenuti da su unatoč sličnosti u nazivu, JavaScript i Java dva potpuno različita jezika.

Ovaj jezik je prikladan za one koji su usmjereni na izradu preglednika i skripti, aplikacija i dodataka za njih. Ako planirate kreirati vlastite web stranice, također ga morate bolje upoznati.

Java

S obzirom na najpopularnije programske jezike, ne može se ne spomenuti Java. To je ciljno orijentirani programski jezik koji se koristi od 1995. godine. Prilično je lagan i radi na bilo kojem Java stroju bilo koje arhitekture. Koristi se za razvoj aplikacija za Android i iOS.

Piton

Python - čiji je glavni zadatak povećati produktivnost programera, učiniti kod čitljivijim. Ima mali popis sintaktičkih konstrukcija i vrlo impresivnu standardnu ​​biblioteku funkcija. Razvoj jezika započeo je 90-ih godina i traje do danas. Koristi se za razvoj raznih projekata, proširenja i integraciju prethodno razvijenih aplikacija.

Osnove jezika Python mogu se naučiti i kao početna točka za programiranje i kao drugi komplementarni jezik.

Rubin

Ruby je programski jezik visoke razine koji sadrži dijelove Perl, Smalltalk, Eiffel, Ada i Lisp. Koristi se od 1995. Glavne prednosti jezika su njegova jednostavnost i fleksibilnost. Pogodno i za pisanje malih aplikacija i za razvoj ozbiljnih programa.

PHP jezik

PHP je prilično popularan skriptni jezik dizajniran za izradu web aplikacija. Često je također uključen u popis "Programskih jezika za početnike" i preporučuje se za učenje.

Može vam pomoći u izradi visokokvalitetnih web aplikacija u vrlo kratkom vremenskom okviru. Jezik ima jednostavnu i razumljivu strukturu, što vam omogućuje da ga naučite za nekoliko dana.

Zaključak

Pregledali smo najpopularnije programske jezike čije će vam učenje u budućnosti pomoći da uspješno kreirate svoje projekte i zaradite novac kao programer. Ne postoji konsenzus oko toga koji jezik studirati, no stručnjaci napominju da je poželjno poznavati nekoliko programskih jezika jer će to dodatno proširiti polje djelovanja i olakšati rad na raznim timskim projektima.

Programiranje je cijela znanost koja vam omogućuje stvaranje računalnih programa. Uključuje ogroman broj različitih operacija i algoritama koji čine jedan programski jezik. Dakle, što je to i koji su različiti programski jezici? Članak daje odgovore, a također pruža pregledni popis programskih jezika.

Povijest nastanka i promjene programskih jezika treba proučavati zajedno s poviješću razvoja računalne tehnologije, jer su ti pojmovi izravno povezani. Bez programskih jezika bilo bi nemoguće stvoriti bilo kakav program za rad računala, što znači da bi stvaranje računala postalo besmislena vježba.

Prvi strojni jezik izumio je 1941. Konrad Zuse, koji je izumitelj analitičkog motora. Nešto kasnije, 1943. godine, Howard Aiken stvorio je stroj Mark 1, sposoban čitati upute na razini strojnog koda.

Pedesetih godina prošlog stoljeća postojala je aktivna potražnja za razvojem softvera, a strojni jezik nije mogao podnijeti velike količine koda, pa je stvoren novi način komunikacije s računalima. Assembler je prvi mnemonički jezik koji je zamijenio strojne upute. S godinama popis programskih jezika samo raste, jer područje primjene računalnih tehnologija postaje sve šire.

Klasifikacija programskih jezika

Trenutno postoji više od 300 programskih jezika. Svaki od njih ima svoje karakteristike i prikladan je za jedan određeni zadatak. Svi programski jezici mogu se grubo podijeliti u nekoliko grupa:

  • Aspektno orijentiran (glavna ideja je odvajanje funkcionalnosti za povećanje učinkovitosti softverskih modula).
  • Strukturni (temeljen na ideji stvaranja hijerarhijske strukture pojedinačnih programskih blokova).
  • Logički (temeljen na teoriji aparata matematičke logike i pravilima razlučivanja).
  • Objektno orijentirani (u takvom programiranju više se ne koriste algoritmi, već objekti koji pripadaju određenoj klasi).
  • Multi-paradigma (kombinirajte nekoliko paradigmi, a programer sam odlučuje koji će jezik koristiti u određenom slučaju).
  • Funkcionalni (glavni elementi su funkcije koje mijenjaju vrijednost ovisno o rezultatima izračuna početnih podataka).

Programiranje za početnike

Mnogi ljudi postavljaju pitanje, što je programiranje? U osnovi, to je način komunikacije s računalom. Zahvaljujući programskim jezicima, možemo postaviti specifične zadatke za različite uređaje izradom posebnih aplikacija ili programa. Kada proučavate ovu znanost u početnoj fazi, najvažnije je odabrati prikladne (za vas zanimljive) programske jezike. Popis početnika je u nastavku:

  • Basic je izumljen 1964. godine, pripada obitelji jezika visoke razine i koristi se za pisanje aplikacijskih programa.
  • Python ("Python") je prilično lako naučiti zahvaljujući njegovoj jednostavnoj, čitljivoj sintaksi, ali prednost je u tome što se može koristiti za izradu i običnih desktop programa i web aplikacija.
  • Pascal ("Pascal") - jedan od najstarijih jezika (1969), stvoren za podučavanje učenika. Njegova moderna modifikacija snažno je tipkana i strukturirana, ali Pascal je sasvim logičan jezik koji je razumljiv na intuitivnoj razini.

Ovo nije potpuni popis programskih jezika za početnike. Postoji ogroman broj sintaksa koje su dostupne za razumijevanje, a koje će zasigurno biti tražene u narednim godinama. Svatko ima pravo samostalno odabrati smjer koji će mu biti zanimljiv.

Početnici imaju priliku ubrzati učenje programiranja i njegovih osnova zahvaljujući posebnim alatima. Glavni pomoćnik je integrirano razvojno okruženje za programe i aplikacije Visual Basic ("Visual Basic" je također programski jezik koji je naslijedio stil Basic jezika 1970-ih).

Razine programskog jezika

Svi formalizirani jezici namijenjeni kreiranju, opisivanju programa i algoritama za rješavanje problema na računalima podijeljeni su u dvije glavne kategorije: programski jezici niske razine (popis je dat u nastavku) i oni visoke razine. Razgovarajmo o svakom od njih zasebno.

Jezici niske razine dizajnirani su za stvaranje strojnih instrukcija za procesore. Njihova glavna prednost je što koriste mnemoničku notaciju, odnosno umjesto niza nula i jedinica (iz binarnog brojevnog sustava), računalo pamti smislenu skraćenu riječ iz engleskog jezika. Najpoznatiji jezici niske razine su "Assembler" (postoji nekoliko podvrsta ovog jezika, od kojih svaka ima mnogo zajedničkog, ali se razlikuje samo u skupu dodatnih direktiva i makronaredbi), CIL (dostupan na .Net-u platforma) i JAVA Bytecode.

Programski jezici visoke razine: popis

Jezici visoke razine dizajnirani su za praktičnost i učinkovitost aplikacija; oni su sušta suprotnost jezicima niske razine. Njihova je posebnost prisutnost semantičkih struktura koje sažeto i sažeto opisuju strukture i algoritme programa. U jezicima niske razine njihov opis u strojnom kodu bio bi predug i nerazumljiv. Jezici visoke razine neovisni su o platformi. Umjesto toga, prevoditelji obavljaju funkciju prevoditelja: prevode tekst programa u elementarne strojne upute.

Sljedeći popis programskih jezika: C ("C"), C # ("C-sharp"), "Fortran", "Pascal", Java ("Java") - spadaju među najčešće korištene sintakse visoke razine. Ima sljedeća svojstva: ovi jezici rade sa složenim strukturama, podržavaju nizove tipova podataka i operacije s informacijskim I/O datotekama, a također imaju prednost što ih je mnogo lakše raditi zbog čitljivosti i jasne sintakse.

Najviše korišteni programski jezici

U osnovi, možete napisati program na bilo kojem jeziku. Pitanje je hoće li raditi učinkovito i glatko? Zato je potrebno odabrati najprikladnije programske jezike za rješavanje različitih problema. Popis po popularnosti može se okarakterizirati na sljedeći način:

  • OOP jezici: Java, C++, Python, PHP, VisualBasic i JavaScript;
  • grupa strukturnih jezika: Basic, Fortran i Pascal;
  • multi-paradigma: C#, Delphi, Curry i Scala.

Opseg programa i aplikacija

Izbor jezika na kojem je napisan ovaj ili onaj program uvelike ovisi o području njegove primjene. Tako, na primjer, za rad s "hardverom" samog računala (pisanje upravljačkih programa i pratećih programa), najbolja opcija bi bila C ("C") ili C ++, koji su uključeni u glavne programske jezike (vidi gornji popis). A za razvoj mobilnih aplikacija, uključujući igre, trebali biste odabrati Java ili C # ("C-Sharp").

Ako još niste odlučili u kojem smjeru raditi, preporučujemo da počnete učiti iz C ili C ++ jezika. Imaju vrlo jasnu sintaksu, jasnu strukturnu podjelu na klase i funkcije. Osim toga, poznavajući C ili C ++, lako možete naučiti bilo koji drugi programski jezik.

Vrhunski povezani članci