Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Programi
  • Nivoi programskih jezika. Programski jezici visokog i niskog nivoa: koje biste trebali naučiti

Nivoi programskih jezika. Programski jezici visokog i niskog nivoa: koje biste trebali naučiti

Programski jezik

Programski jezik- formalni sistem znakova za snimanje kompjuterskih programa. Programski jezik definiše skup leksičkih, sintaksičkih i semantičkih pravila koja određuju izgled programa i radnje koje će izvršilac (računar) obavljati pod njegovom kontrolom.

  • Funkcija: programski jezik je namenjen za pisanje kompjuterskih programa koji služe za prenos instrukcija na računar za obavljanje određenog računarskog procesa i organizovanje upravljanja pojedinačnim uređajima.
  • Zadatak: programski jezik se razlikuje 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 između ljudi. Definiciju "programskih jezika" moguće je generalizirati - to je način prenošenja naredbi, naredbi, jasnog vođenja akcije; dok ljudski jezici služe i za razmjenu informacija.
  • Izvršenje: programski jezik može koristiti posebne konstrukcije za definiranje i manipulaciju strukturama podataka i kontrolu procesa izračunavanja.

Standardizacija programskih jezika

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

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

Tipovi podataka

Moderni digitalni računari su obično binarni i podaci se pohranjuju u binarnom (binarnom) kodu (iako su moguće implementacije u drugim sistemima brojeva). Ovi podaci obično odražavaju informacije iz stvarnog svijeta (imena, bankovni računi, mjerenja, itd.) koji predstavljaju koncepte visokog nivoa.

Poseban sistem po kojem su podaci organizovani u programu je sistem tipa programski jezik; razvoj i proučavanje sistema tipova poznato je kao teorija tipova. Jezici se mogu klasifikovati kao sistemi statički otkucana i jezici sa dinamičko kucanje.

Statički otkucani jezici mogu se dalje podijeliti na jezike sa obavezna deklaracija gdje svaka deklaracija varijable i funkcije ima obaveznu deklaraciju tipa, a jezici sa pretpostavljeni tipovi... Ponekad se nazivaju dinamički kucani jezici latentno otkucane.

Strukture podataka

Sistemi tipova u jezicima visokog nivoa omogućavaju definisanje složenih, kompozitnih tipova, takozvanih struktura podataka. Tipično, strukturni tipovi podataka se formiraju kao kartezijanski proizvod osnovnih (atomskih) tipova i prethodno definisanih kompozitnih tipova.

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

Semantika programskih jezika

Postoji nekoliko pristupa definisanju semantike programskih jezika.

Najrasprostranjenije varijante ove tri su: operacionalni, derivacioni (aksiomatski) i denotacioni (matematički).

  • Prilikom opisivanja semantike unutar operativni Pristup, izvršavanje konstrukcija programskog jezika obično se tumači uz pomoć nekog imaginarnog (apstraktnog) računara.
  • Derivaciona semantika opisuje posljedice izvršavanja jezičkih konstrukcija korištenjem jezika logike i postavljanja pred- i postuvjeta.
  • Denational semantika operiše pojmovima tipičnim za matematiku - skupovima, korespondencijama, kao i sudovi, iskazi itd.

Paradigma programiranja

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

Unatoč činjenici da je većina jezika fokusirana na imperativni model računanja 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 REFAL jezik, zasnovan na računanju model koji je uveo sovjetski matematičar A. A. Markov Jr.

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

Načini implementacije jezika

Programski jezici se mogu implementirati kao kompajlirani i interpretirani.

Program na kompajliranom jeziku pomoću kompajlera (specijalnog programa) se konvertuje (prevodi) u mašinski kod (skup instrukcija) za dati tip procesora, a zatim sastavlja u izvršni modul koji se može pokrenuti za izvršenje kao poseban program . Drugim riječima, prevodilac prevodi izvorni kod programa iz programskog jezika visokog nivoa u binarne kodove procesorskih instrukcija.

Ako je program napisan na interpretiranom jeziku, onda tumač direktno izvršava (tumači) izvorni tekst bez prethodnog prijevoda. U tom slučaju program ostaje na originalnom jeziku i ne može se pokrenuti bez tumača. Računarski procesor se, u tom smislu, može nazvati interpretatorom mašinskog koda.

Podjela na kompilirane i interpretirane jezike je uslovna. Dakle, za bilo koji tradicionalno kompajlirani jezik, kao što je Pascal, možete napisati tumač. Osim toga, većina modernih "čistih" interpretatora ne izvršavaju direktno jezičke konstrukcije, već ih kompajliraju u neku srednju reprezentaciju visokog nivoa (na primjer, s promjenjivim dereferenciranjem i makro proširenjem).

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

Po pravilu, kompajlirani programi rade brže i ne zahtijevaju dodatne programe za izvršenje, jer su već prevedeni na strojni jezik. Istovremeno, svaki put kada se tekst programa promijeni, potrebno ga je ponovo kompajlirati, što usporava razvojni proces. Osim toga, kompajlirani program može raditi samo na istom tipu računara i, po pravilu, pod istim operativnim sistemom za koji je kompajler dizajniran. Nova kompilacija je potrebna za kreiranje izvršne datoteke za drugu vrstu mašine.

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

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

Ovaj pristup vam u određenom smislu omogućava da koristite prednosti i interpretatora i kompajlera. Treba napomenuti da postoje jezici koji imaju i tumač i kompajler (Forth).

Korišteni simboli

Moderni programski jezici su dizajnirani da koriste ASCII, odnosno dostupnost svih grafički ASCII znakovi su neophodan i dovoljan uslov za snimanje bilo koje jezičke konstrukcije. Menadžeri ASCII znakovi se koriste u ograničenom obimu: dozvoljeni su samo povratni CR, pomak reda LF i horizontalni jezičak HT (ponekad i vertikalni jezičak VT i pomak stranice FF).

Rani jezici, koji datiraju iz ere 6-bitnih znakova, koristili su ograničeniji skup. Na primjer, Fortran alfabet 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čajan izuzetak je APL jezik, koji koristi mnogo posebnih znakova.

Upotreba znakova koji nisu ASCII (kao što su KOI8-R znakovi ili Unicode znakovi) ovisi o implementaciji: ponekad su dozvoljeni samo u komentarima i konstantama znakova/niza, a ponekad su dozvoljeni 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 je ograničeno činjenicom da su mnogi projekti razvoja softvera međunarodni. Bilo bi veoma teško raditi sa kodom u kojem su imena nekih varijabli napisana ruskim slovima, drugih arapskim, a trećih kineskim slovima. Istovremeno, za rad sa tekstualnim podacima, programski jezici nove generacije (Delphi 2006,, Java) podržavaju Unicode.

Klase programskih jezika

vidi takođe

Bilješke (uredi)

Književnost

  • Hal Abelson, Gerald Jay Sussman. Struktura i interpretacija kompjuterskih programa
  • Robert W. Sebesta. Osnovni koncepti programskih jezika = Concepts of Programming Languages ​​/ Per. sa 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 programatora - vrlo je lako! - M.: Delo, 2001.-- 360 str. - ISBN 5-7749-0211-0
  • F. Biancuzzi, C. Warden. Pioniri programiranja. Razgovori sa kreatorima najpopularnijih programskih jezika. - SPb. : Symbol-Plus, 2010.-- 608 str. - ISBN 978-5-93286-170-7

Linkovi

  • Lista jezika (engleski) - više od 2500 jezika sa kratkim opisom
  • Istorija kompjuterskih jezika (engleski) - istorija programskih jezika (od 1954. do maja 2004.) (sadrži dijagram koji se redovno ažurira)
  • 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.) - redovno ažurirana ocjena popularnosti programskih jezika
  • Referenca za izbacivanje računarskih jezika - poređenje programskih jezika po efikasnosti
  • Programski jezici koji se vole (eng.) - poređenje programskih jezika za "ljubav" i "mržnju" prema njima

Wikimedia fondacija. 2010.

Klasifikacija programskih jezika

U zoru kompjuterske ere, mašinski kod je bio jedino sredstvo komunikacije između čoveka i računara. Veliko postignuće kreatora programskih jezika bilo je to što su uspjeli učiniti da sam kompjuter radi kao prevodilac sa ovih jezika u mašinski kod.

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

Proceduralni (ili algoritamski) programi su sistem recepata za rješavanje određenog problema. Uloga kompjutera se svodi na mehaničku implementaciju ovih uputstava.

Proceduralni jezici se dijele na jezike nižeg i visokog nivoa.

Različiti tipovi procesora imaju različite skupove instrukcija. Ako je programski jezik fokusiran na određeni tip procesora i uzima u obzir njegove karakteristike, onda se zove programski jezik niskog nivoa.
To znači da su operatori jezika bliski mašinskom kodu i fokusirani su na specifične instrukcije procesora.

Rice. 4.1. Opšta klasifikacija programskih jezika

Jezici niskog nivoa (mašinski orijentisani) omogućavaju vam da kreirate programe iz mašinskih kodova, obično u heksadecimalnom obliku. S njima je teško raditi, ali programi koje uz njihovu pomoć kreira visoko kvalifikovan programer zauzimaju manje memorijskog prostora i rade brže. Koristeći ove jezike, pogodnije je razvijati sistemske programe, drajvere (programe za upravljanje računarskim uređajima) i neke druge vrste programa.

