Programski jezici visoke i niske razine: koje biste trebali naučiti?

27.09.2019 Zanimljiv

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 i daje pregled popisa programskih jezika.

Povijest nastanka i promjena programskih jezika treba proučavati zajedno s poviješću razvoja računalna tehnologija, jer su ti pojmovi međusobno izravno povezani. Bez programskih jezika bilo bi nemoguće izraditi 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čke mašine. Nešto kasnije, 1943., Howard Aiken stvorio je stroj Mark 1, sposoban čitati upute na razini strojnog koda.

Pedesetih godina prošlog stoljeća počela je aktivna potražnja za razvojem softver, a strojni jezik nije mogao podnijeti velike količine koda, pa je stvoren novi put komunikacija s računalima. "Assembler" je prvi mnemonički jezik koji je zamijenio strojne upute. S godinama se popis programskih jezika samo povećava, jer opseg računalne tehnologije postaje širi.

Klasifikacija programskih jezika

Na ovaj trenutak 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 podijeliti u nekoliko grupa:

  • Orijentiran na aspekt (glavna ideja je odvajanje funkcionalnosti za povećanje učinkovitosti softverskih modula).
  • Strukturni (temeljen na ideji stvaranja hijerarhijska struktura pojedini programski blokovi).
  • Logički (temeljen na teoriji aparata matematičke logike i pravilima razlučivanja).
  • Objektno orijentirano (u takvom programiranju više se ne koriste algoritmi, već objekti koji pripadaju određenoj klasi).
  • Multi-paradigma (kombinirati više paradigmi, a programer sam odlučuje koji će jezik koristiti u određenom slučaju).
  • Funkcionalni (glavni elementi su funkcije koje mijenjaju svoju vrijednost ovisno o rezultatima izračuna izvornih podataka).

Programiranje za početnike

Mnogi se pitaju što je programiranje? U biti, to je način komunikacije s računalom. Zahvaljujući programskim jezicima, možemo staviti prije razne uređaje specifične zadatke, stvaranje posebne aplikacije odnosno programa. Kada proučavate ovu znanost u početnoj fazi, najvažnije je odabrati odgovarajuće (za vas zanimljive) programske jezike. Popis za početnike nalazi se u nastavku:

  • Basic je izumljen 1964. godine, pripada obitelji jezika visoke razine i koristi se za pisanje aplikacijskih programa.
  • Python je prilično lako naučiti zbog njegove jednostavne, čitljive sintakse, ali prednost je što se može koristiti za izradu običnih programa za stolna računala i web aplikacija.
  • Pascal je jedan od najstarijih jezika (1969) stvoren za podučavanje učenika. Njegova moderna modifikacija je strogo tipizirana i strukturirana, ali Pascal je potpuno logičan jezik koji je razumljiv na intuitivnoj razini.

Nije puni popis programski jezici za početnike. Postoji ogroman broj sintaksi koje je lako razumjeti i sigurno će biti tražene u nadolazećim godinama. Svatko ima pravo samostalno izabrati smjer koji će mu biti zanimljiv.

Početnici imaju priliku ubrzati svoje 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 nasljeđuje stil jezika Basic iz 1970-ih).

Razine programskih jezika

Svi formalizirani jezici namijenjeni stvaranju, opisivanju programa i algoritama za rješavanje problema na računalima podijeljeni su u dvije glavne kategorije: programski jezici niske razine (popis je naveden u nastavku) i 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 mnemotehničke zapise, tj. umjesto niza nula i jedinica (iz binarnog brojevnog sustava), računalo pamti smislenu skraćenicu iz engleskog jezika. Najviše poznatih jezika niska razina je "Assembler" (postoji nekoliko podtipova ovog jezika, od kojih svaki ima mnogo toga zajedničkog, ali se razlikuje samo u skupu dodatnih direktiva i makronaredbi), CIL (dostupan u .Net platformi) i JAVA Bytecode.

Programski jezici visoke razine: popis

Jezici visoke razine stvoreni su za praktičnost i veću učinkovitost aplikacija, oni su sušta suprotnost jezicima niske razine. Njihovo Posebnost- prisutnost semantičkih konstrukata koji jezgrovito i koncizno opisuju strukture i algoritme programa. U jezicima niske razine njihov bi opis u strojnom kodu bio predugačak i nerazumljiv. Jezici visoke razine neovisni su o platformi. Umjesto toga, prevoditelji obavljaju funkciju prevoditelja: prevode programski tekst u elementarne strojne upute.

Sljedeći popis programskih jezika: C ("C"), C# ("C-sharp"), "Fortran", "Pascal", Java ("Java") - je među najčešće korištenim sintaksama visoke razine. Ima sljedeća svojstva: ovi jezici rade sa složenim strukturama, podržavaju vrste podataka nizova i operacije s I/O informacijama datoteke, a također imaju prednost jer su mnogo lakši za rad zbog čitljivosti i razumljive sintakse.

Najčešće korišteni programski jezici

U principu, možete napisati program na bilo kojem jeziku. Pitanje je: hoće li raditi učinkovito i bez greške? Zato riješiti razne zadatke trebali biste odabrati najprikladnije programske jezike. Popis po popularnosti može se opisati na sljedeći način:

  • OOP jezici: Java, C++, Python, PHP, VisualBasic i JavaScript;
  • skupina strukturnih jezika: Basic, Fortran i Pascal;
  • više paradigmi: C#, Delphi, Curry i Scala.

Opseg programa i aplikacija