Jezik niskog nivoa (mašinski orijentisan) jeste Asembler, koji jednostavno predstavlja svaku instrukciju mašinskog koda, ne kao brojeve, već koristeći konvencionalne simboličke notacije tzv
mnemonika.

Uz pomoć jezika niskog nivoa kreiraju se veoma efikasni i kompaktni programi, jer programer dobija pristup svim mogućnostima procesora.

Programski jezici visokog nivoa mnogo bliže i razumljivije čoveku nego kompjuteru. U njima se ne uzimaju u obzir posebnosti specifičnih računarskih arhitektura, stoga su programi kreirani na nivou izvornog koda lako prenosivi na druge platforme za koje je kreiran prevodilac ovog jezika. Mnogo je lakše razvijati programe na jezicima visokog nivoa sa jasnim i moćnim komandama, a manje je grešaka pri kreiranju programa.

Glavna prednost algoritamskih jezika visokog nivoa je mogućnost opisivanja programa za rješavanje problema u obliku koji je najprikladniji za ljudsku percepciju. Ali pošto svaka porodica računara ima svoj, specifičan interni (mašinski) jezik i može da izvršava samo one instrukcije koje su napisane na ovom jeziku, za prevođenje izvornih programa u mašinski jezik koriste se posebni programi prevodioci.

Svi prevodioci rade po jednom od dva principa: tumačenju ili kompilaciji.

Interpretacija podrazumijeva prevod operator-by-operator i naknadno izvršavanje prevedenog operatora originalnog programa. S tim u vezi, mogu se uočiti dva nedostatka metode interpretacije: prvo, program za tumačenje mora biti u memoriji računara tokom čitavog procesa izvršavanja originalnog programa, odnosno mora zauzimati određenu količinu memorije; drugo, proces prevođenja istog operatora se ponavlja onoliko puta koliko ova naredba treba da se izvrši u programu, što naglo smanjuje performanse programa.

Uprkos navedenim nedostacima, prevodioci prevodioci dobili su dovoljnu distribuciju, jer su pogodni za razvoj i otklanjanje grešaka u izvornim programima.

At kompilacija procesi prevođenja i izvršenja su vremenski razdvojeni: prvo se originalni program u potpunosti prevodi na mašinski jezik (nakon čega prisustvo prevodioca u RAM-u postaje nepotrebno), a zatim se prevedeni program može izvršiti više puta. Shodno tome, za isti program, prevođenje metodom kompilacije obezbeđuje veće performanse računarskog sistema uz smanjenje potrebne RAM memorije.

Velika poteškoća u razvoju kompajlera u poređenju sa interpretatorom iz istog jezika objašnjava se činjenicom da kompajliranje programa uključuje dva koraka: analizu, odnosno utvrđivanje ispravnosti pisanja izvornog programa u skladu sa pravilima za konstruisanje jezičkih konstrukcija. jezika unosa, i sinteza - generisanje ekvivalentnih programa u mašinskim kodovima. Kompilacijski prijevod zahtijeva višestruko "gledanje" emitovanog programa, tj. kompajleri-prevodioci su višeprolazni: tokom prvog prolaza provjeravaju ispravnost sintakse jezičkih konstrukcija pojedinih operatora nezavisno jedan od drugog, u sljedećem prolazu provjeravaju ispravnost sintaktičkih odnosa između operatora itd.

Rezultirajući kompajlirani program se poziva objektni modul, koji je ekvivalentan program u mašinskim kodovima, ali nije "vezan" za određene adrese RAM-a. Stoga, prije izvršenja, objektni modul mora biti obrađen posebnim programom operativnog sistema (uredjivač linkova) i konvertovan u modul za punjenje.

Uz gore navedene prevodioce-tumače i prevodioce-kompilatore, u praksi se koriste i prevodioci prevodioci-prevodioci, koji kombinuju prednosti oba principa prevođenja: u fazi razvoja i otklanjanja grešaka programa, prevodilac radi u interpreterskom režimu, a nakon što je proces otklanjanja grešaka završen, izvorni program se ponovo prevodi u objektni modul (tj. , metodom kompilacije). Ovo omogućava značajno pojednostavljenje i ubrzanje procesa sastavljanja i otklanjanja grešaka u programima, a usled naknadnog prijema objektnog modula, osiguravanje efikasnijeg izvršavanja programa.

Klasično proceduralno programiranje zahtijeva od programera da detaljno opiše kako riješiti problem, odnosno 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 kombinuju u grupe - procedure. Strukturirano programiranje u cjelini ne izlazi iz okvira ovog smjera, samo dodatno popravlja neke korisne tehnike
tehnologije programiranja.

Fundamentalno drugačiji pravac u programiranju povezan je sa metodologijama (ponekad nazvanim “paradigme”) neproceduralnog programiranja. To uključuje objektno orijentirano i deklarativno programiranje. Objektno orijentisani jezik stvara okruženje u obliku mnogih nezavisnih objekata. Svaki objekat se ponaša kao zaseban računar, može se koristiti za rešavanje problema kao "crne kutije" bez upuštanja u unutrašnje mehanizme njihovog funkcionisanja. 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 koristi deklarativni jezik, programer ukazuje na početne informacijske strukture, odnose između njih i koja svojstva rezultat treba da ima. Istovremeno, programer ne gradi proceduru za njegovo dobijanje ("algoritam") (barem, idealno). Ovim jezicima nedostaje koncept "operatora" ("komanda"). Deklarativni jezici se mogu podijeliti u dvije porodice - logičku (tipični predstavnik je Prolog) i funkcionalnu (Lisp).

Hajde da okarakterišemo najpoznatije programske jezike.

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

2.OSNOVNI(Beginner's All-purpose Symbolic Instruction Code - univerzalni simbolički kod instrukcija za početnike); uprkos mnogim nedostacima i obilju loše kompatibilnih verzija - najpopularniji po broju 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; skoro nikad korišten sada.

5.Pascal(Pascal - nazvan po naučniku Blaiseu Pascalu); izuzetno popularan kako kod učenja programiranja tako i među profesionalcima. Stvorio ga je ranih 70-ih švicarski naučnik Niklaus Wirth. Pascal je izvorno razvijen kao obrazovni jezik, a sada je jedan od glavnih jezika za podučavanje programiranja u školama i na univerzitetima. Međutim, njegove kvalitete u zbiru su se pokazale toliko visokim da ga i profesionalni programeri rado koriste. Philippe Kahn, Francuz koji je razvio Turbo-Pascal sistem, postigao je ništa manje impresivan, uključujući i finansijski uspjeh. Suština njegove ideje bila je da kombinuje sekvencijalne faze programske obrade - kompilaciju, uređivanje linkova, otklanjanje grešaka i dijagnosticiranje grešaka - u jednom interfejsu. Verzije Turbo-Pascal-a preplavile su gotovo sve obrazovne institucije, programske centre i privatne firme. Na osnovu Pascal jezika stvoreno je nekoliko moćnijih jezika (Modula, Ada, Delphi).

6.Cobol(COMmon Business Oriented Language - opšti poslovni jezik); u velikoj meri izašla iz upotrebe. Zamišljen je kao primarni jezik za masovnu obradu podataka u oblastima menadžmenta
i biznis.

7.ADA; je pobjednički jezik (maj 1979.) na Pentagonovom takmičenju univerzalnih jezika od 1975. godine. Programeri su grupa naučnika koju vodi Jean Ihbia. Pobjednički jezik nazvan je ADA, po Augusti Adi Lovelace. ADA jezik je direktni naslednik jezika
Pascal. Ovaj jezik je namenjen kreiranju i dugoročnom (dugotrajnom) održavanju velikih softverskih sistema, omogućava mogućnost paralelne obrade, kontrole procesa u realnom vremenu i još mnogo toga, što je teško ili nemoguće postići jednostavnijim jezicima.

8.Si(C - "si"); široko se koristi u razvoju sistemskog softvera. Ostavio je veliki pečat na moderno programiranje (prva verzija - 1972), veoma je popularan među programerima softverskih sistema (uključujući i operativne sisteme). C kombinuje karakteristike jezika visokog nivoa i jezika orijentisanog na mašinu, omogućavajući programeru pristup svim resursima mašine, što jezici kao što su Basic i Pascal nemaju.

9.C ++(C++); objektno orijentisana ekstenzija C jezika, koju je kreirao Bjarne Stroustrup 1980. Mnoge moćne nove karakteristike koje su dramatično poboljšale produktivnost programera su superponirane na određenom niskom nivou naslijeđenom iz C jezika.

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

11.Java(Java); platformski nezavisan objektno orijentisani programski jezik, izuzetno efikasan za kreiranje interaktivnih web stranica. Ovaj jezik je stvorio Sun ranih 90-ih na bazi C++. Dizajniran je da pojednostavi razvoj aplikacija zasnovanih na C ++ isključujući sve funkcije niskog nivoa iz njega.

12.Lisp(Lisp) je funkcionalni programski jezik. Fokusiran je na strukturu podataka u obliku liste i omogućava vam da organizirate efikasnu obradu velikih količina tekstualnih informacija.

13.Prolog(Programiranje u LOGIC-u - logičko programiranje). Osnovna svrha jezika je razvoj inteligentnih programa i sistema. Prolog je programski jezik kreiran specijalno za rad sa bazama znanja zasnovanim na činjenicama i pravilima (jedan od elemenata sistema veštačke inteligencije). Jezik implementira mehanizam vraćanja unazad 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, vrši se vraćanje i napreduje se novo nagađanje. Jezik je zasnovan 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 komande za formatiranje teksta, dodavanje slika, postavljanje fontova i boja, organiziranje veza i tabela.

2. PERL. Zamišljen je kao alat za efikasnu obradu velikih tekstualnih fajlova, generisanje tekstualnih izveštaja i upravljanje zadacima.
Perl je mnogo moćniji od jezika poput C. Uvodi mnoge uobičajene funkcije za rad sa stringovima, nizovima, upravljanje procesorima, rad sa sistemskim informacijama.

3. Tcl / Tk. Ovaj jezik je fokusiran na automatizaciju rutinskih procesa i sastoji se od moćnih naredbi. Nezavisan je od sistema i istovremeno vam omogućava da kreirate programe sa grafičkim interfejsom.

4. VRML. Kreiran za organizovanje virtuelnih 3D interfejsa na Internetu. Omogućava vam da u tekstualnom obliku opišete različite trodimenzionalne scene, rasvjete i sjene, teksture.

Izbor programskog jezika zavisi od mnogo faktora: svrhe, lakoće pisanja izvornih programa, efikasnosti rezultujućih objektnih programa, itd. Raznolikost zadataka koje rešava računar određuje raznolikost programskih jezika.

Kontrolna pitanja

1. Šta su sistemi za programiranje i kojoj klasi programa pripadaju?

2. Šta je uključeno u sisteme programiranja?

3. Na kom su programskom jeziku nastali prvi programi?

4. Na koje se jezike dijele proceduralni jezici?

5. Opišite jezike niskog nivoa.

6. Koji jezik je jezik niskog nivoa?

7. Prednosti jezika niskog nivoa.

8. Opišite jezike visokog nivoa.

9. Prednosti jezika visokog nivoa.

10. Navedite primjere jezika visokog nivoa.

11. Čemu služe prevodioci?

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

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

14. Kakav je proces sastavljanja programa?

15. Koje se radnje izvode tokom 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. Osobine 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?

24. Kojoj klasi jezika pripada Prolog jezik?

Zalina 13. januara 2016. u 15:42

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

  • blog kompanije Yandex,
  • Izrada web stranica,
  • programiranje,
  • Industrijsko programiranje

Odlučili smo da svoj prvi ovogodišnji post posvetimo jednoj vrlo osnovnoj temi, predavanju o kojoj je održano u Malom SHAD-u. Angažovani su srednjoškolci koji su zainteresovani za tehnologiju, otuda i specifičnost izlaganja - predavanje će biti posebno interesantno za one koji tek počinju sa programiranjem i razmišljaju u kom pravcu da se razvijaju. Za njih Yandex ima kurs "Uvod u programiranje (C++)", koji se može polagati na platformi Stepic.org.

Predavač Mihail Gustokašin - kustos akademskih programa u Yandexu, direktor Centra za studentske olimpijade, Fakultet računarskih nauka, HSE. Mikhail je trenirao desetine pobjednika i dobitnika Sveruskih olimpijada u programiranju.

U okviru predavanja govori se o tome šta su programski jezici, po čemu se razlikuju, kako su se pojavili i koji su bolji, a koji lošiji. Na početku ćemo malo pričati o istoriji jezika - kako su se pojavili, kako su ljudi počeli programirati, kako se sve razvijalo, šta se sada dešava. U drugom dijelu će se dotaknuti za koje zadatke koji jezik odgovara, kako „odabrati svoj omiljeni jezik i uživati ​​u životu“. Predavač će malo pričati i o tome kako, po njegovom mišljenju, sve ovo naučiti i onda dobiti posao.

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

Istorija programskih jezika

Počnimo od početka. U početku kompjuteri nisu imali ni tastaturu! Odnosno, sve je bilo jako loše - nisu imali tastaturu ili ekran, imali su bušene kartice (to su takve stvari sa rupama ili bez rupa). Shodno tome, ili su igle tu zabačene, ili su tamo sijale svjetlošću. Ako postoji rupa (ili obrnuto), to je značilo nula ili jedan. A programi su u to vrijeme pisani pomoću mašinskih kodova - svaka operacija u kompjuteru (sabiranje, oduzimanje, neke složenije operacije) imala je neku vrstu mašinskog koda. Ljudi su sami birali ovu šifru sa ploče, svakakve adrese u memoriji, sve su to izbijali rukama i gurali u čitač - i sve je izbrojano. Naravno, posao programera tada vjerovatno nije bio baš zanimljiv - praviti rupe - a razvojem nauke i tehnologije, naravno, počeli su da smišljaju sve "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. Ali jasno je da je to, generalno gledano, zahtevalo i dovoljno veliki mentalni napor da se ima na umu u kom registru šta leži, gde koje varijable i šta se uopšte dešava. Zašto se to dogodilo? Zato što su kompjuteri bili "glupi" i nisu mogli razumjeti ništa "pametnije". U stvari, kompajliranje mašinskog koda sa asemblera takođe zahteva vreme, memoriju (u to vreme, naravno, nije je bilo dovoljno).

Postepeno je postalo jasno da je veoma teško razviti tako velike kompleksne programe. Programerova produktivnost u ovim naredbama bila je izuzetno niska – to jest, pisao je nekoliko redova dnevno (značajno), a svaki red nije radio ništa posebno – neke jednostavne aritmetičke operacije. I ljudi su željeli učiniti jezike 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 izbacivanje Fortran programa. Ali ako sada uzmete ovaj Fortran - po mom mišljenju, čak je negdje između 50-60. pojavio - i pokušajte da napišete nešto na njemu, biće vam veoma neprijatno, garantujem vam! Moderni Fortran je i danas živ, ali je prilično drugačiji od onoga što je bio.

Drugi jezici - sada ću napisati jednu stvar za koju ste vjerovatno čuli, tada samo na svim događajima na kojima govore o istoriji programiranja - ovo je COBOL. Bio je to jezik za pisanje poslovnih aplikacija. Šta 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 polovine svih kodova koje je čovječanstvo napisalo bilo je napisano u Cobolu. I do sada se značajan dio svih bankarskih transakcija obavlja pomoću programa napisanih u njemu (COBOL), a ljudi i dalje nešto pišu na njemu.

Postoji i "smiješan" jezik, zvao se Algol (68. verzija, koja karakterizira godinu njegovog nastanka). To je algoritamski jezik. Generalno, tamo su mogli nešto da urade, ali nas sada ne zanima šta oni mogu. I tu se 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 Evropi, a Fortran se uglavnom koristio u Sjedinjenim Državama - nema velikih razlika. Koji je trend vidljiv? Isprva je sve bilo teško i da pišeš morao si biti skoro inženjer, elektroinženjer, razumjeti gdje su koji kontakti zatvoreni i još nešto za programiranje. I tada je trebalo sjediti s listovima i brojati uspomene, paziti na njih. I postepeno je sve postalo jednostavnije, jednostavnije, jednostavnije, a zatim još lakše za programera - da što manje misli za čovjeka, da što više radi automatski. Otprilike na kraju ovog perioda (predavač ukazuje na Algol i Kobol) počinju se pojavljivati ​​jezici koji su, u izvjesnom smislu, "preživjeli" do danas.

OSNOVNI. Možda neki i dalje nešto pišu na njemu, barem sam vidio da u nekim ustanovama predaju na QBasicu - takav plavi prozor gdje piše "1989". Općenito, on živi "na punoj snazi"! Izmišljen je kao jezik za ne-programere. U to vrijeme, programer je bio vrlo specijalizovana profesija. I ovdje vam kažu: “Ovdje imamo kul 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 numerisani svakih 10, svakakvi GOTO i drugi horor - nemaju nikakve veze sa modernim BASIC-om, a nemaju čak ni sa BASIC-om od 89.

Još jedna smiješna priča je jezik Pascal, nadaleko poznat u univerzitetskim krugovima, uglavnom u Rusiji i zemljama bivšeg Sovjetskog Saveza. Iznenađujuće se koristio i nastavlja da se koristi kao nastavni jezik. U ostatku svijeta je rjeđi, ali je i živ i zdrav. Postoji takva osoba Wirth - ovdje je on naučnik, teoretičar. Učestvovao je u raspravi o Algolu, nije mu se svidelo to što se dogodilo, i smislio je svoj jezik - Pascal. A onda je firma Borland (a prije toga i mnoge druge firme - Apple je bio angažiran, posebno) uzela i sve upropastila. Imao je prelijepu teoriju, vitak - "sve će biti u redu" - i tamo su uzeli i trpali šta je ljudima potrebno za posao. Pa, nije ispalo onako dobro kako je želio.

I na kraju,. Xi su izmislili inženjeri. Ako je Pascal izmislio naučnik, onda su C izmislili Kernighan i Ritchie, oni su radili kao inženjeri u Bellu. Kako je do toga došlo? Tada je bilo nemoguće napisati bilo šta sistemsko na ovim jezicima (predavač ukazuje na Fortran, COBOL, Algol). Šta je "sistemski"? Na primjer, operativni sistem, 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.

Šta je suština? Kernighan i Riči su voleli da se igraju igračke Asteroidi - leti svemirski brod, a postoje asteroidi, on puca na njih i oni se raspadaju. Imali su server na kojem su igrali, ali tamo je bilo puno ljudi, a igračka je usporavala. I otkrili su negdje u njihovoj kancelariji da imaju nekakav kompjuter koji niko ne koristi. Ali postojao je problem - bila je drugačije arhitekture, a igra je napisana u Assembleru.

Prepisali su ga, naravno, čak su i urezali neke karakteristike da 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 da napišu jezik visokog nivoa 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 C jezik, koji je imao ogroman uticaj na sve kasnije. Svi oni (predavač ukazuje na Algol, Fortran i ostale pomenute jezike) imali su veliki uticaj, ali C - da...

U skladu s tim, to je bio glavni jezik u Unixu - operativnom sistemu koji je u to vrijeme bio još popularniji nego sada. A otprilike 80-ih godina, situacija je bila otprilike ovakva (predavač pokazuje na osnovnom, 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 kompjuteri postali manji, pametniji, jeftiniji, a ljudi su hteli svakakve čudnosti, kako bi da živimo još bolje, da živimo 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 bilo šta, uključujući pucanje sebi u nogu, pucanje sebi u nogu iz fikcije, u drugu nogu, pucanje jednom nogom u drugoj nozi, generalno - to želite da uradite. Ali u isto vrijeme, neke arhitektonske stvari se tamo rade prilično teško - opet, kao u Assembleru, moramo pratiti gdje smo, šta i koju memoriju smo dodijelili; tu je sve vreme ova memorija negde "teče" - to jest, odabrali smo, zaboravili da obrišemo, izbrisali pogrešnu stvar, izašli iz memorije, uopšte - imamo gomilu problema.

C ++ je prvobitno kreiran 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 fudbalsku 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 mogućnosti. Istovremeno, C++ je zadržao gotovo potpunu kompatibilnost (u to vrijeme) sa jezikom C, program napisan u C-u uspješno je kompajliran kao C++ u 99% slučajeva i čak je radio na isti način. Ovo je trebalo da olakša prelazak sa C na C++.

Kao dodatak objektnom pristupu (u C++), brzo se pojavila Standard Template Library (STL). Mislim da su u školi oni koji su još predavali 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 želite da sortirate cele brojeve ovde, ovde želite realne brojeve, ali evo nizova koji se mogu porediti jedan sa drugim, morali ste da napišete tri različite vrste koje rade potpuno istu stvar, samo imaju različite tipove podataka. Ovo nije baš dobro, a predlošci koji se nisu odmah pojavili u C ++ znatno su olakšali ovaj problem. To jest, imali ste apstraktni program koji je uspješno sortirao nešto što se može porediti jedno s drugim.

Skriptni jezici iz 90-ih

Ali vrijeme nije stalo, 80-ih se dogodilo mnogo zanimljivih stvari. Ali negdje na prijelazu iz 80-ih u 90-e, kompjuteri su postali toliko dobri da je već bilo moguće raditi vrlo čudne i vrlo neefikasne stvari. Konkretno, to su bili skriptni jezici koji nisu kompajlirani u mašinski kod, već interpretirani. BASIC se takođe tumačio u neko vrijeme, ali ovi skript jezici su bili namijenjeni uglavnom za obradu teksta - na primjer, Perl, Python (tada nije bio baš poznat), PHP, Ruby - ovo su skript jezici koji se nalaze u u jednom ili drugom stepenu još uvek žive (svi su uspeli da se pojave pre 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 dozvoliti mnogo više. Na primjer, program može pogledati svoj kod i nekako ga koristiti; ona zna šta se dešava u njoj i zahvaljujući tome može da uradi mnogo zanimljivih stvari.

Perl je bio dizajniran za obradu teksta - u to vrijeme je već bilo toliko memorije u kompjuterima 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. Kada pogledam kod u Perlu i pokušam nešto shvatiti, ništa ne razumijem. Možda da ga bolje poznajem, nešto bih i razumio, ali kako sam čuo od onih koji još znaju, kažu da je lakše prepisati. Odnosno, programi su kratki i zaista ih je lakše prepisati nego shvatiti šta postoji i popraviti.

Otprilike u to vrijeme, sredinom 90-ih, pojavio se internet. U početku je to bila pošta, sajtovi sa statičnim HTML-om, ali ljudi su hteli da tu dodaju neku vrstu dinamike kako bi nam se sve odvijalo dinamički, mogli da se popune neki obrasci, da se urade knjige gostiju i nešto drugo. Shodno tome, za to je bila potrebna neka vrsta interakcije, osmislili su protokol, kako on komunicira, i, što je najvažnije, generisanje ovih statičkih (uslovno) stranica koje će biti "pljunute" 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, razmere nisu uporedive sa onim što se sada dešava.

PHP je nastao kao ... slučajno. Jedna osoba je brzo prestala da radi - napravio je neku svoju stranicu, imao je nekakvu knjigu gostiju, nešto drugo, neke stvari. I napisao je skup makroa neke vrste za Pearl, koji je izgledao kao C, jer je znao kako da koristi 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 mnogo jasnije nego na Pearlu i možete ga urediti." I ljudima se dopalo.

Onda je odustao od slučaja. Generalno, kao rezultat toga, ovaj PHP je počeo da živi i vremenom je postao mnogo popularniji od Perla. Ali ova njegova "porođajna trauma" (ideja je poput skupa makroa za Pearl) odigrala je prilično okrutnu šalu s njim. Jezik se pokazao čudnim. Odnosno, razvijao se sam, niko ga nije dizajnirao, niko nije administrirao proces razvoja (ni kompanija ni bilo koja osoba), ali je bilo 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 kroz donje crte, općenito, postavke su tu i tamo, a kako će sve funkcionirati nije baš jasno. Ali možete sesti i pisati u PHP-u za dva sata, jer je tako nameravao.

Python i Ruby: Ruby je sada manje popularan, Python je nekako bolje "izrezan", hajde o tome kasnije. Jasno je da su u to vreme to bili (predavač ukazuje na Perl, Python, Ruby, PHP) visoko specijalizovani jezici za visoko specijalizovane svrhe. Uglavnom, tada u njima nije pisalo sistemsko programiranje, nikakva poslovna logika, a sada to ne radi mnogo.

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 pisati ne za web, ne za obradu teksta, već za jednostavne aplikacije, za operativne sisteme, za igračke - općenito, za bilo što. Ali C++ je zapravo jeziv jezik. Zašto? Jer, prvo, naslijedio je sve probleme sa C zbog kompatibilnosti unatrag. Tamo se i dalje moglo ubiti na milion 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 komade neke vrste došla je iz C (ako možete pisati uključiti u C ili C++ - u stvari, to je bilo zamišljeno kao samo ubacivanje teksta biblioteke u vaš program, na kraju, kada napišeš gomilu inkluzija, imaš sve - ako je "primitivno", kao što je bilo na samom početku - sve se ubaci u jedan fajl i onda se sve to užasno dugo kompajlira, jer se vrti 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 naći programere na tržištu, moraju puno platiti, pa, generalno, to nije slučaj...). A naši računari sve brže broje, sve su jeftiniji, ljudi kupuju sebi nove računare i žele više aplikacija, više igračaka za telefon, općenito - više radosti.

Ovako se pojavila Java (Java). I tu je povezana prilično smiješna priča kako se ime pojavilo na ovom jeziku. Ima programera, stalno piju kafu i u to vreme je bilo moderno piti kafu koja je rasla na ostrvu Java. Jezik je zamišljen kao jezik za ugrađene uređaje, posebno za aparat za kafu. Ovako je nastao naziv...
Šta je počelo s njom, šta je bilo dobro u njoj i zašto je stekla toliku popularnost? Prvo, potpuno su se riješili Sišninog naslijeđa. Bez pokazivača, mnogo manje načina da odbijete bilo koji dio svog 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. E, evo (predavač pokazuje na Javu) već je tada bilo više promišljeno, i u teoriji su ljudi mislili, a u praksi su primjenjivali i radili sve mnogo kul.

I konačno, treći. Naši Java programi nisu sastavljeni u mašinski kod, već u kod za virtuelnu mašinu. To jest, imali ste JVM virtuelnu mašinu (VM) - Javovsky. Vaši programi su sakupljeni u neku vrstu posredne prezentacije i onda su, uz pomoć ove mašine, već izvršeni. šta je to uradilo? Prvo, usporio je, a drugo, strašnom silinom je pojeo memoriju, i treće, bio je prenosiv bilo gdje (teoretski) - čak i na aparat za kafu, čak i na mlin za kafu, čak i na kompjuter, čak i na mobilni telefon. S jedne strane, ovo je dobro, to jest, upravo ste napisali implementaciju virtuelne mašine, a zatim svuda pokrećete svoje Java programe. Ali, s druge strane, loše je što je isti telefon u to vrijeme imao malo memorije, bile su slabe performanse, a sve je to dodatno počelo zatupljivati ​​i usporavati.

Ali čak 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 dozvoljava pisanje loših programa - tu nema sredstava za pisanje loših programa. Tamo možete pisati samo dobre programe. Pa, u razumijevanju 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, skupljano satima i tamo još nešto. U Javi možete rastvoriti i kantu za smeće, ali za to se već morate malo potruditi. Odnosno, po difoltu ne ispada da je "gomila smeća", nastaju drugi problemi, da je tu nešto naslijeđeno ili naslijeđeno - generalno na jedan smisleni 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), pa, a posebno nas zanima C# (skoro 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 sa jezikom Java, pojavio se iste godine - riječ je bila moderna, licencirali su zaštitni znak za korištenje.

Na šta 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++, generalno ne morate znati ništa drugo - uzmete i pišete na C++, a zatim dodate dolare na početku , 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, izuzetno su slični u nekim jednostavnim stvarima. Ako rješavate neke školske probleme, obrazovne zadatke, nešto drugo (ne dizajnirate veliki projekat - imate jedan fajl koji čita brojeve, prikazuje brojeve u konzoli, radi nešto drugo), onda gotovo da nema razlike između ovih jezika. Jasno je da su JavaScript i PHP specijalizovani, sve imaju malo drugačije. I ovde (predavač ukazuje na Javu i C#) generalno postoji vrlo mala razlika.

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

Izbor jezika u zavisnosti od zadatka

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

Programiranje niskog nivoa

Ako pišete nešto niskog nivoa, onda je C najbolji izbor, ali zapravo sam čuo nešto (ali nisam vidio) da se C++ koristi za ovo. Ali jedva da vjerujem u ovo, jer u C-u možete jasno kontrolisati - pošto ste dali toliko bajtova memorije, biće tako i tako. A u C ++ (STL), kako je string implementiran? Pa, nekako implementirano. I na kraju ne znamo kako i šta se tu dešava, možda će nam ponestati memorije na našoj video kartici ili će se dogoditi nešto drugo. Dakle, C i dalje živi i ne umire, takvi zadaci sistemskog programiranja i dalje postoje - napišite operativni sistem, napišite drajvere, napišite nešto drugo - C je odličan za ovo. Osim toga, sada postoje razne vrste uređaja (Internet stvari obećava da će uskoro doći) koji žive na baterije (i, naravno, biće ih milioni, sve će biti okačeno ovim Internetom stvari) , trebali bi biti vrlo jeftini i troše vrlo malo električne energije. Shodno tome, tu će biti 2 KB memorije, procesor od 5 kHz, pa, naravno, neće ići u skorije vrijeme ubaciti nekakvu virtuelnu mašinu ili skriptni jezik, što znači da morate nešto napisati u C. Pa čak i sada, na primjer, kalkulacije na video kartici (OpenCL ili neka druga tehnologija) - ne smišljaju novi jezik za pisanje programa za njih - tamo rade C uz neka velika ograničenja. Samo zato što ljudi već znaju kako, zašto naučiti nešto novo? Formalno, ovo je vjerovatno i, u određenom smislu, C.

Web programiranje

Recimo da želite da napišete novu Facebook (društvenu mrežu). Na čemu ćeš ovo napisati? (Iz publike govore o HTML-u i CSS-u.) HTML, CSS je dizajn, a mi želimo da tu možemo 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 generiše na drugom jeziku i šalje (dešava se da se skripta generiše... jer je ponekad lakše upravljati nekim promenama 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 da napišem neke svoje stvari kako bi i dalje funkcionisalo dobro, a ne kao što je "tyap-blooper" urađen, ali oni su to uradili. U suštini, nije bitno u čemu pišete, ali ne preporučujem Perl. Ovdje i sada, naravno, niko ništa ne piše od nule za web. Svi pišu neku vrstu okvira ili tako nešto. Online kupovina? Skinuli smo okvir za internet prodavnicu - pa, to je to, napisali smo internet prodavnicu.

Poslovno programiranje

Zatim želite da napišete neku dosadnu bankovnu aplikaciju. Ili, na primjer, imate nekoga ko prodaje sim kartice? Možda ste ikada kupili telefon ili nešto drugo pa su vam rekli: "Sistem visi, ne možemo ništa." Na čemu ćete pisati takvu aplikaciju? (Plač publike o Pythonu) Ne možeš tako nešto napisati u Pythonu, šta 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 ukucava na sve moguće načine, i općenito tamo možete sakriti grešku tako da iskoči u takvoj situaciji da ne možete ni shvatiti šta su ti pokvareni korisnici tu uradili, da vam je sve pokvareno. Odnosno, bolje je pisati male skripte za sebe u Pythonu - razumete šta se tamo dešava i šta se radi. Pa, ili nešto što nije šteta izbaciti: hoćeš nešto da izbaciš pre konkurencije, pa šta 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šete, na primjer, neku bankarsku aplikaciju (da odobrava kredite, nešto drugo) - napišete to na Javi. Jer tu je ozbiljna stvar, parci papira, novac, dokumenti, nesto drugo, ali ne mozes u tome toliko zabrljati da se sve pokvari, inace ce se ljudi uvrediti - njihov novac je nestao i nigde nije stigao, u trenutku kada se niz pretvori u broj ili obrnuto. Dakle, to znači da metodično uzimate Javu i pišete, pišete... Pa, ili na.Netu, takve situacije se, u principu, takođe dešavaju. Tu, naravno, možete naići i na probleme, ali je ipak vjerovatnoća za to nešto manja.

Programiranje za vojsku, vazduhoplovstvo

Sada zamislite da su vas odlučili poslati na Mjesec u raketi. Šta biste radije koristili za pisanje koda koji kontroliše raketne motore? da vidimo. Ovo, verovatno (predavač pokazuje na Perlu, Pythonu, PHP-u, Rubyju), ne vredi - usporava, nešto drugo se dešava, pa, generalno, ne bih pristao da letim na takvoj raketi. U C++? Da budem iskren, ne bih ni meni vjerovao, jer postoji previše načina da se ubiješ u C++. Kada ste tamo negde u svemiru, nije baš dobro.

Možda u Javi? Čini se da je tamo sve prilično pouzdano i arhitektura je dobra, nema divljih tipova, nema viška memorije. Recimo da je došao najvažniji trenutak, a naša Java je odlučila da skupi smeće za nas. Moramo da sletimo, usporimo, a ona kaže: "Ne, smeće ide." Općenito, nije ni dobro.

Da budem iskren, više bih volio da ovaj program bude napisan na Pascal-u. Ja, naravno, ne volim baš Pascal, ali nekako bi u takvim stvarima bilo jako cool.

Korištenje nekoliko jezika odjednom za razvoj softvera

Pa, šta uopšte treba 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 veliki da čak ni baza podataka ne podržava neku već napisanu) vjerovatno je napisan u nekim tada niskim -nivo C za nevjerovatno brzo pisanje na disk i sve to. Naravno, pisanje cijelog projekta u C-u se ne isplati. Možda postoji neka vrsta posredne logike napisane 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 direktno izvršava od strane pretraživača (JavaScript). I sve to živi zajedno i uspješno komunicira.

Šta ljudi ponekad rade u razvoju nekih aplikacija, čak i velikih? Uzimaju i pišu prototip u Pythonu (kako će sve funkcionirati), skiciraju, razmišljaju o nekakvoj arhitekturi. Pisanje na njemu je zaista veoma brzo - ubacili su prototip, eksperimentisali s njim i rekli: „Vau! To je tako kul! " I potpuno prepisan. Činilo se da su posao obavili dva puta, duplo duže (pa, jedan i po). Ali ne! Često se pokaže da ova metoda nije loša, jer ako odmah napišete nešto, na primjer, na Javi, a zatim odlučite: „Ne, hajde da refaktoriramo, promijenimo arhitekturu u potpunosti, i sve to“, onda ćete potrošiti 10 puta vise vremena... Takve stvari takođe postoje i žive.

Uslovi za uspjeh bilo kojeg programskog jezika

Hajde sada da razgovaramo o tome zašto neki zgodni jezici nisu preživjeli ili žive u vrlo ograničenom prostoru. Kada je Wirth vidio šta loše kompanije Apple, Borland i sve to rade sa njegovim Pascalom, smislio je još bolji jezik - Oberon. Bilo je samo divlje minimalistički - to jest, bilo je vrlo malo komandi (Strings? Zašto su nam potrebni stringovi? Napravićemo niz znakova!). Pa, nešto mu nije išlo u meri u kojoj je moglo.

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

Šta je problem? Zašto su neki jezici poput Pythona, koje nijedna kompanija u početku nije podržavala, preuzeli tržište. PHP, koji je takođe loše dizajniran, takođe je sam preuzeo i zauzeo tržište (većinu). A uložene su svakakve milijarde dolara (predavač pokazuje na Adu) i nigde nije otišlo, ništa se nije desilo. Šta je razlog tome? To je zbog činjenice da ne postoji infrastruktura oko ovih jezika. Odnosno, jezik je možda odličan, ali sve dok nema dokumentacije, dok ne postoji zajednica koja može da odgovori na pitanja (na Stack Overflowu) i, konačno, najvažnije, dok nema veliki broj biblioteka, jezik se ne pali. To jest, vi ste, na primjer, htjeli napisati web stranicu na Oberonu. Zašto ne? I počinje zabuna... Ne možete podići svoj web server na Oberonu da biste lagano testirali, ne možete povezati nijednu biblioteku, jer nisu na Oberonu. I sve se to radi preko nekakvih štaka, sile odlaze, i generalno pljuješ i pišeš svoju stranicu na čistom C umjesto na Oberonu. A oni jezici koji mogu koristiti biblioteke drugih jezika dobro žive. Isti Python na mjestima gdje usporava. Pa, generalno, svakakve standardne stvari poput sortiranja i nečega drugog su napisane u C-u, a on (Python) zna kako da komunicira sa njima.

Java takođe ima Java Native Interface. Ovo je u suštini C, odnosno tamo (po mom mišljenju, žele da zabrane sve vreme, ali izgleda da još nisu zabranili) ovi jezici mogu da komuniciraju sa već postojećim bibliotekama (uglavnom onim Sishny). I zbog toga uzimaju i rade. Ideja koju pokušavam da vam prenesem je jasna, zar ne? Nemojte pisati na jezicima koji ne znaju kako povezati C biblioteku. Pa, ako želite da uživate u nečemu cool. Pa, i postepeno su oni (jezici) obrasli svojom infrastrukturom. I žive nekako dobro.

Programski jezik i karijerno vođenje

Hajde sada da razgovaramo o tome kako da razumete šta želite u životu. Šta su cool stvari? Možete raditi neku vrstu sistemskog programiranja, zar ne? Super je prebrojati ove bicikle tamo, želite pokrenuti kvadrokoptere, neke kamere i još nešto da radite. Onda je C vjerovatno vaš izbor.

Ako želite da pišete, možda 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 gospođice), evo ih - Java, .Net. Odeš na posao u banku, pišeš, ideš na posao u devet u beloj košulji, dobiješ dobru platu i pišeš po preporuci najboljih Java-izvora, .Net-ovca i sve to...

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

Šta se dešava sa Ruby, takođe nije jasno. Pa, možete i PHP, ako ste ga već naučili, pošto su oni toliko jednostavni da ne treba mnogo vremena da ih ponovo naučite.

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, hemičar, analitičar, bilo ko, i trebate brzo nešto izračunati, analizirati neke podatke (za biologe, na primjer, koliko arktičkih lisica živi na Komandantskim otocima). Sve ovo možete uneti u tabelu u Excel-u ili analizirati nečim. Python je također dobar za ovo, zna raditi s tekstom, a biblioteke su pune svih vrsta, statističkih i svega toga. Ako želite da radite neku vrstu mašinskog učenja, obradite neke podatke, predvidite, onda se to sada najbrže radi u Pythonu. Međutim, treba napomenuti da su zadaci veoma različiti. Na primjer, ako želite trenutno trgovati na berzi u uslovima kada se kotacije stalno mijenjaju, onda bez obzira na to koliko cool Machine Learning pišete u Python-u, ljudi koji imaju to napisano u nečem bržem će imati vremena da kupe sve ranije, dok ćete biti uračunati, čak i ako su njihovi algoritmi lošiji. Stoga čak i ovi zadaci mašinskog učenja (neki od njih) zahtijevaju visoke performanse (i izuzetno visoke), a shodno tome i druge jezike.

Jedini način da saznate šta želite je da probate sve. Sada ću to reći kao jednu od vizija kako možete isprobati sve. Kako postati programer, i to sretan? Dakle. Počinjemo od nule. Ovdje u školi učite matematiku, ruski jezik i ostale obavezne i fakultativne predmete, a vaše znanje iz oblasti programiranja se trenutno ogleda na tabli (predavač pokazuje na praznu tablu). I želite da postanete srećna osoba, radite ono što volite, zaradite mnogo novca i ne uskraćujete sebi ništa i budete srećni.

Jedan od načina da se ovo uradi. Postoje, naravno, razne vrste inspirativnih priča o ljudima koji uopšte nisu išli na fakultet, ili su ih napustili i postali milijarderi, vlasnici kompanija i tako dalje. Ali treba napomenuti da je većina ljudi koji možda nisu postali milijarderi, ali i dobro žive, ipak u nekom trenutku završila fakultet.

Kakva je naša situacija sa upisom na fakultet (sada studirate u školi)? Dok ste u školi, morate shvatiti da je sljedeći korak da se upišete i brinete o tome. 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 pričati o njegovim problemima) i, najčešće, postoji Java. I dalje se svašta može dogoditi u zavisnosti od Olimpijade, ali ne i suštine.

Kako izgleda grafikon distribucije jezika na Sveruskoj olimpijadi iz informatike? Ljudi koji učestvuju 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).