Izbor jezika na kojem je određeni program napisan uvelike ovisi o području njegove primjene. Tako bi, na primjer, za rad sa samim računalnim hardverom (pisanje upravljačkih programa i pratećih programa) najbolja opcija bila C ("C") ili C++, koji su uključeni u glavne programske jezike (pogledajte 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 ćete smjeru raditi, preporučujemo da počnete učiti s C ili C++. Imaju vrlo jasnu sintaksu i jasnu strukturnu podjelu na klase i funkcije. Osim toga, poznavajući C ili C++, možete lako naučiti bilo koji drugi programski jezik.

Od programera početnika to zvuči ovako: "S kojim jezikom da počnem?" Doveli smo naše stručnjake da odgovore.

Sve ovisi o tome koje područje odaberete. Ako želite izravno raditi s hardverom, napišite upravljačke programe i razne aplikacije, za što je potrebno maksimalne performanse, - tada će poslužiti samo C ili C++. Ako su vam cilj aplikacije za mobilne telefone, isplati se naučiti Javu ili Objective C, C#. Web poslužitelji zahtijevaju go, python i php; za web aplikacije - JavaScript.

Ako se još niste odlučili za područje, možete sigurno odabrati C/C++, jer, poznavajući ovaj jezik, lako možete naučiti bilo koji drugi. Postoji samo jedna stvar koju je važno zapamtiti: kao i govorni jezik, programski jezik se zaboravlja ako se ne koristi stalno, stoga je bolje tečno govoriti jedan ili dva jezika nego imati površno znanje o veliki broj.

Po mom mišljenju, pravi programer nikada nije ograničen na poznavanje samo jednog jezika. Čak i ako ćete u budućnosti pisati upravljačke programe i aplikacije sustava, i dalje ćete trebati jedan od skriptnih jezika kao što su perl ili python. Štoviše, poznavanje skriptnih jezika sada je jednostavno potrebno za svakog programera, unatoč njegovoj specijalizaciji.

Promicanje Demote

Python je sasvim prikladan za učenje općih koncepata programiranja. To je vrlo popularan jezik, ima mnogo biblioteka, sintaksa je laka za čitanje, a kod je prilično uredan. Glavne prednosti Pythona za početnike su to što je prilično uobičajen i jednostavan za naučiti. Na njemu možete jednostavno pisati i web aplikacije i obične desktop aplikacije. Ovisno o predmetno područje, morate odabrati objektno orijentirani jezik. Na primjer, ako se bavite sistemskim programiranjem, onda je C++ najbolji. Ako razvijate poslovnu aplikaciju ( Informacijski sustavi poduzeća), onda je ovo C# ili Java.

Promicanje Demote

Svojedobno sam počeo s Fortranom i Pascalom, jer sam ih imao na institutu. Zatim je tu bio C/C++, Visual Basic Script, PHP i Visual Basic, pa C#, pa malo F#.

Na temelju mog iskustva i mogućnosti izbora, najugodnije mi je bilo razvijati se u C#, i tu bih počeo. Najviše od svega, u smislu razumijevanja algoritama i operativnih mehanizama OS-a za koji sam pisao, dao mi je C++.

Promicanje Demote

Mislim da je najbolje mjesto za početak učenja JavaScript. Zahvaljujući web preglednicima, ovaj programski jezik je de facto standard za izradu web aplikacija, jedno od najbrže rastućih područja razvoja. O tome postoji i odlična besplatna knjiga, “Eloquent JavaScript”, prevedena na ruski.

Promicanje Demote

Sve ovisi o problemu koji želite riješiti. Međutim, ako je ovo vaš prvi jezik, preporučio bih vam jezik sa strogim unosom Opća namjena(C++, Java, .NET): s njima se ni u kojem slučaju nećete izgubiti i lako ćete se prebaciti na bilo koju drugu. Više zanimljiv način da biste razumjeli koji jezik učiti - idite na GitHub, potražite temu koja vas zanima i pogledajte što drugi programeri pišu.

Promicanje Demote

, tehnološki evangelist za Microsoft, izvanredni profesor na MIPT, MAI, učitelj u dječjem kampu JUNIO-R

Sve ovisi o dobi. Ako odlučite stvarno učiti programirati od malih nogu, a nemate još 12 godina, bolje je početi s jednostavnim grafičkim jezicima, kao npr. Kodu Game Lab ili Ogrepsti. Vjeruje se da bi tradicionalne programske jezike trebalo savladati nakon 12. Od tradicionalnih jezika C# mi je uvijek bio blizak - ima dobro razvojno okruženje, a možete programirati sve: od igrica do Jedinstvo, na web stranice na ASP .NET ili elektroniku. Da biste naučili, možete pogledati video upute ili pročitati knjigu C# za školarce.

Promicanje Demote

Preporučio bih da početnici prvo shvate da je jezik samo alat u radu programera. Da, naravno, važno je samouvjereno njime baratati kako biste stvarali dobri programi, ali na prvom mjestu treba biti vještina programera, a ne jezik na kojem piše.

Ali budući da još uvijek morate negdje početi, a proučavanje istih algoritama i struktura podataka u vakuumu nije baš zgodno, mogu preporučiti korištenje jezika C za ovo. Dovoljno je niske razine da ne uvodi tone sintaktičkog šećera i daje opće razumijevanje kako računalo koje pokreće program radi. Ali u isto vrijeme, ovo nije asemblerski jezik, koji omogućuje fokusiranje na opće stvari bez trošenja O Većina mentalnog napora odlazi na pamćenje svih naziva skokova i vrijednosti registara. Za književnost preporučujem klasiku

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

Naš prvi ovogodišnji post odlučili smo posvetiti vrlo bazičnoj temi, o kojoj je predavanje održano u Malom ShAD-u. Pohađaju ga srednjoškolci koje zanima tehnologija pa otuda i specifičnost prezentacije - predavanje će biti posebno zanimljivo onima koji tek počinju programirati i razmišljaju u kojem smjeru se razvijati. Za njih Yandex ima tečaj “Uvod u programiranje (C++)”, koji se može pohađati na platformi Stepic.org.

Predavač Mikhail Gustokashin kustos je akademskih programa u Yandexu, direktor centra za studentska natjecanja na Fakultetu računarstva na Visokoj ekonomskoj školi. Mikhail je obučavao desetke pobjednika i dobitnika nagrada na Sveruskim olimpijadama u programiranju.

Predavanje govori o tome koji programski jezici postoje, po čemu se razlikuju, kako su nastali te koji su bolji, a koji lošiji. Na početku ćemo govoriti malo o povijesti jezika - kako su se pojavili, kako su ljudi počeli programirati, kako se sve razvijalo, što se sada događa. Drugi dio dotaknut će se za koje zadatke je koji jezik prikladan, kako „odabrati svoj omiljeni jezik i uživati ​​u životu“. Predavač će malo govoriti i o tome kako se, po njegovom mišljenju, sve to može naučiti i onda zaposliti.

Kao i uvijek, ispod presjeka nalazi se detaljan transkript predavanja kako biste se lakše snalazili u njegovom sadržaju.

Povijest programskih jezika

Krenimo od početka. U početku računala nisu ni imala tipkovnice! Odnosno, sve je bilo jako loše - nisu imali ni tipkovnicu ni ekran, imali su samo bušene kartice (to su sitnice s rupama ili bez rupa). U skladu s tim, ili su tamo zabili pribadače ili su tamo osvijetlili svjetlo. Ako postoji rupa (ili obrnuto ne) - to je značilo nulu ili jedinicu. I programi su se u to vrijeme pisali pomoću strojnih kodova - svaka operacija na računalu (zbrajanje, oduzimanje, neke složenije operacije) imala je neku vrstu strojnog koda. Ljudi su sami odabrali taj kod sa znaka, svakakvih adresa u memoriji, sve su to izkucali rukama i stavili u čitač - i sve je izbrojano. Naravno, posao programera tada vjerojatno nije bio posebno zanimljiv - pravljenje rupa - a s razvojem znanosti i tehnologije, naravno, počeli su dolaziti svakakvi "zanimljiviji" stvari. Na primjer, asembler, koji je već donekle olakšao život.

Pa, kako je olakšao život? Umjesto da se prisjetimo da postoji neka vrsta "čarobnog" koda za tim, korištene su svakakve riječi slične "ljudskom" Engleski jezik- neki add ili mov - a zatim su navedeni registri ili memorijska područja, varijable s kojima je potrebno izvršiti ove operacije. No, jasno je da je i to, općenito, zahtijevalo dosta mentalnog napora da u glavi držimo u kojem registru što imamo, gdje su koje varijable i što se uopće događa. Zašto se to dogodilo? Zato što su računala bila "glupa" i nisu mogla razumjeti ništa "pametnije". Zapravo, sklapanje strojnog koda iz asemblera također zahtijeva vrijeme i memoriju (tada je toga, naravno, bilo malo).

Postupno je postalo jasno da je razvoj tako velikih složenih programa vrlo težak. Produktivnost programera u tim timovima bila je iznimno niska - to jest, pisao je nekoliko redaka dnevno (smisleno), a svaki red nije radio ništa posebno - neke jednostavne aritmetičke operacije. I ljudi su htjeli učiniti jezike mnogo sličnijima ljudskom jeziku, posebno engleskom, kako bi pisanje programa bilo lakše i praktičnije. I krećemo!

Stari i mrtvi jezici

Jedan od prvih jezika bio je Fortran. Usput, bušilo se i na bušenim karticama - postojale su posebne bušene kartice za bušenje Fortran programa. Ali ako sada uzmete ovaj Fortran, po meni je čak negdje između 50-60. pojavio - i ako pokušate nešto napisati na njemu, bit ćete vrlo neugodni, jamčim vam! Moderni Fortran je još uvijek živ, ali je prilično drugačiji od onoga što je bio prije.

Ostali jezici - sada ću napisati jednu stvar za koju ste vjerojatno čuli samo na raznim događajima gdje se govori o povijesti programiranja - ovo je COBOL. Bio je to jezik za pisanje poslovnih aplikacija. Što su poslovne aplikacije? Neke transakcije u bankama, nešto drugo, sve je to napisano u Cobolu. Naravno, kod nas to nije baš popularno. Mislim da ćete vrlo teško pronaći Cobol programera u Moskvi. A negdje ne u Moskvi - s još većim poteškoćama. Ali, iznenađujuće, prije samo 10 godina više od polovice svih kodova koje je čovječanstvo napisalo bilo je napisano u Cobolu. I do danas se značajan dio svih bankovnih transakcija obavlja pomoću programa napisanih u njemu (COBOL), a ljudi i dalje nešto upisuju u njega.

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

Stari ali živi jezici

Algol je izumljen u Europi, a Fortran se koristio uglavnom u Sjedinjenim Državama - nema velikih razlika. Kakav je trend primjetan? U početku je sve bilo komplicirano i da bi pisao morao si biti gotovo inženjer, elektrotehničar, razumjeti gdje se koji kontakti spajaju i još nešto za programirati. Tada ste također morali sjediti s papirićima i brojati uspomene, paziti na njih. I postupno je sve postalo jednostavnije, jednostavnije, jednostavnije i onda još jednostavnije za programera - da čovjek što manje misli, da što više radi automatski. Pri kraju tog razdoblja (predavač ukazuje na Algol i Kobol) počinju se javljati jezici koji su, u neku ruku, “preživjeli” do danas.

OSNOVNI, TEMELJNI. Možda neki ljudi još uvijek nešto pišu u njemu, barem sam vidio da u nekim ustanovama predaju u QBasicu - postoji plavi prozor gdje je napisano "1989". Općenito, "živi iz sve snage"! Izmišljen je kao jezik za neprogramere. U to je vrijeme programer bio vrlo specijalizirana profesija. I ovdje vam kažu: "Imamo cool Basic jezik i svaka razumna osoba može napisati program na njemu - lako je." Opet, taj BASIC i moderni BASIC su ogromna razlika. Sve te linije iza broja 10, kojekakvi GOTO-ovi i ostali užasi - nemaju više nikakve veze s modernim BASIC-om, a čak ni s BASIC-om iz 1989. nemaju previše veze.

Još jedna smiješna priča je jezik Pascal, nadaleko poznat u sveučilišnim krugovima, uglavnom u Rusiji i zemljama bivšeg Sovjetskog Saveza. Bio je i nastavlja se koristiti iznenađujuće kao nastavni jezik. U ostatku svijeta je rjeđi, ali je također živ i zdrav. Postoji takva osoba kao što je Wirth - on je znanstvenik, teoretičar. Sudjelovao je u raspravi o Algolu, nije mu se svidjelo što se dogodilo, pa je smislio vlastiti jezik - Pascal. A onda je tvrtka Borland (a prije toga mnoge druge tvrtke - Apple je bio uključen, posebno) to uzela i sve uništila. Imao je prekrasnu, koherentnu teoriju - "sve će biti u redu" - i oni su je uzeli i natrpali onim što je ljudima bilo potrebno za rad. Pa, nije ispalo tako lijepo kako je želio.

I konačno... C su izumili inženjeri. Ako je Pascal izumio znanstvenik, onda su C izumili Kernighan i Ritchie, radili su kao inženjeri u Bellu. Kako se to dogodilo? U to vrijeme na ovim jezicima (predavač ukazuje na Fortran, COBOL, Algol) nije bilo moguće napisati ništa sustavno. Što je "sustavno"? Na primjer, operativni sustav, neki upravljački programi, nešto drugo. Ovi jezici su bili namijenjeni za matematičke proračune, za poslovne proračune, za sve to. A sve ostalo je napisano u Skupštini. Postojali su neki jezici, oni su sada mrtvi, odnosno jezik C nije nastao odmah iz Assembly, nego kroz neke posredne stvari.

Koja je svrha? Kernighan i Ritchie voljeli su se igrati igračke Asteroidi - svemirski brod leti, a tu su i asteroidi, on puca na njih i oni se raspadnu. Imali su server na kojem su igrali, ali tamo je bilo puno ljudi, a igra je bila spora. I otkrili su negdje u svom uredu da imaju nekakvo računalo koje nitko ne koristi. Ali postojao je problem - bila je drugačije arhitekture, a igra je napisana u Assemblyju.

Prepisali su ga, naravno, čak su dodali i neke značajke za sviranje na njemu. Ali to ih je dovelo do ideje da svaki put prepisivanje za novu arhitekturu 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 što nalazi i kako pristupiti tim dijelovima memorije . I tako se pojavio jezik C koji je imao veliki utjecaj na sve što je uslijedilo. Svi su oni (predavač ukazuje na Algol, Fortran i druge spomenute jezike) imali veliki utjecaj, ali C - samo da...

Sukladno tome, to je bio glavni jezik u Unixu, operativnom sustavu koji je u to vrijeme bio još popularniji nego sada. A negdje oko 80-ih situacija je bila otprilike ovakva (predavač pokazuje Basic, C i ostale navedene jezike). Recimo, kod nas je sve to već polako izumrlo (predavač briše spomene Assembly Language, Fortran i Algol)... A 80-ih su računala postala manja, pametnija, jeftinija, ljudi su željeli svakakve čudne stvari učiniti život još boljim, živjeti još zabavnije.

Jezici iz 80-ih

Jedna od prvih neobičnosti bila je da je to bio C++ jezik. Jezik C ima ogroman broj nedostataka (dobro, samo općenito ogromnih) - u njemu možete raditi sve, uključujući pucanje u nogu, pucanje u nogu fikcijom, u drugu nogu, pucanje jedne noge u drugu noga, općenito - što god želite učiniti. Ali u isto vrijeme, neke arhitektonske stvari tamo se rade prilično teško - opet, kao iu Skupštini, moramo pratiti gdje smo, što i koju memoriju smo dodijelili; Stalno negdje "teče", ta memorija - znači, dodijelili smo je, zaboravili izbrisati, obrisali pogrešnu stvar, prešli ograničenja memorije, općenito - navukli 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 imate loptu (apstraktno), naslijedili ste od nje nogometnu loptu, odbojkašku loptu, drugu apstraktnu loptu . Tada je bilo moderno da “sada sve pišemo u obliku neke hijerarhije, i sve će biti dobro, život će biti bolji, sve će biti dobro i to je to”. C++ je u određenom smislu implementirao ovaj pristup temeljen na objektima - to nije bio prvi objektno orijentirani programski jezik, ali je postao prilično popularan i u njemu su se počele pojavljivati ​​razne mogućnosti. U isto vrijeme, C++ je zadržao gotovo punu kompatibilnost (u to vrijeme) s jezikom C; program napisan u C-u bio je uspješno preveden kao C++ u 99% slučajeva i čak je radio na isti način. Ovo je trebalo olakšati prebacivanje sa C na C++.

Uz objektni pristup (u C++), brzo se pojavila standardna biblioteka predložaka (STL). Mislim da su u školi oni koji su još učili Pascal otkrili da, prvo, nemaš ugrađeno sortiranje (u prastarom, plavom Borland Pascalu, sad već ima u modernim verzijama) - ima primjer (izvor kod) sortiranje, može se kopirati i zalijepiti. Ali ako ovdje želite sortirati cijele brojeve, ovdje želite stvarne brojeve, a ovdje nizove koji se mogu međusobno usporediti, morali ste napisati tri različite sorte koje rade potpuno istu stvar, samo imaju različiti tipovi podaci. To nije baš dobro, a predlošci koji se nisu odmah pojavili u C++-u uvelike su ublažili ovaj problem. Odnosno, imali ste apstraktni program koji je uspješno sortirao nešto što se može međusobno usporediti.

Skriptni jezici iz 90-ih

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

Prođimo ih malo, jer su to specifične stvari i sada se koriste na mnogim mjestima. Koja je ideja? Ako ne kompajliramo, onda možemo 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 namijenjen za obradu teksta - u to je vrijeme u računalima bilo toliko memorije da ste tamo mogli ubaciti neki tekst i učiniti nešto korisno s tim tekstom (na primjer, brojati riječi, napraviti neku vrstu pretraživanja). Ali, po mom mišljenju, dizajnirali su ga ljudi koji su bili pomalo ludi, jer postoji vic o tome: "Svaki skup napisanih znakova je valjani Perl program." Po mom mišljenju, na njemu možete samo pisati, ne možete ga čitati. Kad gledam Perl kod i pokušavam nešto razumjeti, ne razumijem ništa. Možda bih nešto i shvatio da sam ga bolje poznavao, ali kako sam čuo od onih ljudi koji još znaju, kažu da je lakše prepisati ponovo. Odnosno, programi su kratki i stvarno ih je lakše prepisati ispočetka nego shvatiti što je tamo i popraviti.

Otprilike u to vrijeme, sredinom 90-ih, pojavio se Internet. U početku je to bila pošta, web stranice sa statičnim HTML-om, ali ljudi su htjeli tu dodati neku dinamiku, da se sve dinamički odvija, da se mogu popuniti neki obrasci, napraviti knjige gostiju i još nešto. Sukladno tome, to je zahtijevalo nekakvu interakciju, osmislili su protokol, način interakcije i, što je najvažnije, generiranje tih statičnih (uvjetno) stranica koje će se “ispljunuti” korisniku kao odgovor na njegov zahtjev.

Općenito, ništa osim Pearl nije bilo prikladno u to vrijeme. Pisanje rukovatelja u čistom C ili C++ bila je loša ideja. I u nedostatku ičega boljeg, u to vrijeme (i dosta dugo) Pearl je bio popularan jezik za web razvoj. Naravno, razmjeri se ne mogu usporediti s ovim što se sada događa.

PHP se pojavio kao... slučajno. Jedna osoba je dosta brzo prestala s tim - napravio je svoju stranicu, imao je nekakvu knjigu gostiju, nešto drugo, neke druge stvari. I napisao je skup nekih makronaredbi za Perl koji su bili slični C-u, jer je znao kako koristiti C, jednostavno zato što mu je to bilo tako zgodno. I nazvao sam je Personal HomePage. Podijelio ju je i rekao: “Ljudi, pogledajte što sam napisao, ovdje je sve puno jasnije nego u Perlu i možete to uređivati.” I ljudima se svidjelo.

Tada je odustao od ovog posla. Općenito, kao rezultat toga, ovaj PHP je počeo živjeti i s vremenom postao mnogo popularniji od Perla. Ali ta njegova “trauma rođenja” (zamišljena kao skup makroa za Pearl) prilično se okrutno našalila s njim. Jezik je ispao čudan. Odnosno, razvijao se sam od sebe, nitko ga nije dizajnirao, nitko nije upravljao razvojnim procesom (ni tvrtka ni bilo koja osoba), nego je bilo mnogo grupa od kojih je svaka pilala što joj se sviđa. Kao rezultat toga, funkcije se drugačije nazivaju, nema čak ni stila, sve je podcrtano, uglavnom nasumično, 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 tako zamišljeno.

Python i Ruby: Ruby je sada manje popularan, Python je nekako bolje "planiran", pričajmo o tome kasnije. Jasno je da su u ono doba to bili (predavač ukazuje na Perl, Python, Ruby, PHP) visokospecijalizirani jezici za visokospecijalizirane svrhe. Općenito, tada nitko nije pisao sistemsko programiranje, nikakva poslovna logika u njima, a sada to ne radi previše.

Kompilirani jezici iz 90-ih

Ići ćemo u isto vrijeme, ali u drugom smjeru. U to smo vrijeme koristili C++ za gotovo sve što je trebalo napisati, ne za web, ne za obradu teksta, već samo za aplikacije, za operativne sustave, za igračke - općenito, za bilo što. Ali C++ je zapravo užasan jezik. Zašto? Jer, kao prvo, naslijedio je sve probleme s C-om zbog kompatibilnosti s prethodnim verzijama. Tamo bi se još mogao ubiti s milijunom različiti putevi, iste one koje su bile u C (naravno, nove metode su dodane u C++). U isto vrijeme, ako sve dobro i ispravno napišete, kako su zamislili autori C++-a, tada se, naravno, više nije bilo moguće ubiti starim metodama C koda, a čini se da ih je sve manje ih. Međutim, imao je vrlo čudan, neobičan objektni model. Dijeljenje programa na module, na dijelove neke vrste, općenito dolazi iz C-a (ako znate pisati uključiti u C-u ili C++-u - zapravo, to je zamišljeno kao način jednostavnog umetanja teksta knjižnice u vaš program, u kraj, kad napišeš hrpu uključivanja, imaš sve - ako je “primitivno”, kao što je bilo na samom početku - sve se ubaci u jednu datoteku i onda se to sve užasno dugo kompajlira, jer ide okolo Isti Pascal, Virtovsky, bio je puno promišljeniji u tom pogledu, kasnije su verzije postale još bolje.

Općenito, C++ ima puno nedostataka. Programer je morao biti visoko kvalificiran da piše u C++, a takvi programeri su bili skupi (i obuka, i nešto drugo, odnosno teško je naći programere na tržištu, treba ih puno platiti, a općenito ovo je nije poenta...). A naša računala broje sve brže i brže, postaju jeftinija, ljudi kupuju nova računala i žele više aplikacija, više igračaka za svoje telefone, općenito - više radosti.

Tako se pojavila Java. Postoji i prilično smiješna priča o tome kako je ovaj jezik dobio ime. Tamo su programeri, stalno piju kavu i u to je vrijeme bilo moderno piti kavu koja je rasla na otoku Javi. Jezik je zamišljen kao jezik za ugradbene uređaje, posebice za aparat za kavu. Tako je nastao naziv...
Što je počelo s njom, što je bilo dobro na njoj i zašto je stekla toliku popularnost? Prvo su se u potpunosti riješili Sishnoijeve ostavštine. Nema znakova, a još manje načina da si otkinete neki dio tijela i sve polomite. 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" objektni model. Pa evo (predavač pokazuje na Javu) to je već tada bilo zamišljenije i u teoriji su ljudi razmišljali, a u praksi su primijenili i napravili sve puno cooler.

I konačno, treće. Naši Java programi nisu prevedeni u strojni kod, već u kod za virtualni stroj. Odnosno, imali ste virtualni stroj (VM) JVM - Java. Vaši programi su sastavljeni u neku vrstu međureprezentacije i onda su uz pomoć ovog stroja već bili izvršeni. Što je dalo? Prvo, usporavao je, drugo, jeo je memoriju strašnom silinom, treće, bio je prenosiv bilo gdje (teoretski) - čak i na aparat za kavu, čak i na mlinac za kavu, čak i na računalo, čak i na mobilni telefon. S jedne strane, ovo je dobro, to jest, upravo ste napisali implementaciju virtualnog stroja, a zatim pokrećete svoje Java programe posvuda. Ali, s druge strane, loše je što je isti telefon tada imao malo memorije, bilo je niske performanse a sve je to dalje počelo otupljivati ​​i usporavati.

Ali to čak nije ni glavna stvar zbog koje je jezik uopće izmišljen. Jezik Java je izumljen kako bi se smanjili zahtjevi za kvalifikacijama programera. Odnosno, lošiji programeri mogu pisati dobre programe u Javi, jer vam ona ne dopušta pisanje loših programa - tamo nema načina za pisanje loših programa. Tamo možete pisati samo dobre programe. Pa u shvaćanju tvoraca jezika.

Odnosno, ako u C-u, u C++-u, u Pythonu, u bilo čemu, možemo stvoriti neku vrstu užasnog odlagališta smeća od našeg projekta, gdje imamo sve pomiješano, montirano satima i još nešto. U Javi također možete stvoriti odlagalište smeća, ali za to se morate malo potruditi. To jest, prema zadanim postavkama, to nije "odlagalište smeća", pojavljuju se drugi problemi, da je nešto naslijeđeno i naslijeđeno - općenito, za jednu smislenu liniju postoji deset ne baš smislenih. No, takav srednje kvalificirani programer može napisati prilično kvalitetan kod.
Skoro smo pri kraju. Kod nas se sljedeći pojavio .Net (dotnet), a posebno nas zanima C# (skoro isto [predavač pokazuje na Javu], odnosno postoje razlike u detaljima, ako birate između njih , pogledajte gdje plaćaju više novca).

I još nešto - JavaScript. Nema veze s jezikom Java, pojavio se iste godine - riječ je bila moderna, licencirani su zaštitni znak koristiti.

Što je glavno na što trebate obratiti pozornost? (Predavač povlači 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 trebate znati ništa drugo - pišete u C++, a zatim dodajete dolare na početku, nešto drugo radite male stvari i počinje 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 probleme ili nešto treće (ne radite veliki projekt - imate jednu datoteku koja čita brojeve, prikazuje brojeve u konzoli i radi nešto treće), onda gotovo da nema razlike između ovim jezicima. Jasno je da su JavaScript i PHP specijalizirani, kod njih je sve malo drugačije. Ali ovdje (predavač pokazuje na Javu i C#) postoji vrlo mala razlika.

Od tada se pojavilo još svakakvih zanimljivih stvari, ali nije jasno hoće li uspješno živjeti ili umrijeti. Što sada koriste, u koje svrhe?

Odabir jezika ovisno o zadatku

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

Programiranje niske razine

Ako pišete nešto na niskoj razini, onda najbolji izbor- ovo je C, ali zapravo sam nešto čuo (ali nisam vidio) da se C++ koristi za ovo. Ali malo vjerujem u ovo, jer u C-u možete jasno kontrolirati - budući da ste dali toliko bajtova memorije, to znači da će ih biti toliko. A u C++ (STL) kako se niz implementira? Pa, nekako je to provedeno. I na kraju ne znamo kako i što se tamo događa; možda će nam ponestati memorije na video kartici ili će se dogoditi nešto drugo. Dakle, C i dalje živi i ne umire, takvi zadaci sistemskog programiranja još uvijek postoje - napišite operativni sustav, napišite upravljačke programe, napišite nešto drugo - C je odličan za ovo. Osim toga, sada se pojavljuju svakakvi uređaji (obećan je dolazak Internet of Things uskoro) koji rade na baterije (i naravno, bit će ih na milijune, sve će biti pokriveno tim Internetom stvari), trebali bi biti vrlo jeftini i imati vrlo malu potrošnju električne energije. Sukladno tome bit će 2 KB memorije, procesor od 5 kHz, a jasno je da će trebati zeznuti nekakvu virtualni stroj ili skriptni jezik neće raditi u bliskoj budućnosti - što znači da ćete morati napisati nešto u C-u. Pa čak i sada, na primjer, računanje na video kartici (OpenCL ili neka druga tehnologija) - oni ne smišljaju novi jezik za pisanje programa za njih - oni rade C uz neka velika ograničenja. Samo zato što ljudi već znaju kako, zašto naučiti nešto novo? Formalno, ovo je vjerojatno također, u određenom smislu, C.

Web programiranje

Recimo da želite pisati novi Facebook (društvena mreža). Na čemu ćete ovo napisati? (Ljudi iz publike govore o HTML-u i CSS-u.) HTML i CSS su dizajn i želimo da tamo bude moguće dodavati fotografije, prijatelje i ostavljati komentare.

Što se tiče skriptnog dijela – odnosno onoga što će se dogoditi na strani klijenta – ovo je JavaScript. Štoviše, ponekad se JavaScript generira na drugom jeziku i šalje (dogodi se da se skripta generira... jer je ponekad lakše obraditi neke promjene u logici).

Začudo, napisan je u PHP-u - i Facebook, i mnogi drugi veliki projekti. Naravno, morali su napisati neke svoje stvari kako bi to i dalje radilo normalno, a ne “klempavo”, ali uspjeli su. U principu, više-manje je svejedno na čemu pišete, ali Perl ne preporučujem. Ovdje i sada, naravno, nitko ne piše ništa za web od nule. Svi pišu nekakav okvir ili nešto treće. Online trgovina? Preuzeli smo framework za online trgovinu - i to je to, napisali smo online trgovinu.

Programiranje za posao

Zatim želite napisati neku dosadnu molbu za banku. Ili npr. imate li nekoga tko prodaje SIM kartice? Možda ste ikada kupili telefon ili nešto drugo i rekli vam: "Sustav visi, ne možemo ništa učiniti." Što ćete koristiti za pisanje takve prijave? (Vik iz publike o Pythonu) Ne možete ovo napisati u Pythonu, što govorite?! Nema potrebe pisati ništa za posao u Pythonu. Zašto? Jer kada pišete nešto u Pythonu, nemoguće je otkriti značajan broj grešaka tijekom procesa pisanja. Python se dinamički tipka na sve moguće načine, i općenito možete sakriti bug na takav način da će iskočiti u takvoj situaciji da nećete moći ni shvatiti što su ti pokvareni korisnici tamo napravili, da je sve slomljen za tebe. Odnosno, u Pythonu je bolje pisati male skripte za sebe - razumijete što se tamo događa i što se radi. Pa, ili nešto što ne mislite baciti: želite izbaciti nešto prije konkurencije, pa što ako se pokvari tu i tamo. Pisao si u Pythonu i to je to – osvojio si tržište. A ako nešto dugo pišeš, npr. nekakvu bankarsku aplikaciju (pa da odobrava kredite, nešto drugo) - pišeš u Javi. Jer to je ozbiljna stvar, papiri, novci, dokumenti, još nešto, ali ne možeš toliko zeznuti da sve pukne, inače će se ljudi uvrijediti - njihov novac je otišao i nije nigdje stigao, jer na neki način. trenutka kada se niz pretvorio u broj ili obrnuto. Dakle, to znači da metodički uzmeš u Javu i pišeš, pišeš... Pa, ili na .Netu, takve se situacije, u principu, također događaju. Tu, naravno, također možete naići na probleme, ali ipak je vjerojatnost za to nešto manja.

Programiranje za vojsku, zrakoplovnu industriju

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

Možda u Javi? Čini se da je sve prilično pouzdano i da je arhitektura dobra, nema divljih tipova, nema nepotrebnih putovanja izvan granica memorije. Recimo da je došao najvažniji trenutak, a naša Java je odlučila skupiti smeće za nas. Trebamo sletjeti, usporiti, a ona kaže: "Ne, smeće ide." Općenito, također nije baš dobro.

Iskreno, više bih volio da je ovaj program napisan u Pascalu. Naravno, ne volim baš Pascal, ali nekako bi u takvim stvarima bilo vrlo cool.

Korištenje više jezika za razvoj softvera

Pa, što općenito treba reći o suvremenim jezicima? Sada 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 nekakvu web aplikaciju koja obrađuje divlje količine informacija, pozivi prema diskovima (čak ni prema bazama podataka, toliko su golemi da čak ni tamošnja baza podataka ne može podnijeti nijednu već napisanu) vjerojatno su zapisani u nekoj vrsti zatim C niske razine, za nevjerojatno brzo pisanje na disk i sve to. Naravno, ne isplati se pisati cijeli projekt u C-u. Možda postoji neka posredna logika napisana u Javi koja poziva C funkcije za brze pozive. Pa, frontend (ono što korisnik gleda), naravno, već je napisan u nečemu, u nekim skriptama, u nečemu što izravno izvršava preglednik (JavaScript). I sve to živi zajedno i uspješno komunicira.

Kad razvijaju neke aplikacije, čak i one velike, što ljudi ponekad rade? Oni to uzmu i napišu prototip u Pythonu (kako će to sve funkcionirati), skiciraju ga, smišljaju nekakvu arhitekturu. Pisanje po njoj je stvarno vrlo brzo - sastavili su prototip, eksperimentirali s njim i rekli: “Wow! To je tako cool!" I potpuno su ga prepisali. Čini se da su posao radili dvaput, pa je trajao duplo duže (dobro, jedan i pol). Ali ne! Često se pokaže da ova metoda nije loša, jer ako odmah nešto napišete, na primjer u Javi, i onda odlučite: “Ne, idemo refaktorirati, potpuno promijeniti arhitekturu i sve to”, onda ćete potrošiti 10 puta više vrijeme . I takve stvari postoje i žive.

Uvjeti za uspjeh bilo kojeg programskog jezika

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

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

U čemu je problem? Zašto su neki jezici poput Pythona, koje 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 tržište (većinu). A uložene su kojekakve milijarde dolara (predavač pokazuje na Adu) i nisu nigdje otišle, ništa se nije dogodilo. s čime je ovo povezano? To je zbog činjenice da ne postoji infrastruktura oko ovih jezika. Odnosno, jezik može biti izvrstan, ali sve dok nema dokumentacije, sve dok ne postoji zajednica koja može odgovoriti na pitanja (na Stack Overflowu) i, konačno, što je najvažnije, sve dok nema velikog broja knjižnica, jezik ne uzima maha. To je, na primjer, htjeli ste napisati web stranicu o Oberonu. Što je, zašto ne? I gnjavaža počinje... Ne možete postaviti vlastiti web poslužitelj na Oberonu da ga lagano testirate, ne možete spojiti nikakve biblioteke, jer Oberon ih nema. I sve se to radi preko nekih štaka, snaga nestaje, i općenito odustajete i svoju web stranicu pišete u čistom C umjesto Oberonu. A oni jezici koji dobro žive su oni koji znaju koristiti biblioteke iz drugih jezika. Isti Python na onim mjestima gdje usporava. Pa, općenito, svakakve standardne stvari poput sortiranja i nečeg drugog napisane su u C-u, a on (Python) može komunicirati s njima.

Java također ima Java Native Interface. Ovo je u biti C, to jest, tamo (po mom mišljenju, uvijek ga žele zabraniti, ali čini se da ga još nisu zabranili) ti jezici mogu komunicirati s već postojećim bibliotekama (uglavnom C). I zbog toga, oni to uzmu i rade. Ideja koju vam pokušavam prenijeti je jasna, zar ne? Nemojte pisati na jezicima koji ne podržavaju C biblioteku. Pa, ako želite koristiti nešto cool. Pa, postupno oni (jezici) stječu vlastitu infrastrukturu. I žive nekako dobro.

Programski jezik i profesionalno usmjeravanje

Sada razgovarajmo o tome kako razumjeti što želite u životu. Koje su najcool stvari? Možeš malo programirati sustave, zar ne? Super vam je brojati ove komadiće, želite lansirati kvadkoptere, nekakve kamere i još nešto raditi. Onda je vjerojatno C vaš izbor.

Ako želite pisati, možda ne najzanimljivije aplikacije u životu, ali vam je cool dizajnirati ih, razmisliti o svemu i zaraditi puno novaca za sjedenje i dosadu većinu vremena (ovo morate platiti ako ste dobri u miss), evo ih - Java, .Net. Odeš raditi u neku banku, pišeš, odeš na posao u devet u bijeloj košulji, dobiješ dobru plaću i pišeš po preporukama najboljih Java programera, .Net ovce i sve to...

Ako želite pisati neke aplikacije, nekakav preglednik, nekakve igračke ili nešto treće, onda je C++ super. Ako želite pisati web stranice, onda su tu, jezici 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, naučite Python. Nećete primijetiti veliku razliku, ali ćete trajati duže.

Što se događa s Ruby također nije jasno. Pa, možete raditi PHP ako ste ga već naučili, srećom tako je jednostavan da ne treba dugo da ga ponovno naučite.

I na kraju, 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 morate brzo nešto izračunati, analizirati neke podatke (za biologe, na primjer, koliko arktičkih lisica živi na Zapovjedničkim otocima). Sve to možete staviti u tablicu u Excelu ili nečim analizirati. Python je također dobar za ovo, može raditi s tekstom i ima puno biblioteka, statistika i sve to. Ako želite napraviti neku vrstu strojnog učenja, obraditi neke podatke, napraviti predviđanja, onda se i to sada najbrže radi u Pythonu. Istina, treba napomenuti da su zadaci vrlo različiti. Na primjer, ako želite odmah trgovati na burzi u uvjetima u kojima se kotacije stalno mijenjaju, onda bez obzira na to koliko cool strojno učenje napišete u Pythonu, ljudi koji ga imaju napisano u nečemu bržem imat će vremena kupiti sve prije svega će vam se računati, čak i ako su njihovi algoritmi lošiji. Stoga čak i ovi zadaci strojnog učenja (neki od njih) zahtijevaju visoku izvedbu (i to iznimno visoku izvedbu), a shodno tome i druge jezike.

Jedini način da shvatite što želite je da probate sve. Sada ću to reći kao jednu od vizija kako možete probati sve. Kako postati programer, i to sretan? Tako. S čisti list početi. Ovdje učite matematiku, ruski jezik i druge obavezne i izborne predmete u školi, a vaše znanje iz područja programiranja se trenutno prikazuje na ploči (predavač pokazuje na praznu ploču). I želite postati sretna osoba, raditi ono što volite, zaraditi puno novca i ne uskraćivati ​​si ništa i biti sretni.

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

Kakva je situacija s upisom na sveučilište (studiraš li trenutno u školi)? Dok ste u školi, morate shvatiti da je sljedeći korak upis i briga o njoj. Položite jedinstveni državni ispit ili pobijedite na olimpijadi. Na Jedinstvenom državnom ispitu možete koristiti Pascal, C++ (uključujući čisti C), Python (neću ih dalje spominjati). Na olimpijadi je isti Pascal, isti C++, isti Python (sad ćemo o njegovim problemima) i, najčešće, tu je Java. Postoje i druge stvari koje se dogode ovisno o Olimpijskim igrama, ali to nije poanta.

Kako izgleda grafikon distribucije jezika na Sveruskoj olimpijadi iz informatike? Ljudi koji sudjeluju na All-Russian, najcool Olimpijskim igrama, što oni 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. gotovo nitko nije pisao C++. Prošlo je 15 godina, a gotovo nitko ne piše u Pascalu, unatoč činjenici da je Pascal moderan. Ovo je jezik koji može učiniti gotovo sve isto. Samo što su svi postali previše lijeni da to nauče, svaki novi trend, i dalje sve pišu u Borland Pascalu, koji naravno ne može ništa. U C++-u ljudi pišu neke algoritme (STL) za sortiranje - super, napisali su sort() i to je to. Na Pascalu, na običnom, na starom - to je problem. Napisali smo nekakav set (trebao je) - super, napisali smo ga u C++, ali u Pascalu je opet bila čista muka. Naravno, to možete učiniti s novim Pascalima, ali oni općenito koštaju. Možda ovo niste primijetili, ali je istina.

Postoji i Java, ali Java ima puno slova. Za velike projekte je, ali za male jednokratne programe ispada jako loše, jer ima puno dodatnih slova. Ali neki ljudi također pišu, možete naučiti pisati na njemu. Ali nije na Jedinstvenom državnom ispitu i većina će ipak morati polagati Jedinstveni državni ispit.

Što je najbolje za Jedinstveni državni ispit? Za Jedinstveni državni ispit najbolje je (ako ništa ne znate i ništa vas ne uče u školi) učiti Python. Na njemu se mogu savršeno riješiti neki ispitni zadaci. Na olimpijadi općenito ispada da se koristi C++, jer je Python jako spor, tu se ne rješava sve.

Dakle, proučavali ste neki mali podskup jezika i neke algoritme (moguće) i riješili mnoge probleme kako biste dobili diplomu svoje olimpijade i upisali se na sveučilište kako biste stekli visoko obrazovanje.

Sada ću govoriti o tome kako strukturiramo tečaj na HSE-u, kojim se redoslijedom podučavaju jezici, kako se proučavaju primijenjena matematika i informatika na Fakultetu primijenjenih znanosti, što radimo zajedno s Yandexom. U prvom semestru - Python (ne u cijelosti, otprilike kako bi trebalo učiti u školi) i C++ (već šire, puno šire nego što se inače uči u školama). Odmah da vam kažem da se ne uplašite, ako se odjednom budete htjeli upisati, reći ćete: “Ma što, ja to sve već znam, zašto bih išla negdje studirati? Radije bih otišao negdje drugdje.” Za one koji već znaju dobro programirati, postoji prilika da odmah pređu na proučavanje algoritama, i to u prilično teoretskoj pripremi. Ne gledamo ih sada, ovo (pokazuje na ploču) je za one koji su srednji ili uopće nisu programeri.

U prvom semestru se uče osnove Pythona, čisto da ljudi nauče programirati i da se nitko previše ne uvrijedi. Python se rijetko uči u školama; većina ljudi dolazi sa znanjem Pascala ili C++. Uglavnom čak i Pascal, ako je ovo masovna škola. Pa da se nitko ne uvrijedi, svi uče novi jezik (kao da su u jednakim uvjetima). A C++ jednostavno zato što iz C++-a možete ići bilo gdje.

Zatim slijedi kolegij Algoritmi i zasebni predmetni projekt. Klasični algoritmi s implementacijom. Nije da smo uzeli nešto u teoriji i izračunali složenost. Na predavanju smo to uzeli, izračunali složenost, na seminaru smo to uzeli i implementirali algoritam. Projekt je mjesto gdje studenti naprave nešto dovršeno. Na primjer, jedan od projekata je bio: računajte... Recimo da imate puno stanova u Moskvi i shvatite: “Oh, imam puno dodatnih stvari, neke ću iznajmiti. I postavili su određenu cijenu, a iz nekog razloga nitko ne želi iznajmiti stan od vas - vjerojatno je preskupo. Ili su postavili neku cijenu, odmah su vam je uzeli i pomislite: "Oh, vjerojatno sam to jeftino prodao" - i uzrujate se. Odnosno, trebalo je izračunati koliko košta najam stana? Vi unesete podatke - oni vam stvaraju procjenu. Takva stranica, koja se sastojala od nekoliko stvari: uzeti rečenice, raščlaniti ih, primijeniti nekakav (vjerojatno) jednostavan algoritam za strojno učenje i napraviti prekrasno web lice u kojem možete nešto odabrati, unijeti nešto, neke metre, neki broj soba , broj sauna, broj jacuzzija u stanu i okvirno procijenite cijenu. Odnosno, neka gotova, ne baš komplicirana stvar. Ovdje se misli (predavač pokazuje na kolegij o algoritmima) takav jezgreni C++, s konzolnim ulazom-izlazom. Pa evo (predavač pokazuje na natpis “projekt”) nešto pod vodstvom mentora, možda s bazama podataka, možda s raščlanjivanjem teksta i nečim drugim.
Tu je i treći semestar - to je kolegij koji se zove “Računalni sustavi”. Postoji prilično malo asemblerskog jezika za razumjeti (vrlo malo), a zatim nešto slično čistom C-u i interakciji s operativnim sustavima, sistemsko programiranje u biti. A projekt za seminar je također nešto na temu svih vrsta mrežnih interakcija, prilično niske razine: razviti nekakav pomoćni program, na primjer rsync (sinkronizacija, možda znaš. U čistom C-u, više-manje, napiši analog od rsync, koji ćete preko mreže sinkronizirati mape sa svim pristupima datotekama i tako dalje).

I konačno, četvrti. Ne znam ni kako bih to nazvao, to je takav vinaigrette tehnologija potrebnih za pravi razvoj, na primjer, web razvoj. Odnosno, ovo je praktična primjena baza podataka, opet nešto slično onome što je rađeno u projektu (predavač ukazuje na projekt 2. godine) ali dublje. Odnosno, to su više-manje specifične stvari, praktično programiranje. Paralelno s tim postoji svaka teorija, a ovdje se bave i znanošću.

I nakon dva tečaja, ljudi odu raditi što god ih zanima, jer ova stvar dosta pokriva osnove programiranja i do tog trenutka ljudi već shvaćaju da to ne žele raditi računalni sustavi ni u kom slučaju (nisu voljeli sistemsko programiranje, npr.), nego žele raditi neke teoretske algoritme, izračunavati poteškoće, smišljati neke nove stvari, distribuirati ili nešto treće. Ili, naprotiv, misle da ovdje nemaju puno ( predavač ukazuje na liniju prvog kolegija s Pythonom i C++) otišao, zatim ( predavač ukazuje na treću liniju kolegija, s programiranjem sustava) - Ne sviđa mi se, brojanje bajtova i postavljanje raznoraznih ograničenja čitanja i pisanja, stvaranje streamova, niti i nečeg drugog. I u skladu s tim ljudi biraju smjer i studiraju. To je, u principu, da ne razvijete "sindrom pačića" - prvi ste vidjeli svoj Pascal i sada kažete "Pascal je moć"; ili napredniji - vidjeli ste C++ i počeli pričati o svima da je C++ jak, ali sve ostalo nije baš dobro.

Sada treba ovo (predavač pokazuje na popis kolegija na ploči) gledati šire - to je jedna od metoda koja je odabrana, posebno na HSE-u (nedavno se pojavila, pa je dosta moderna). Postoje i drugi načini da se upoznate. Na drugim dobrim sveučilištima poredak je malo drugačiji i stavljaju se drugi akcenti. Ali oni također pokušavaju upoznati ljude sa svime što imaju.

Kako tražiti posao programera

Ti si ( predavač pokazuje na popis kolegija) radila sve, studirala na sveučilištu, radila nešto drugo dvije godine produktivnije i moraš ići na posao. Kako odabrati nešto za posao? Prvo, upoznali ste se sa svime, zašli negdje dublje i već znate što volite. Morate odabrati ono što volite, naravno. Jer ako voliš, trudiš se, imat ćeš motivaciju i općenito će sve biti u redu. Jer ne radi se samo o novcu, već o tome da vam bude zanimljivo i ugodno. Pa, želiš ući u cool tvrtku i dobiti posao. Kakvu bih osobu osobno želio vidjeti? Recimo, dođe mi sto studenata – trebam li zaposliti dva ili jednog. Zašto dolaze, uopće mi nije jasno, tko su, što su, kako su? U najboljem slučaju, pokazat će mi diplomu koju su dobili na fakultetu, a ja ću reći: "Vau!" Ovo je cool diploma, ali ovo nije tako cool!” A mogao bih i griješ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 mogućnosti, ako radim nekakvu infrastrukturu da se podaci mogu brzo čitati, ili nešto drugo, onda bih, naravno, bio zainteresiran da mi se napiše nešto otvorenog koda. Nisu napravili web stranicu, nego nešto na tu temu. Zašto me to zanima? Mogu pogledati vaš kod, mogu vidjeti koliko ste često počinili, mogu vidjeti kako ste reagirali na greške korisnika, greške programera koji ga koriste - sve se bilježi, gledam sve i mislim: "Vau, ova greška nije 't been there for two years.” zatvoreno, ovdje ste nepristojno odgovorili korisniku, evo još nešto - neću to prihvatiti.” Odnosno, ovo je vaš osobni projekt.

Dalje, što bi drugo bilo cool? Volio bih vidjeti kako si prošao timski rad. Odnosno, dođete kod mene na razgovor i kažete: “Dečki sa sveučilišta i ja smo napravili dobru prijavu. Tamo sam pravio bazu podataka, oni su radili nešto mobilna aplikacija, a imali smo i dečka koji je radio tamo, cura kao dizajnerica, a dečko u tehničkoj podršci. Bilo nas je pet i napravili smo super projekt.” Pa, vidim da je to stvarno tvoj projekt, kažem: "Što je tvoj?" Ponovno pogledam šifru i shvatim da znaš raditi u timu s ljudima.

Programer nije netko tko sjedi sam (indie) u garaži, negdje s ugašenim svjetlima, ne razgovara ni s kim, pušta bradu i piše. Još uvijek postoji neka interakcija s ljudima. Sa šefom, na primjer, koji vas ponekad može opsovati (šefovi, takvi su, nisu uvijek ljubazni). A vidim da znaš raditi s ljudima i raduje me ako imaš kakav-takav dobar tim. Čak i ako nije dobro, bolje je nego da ga nemate.

Što bih ja osobno još volio? Ako ste se dokazali u velikim projektima. Na primjer, unijeli ste nešto u Linux kernel, ako se bavite sistemskim programiranjem, i popravili neku grešku. Odnosno, pokazali su da znate čitati tuđi kod i da znate kako napraviti neke izmjene u njemu. Pogledam: "Ma, stvarno, smislio si nešto komplicirano i popravio neke greške!" I počinjem biti jako sretan zbog ovoga. Jer ja sam... pa, ne znam... moj programer je dao otkaz jer mu je konkurencija ponudila veću plaću, a ja hitno trebam nekoga da popuni njegovo mjesto - kod tebe. Vidim da si napisao samo od nule, ali ne znaš čitati i uređivati ​​tuđi kod, i ljutim se.

I na kraju, ovisno o konkretnoj poziciji, postoje razne druge stvari. Ako se zapošljavate kao analitičar, volio bih da rješavate probleme analize podataka na Kaggleu. Ako se prijavljuješ za neke algoritamske stvari, volio bih da radiš neke algoritme u sportskom programiranju. I na kraju, ako ste razmišljali o profesiji, čitali kako se vode razgovori, vidjeli ste da neki tamo izražavaju veliko nezadovoljstvo: “Došao sam, pitaju me što mi je hobi. Sjedim kao sova i ne javljam se jer nemam hobi”, a misle da to rade HR-i. Zapravo, pokušavaju shvatiti koliko ste prijateljski nastrojeni i adekvatni. Ako ste neljubazni i neadekvatni, koliko god bili genijalni i radoholičar, teški stručnjak s velikim znanjem, timu će biti teško raditi s vama, a nećete moći sami dovršiti projekt. Osim toga, čak i da ga izvučete, možete misliti kakav je teret za tvrtku. Što ako dođete sutra i kažete: "Povećaj mi plaću 10 puta, inače ću te ostaviti." Jasno je da se tvrtke ne žele naći u takvoj situaciji. Stoga je njegovanje primjerenosti i dobre volje u sebi jednako važno (barem) kao i razvijanje nekih profesionalnih vještina.

Ukratko, što možemo reći? Koji su jezici dobri, a koji loši? Pa, unutar određene skupine jezika, na primjer između Rubyja, Pythona i PHP-a, što odabrati? Naravno, točan odgovor je Python, ali zapravo razlika između njih je u broju dopuštenih grešaka, u broju nečeg drugog - 5%, dobro, možda 10%. Odnosno, ako već imate gotov projekt napisan u PHP-u, tada nitko pri zdravoj pameti ne bi rekao: "Hajdemo sve prepisati u Pythonu." Reći će: "Unajmimo još PHP programera i nastavimo pisati u PHP-u." Super, to je dobar izbor. Jasno je da ako iznenada odlučite napisati nekakav projekt, možda bi bilo mudro odabrati Python sada. Mada i to ovisi. Možda na tržištu imate puno jeftinih PHP programera, a Python su skupi, pa pomislite: "Da, tehnologija je cool, ali uštedjet ću novac na gotovim programerima." I sve je super, već dolazite i radite tamo.
Kako odabrati između Jave i C++? Da, događa se otprilike ista stvar. Mislim da ćete do trenutka kada odlučite na kojem jeziku započeti novi veliki projekt steći znanje u svom profesionalnom području i moći ćete pravi izbor. Sada još ne morate napraviti taj izbor, pa vam savjetujem da radite ono što želite.

Osnove, kao što sam već rekao, same, same osnove programiranja (što je funkcija, što su if’ics, for’ics, nizovi, nešto drugo) mogu se naučiti na više-manje svakom jeziku. Na primjer, u C++-u, budući da ima dosta sličnosti s njim, a ima najmanje specifičnosti (na ovoj razini) i ima najmanje dodatnih slova za pisanje. Pa onda, kad naučiš neke složene arhitektonske stvari, naučit ćeš i ne trebaš se previše brinuti oko toga. Odnosno, glavno je da se trudiš, tražiš ono što voliš, a kad shvatiš da je već 4 sata ujutro, a ti sjediš i pišeš iz zabave, jer ti se sviđa - vjerojatno u tom trenutku jasno je da si našao svoje .

Svaka osoba koja odluči svladati osnove procesa stvaranja računalni programi, pita se koji su danas najtraženiji programski jezici i koje je najbolje naučiti. I ako je na prvo pitanje vrlo lako odgovoriti, onda će na drugo učenik sam morati potražiti odgovor na temelju svojih planova i potreba.

Pogledajmo ukratko najpopularnije programske jezike kako biste mogli odabrati onaj koji vas najviše privlači i početi ga učiti.

programiranje?

Prije analize glavnih programskih jezika i njihovog opisa, potrebno je razumjeti 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.

Postoje programski jezici niske i visoke razine. Danas uglavnom koriste drugi.

Programski jezici visoke i niske razine

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

Rad s bilo kojim od jezika zahtijeva visoke kvalifikacije i razumijevanje; osim toga, pisanje programa zahtijeva dosta vremena. U isto vrijeme, koristeći niske možete stvoriti male, ali u isto vrijeme učinkovite programe. Programerima početnicima se ne preporučuje da započnu svoje upoznavanje 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 vokabulara. Ali u isto vrijeme, poznavanje jezika visoke razine omogućuje vam stvaranje velikih, šarenih, višenamjenskih projekata u rekordnom vremenu.

One visoke razine uključuju Pascal, Java, C, C++, C#, Delphi i mnoge druge. Koriste se za pisanje softvera i aplikacijskih programa.

Najpopularniji programski jezici

Koji su danas najpopularniji programski jezici?

Posljednjih godina najpopularnijim i traženijim se smatraju Java, C, C++, Python, C#, koji spadaju u sam vrh programskih jezika. Oni su ti koji čine osnovu moderni programi i koriste se pri pisanju bilo kojeg velikog projekta. Više od 70% programera radi s ovim jezicima. Predviđa se da će u sljedećih 10 godina i dalje biti traženi kao danas.

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

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

C, C++ i C#

Prvo, pogledajmo obitelj C.

Jezik C je kompajlirani jezik i razvijen je 70-ih godina. Na njegovoj osnovi naknadno su stvoreni jezici poput C++ i C#, Java.

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

C# je moderan objektno orijentirani jezik temeljen na C-u i C++-u. Ima siguran sustav vrste. Jedna od njegovih karakterističnih značajki je da je vrlo sličan drugom popularnom programskom jeziku - Javi.

Jedan od nedostataka jezika je taj što vam omogućuje samo izradu aplikacija za operacijski sustav Windows je također prilično težak, što znači da programi napisani na njemu zauzimaju puno prostora.

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

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

JavaScript

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

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

Ovaj je jezik prikladan za one koji su usredotočeni na stvaranje preglednika i skripti, aplikacija i dodataka za njih. Ako planirate izraditi vlastite web stranice, također je morate bolje upoznati.

Java

Kada govorimo o najpopularnijim programskim jezicima, ne možemo a da ne spomenemo Javu. To je ciljno orijentirani programski jezik koji je u upotrebi od 1995. godine. Vrlo je lagan i radi na bilo kojem Java stroju bilo koje arhitekture. Koristi se za razvoj aplikacija za Android i iOS.

Piton

Python - čija je glavna zadaća povećati produktivnost programera i učiniti kod čitljivijim. On ima mali popis sintaktičke strukture i vrlo impresivnu standardnu ​​biblioteku funkcija. Razvoj jezika započeo je 90-ih godina prošlog stoljeća 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četak programiranja i kao drugi dodatni jezik.

Rubin

Ruby je programski jezik visoke razine koji sadrži dijelove Perla, Smalltalka, Eiffela, Ade i Lispa. U upotrebi od 1995. Glavne prednosti jezika su njegova jednostavnost i fleksibilnost. Pogodan i za pisanje malih aplikacija i za razvoj ozbiljnih programa.

PHP jezik

PHP je prilično popularan skriptni jezik dizajniran za izradu web aplikacija. Vrlo često je također uključen u popis "Programski jezici za početnike" i preporučuje se za proučavanje.

Uz njegovu pomoć možete izraditi visokokvalitetne web aplikacije u vrlo kratkom vremenu. 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 proučavanje u budućnosti pomoći da uspješno kreirate vlastite projekte i zaradite novac kao programer. Ne postoji konsenzus oko toga koji jezik učiti, no stručnjaci pritom napominju kako je poželjno poznavanje nekoliko programskih jezika jer će se tako dodatno proširiti polje djelovanja i olakšati rad na raznim timskim projektima.

    Popisi programskih jezika Po kategoriji Kronološki Genealoški Dostavljen je popis programskih jezika grupiranih po kategorijama. Neki jezici spadaju u više od jedne kategorije. Sadržaj... Wikipedia

    Popisi programskih jezika Po kategoriji Kronološki Genealoški Naveden je genealoški popis programskih jezika. Jezici su klasificirani prema jezicima prethodnicima koji su imali snažan utjecaj na formiranje ... Wikipedia

    Sadržaj 1 Prema proizvođaču ili platformi 1.1 Flash 1.2 Java 1.3 Microsof ... Wikipedia

    Popisi programskih jezika po kategorijama Kronološka genealoška kronologija programskih jezika je kronološki organiziran popis programskih jezika. Sadržaj... Wikipedia

    Ovaj bi članak trebao biti Wikificiran. Molimo formatirajte ga prema pravilima oblikovanja članka. Konvencije... Wikipedia

    Ova stranica popis informacija. Programski jezici .NET (CLI-omogućeni jezici ili CLI jezici) računalni programski jezici koji se koriste za stvaranje biblioteka i programa koji zadovoljavaju zahtjeve Comm ... Wikipedia

    Glavni članak: Popis uređivača teksta uređivači teksta Prozori i usporedna tablica. Sadržaj 1 Usporedna tablica poznatih uređivača teksta ... Wikipedia

    Programski jezik C# jedan je od najpopularnijih programskih jezika današnjice. Paint.NET softver otvorenog koda za obradu rasterska grafika SharpDevelop open IDE za C#, Visual Basic .NET (VB.NET), Boo ... Wikipedia

    Ovo je popis softvera koji je razvila Free Software Foundation kao dio GNU UNIX projekta, sličnog operativnog sustava koji se u potpunosti sastoji od slobodnog softvera. Većina ovih paketa također... ... Wikipedia

    Ovaj članak ili odjeljak treba revidirati. Molimo poboljšajte članak u skladu s pravilima za pisanje članaka... Wikipedia

knjige

  • Python za djecu. Vodič za programiranje Jasona Briggsa. O knjizi Ova knjiga je vodič za jedan od najpopularnijih programskih jezika današnjice - Python. Počevši od samog jednostavne akcije, korak po korak ćeš pisati svoje...
  • JavaScript za djecu. Vodič za programiranje, Morgan Nick. O knjizi Ova će vam knjiga omogućiti da uronite u programiranje i svladate JavaScipt s lakoćom. Napisat ćete nekoliko pravih igara - traženje blaga na karti, "Vješala" i "Zmija". Na svakom...