2000. godine skoro niko nije pisao na C++. Petnaest godina kasnije, gotovo niko ne piše na Pascalu, uprkos činjenici da je Pascal moderan. Ovo je jezik koji može učiniti skoro sve isto. Samo su svi postali lijeni da to nauče, 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 - ovo je problem. Napisali su neki set (potreban) - super, napisali su to u C++, u Pascalu opet muka traje. Na novim Pascalima, naravno, možete to učiniti, ali oni zapravo koštaju. Možda to niste primijetili, ali jeste.

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

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

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

Sada ću vam reći kako mi u HSE gradimo kurs, kojim redosledom su jezici, kako se predaju primenjena matematika i računarstvo na Fakultetu primenjenih nauka, što Yandex i ja radimo. U prvom semestru - Python (ne u potpunosti, o tome kako treba učiti u školi) i C++ (širi, mnogo širi nego što se inače uči u školama). Odmah da ti kažem da se ne uplašiš, ako odjednom poželiš da uđeš, reci: „Zašto, ja sve ovo već znam, zašto ću negde da učim? Radije bih otišao negdje drugdje." Za one koji već znaju dobro programirati, postoji mogućnost da direktno pređu na proučavanje algoritama, i to na prilično teorijsku obuku. Ne gledamo ih sada, ovo (pokazuje na tablu) je za one koji programiraju srednje ili nikako.

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

Zatim dolazi kurs "Algoritmi" i poseban predmetni projekat. Klasični algoritmi sa 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. Projekat je o tome da učenici rade nešto završeno. Na primjer, jedan od projekata je bio: brojati... Recimo da imate puno stanova u Moskvi i shvatite: „Oh, imam puno nepotrebnih stvari, iznajmiću neke. I oni određuju cijenu, a niko ne želi da iznajmi stan od vas - vjerovatno preskupo. Ili daju nekakvu cijenu, odmah ga skinu i pomisliš: „Ma, valjda sam ga jeftino prodao“, pa se i ti naljutiš. Odnosno, trebalo je izračunati koliko košta iznajmljivanje stana? Unosite podatke - oni pravi procjenu za vas. Ovakva stranica koja se sastojala od nekoliko stvari: uzeti prijedloge, raščlaniti, primijeniti neku vrstu algoritma mašinskog učenja (vjerovatno) nepretenciozan i napraviti prelijepo web lice u kojem možeš nešto izabrati, ubaciti nešto, nekoliko metara, bilo koji broj soba , broj sauna, broj jacuzzija u vašem stanu i okvirno procijenite cijenu. Odnosno, neka gotova, ne baš komplikovana stvar. Ovdje to znači (predavač ukazuje na kurs o algoritmima) tako snažan C++, sa konzolnim I/O. Eto, ovdje (predavač pokazuje na natpis "projekat") je nešto pod vodstvom mentora, moguće sa bazama podataka, možda sa raščlanjivanjem tekstova i sa nečim drugim.
Zatim slijedi treći semestar - predmet pod nazivom "Računarski sistemi". Postoji poprilično asemblera za razumevanje (vrlo malo) i onda, nešto slično čistom C-u i interakciji sa operativnim sistemima, sistemsko programiranje u suštini. A projekat za seminar je također nešto na temu svih mrežnih interakcija, prilično niskog nivoa: razviti neki uslužni program, na primjer rsync (sinhronizacija, možda znate. U čistom C-u, manje-više, napišite analog rsync, koje ćete imati preko mrežnih fascikli za sinhronizaciju sa svim pristupima datotekama itd.).

I konačno, četvrti. Ne znam ni kako da to nazovem, ovo je takav vinaigret tehnologija potrebnih za pravi razvoj, na primjer, za web razvoj. Odnosno, radi se o praktičnoj primjeni baza podataka, opet nešto slično onome što je urađeno na projektu (predavač ukazuje na projekat 2. godine), ali dublje. Odnosno, takve manje-više konkretne stvari su već praktično programiranje. Paralelno sa ovim, postoji bilo kakva teorija, pa, ovde se bave i naukom.

I nakon dva kursa 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ć shvataju da ne žele da se bave kompjuterskim sistemima ni na koji način (oni npr. nije volio sistemsko programiranje), ali žele da se pozabave nekim teoretskim algoritmima, teškoćama proračuna, smišljanjem nekih novih stvari, distribuiranih ili nečim drugim. Ili, naprotiv, misle da ovde nemaju baš mnogo ( predavač pokazuje na prvu liniju kursa sa Python-om i C++) idi, onda ( Predavač ukazuje na treću liniju kursa, sa sistemskim programiranjem) - kako vam se ne sviđa, brojite bajtove i postavljajte razna ograničenja za čitanje-pisanje, radite streamove, niti i još nešto. I u skladu s tim ljudi biraju neki pravac i uče. To je, u principu, da ne biste razvili "sindrom pačeta" - prvo ste videli svog Paskala a sada kažete "Pascal je moć"; ili napredniji - vidjeli ste C ++ i počeli o svima govoriti da je C ++ moćan, a sve ostalo nije baš dobro.

Ovdje ovo treba sagledati šire (predavač pokazuje na listu predmeta na tabli) - ovo je jedna od metoda koja je odabrana, posebno na HSE-u (pojavila se nedavno, pa je prilično moderna). Postoje i drugi načini da se upoznate. Na drugim dobrim univerzitetima malo drugačijim redoslijedom i drugi akcenti su stavljeni. Ali takođe pokušavaju da upoznaju ljude sa svime što imaju.

Kako programer traži posao

ti si ovo ( predavač pokazuje na listu kurseva) uradio sve, studirao na fakultetu, učio nešto produktivnije još dvije godine i treba ići na posao. Kako birate nešto sa čime ćete raditi? Prvo, moraš sve da znaš, zađeš negde duboko i već znaš šta voliš. Morate izabrati ono što volite prirodno. Jer ako volite, uložićete energiju, imaćete motivaciju i generalno sve će biti u redu. Jer ne radi se samo o novcu, već o tome da ga učinite zanimljivim i ugodnim za vas. Pa, ako želiš da uđeš u kul kompaniju, zaposli se. Kakvu bih osobu lično volio vidjeti? Recimo, dođe mi stotinu studenata - moram dva ili jednog da uzmem na posao. Zašto dolaze, uopšte ne razumem ko su, šta su, kako su? U najboljem slučaju, pokazaće mi diplomu koju su dobili na fakultetu, a ja ću reći: „Jao! Ovo je kul diploma, ali nije tako kul!" I možda grešim, usput. Možda je osoba imala puno slobodnog vremena i mnogo bolje naučila.

Šta bi bilo super? Prvo, neki projekat otvorenog koda koji ste napisali od početka do kraja. Poželjno je, ako radim neku infrastrukturu da se podaci mogu brzo čitati, ili nešto drugo, onda bi me, naravno, zanimalo da mi napiše nešto otvorenog koda. Nije napravljena web stranica, već nešto na temu. Zašto me ovo zanima? Mogu da pogledam tvoj kod, vidim koliko si se često obavezao, vidim kako si reagovao na greške korisnika, bugove od programera koji ga koriste - sve je zapisano, gledam sve i mislim: „Opa, ova greška nije bilo dvije godine.Zatvoreno, eto, neljubazno si odgovorio korisniku, onda ne uzimam nešto drugo”. Odnosno, ovo je vaš lični projekat.

Dalje, šta bi drugo bilo cool? Voleo bih da vidim kako ste radili timski rad. Odnosno, dođete kod mene na razgovor i kažete: „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 momka, djevojku dizajnera, dečka na tehničkoj podršci. Bilo nas je petoro i uradili smo odličan projekat." Pa vidim šta je zapravo tvoj projekat, kažem: "Šta je tvoj?" Pogledam ponovo kod i shvatim da znaš raditi u timu s ljudima.

Nije programer onaj koji sjedi sam (takav indie) u garaži, negdje sa ugašenim svjetlom, ne priča ni sa kim, hvata bradu i piše. Ipak, postoji neka vrsta interakcije sa ljudima. Sa šefom, na primjer, koji vas ponekad može psovati (šefovi, oni su takvi, nisu uvijek ljubazni). I vidim da znaš da radiš sa ljudima i raduje me ako imaš neki dobar tim. Čak i ako nije dobro, bolje je nego da ga nemate.

Šta bih ja lično još voleo? Ako ste se pokazali u velikim projektima. Na primjer, predali smo nešto Linux kernelu, ako se bavite programiranjem sistema, popravili smo neku grešku. Odnosno, pokazali su da možete čitati tuđi kod i da ste u mogućnosti da napravite neke promjene u njemu. Gledam: "Oh, zaista, smislio si nešto komplikovano i popravio neke greške!" I počinjem da se radujem tome. Jer ja imam... pa ne znam... moj programer je dao otkaz jer su mu konkurenti nudili veću platu, a ja moram hitno nekoga da ućutkam - tebe. Izgledam kao da si pisao samo od nule, ali ne znaš čitati i uređivati ​​tuđi kod, i ja se uznemirim.

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 dobijete posao na nekim algoritamskim stvarima, volio bih da radite neke algoritme u sportskom programiranju. I na kraju, ako ste razmišljali o profesiji, pročitali kako se vode intervjui, sreli ste da neki ljudi tamo izražavaju veliko nezadovoljstvo: „Došao sam, pitaju me šta mi je hobi. Sjedim kao sova i ne odgovaram, jer nemam hobi,”- a oni misle da HR-i to rade. Zapravo, pokušavaju shvatiti koliko ste prijateljski raspoloženi i primjereni. Ako ste neljubazni i neadekvatni, onda koliko god da ste genijalni i radoholičar, teški specijalista sa velikim znanjem, timu će biti teško da radi sa vama, a projekat nećete izvući sami. Osim toga, čak i ako se rastegnete, možete zamisliti kakvo opterećenje za kompaniju. I da ćeš sutra doći i reći: "Povećaj mi platu 10 puta, inače ću te ostaviti." Razumljivo je da kompanije ne žele da dođu u ovu situaciju. Stoga je odgoj adekvatnosti i dobre volje kod sebe jednako važan (barem) kao i razvoj neke vrste profesionalnih vještina.

Da rezimiramo, šta možete reći? Koji jezici su dobri, a koji loši? Pa, u okviru grupe jezika, na primjer između Ruby, Python i PHP, koji odabrati? Naravno, tačan odgovor je Python, ali u stvari razlika između njih je u broju dozvoljenih grešaka, u količini nečeg drugog - 5%, pa, možda 10%. Odnosno, ako već imate gotov projekat napisan u PHP-u, onda niko pri zdravoj pameti neće reći: "Hajde da prepišemo sve u Python-u." Oni će reći: "Unajmimo još PHP programera i nastavimo pisati u PHP-u." Odlično, to nije loš izbor. Jasno je da ako iznenada počnete da pišete projekat, onda bi možda bilo pametno izabrati Python sada. Mada, zavisi i od toga. Možda imate gomilu jeftinih PHP programera na tržištu, ali oni na Python-u su skupi i mislite: "Da, tehnologija je bolja, ali ću uštedjeti novac na gotovim programerima." I to je sve, super, već si došao i radiš tamo.
Kako da biram između Jave i C++? Da, ista stvar se dešava. Mislim da ćete do trenutka kada odlučite na kom jeziku započeti novi veliki projekat steći znanje u svom profesionalnom polju i moći ćete napraviti pravi izbor. Trenutno ne morate još da se odlučite za taj izbor, pa vam savetujem da radite šta želite.

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

Svaka osoba koja odluči da savlada osnove procesa kreiranja kompjuterskih programa, postavlja se pitanje koji su danas najpopularniji programski jezici, a koje je najbolje naučiti. I ako je na prvo pitanje vrlo lako odgovoriti, onda na drugo mora odgovoriti sam učenik, na osnovu 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 sistem znakova koji se koristi za pisanje kompjuterskih programa. Kao i svaki drugi jezik, on ima svoja leksička, semantička i sintaktička pravila.

Razlikujte jezike niskog i visokog nivoa programiranja. Danas uglavnom koriste drugi.

Programski jezici visokog i niskog nivoa

Programski jezik niskog nivoa ima strukturu blisku strukturi.U ovom slučaju komande se označavaju ne pomoću nula i jedinica, već pomoću mnemoničkih notacija. Najpoznatiji programski jezik niskog nivoa je asemblerski jezik.

Rad sa bilo kojim od jezika zahtijeva visoke kvalifikacije, a razumijevanje, osim toga, oduzima puno vremena za pisanje programa. Istovremeno, koristeći niske, možete kreirati male, ali istovremeno efikasne programe. Programerima početnicima se ne preporučuje da započnu svoje upoznavanje s njima.

Programske jezike visokog nivoa karakteriše prisustvo semantičkih konstrukcija za opisivanje operacija. Njihovo proučavanje oduzima dosta vremena, a njihova primjena u praksi zahtijeva brigu i razumijevanje osnovnih struktura i pravila sintakse i vokabulara. Ali u isto vrijeme, poznavanje jezika na visokom nivou omogućava vam da kreirate velike, šarene, multifunkcionalne projekte u rekordnom vremenu.

Visoki nivo 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?

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

Ruby, PHP, JavaScript ne smatraju se ništa manje popularnim. Većina stručnjaka se fokusira i 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 nivoa. To je zbog činjenice da se većina velikih projekata razvija na različitim jezicima. Na primjer, neki moduli su napisani koristeći C, drugi su razvijeni u Javi, a treći u Delphiju.

C, C ++ i C #

Počnimo sa C porodicom.

C jezik je kompajliran 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 kreiranje uslužnih programa i drajvera niskog nivoa i vrlo impresivnih aplikacija i softverskih kompleksa.

C # je moderan objektno orijentisan jezik zasnovan na jezicima C i C ++. Ima sistem sigurnog tipa. Jedna od njegovih karakteristika je da je veoma sličan drugom popularnom programskom jeziku - Javi.

Jedan od nedostataka jezika je to što vam omogućava da kreirate aplikacije samo za Windows operativni sistem, a osim toga, veoma je glomazan, što znači da programi napisani na njemu zauzimaju mnogo 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 pisati svoje prve aplikacije u posebnom Borland okruženju ili Visual Studiju.

JavaScript

JavaScript je jezik sa objektno orijentisanim mogućnostima. Razvijen 1996. godine i danas jedan od najpopularnijih. Jezik se uglavnom koristi za pisanje skripti na Internetu i radi u glavnim pretraživačima kao što su Internet Explorer, Firefox, Opera. Takođe je usko povezan sa HTML-om i CSS-om, tako da morate da savladate osnove ovih jezika pre nego što počnete da ga učite.

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

Ovaj jezik je pogodan za one koji su fokusirani na kreiranje pretraživača i skripti, aplikacija i dodataka za njih. Ako planirate da kreirate sopstvene sajtove, takođe morate da ga bolje upoznate.

Java

S obzirom na najpopularnije programske jezike, ne može se ne spomenuti Java. To je ciljno orijentisani programski jezik koji je u upotrebi od 1995. godine. Veoma je lagan i radi na bilo kojoj Java mašini bilo koje arhitekture. Koristi se za razvoj aplikacija za Android i iOS.

Python

Python - čiji je glavni zadatak povećati produktivnost programera, učiniti kod čitljivijim. Ima malu listu 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 različitih projekata, proširenja i integraciju prethodno razvijenih aplikacija.

Osnove jezika Python mogu se naučiti i kao polazna tačka za programiranje i kao drugi komplementarni jezik.

Ruby

Ruby je programski jezik visokog nivoa 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 skript jezik dizajniran za izradu web aplikacija. Često je uključen i na listu "Programskih jezika za početnike" i preporučuje se za učenje.

Može vam pomoći da kreirate visokokvalitetne web aplikacije u vrlo kratkom vremenskom okviru. Jezik ima jednostavnu i razumljivu strukturu, što vam omogućava da ga naučite za nekoliko dana.

Zaključak

Pregledali smo najpopularnije programske jezike čije učenje će vam pomoći da u budućnosti uspješno kreirate svoje projekte i zarađujete kao programer. Ne postoji konsenzus o tome koji jezik studirati, ali stručnjaci napominju da je poželjno poznavanje nekoliko programskih jezika, jer će to dodatno proširiti polje djelovanja i olakšati rad na različitim timskim projektima.

Programiranje je čitava nauka koja vam omogućava da kreirate kompjuterske programe. Uključuje ogroman broj različitih operacija i algoritama koji čine jedan programski jezik. Dakle, šta je to i koji su različiti programski jezici? Članak daje odgovore, a također pruža preglednu listu programskih jezika.

Istoriju nastanka i promjene programskih jezika treba proučavati zajedno sa istorijom razvoja kompjuterske tehnologije, jer su ovi koncepti direktno povezani. Bez programskih jezika bilo bi nemoguće kreirati bilo kakav program za rad računara, što znači da bi stvaranje računara postalo besmislena vežba.

Prvi mašinski jezik izumio je 1941. Konrad Zuse, koji je izumitelj analitičkog motora. Nešto kasnije, 1943. godine, Howard Aiken je stvorio Mark 1 mašinu, sposobnu da čita uputstva na nivou mašinskog koda.

Pedesetih godina prošlog veka postojala je aktivna potražnja za razvojem softvera, a mašinski jezik nije mogao da obradi velike količine koda, pa je stvoren novi način komunikacije sa računarima. Asembler je prvi mnemonički jezik koji je zamijenio strojne instrukcije. S godinama lista programskih jezika samo raste, jer polje 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 pogodan je za određeni zadatak. Svi programski jezici mogu se grubo podijeliti u nekoliko grupa:

  • Aspektno orijentisan (glavna ideja je odvajanje funkcionalnosti za povećanje efikasnosti softverskih modula).
  • Strukturno (bazirano na ideji stvaranja hijerarhijske strukture pojedinačnih programskih blokova).
  • Logički (zasnovan na teoriji aparata matematičke logike i pravilima rezolucije).
  • Objektno orijentisan (u takvom programiranju više se ne koriste algoritmi, već objekti koji pripadaju određenoj klasi).
  • Multi-paradigma (kombinujte nekoliko paradigmi, a programer sam odlučuje koji jezik će koristiti u određenom slučaju).
  • Funkcionalni (glavni elementi su funkcije koje mijenjaju vrijednost u zavisnosti od rezultata proračuna početnih podataka).

Programiranje za početnike

Mnogi ljudi postavljaju pitanje šta je programiranje? U osnovi, to je način komunikacije sa računarom. Zahvaljujući programskim jezicima, možemo postaviti specifične zadatke za različite uređaje kreiranjem posebnih aplikacija ili programa. Prilikom proučavanja ove nauke u početnoj fazi, najvažnije je odabrati odgovarajuće (za vas interesantne) programske jezike. Lista početnika je u nastavku:

  • Basic je izumljen 1964. godine, pripada porodici jezika visokog nivoa i koristi se za pisanje aplikativnih 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 kreiranje i običnih desktop programa i web aplikacija.
  • Pascal ("Pascal") - jedan od najstarijih jezika (1969), stvoren za podučavanje učenika. Njegova moderna modifikacija je snažno otkucana i strukturirana, ali Pascal je potpuno logičan jezik koji je razumljiv na intuitivnom nivou.

Ovo nije potpuna lista programskih jezika za početnike. Postoji ogroman broj sintaksa koje su dostupne za razumijevanje i koje će sigurno biti tražene u narednim godinama. Svako ima pravo da samostalno odabere pravac koji će mu biti zanimljiv.

Početnici imaju priliku da ubrzaju učenje programiranja i njegovih osnova zahvaljujući posebnim alatima. Glavni pomoćnik je integrisano razvojno okruženje za programe i aplikacije Visual Basic („Visual Basic“ je takođe programski jezik koji je naslijedio stil Basic jezika iz 1970-ih).

Nivoi programskog jezika

Svi formalizirani jezici namijenjeni kreiranju, opisivanju programa i algoritama za rješavanje problema na računarima podijeljeni su u dvije glavne kategorije: programski jezici niskog nivoa (lista je data u nastavku) i oni visokog nivoa. Razgovarajmo o svakom od njih posebno.

Jezici niskog nivoa su dizajnirani da kreiraju mašinske instrukcije za procesore. Njihova glavna prednost je što koriste mnemoničku notaciju, odnosno umjesto niza nula i jedinica (iz binarnog brojevnog sistema), kompjuter pamti značajnu skraćenu riječ iz engleskog jezika. Najpoznatiji jezici niskog nivoa su "Assembler" (postoji nekoliko podvrsta ovog jezika, od kojih svaka ima mnogo zajedničkog, ali se razlikuje samo po skupu dodatnih direktiva i makroa), CIL (dostupan na .Net-u) platforma) i JAVA bajt kod.

Programski jezici visokog nivoa: lista

Jezici visokog nivoa dizajnirani su za praktičnost i efikasnost aplikacija; oni su sušta suprotnost jezicima niskog nivoa. Njihova karakteristična karakteristika je prisustvo semantičkih struktura koje sažeto i sažeto opisuju strukture i algoritme programa. U jezicima niskog nivoa, njihov opis u mašinskom kodu bio bi predugačak i nerazumljiv. Jezici visokog nivoa su nezavisni od platforme. Umjesto toga, prevodioci obavljaju funkciju prevoditelja: prevode tekst programa u elementarne strojne instrukcije.

Sljedeća lista programskih jezika: C ("C"), C # ("C-sharp"), "Fortran", "Pascal", Java ("Java") - spadaju među najčešće korištene sintakse visokog nivoa. 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 su mnogo lakši za rad zbog njihove čitljivosti i jasne sintakse.

Najčešći programski jezici

U osnovi, možete napisati program na bilo kojem jeziku. Pitanje je da li će to raditi efikasno i glatko? Zato treba izabrati najprikladnije programske jezike za rješavanje različitih problema. Lista po popularnosti može se okarakterisati 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 sa "hardverom" samog računara (pisanje drajvera i pratećih programa), najbolja opcija bi bila C ("C") ili C ++, koji su uključeni u glavne programske jezike (vidi gornju listu). 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 ćete raditi, preporučujemo da počnete učiti iz C ili C ++ jezika. Imaju vrlo jasnu sintaksu, jasnu strukturnu podelu na klase i funkcije. Osim toga, znajući C ili C ++, lako možete naučiti bilo koji drugi programski jezik.

Top srodni članci