Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Programe
  • Niveluri ale limbajelor de programare. Limbaje de programare de nivel înalt și scăzut: pe care ar trebui să le înveți

Niveluri ale limbajelor de programare. Limbaje de programare de nivel înalt și scăzut: pe care ar trebui să le înveți

Limbaj de programare

Limbaj de programare- un sistem formal de semne pentru înregistrarea programelor de calculator. Un limbaj de programare definește un set de reguli lexicale, sintactice și semantice care determină aspectul programului și acțiunile pe care executantul (calculatorul) le va efectua sub controlul său.

  • Funcţie: un limbaj de programare este destinat scrierii de programe de calculator care sunt utilizate pentru a transmite instrucțiuni către un computer pentru a efectua un anumit proces de calcul și a organiza controlul dispozitivelor individuale.
  • Sarcină: un limbaj de programare diferă de limbajele naturale prin faptul că este conceput pentru a transfera comenzi și date de la persoană la computer, în timp ce limbajele naturale sunt folosite pentru a comunica între oameni. Este posibilă generalizarea definiției „limbajelor de programare” – este o modalitate de transmitere a comenzilor, comenzilor, îndrumării clare spre acțiune; în timp ce limbile umane servesc și la schimbul de informații.
  • Execuţie: un limbaj de programare poate folosi constructe speciale pentru a defini și manipula structurile de date și pentru a controla procesul de calcul.

Standardizarea limbajelor de programare

Un limbaj de programare poate fi reprezentat ca un set de specificații care îi definesc sintaxa și semantica.

Au fost create standarde internaționale pentru multe dintre limbajele de programare răspândite. Organizațiile specifice actualizează și publică în mod regulat specificațiile și definițiile formale ale limbajului relevant. În cadrul unor astfel de comitete, dezvoltarea și modernizarea limbajelor de programare continuă și sunt abordate probleme de extindere sau susținere a construcțiilor de limbaj existente și noi.

Tipuri de date

Calculatoarele digitale moderne sunt de obicei binare, iar datele sunt stocate într-un cod binar (binar) (deși sunt posibile și implementări în alte sisteme numerice). Aceste date reflectă de obicei informații din lumea reală (nume, conturi bancare, măsurători etc.) reprezentând concepte de nivel înalt.

Sistemul special prin care datele sunt organizate în program este tip sistem limbaj de programare; dezvoltarea și studiul sistemelor de tip este cunoscută sub numele de teoria tipurilor. Limbile pot fi clasificate ca sisteme tastat staticși limbi cu tastare dinamică.

Limbile tastate static pot fi subdivizate în limbi cu declarație obligatorie unde fiecare declarație de variabilă și funcție are o declarație de tip obligatorie și limbi cu tipuri deduse... Uneori sunt numite limbi tipizate dinamic dactilografiat latent.

Structuri de date

Sistemele de tip în limbaje de nivel înalt permit definirea unor tipuri complexe, compuse, așa-numitele structuri de date. De obicei, tipurile de date structurale sunt formate ca produs cartezian al tipurilor de bază (atomice) și al tipurilor compozite definite anterior.

Structurile de bază de date (liste, cozi, tabele hash, arbori binari și perechi) sunt adesea reprezentate prin sintaxă specială în limbaje de nivel înalt. Astfel de date sunt structurate automat.

Semantica limbajelor de programare

Există mai multe abordări pentru definirea semanticii limbajelor de programare.

Cele mai răspândite varietăți dintre următoarele trei sunt: ​​operaționale, derivaționale (axiomatice) și denotaționale (matematice).

  • Când descrieți semantica în interior de operare abordare, execuția construcțiilor unui limbaj de programare este de obicei interpretată cu ajutorul unui calculator imaginar (abstract).
  • Derivativ semantica descrie consecințele executării constructelor de limbaj folosind limbajul logicii și stabilirea condițiilor pre- și post.
  • Denațional semantica operează cu concepte tipice matematicii - mulţimi, corespondenţe, precum şi judecăţi, enunţuri etc.

Paradigma de programare

Un limbaj de programare este construit în conformitate cu unul sau altul model de calcul de bază și paradigmă de programare.

În ciuda faptului că majoritatea limbilor sunt concentrate pe modelul de calcul imperativ specificat de arhitectura computerului von Neumann, există și alte abordări. Putem aminti limbaje cu model de calcul stivuit (Fort, Factor, PostScript etc.), precum și programare funcțională (Lisp, Haskell, etc.) și logică (Prolog) și limbajul REFAL, bazat pe calcul. model introdus de matematicianul sovietic A A. Markov Jr.

În prezent, limbajele de programare orientate către probleme, declarative și vizuale sunt, de asemenea, în curs de dezvoltare.

Modalități de implementare a limbilor

Limbajele de programare pot fi implementate așa cum sunt compilate și interpretate.

Un program într-un limbaj compilat folosind un compilator (program special) este convertit (compilat) în cod mașină (un set de instrucțiuni) pentru un anumit tip de procesor și apoi asamblat într-un modul executabil care poate fi lansat pentru execuție ca program separat . Cu alte cuvinte, compilatorul traduce codul sursă al unui program dintr-un limbaj de programare de nivel înalt în coduri binare ale instrucțiunilor procesorului.

Dacă programul este scris într-o limbă interpretată, atunci interpretul execută (interpretează) direct textul sursă fără traducere preliminară. În acest caz, programul rămâne în limba originală și nu poate fi lansat fără un interpret. Un procesor de calculator, în acest sens, poate fi numit un interpret pentru codul mașinii.

Împărțirea în limbi compilate și interpretate este condiționată. Deci, pentru orice limbaj compilat în mod tradițional, cum ar fi Pascal, puteți scrie un interpret. În plus, majoritatea interpreților „puri” moderni nu execută direct constructe de limbaj, ci le compilează într-o reprezentare intermediară de nivel înalt (de exemplu, cu dereferențierea variabilelor și extinderea macro).

Puteți crea un compilator pentru orice limbaj interpretat - de exemplu, un limbaj Lisp interpretat nativ poate fi compilat fără nicio restricție. Codul creat la runtime poate fi, de asemenea, compilat dinamic la runtime.

De regulă, programele compilate rulează mai repede și nu necesită programe suplimentare pentru execuție, deoarece acestea au fost deja traduse în limbajul mașinii. În același timp, de fiecare dată când textul programului se modifică, acesta trebuie să fie recompilat, ceea ce încetinește procesul de dezvoltare. În plus, un program compilat poate rula doar pe același tip de computere și, de regulă, sub același sistem de operare pentru care a fost proiectat compilatorul. Este necesară o nouă compilare pentru a crea un fișier executabil pentru un alt tip de mașină.

Limbile interpretate au unele capacități suplimentare specifice (vezi mai sus), în plus, programele din ele pot fi lansate imediat după modificare, ceea ce facilitează dezvoltarea. Un program în limbaj interpretat poate fi deseori rulat pe diferite tipuri de mașini și sisteme de operare fără efort suplimentar.

Cu toate acestea, programele interpretate sunt considerabil mai lente de executat decât programele compilate; în plus, nu pot fi executate fără un program de interpret.

Această abordare, într-un fel, vă permite să utilizați atât avantajele interpreților, cât și ale compilatorilor. De menționat că există limbi care au atât un interpret, cât și un compilator (Forth).

Simboluri folosite

Limbajele de programare moderne sunt concepute pentru a utiliza ASCII, adică disponibilitatea tuturor grafic Caracterele ASCII sunt o condiție necesară și suficientă pentru înregistrarea oricărui construct de limbaj. Managerii Caracterele ASCII sunt utilizate într-o măsură limitată: sunt permise doar returul carucior CR, avansul de linie LF și fila orizontală HT (uneori și fila verticală VT și fluxul de pagină FF).

Primele limbi, datând din epoca caracterelor pe 6 biți, foloseau un set mai limitat. De exemplu, alfabetul Fortran conține 49 de caractere (inclusiv spațiu): 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 = + - * / (). , $ ":

O excepție notabilă este limbajul APL, care folosește o mulțime de caractere speciale.

Utilizarea caracterelor non-ASCII (cum ar fi caracterele KOI8-R sau caracterele Unicode) este dependentă de implementare: uneori sunt permise doar în comentarii și constante de caractere/șir, iar uneori sunt permise doar în identificatori. În URSS, au existat limbi în care toate cuvintele cheie erau scrise cu litere rusești, dar astfel de limbi nu au câștigat prea multă popularitate (cu excepția limbajului de programare Embedded 1C: Enterprise).

Extinderea setului de caractere este constrânsă de faptul că multe proiecte de dezvoltare software sunt internaționale. Ar fi foarte dificil să lucrezi cu un cod în care numele unor variabile sunt scrise cu litere rusești, altele în arabă și altele cu caractere chinezești. În același timp, pentru a lucra cu date text, limbajele de programare din noua generație (Delphi 2006, Java) acceptă Unicode.

Clase de limbaje de programare

Vezi si

Note (editare)

Literatură

  • Hal Abelson, Gerald Jay Sussman. Structura și interpretarea programelor de calculator
  • Robert W. Sebesta. Concepte de bază ale limbajelor de programare = Concepte ale limbajelor de programare / Per. din engleza - Ed. a 5-a. - M .: Williams, 2001 .-- 672 p. - 5000 de exemplare. - ISBN 5-8459-0192-8 (rusă), ISBN 0-201-75295-6 (engleză)
  • Wolfenhagen V.E. Construcții de limbaje de programare. Metode de descriere. - M .: Centrul YurInfoR, 2001 .-- 276 p. - ISBN 5-89158-079-9
  • Parondzhanov V.D. Cum să îmbunătățiți activitatea minții. Algoritmi fără programatori - este foarte ușor! - M .: Delo, 2001 .-- 360 p. - ISBN 5-7749-0211-0
  • F. Biancuzzi, C. Warden. Pionierii programării. Conversații cu creatorii celor mai populare limbaje de programare. - SPb. : Symbol-Plus, 2010 .-- 608 p. - ISBN 978-5-93286-170-7

Legături

  • Lista de limbi (engleză) - mai mult de 2500 de limbi cu o scurtă descriere
  • Istoria limbajelor de calculator (engleză) - istoria limbajelor de programare (din 1954 până în mai 2004) (conține o diagramă actualizată regulat)
  • Exemple - exemple de programare în 162 de limbi
  • Popularitatea limbajelor de programare - Studiu din 2004 privind popularitatea limbajelor de programare
  • 10 limbaje de programare de învățat (2006)
  • Indexul comunității de programare (ing.) - evaluare actualizată în mod regulat a popularității limbajelor de programare
  • Benchmarks Shootout pentru limbajul computerului - Comparația limbajelor de programare în funcție de eficiență
  • Limbaje de programare care sunt iubite (ing.) - comparație a limbajelor de programare pentru „dragoste” și „ura” față de ele

Fundația Wikimedia. 2010.

Clasificarea limbajelor de programare

În zorii erei computerelor, codul mașinii era singurul mijloc de comunicare om-calculator. Marea realizare a creatorilor de limbaje de programare a fost că au reușit să facă computerul însuși să funcționeze ca traducător din aceste limbi în codul mașinii.

Limbajele de programare existente pot fi împărțite în două grupe: procedurale și non-procedurale (vezi Figura 4.1).

Programele procedurale (sau algoritmice) sunt un sistem de prescripții pentru rezolvarea unei probleme specifice. Rolul calculatorului se reduce la implementarea mecanică a acestor instrucțiuni.

Limbile procedurale sunt împărțite în limbi de nivel scăzut și înalt.

Diferite tipuri de procesoare au seturi de instrucțiuni diferite. Dacă un limbaj de programare se concentrează pe un anumit tip de procesor și ia în considerare caracteristicile acestuia, atunci este numit un limbaj de programare de nivel scăzut.
Aceasta înseamnă că operatorii de limbă sunt aproape de codul mașinii și sunt concentrați pe instrucțiuni specifice procesorului.

Orez. 4.1. Clasificarea generală a limbajelor de programare

Limbajele de nivel scăzut (orientate către mașină) vă permit să creați programe din coduri de mașină, de obicei în formă hexazecimală. Este dificil de lucrat cu ele, dar programele create cu ajutorul lor de un programator foarte calificat ocupă mai puțin spațiu de memorie și rulează mai repede. Folosind aceste limbaje, este mai convenabil să dezvoltați programe de sistem, drivere (programe pentru controlul dispozitivelor computerizate) și alte tipuri de programe.

Limbajul de nivel scăzut (orientat pe mașină) este Asamblator, care reprezintă pur și simplu fiecare instrucțiune de cod de mașină, nu ca numere, ci folosind notații simbolice convenționale numite
mnemonice.

Cu ajutorul limbajelor de nivel scăzut, sunt create programe foarte eficiente și compacte, deoarece dezvoltatorul are acces la toate capacitățile procesorului.

Limbaje de programare de nivel înalt mult mai aproape și mai de înțeles de o persoană decât de un computer. Particularitățile arhitecturilor specifice computerelor nu sunt luate în considerare în ele, prin urmare, programele create la nivel de cod sursă sunt ușor de portat pe alte platforme pentru care a fost creat un traducător al acestui limbaj. Este mult mai ușor să dezvoltați programe în limbaje de nivel înalt, cu comenzi clare și puternice și există mai puține greșeli la crearea programelor.

Principalul avantaj al limbajelor algoritmice de nivel înalt este capacitatea de a descrie programe pentru rezolvarea problemelor într-o formă care este cea mai convenabilă pentru percepția umană. Dar, din moment ce fiecare familie de calculatoare are propriul său limbaj intern (mașină) și poate executa doar acele instrucțiuni care sunt scrise în acest limbaj, se folosesc programe speciale de traducere pentru a traduce programele sursă în limbajul mașinii.

Toți traducătorii lucrează după unul dintre cele două principii: interpretare sau compilare.

Interpretare implică traducerea operator cu operator și execuția ulterioară a operatorului tradus al programului original. În acest sens, pot fi remarcate două dezavantaje ale metodei de interpretare: în primul rând, programul de interpretare trebuie să se afle în memoria computerului pe parcursul întregului proces de execuție a programului original, adică trebuie să ocupe o anumită cantitate de memorie; în al doilea rând, procesul de traducere a aceluiași operator se repetă de câte ori ar trebui executată această comandă în program, ceea ce reduce drastic performanța programului.

În ciuda dezavantajelor indicate, traducători interpreți au primit o distribuție suficientă, deoarece sunt convenabile pentru dezvoltarea și depanarea programelor sursă.

La compilare procesele de traducere și execuție sunt separate în timp: mai întâi, programul original este tradus complet în limbajul mașinii (după care prezența unui traducător în RAM devine inutilă), iar apoi programul tradus poate fi executat de mai multe ori. În consecință, pentru același program, traducerea prin metoda de compilare asigură o performanță mai mare a sistemului de calcul, reducând în același timp RAM necesară.

Marea dificultate în dezvoltarea unui compilator în comparație cu un interpret din aceeași limbă se explică prin faptul că compilarea unui program include două etape: analiza, adică determinarea corectitudinii scrierii programului sursă în conformitate cu regulile de construire a construcțiilor limbajului. a limbajului de intrare și sinteza - generarea unui program echivalent în codurile mașinii. Traducerea compilației necesită „vizionarea” multiplă a programului difuzat, adică compilatoare-compilatoare sunt multi-pass: în timpul primei treceri, verifică corectitudinea sintaxei construcțiilor de limbaj ale operatorilor individuali, independent unul de celălalt; la următoarea trecere, verifică corectitudinea relațiilor sintactice dintre operatori etc.

Programul compilat rezultat este apelat modul obiect, care este un program echivalent în codurile de mașină, dar nu „legat” la anumite adrese ale RAM. Prin urmare, înainte de execuție, modulul obiect trebuie procesat de un program special al sistemului de operare (editor de linkuri) și convertit în modul de încărcare.

Alături de traducătorii-interpreți și traducătorii-compilatorii menționați mai sus, în practică se folosesc și traducătorii interpreți-compilatori, care combină avantajele ambelor principii de traducere: în stadiul de dezvoltare și depanare a programelor, traducătorul lucrează în modul interpret, iar după finalizarea procesului de depanare, programul sursă este retradus în modulul obiect (adică , prin metoda de compilare). Acest lucru face posibilă simplificarea și accelerarea semnificativă a procesului de compunere și depanare a programelor și, datorită primirii ulterioare a unui modul obiect, asigurarea unei execuții mai eficiente a programului.

Programarea procedurală clasică necesită ca programatorul să descrie în detaliu cum să rezolve o problemă, adică să formuleze un algoritm și notația sa specială. Cu toate acestea, proprietățile așteptate ale rezultatului nu sunt de obicei specificate. Conceptele de bază ale limbilor acestor grupuri sunt operator și date.
Într-o abordare procedurală, operatorii sunt combinați în grupuri - proceduri. Programarea structurată în ansamblu nu depășește domeniul de aplicare al acestei direcții, ci doar fixează suplimentar câteva tehnici utile
tehnologii de programare.

O direcție fundamental diferită în programare este asociată cu metodologiile (numite uneori „paradigme”) ale programării non-procedurale. Acestea includ programarea orientată pe obiecte și declarativă. Un limbaj orientat pe obiecte creează un mediu sub forma multor obiecte independente. Fiecare obiect se comportă ca un computer separat, ele pot fi folosite pentru a rezolva probleme ca „cutii negre” fără a se adânci în mecanismele interne ale funcționării lor. Dintre limbajele de programare obiect populare în rândul profesioniștilor, ar trebui menționat în primul rând C++; pentru un cerc mai larg de programatori sunt preferate medii precum Delphi și Visual Basic.



Atunci când folosește un limbaj declarativ, programatorul indică structurile informaționale inițiale, relațiile dintre ele și ce proprietăți ar trebui să aibă rezultatul. În același timp, programatorul nu construiește procedura de obținere („algoritm”) (cel puțin, în mod ideal). Aceste limbi le lipsește conceptul de „operator” („comandă”). Limbile declarative pot fi împărțite în două familii - logice (reprezentantul tipic este Prolog) și funcționale (Lisp).

Să caracterizăm cele mai cunoscute limbaje de programare.

1.Fortran(Sistem de traducere a formulelor - sistem de traducere a formulelor); cea mai veche limbă folosită activ până astăzi în rezolvarea problemelor de orientare matematică. Este un limbaj clasic pentru programarea pe calculator a problemelor de matematică și inginerie

2.DE BAZĂ(Codul de instrucțiuni simbolice universale pentru începători - un cod de instrucțiuni simbolice universale pentru începători); în ciuda multor deficiențe și a abundenței de versiuni prost compatibile - cele mai populare în ceea ce privește numărul de utilizatori. Folosit pe scară largă atunci când scrieți programe simple.

3.ALGOL(ALGOrithmic Language - limbaj algoritmic); a jucat un rol important în teorie, dar acum nu este folosit aproape niciodată pentru programare practică.

4.PL / 1(PL / 1 Programming Language este primul limbaj de programare); limbaj polivalent; aproape niciodată folosit acum.

5.Pascal(Pascal - numit după omul de știință Blaise Pascal); extrem de popular atât atunci când învață programarea, cât și printre profesioniști. Creat la începutul anilor '70 de omul de știință elvețian Niklaus Wirth. Pascal a fost dezvoltat inițial ca un limbaj educațional și, într-adevăr, acum este unul dintre principalele limbaje pentru predarea programării în școli și universități. Cu toate acestea, calitățile sale în ansamblu s-au dovedit a fi atât de înalte încât programatorii profesioniști îl folosesc de bunăvoie. Philippe Kahn, un francez care a dezvoltat sistemul Turbo-Pascal, a obținut un succes nu mai puțin impresionant, inclusiv financiar. Esența ideii sale a fost de a combina etapele secvențiale ale procesării programului - compilare, editare link-uri, depanare și diagnosticare erori - într-o singură interfață. Versiunile Turbo-Pascal au inundat aproape toate instituțiile de învățământ, centrele de programare și firmele private. Pe baza limbajului Pascal, au fost create mai multe limbi mai puternice (Modula, Ada, Delphi).

6.Cobol(Common Business Oriented Language - limbaj general orientat spre afaceri); a căzut în mare parte din uz. A fost conceput ca limba principală pentru prelucrarea în masă a datelor în domeniile managementului
și afaceri.

7.ADA; este limba câștigătoare (mai 1979) la Concursul de limbi universale a Pentagonului din 1975. Dezvoltatorii sunt un grup de oameni de știință condus de Jean Ihbia. Limba câștigătoare a fost numită ADA, după Augusta Ada Lovelace. Limba ADA este moștenitorul direct al limbii
Pascal. Acest limbaj este destinat creării și întreținerii pe termen lung (pe termen lung) a sistemelor software mari, permite posibilitatea procesării paralele, controlului procesului în timp real și multe altele, ceea ce este dificil sau imposibil de realizat prin intermediul unor metode mai simple. limbi.

8.Si(C - „si”); utilizat pe scară largă în dezvoltarea de software de sistem. A lăsat o amprentă mare asupra programării moderne (prima versiune - 1972), este foarte popular printre dezvoltatorii de sisteme software (inclusiv sisteme de operare). C combină caracteristicile atât ale unui limbaj de nivel înalt, cât și ale unui limbaj orientat pe mașină, permițând programatorului să acceseze toate resursele mașinii, pe care limbaje precum Basic și Pascal nu le fac.

9.C++(C++); o extensie orientată pe obiect a limbajului C, creată de Bjarne Stroustrup în 1980. Multe caracteristici noi puternice care au îmbunătățit dramatic productivitatea programatorului sunt suprapuse unui anumit nivel scăzut moștenit din limbajul C.

10.Delphi(Delphi); limbaj de programare „vizuală” orientată pe obiecte; extrem de popular în acest moment. Limbajul Delphi creat pe baza limbajului Pascal de specialiștii Borland, deținând puterea și flexibilitatea limbajelor C și C++, le depășește prin comoditatea și simplitatea interfeței la dezvoltarea aplicațiilor care asigură interacțiunea cu bazele de date și suport. diverse tipuri de lucru în cadrul rețelelor corporative și pe internet...

11.Java(Java); Limbajul de programare orientat obiect independent de platformă, extrem de eficient pentru crearea de pagini web interactive. Acest limbaj a fost creat de Sun la începutul anilor 90 pe baza C++. Este conceput pentru a simplifica dezvoltarea aplicațiilor bazate pe C++ prin excluderea tuturor caracteristicilor de nivel scăzut din acesta.

12.Lisp(Lisp) este un limbaj de programare funcțional. Este axat pe structura datelor sub forma unei liste și vă permite să organizați procesarea eficientă a unor cantități mari de informații text.

13.Prolog(Programare in LOGic - programare logica). Scopul principal al limbajului este dezvoltarea de programe și sisteme inteligente. Prolog este un limbaj de programare creat special pentru lucrul cu baze de cunoștințe bazate pe fapte și reguli (unul dintre elementele sistemelor de inteligență artificială). Limbajul implementează un mecanism de backtracking pentru efectuarea unui lanț invers de raționament, în care se presupune că unele concluzii sau concluzii sunt adevărate, iar apoi aceste ipoteze sunt testate într-o bază de cunoștințe care conține fapte și reguli de inferență.
Dacă presupunerea nu este confirmată, se efectuează o întoarcere și o nouă presupunere este avansată. Limbajul se bazează pe un model matematic al teoriei calculului predicatului.

Limbaje de programare pentru internet:

1. HTML. Un limbaj binecunoscut pentru documente. Este foarte simplu și conține comenzi de bază pentru formatarea textului, adăugarea de imagini, setarea fonturilor și culorilor, organizarea legăturilor și a tabelelor.

2. PERL. A fost conceput ca un instrument pentru procesarea eficientă a fișierelor text mari, generarea de rapoarte text și gestionarea sarcinilor.
Perl este mult mai puternic decât limbaje precum C. Introduce multe funcții utilizate în mod obișnuit pentru lucrul cu șiruri de caractere, matrice, gestionarea procesoarelor, lucrul cu informații de sistem.

3. Tcl / Tk. Acest limbaj este axat pe automatizarea proceselor de rutină și constă din comenzi puternice. Este independent de sistem și, în același timp, vă permite să creați programe cu o interfață grafică.

4. VRML. Creat pentru organizarea interfețelor 3D virtuale pe Internet. Vă permite să descrieți sub formă de text diverse scene tridimensionale, lumini și umbre, texturi.

Alegerea unui limbaj de programare depinde de mulți factori: scopul, ușurința în scrierea programelor sursă, eficiența programelor obiect rezultate etc. Varietatea problemelor rezolvate de un calculator determină varietatea limbajelor de programare.

Întrebări de control

1. Ce sunt sistemele de programare și cărei clase de programe aparțin?

2. Ce este inclus în sistemele de programare?

3. În ce limbaj de programare au fost create primele programe?

4. În ce limbi sunt subdivizate limbile procedurale?

5. Descrieți limbaje de nivel scăzut.

6. Ce limbă este o limbă de nivel scăzut?

7. Avantajele limbajelor de nivel scăzut.

8. Descrieți limbaje de nivel înalt.

9. Avantajele limbilor de nivel înalt.

10. Dați exemple de limbaje de nivel înalt.

11. Pentru ce sunt traducătorii?

12. Care este diferența dintre un compilator și un interpret?

13. Deficiențe în interpretare (ca un fel de traducător).

14. Care este procesul de compilare a unui program?

15. Ce acțiuni sunt efectuate în timpul compilării?

16. Care este diferența dintre un modul de încărcare și un modul de obiect?

17. Care este diferența dintre programarea procedurală și programarea non-procedurală?

18. Ce tipuri de programare sunt non-procedurale
programare?

19. Caracteristica limbajelor declarative.

20. Descrieți pe scurt limbajele de programare: Fortran, BASIC, Pascal, Cobol.

21. Descrieți pe scurt limbajele de programare: Ada, C, C++, Delphi, Java.

22. Dați exemple de limbaje orientate pe obiecte.

23. Cărei clase de limbi aparține limbajul Lisp?

24. Cărei clase de limbi aparține limbajul Prolog?

Zalina 13 ianuarie 2016 ora 15:42

Diverse limbaje de programare și domeniile lor de aplicare. Prelegere în Yandex

  • Blogul companiei Yandex,
  • Dezvoltare site,
  • programare,
  • Programare industrială

Am decis să dedicăm prima noastră postare anul acesta unui subiect foarte de bază, o prelegere despre care a fost susținută în Small SHAD. Liceenii care sunt interesați de tehnologie sunt angajați în ea, de aici și specificul prezentării - prelegerea va fi deosebit de interesantă pentru cei care abia încep să programeze și se gândesc la direcția în care să se dezvolte. Pentru ei, Yandex are un curs „Introducere în programare (C ++)”, care poate fi urmat pe platforma Stepic.org.

Lector Mikhail Gustokashin - Curator al Programelor Academice la Yandex, Director al Centrului pentru Olimpiade Studențești, Facultatea de Informatică, HSE. Mihail a antrenat zeci de câștigători și câștigători ai olimpiadelor de programare din Rusia.

În cadrul prelegerii, se vorbește despre ce limbaje de programare sunt, cum diferă, cum au apărut și care sunt mai bune și care sunt mai rele. La început, vom vorbi puțin despre istoria limbilor - cum au apărut, cum au început oamenii să programeze, cum s-a dezvoltat totul, ce se întâmplă acum. În a doua parte, va fi atins despre sarcinile pentru care limba este potrivită, cum să „alegeți limba preferată și să vă bucurați de viață”. Lectorul va vorbi puțin și despre cum, în opinia sa, să învețe toate acestea și apoi să obții un loc de muncă.

Ca întotdeauna, sub tăietură se află o transcriere detaliată a prelegerii, astfel încât să puteți naviga prin conținutul acesteia.

Istoria limbajelor de programare

Să începem de la început. La început, computerele nu aveau nici măcar tastatură! Adică totul era foarte rău - nu aveau tastatură sau ecran, aveau cărți perforate (sunt astfel de lucruri cu orificii sau fără orificii). În consecință, fie știfturile au fost împinse acolo, fie au strălucit acolo de lumină. Dacă există o gaură (sau invers), înseamnă zero sau unu. Și programele la acea vreme erau scrise folosind coduri de mașină - fiecare operație dintr-un computer (adunare, scădere, unele operații mai complexe) avea un fel de cod de mașină. Oamenii înșiși au ales acest cod din farfurie, tot felul de adrese în memorie, l-au scos totul cu mâinile și l-au împins în cititor - și totul a fost numărat. Desigur, munca unui programator probabil că nu era foarte interesantă atunci - să facă găuri - și odată cu dezvoltarea științei și tehnologiei, desigur, au început să vină cu tot felul de lucruri mai „interesante”. De exemplu, assembler (Assembler), care deja a făcut viața puțin mai ușoară.

Ei bine, cum a făcut viața mai ușoară? În loc să ne amintim că există un fel de cod „magic” pentru comandă, s-au folosit tot felul de cuvinte asemănătoare englezei „umane” - unele add sau mov - bine, apoi registre sau zone de memorie, variabile cu care acestea sunt necesare. a efectua operatii. Dar este clar că acest lucru, în general, a necesitat și un efort mental suficient de mare pentru a ține cont în ce registru avem ce se află, unde ce variabile și ce se întâmplă în general. De ce s-a întâmplat asta? Pentru că computerele erau „proști” și nu puteau înțelege nimic mai „inteligent”. De fapt, compilarea codului de mașină din asamblare necesită și timp, memorie (în acel moment, desigur, nu era suficient).

Treptat, a devenit clar că este foarte dificil să dezvolți programe atât de mari și complexe. Productivitatea programatorului în aceste comenzi era extrem de scăzută – adică scria mai multe rânduri pe zi (semnificative), iar fiecare linie nu făcea nimic special – niște operații aritmetice simple. Și oamenii au vrut să facă limbile mult mai asemănătoare cu limba umană, în special cu engleza, pentru a face mai ușor și mai convenabil să scrieți programe. Și plecăm!

Limbi vechi și moarte

Fortran a devenit una dintre primele limbi. Apropo, a fost eliminat și pe cărți perforate - existau cărți perforate speciale pentru a elimina programele Fortran. Dar dacă iei acest Fortran acum - în opinia mea, este chiar undeva între 50-60. a aparut - si incearca sa scrii ceva pe el, va fi foarte neplacut pentru tine, iti garantez! Fortranul modern este încă în viață astăzi, dar este destul de diferit de ceea ce a fost odinioară.

Alte limbi - acum voi scrie un lucru despre care probabil ați auzit, apoi numai la orice evenimente în care vorbesc despre istoria programării - acesta este COBOL. Era un limbaj pentru scrierea aplicațiilor de afaceri. Ce sunt aplicațiile de afaceri? Orice tranzacție în bănci, altceva, toate acestea au fost scrise în Kobol. Desigur, nu este foarte popular la noi. Cred că cu greu vei găsi un programator pe Kobol, la Moscova. Și undeva nu în Moscova - cu și mai mare dificultate. Dar, în mod surprinzător, chiar și acum 10 ani, mai mult de jumătate din tot codul scris de omenire a fost scris în Cobol. Și până acum, o parte semnificativă a tuturor tranzacțiilor bancare sunt efectuate folosind programe scrise în el (COBOL) și totuși oamenii scriu ceva pe el.

Există și un limbaj „amuzant”, s-a numit Algol (a 68-a versiune, care caracterizează anul creării sale). Este un limbaj algoritmic. În general, ei au putut să facă ceva acolo, dar acum nu ne interesează prea mult ce pot face. Și aici se poate încheia excursia noastră în antichitate și în limbi relativ nefolosite și trece la ceea ce este încă viu (și trăiește activ).

Limbi vechi, dar vii

Algol a fost inventat în Europa, iar Fortran a fost folosit în principal în State - nu există diferențe mari. Ce tendință este vizibilă? La început, totul a fost greu și pentru a scrie trebuia să fii aproape inginer, inginer electrician, să înțelegi unde sunt închise contactele și altceva pentru programare. Apoi, de asemenea, era necesar să stai cu frunzele și să numărăm amintirea, să ai grijă de ea. Și treptat totul a devenit mai simplu, mai simplu, mai simplu și apoi și mai ușor pentru programator - să gândească cât mai puțin pentru o persoană, să facă cât mai mult în mod automat. Aproape de la sfârșitul acestei perioade (lectorul arată către Algol și Kobol), încep să apară limbi care, într-un fel, au „supraviețuit” până astăzi.

DE BAZĂ. Poate că unii mai scriu ceva pe el, cel puțin am văzut că în unele instituții predau pe QBasic - o astfel de fereastră albastră unde scrie „1989”. În general, trăiește „cu putere”! A fost inventat ca limbaj pentru non-programatori. Pe vremea aceea, programatorul era o profesie atât de specializată. Și aici îți spun: „Aici avem un limbaj de bază cool și orice persoană rezonabilă va prelua și scrie un program în el - cu ușurință”. Din nou, acel BASIC și BASIC modern este o diferență uriașă. Toate aceste linii numerotate la fiecare 10, tot felul de GOTO și alte horror - nu au nimic de-a face cu BASIC-ul modern și chiar au puțin de-a face cu BASIC-ul 89.

O altă poveste amuzantă este limba Pascal, cunoscută pe scară largă în cercurile universitare, mai ales în Rusia și în țările din fosta Uniune Sovietică. A fost și continuă să fie folosit în mod surprinzător ca limbă de predare. În restul lumii, este mai puțin obișnuit, dar este și viu și bine. Există o astfel de persoană Wirth - aici el este un om de știință, un teoretician. A participat la discuția despre Algol, nu i-a plăcut ceea ce s-a întâmplat și a venit cu propriul său limbaj - Pascal. Și apoi firma Borland (și înainte de asta multe alte firme - Apple a fost angajată, în special) a luat și a stricat totul. Avea o teorie frumoasă, zveltă – „totul va fi bine” – și au luat și au îndesat acolo ce au nevoie oamenii pentru muncă. Ei bine, nu a ieșit așa de bine pe cât și-a dorit el.

Și, în sfârșit,. Xi a fost inventat de ingineri. Dacă Pascal a fost inventat de un om de știință, atunci C a fost inventat de Kernighan și Ritchie, ei au lucrat ca ingineri la Bell. Cum a apărut? La acea vreme, era imposibil să scrieți ceva sistemic în aceste limbi (lectorul arată către Fortran, COBOL, Algol). Ce este „sistemic”? De exemplu, un sistem de operare, niște drivere, altceva. Aceste limbi au fost pentru matematică, pentru afaceri, pentru toate chestiile astea. Și totul a fost scris în Assembler. Au fost unele limbaje, acum sunt moarte, adică limbajul C nu a apărut imediat din Assembler, ci prin niște lucruri intermediare.

Care este esența? Kernighan și Ritchie le plăcea să joace jucăria Asteroizii - o navă spațială zboară și sunt asteroizi, el trage în ei și se destramă. Aveau un server pe care se jucau, dar erau foarte mulți oameni acolo, iar jucăria încetinește. Și au aflat undeva în biroul lor că au un fel de computer pe care nimeni nu îl folosește. Dar a fost o problemă - era de altă arhitectură, iar jocul a fost scris în Assembler.

L-au rescris, desigur, chiar au tăiat unele caracteristici pentru a putea juca pe el. Dar acest lucru i-a determinat să creadă că rescrierea pentru o nouă arhitectură de fiecare dată nu este foarte inteligentă. Și au decis să scrie un limbaj de nivel înalt care să fie potrivit pentru programarea sistemului, adică în care să fie posibilă gestionarea memoriei, în care să se poată înțelege unde este ceva și cum să accesezi aceste bucăți de memorie. . Și așa a apărut limbajul C, care a avut un impact uriaș asupra tuturor lucrurilor mai târziu. Toate (lectorul arată spre Algol, Fortran și alte limbi menționate) au avut o mare influență, dar C - da...

În consecință, a fost limbajul principal în Unix - un sistem de operare care era și mai popular la acea vreme decât este acum. Și în jurul anilor 80, situația era cam așa (conferențiarul arată în Basic, C și alte limbi menționate). Să spunem că toate acestea au murit deja pe furiș (conferențiarul șterge referințele la Assembler, Fortran și Algol)... Și în anii 80, computerele au devenit mai mici, mai inteligente, mai ieftine, iar oamenii și-au dorit tot felul de ciudățenii, în ordine. pentru a trăi și mai bine, pentru a trăi și mai distracție.

Limbi native din anii 80

Una dintre primele ciudățenii a fost limbajul C++. Limbajul C are un număr mare de deficiențe (ei bine, este pur și simplu uriaș) - poți face orice în el, inclusiv să te împuști în picior, să te împuști în picior cu o ficțiune, în celălalt picior, să împuști cu un picior. în celălalt picior, în general - ceea ce vrei să faci. Dar, în același timp, unele lucruri arhitecturale se fac acolo destul de greu - din nou, ca în Assembler, trebuie să ținem evidența unde suntem, ce și ce memorie am alocat; este acolo tot timpul această memorie „curge” undeva - adică am selectat, am uitat să ștergem, am șters lucrul greșit, am ieșit din memorie, în general - avem o grămadă de probleme.

C++ a fost creat inițial ca un set de completări la limbajul C care ar facilita dezvoltarea. În acea perioadă, programarea orientată pe obiect a devenit la modă și oamenii au decis că totul poate fi descris sub forma unei ierarhii, adică ai o minge (abstract), moștenești de la ea o minge de fotbal, o minge de volei, o altă minge abstractă. . Era la modă atunci că „acum scriem totul sub forma unui fel de ierarhie, și totul va fi bine, viața se va îmbunătăți, totul va fi bine și totul”. Într-un fel, C++ a implementat această abordare obiect - nu a fost primul limbaj de programare orientat pe obiecte, dar a devenit destul de popular și tot felul de caracteristici au început să apară în el. În același timp, C++ a păstrat compatibilitatea aproape completă (la acea vreme) cu limbajul C, un program scris în C a fost compilat cu succes ca C++ în 99% din cazuri și chiar a funcționat în același mod. Acest lucru a fost menit să faciliteze migrarea de la C la C++.

Pe lângă abordarea obiect (în C++), a apărut rapid și Standard Template Library (STL). Cred că la școală, cei care încă îl predau pe Pascal au descoperit că, în primul rând, nu aveai sortare încorporată acolo (în vechiul, albastru Borland Pascal, acum este deja în versiuni moderne) - există un exemplu (sursă) sortați, îl puteți copia și lipi. Dar dacă doriți să sortați numere întregi aici, aici doriți numere reale și aici sunt șiruri care pot fi comparate între ele, a trebuit să scrieți trei feluri diferite care fac exact același lucru, doar au tipuri diferite de date. Acest lucru nu este foarte bun, iar șabloanele care nu au apărut imediat în C ++ au făcut această problemă mult mai ușoară. Adică ai avut un program abstract care a sortat cu succes ceva ce poate fi comparat unul cu celălalt.

Limbaje de scripting din anii 90

Dar timpul nu a stat pe loc, în anii 80 s-au întâmplat o mulțime de lucruri interesante. Dar undeva pe la sfârșitul anilor 80 și 90, computerele au devenit atât de bune încât era deja posibil să faci lucruri foarte ciudate și foarte ineficiente. În special, acestea au fost limbaje de scripting care nu au fost compilate în codul mașinii, ci interpretate. BASIC a fost interpretat la un moment dat, dar aceste limbaje de scripting au fost destinate în principal procesării textului - de exemplu, Perl, Python (nu era foarte faimos atunci), PHP, Ruby - acestea sunt limbajele de scripting care sunt în unul sau într-o măsură diferită încă mai trăiesc (toți au reușit să apară înainte de 2000, chiar mult mai devreme).

Să trecem puțin peste ele, pentru că acestea sunt lucruri specifice și acum sunt folosite în multe locuri. Care este ideea? Dacă nu compilăm, atunci pot fi permise mult mai multe. De exemplu, un program poate să se uite la codul său și să îl folosească cumva; ea știe ce se întâmplă în ea și datorită acestui lucru poate face o mulțime de lucruri interesante.

Perl a fost proiectat pentru procesarea textului - în acele vremuri exista deja atât de multă memorie în computere încât era posibil să îndesați un text în el și să faceți ceva util cu acest text (de exemplu, numărați cuvintele, căutați un fel). Dar, după părerea mea, a fost conceput de oameni care au fost puțin ieșiți din cap, pentru că există o astfel de glumă despre el: „Orice set de caractere scris este un program corect în Pearl”. După părerea mea, poți doar să scrii pe ea, nu poți să o citești. Când mă uit la codul în Perl și încerc să-mi dau seama ceva, nu înțeleg nimic. Poate dacă l-aș cunoaște mai bine, aș înțelege ceva, dar după cum am auzit de la acei oameni care încă se pricep, ei spun că e mai ușor de rescris. Adică, programele sunt scurte și cu adevărat mai ușor de rescris decât de a afla ce este acolo și de a remedia.

În această perioadă, la mijlocul anilor 90, a apărut internetul. La început, a fost mail, site-uri cu HTML static, dar oamenii au vrut să adauge un fel de dinamică acolo, astfel încât totul să se întâmple dinamic pentru noi, unele formulare să poată fi completate, cărți de oaspeți de făcut și altceva. În consecință, acest lucru a necesitat un fel de interacțiune, au venit cu un protocol, cum interacționează și, cel mai important, generarea acestor pagini statice (condițional) care vor fi „scuipat” utilizatorului ca răspuns la solicitarea acestuia.

În general, nimic altceva decât Pearl nu era potrivit la acea vreme. A fost o idee proastă să scrieți în C sau C++ purul handler. Și din lipsa unui limbaj mai bun la acea vreme (și suficient de mult timp), Pearl era un limbaj popular pentru dezvoltarea web. Desigur, amploarea nu este comparabilă cu ceea ce se întâmplă acum.

PHP a apărut ca... din întâmplare. O persoană a încetat rapid să facă asta - și-a făcut propria pagină de un fel, avea un fel de carte de oaspeți, altceva, unele lucruri. Și a scris un set de macrocomenzi pentru Pearl, care arăta ca C, pentru că știa să folosească C, doar pentru că era atât de confortabil. Și am numit-o Personal Homepage. A distribuit și a spus: „Oameni buni, uitați ce piesa am scris, totul este mult mai clar aici decât pe Pearl și îl puteți edita.” Și oamenilor le-a plăcut.

Apoi a abandonat cazul. În general, ca urmare, acest PHP a început să trăiască și în timp a devenit mult mai popular decât Perl. Dar această „traumă la naștere” a lui (ideea este ca un set de macro-uri pentru Pearl) a făcut o glumă destul de crudă cu el. Limbajul s-a dovedit a fi ciudat. Adică s-a dezvoltat de la sine, nimeni nu l-a proiectat, nimeni nu a administrat procesul de dezvoltare (nici firma și nicio persoană), dar au fost multe grupuri, fiecare dintre ele a văzut ce le-a plăcut. Ca urmare, funcțiile de acolo sunt numite diferit, nu există nici măcar un stil, totul este prin subliniere, în general, setările sunt ici și colo și cum va funcționa totul nu este foarte clar. Dar poți să te așezi și să scrii în PHP în două ore, pentru că așa a vrut el.

Python și Ruby: Ruby este mai puțin popular acum, Python este cumva mai bine „tăiat”, să vorbim despre asta mai târziu. Este clar că în acele vremuri acestea erau (conferențiarul arată spre Perl, Python, Ruby, PHP) limbaje foarte specializate pentru scopuri foarte specializate. În general, nicio programare de sistem, nicio logică de afaceri nu a fost scrisă în ele la acel moment, iar acum nu prea face asta.

Limbi compilate din anii 90

Vom merge cam în același timp, dar în cealaltă direcție. La acea vreme, folosim C ++ pentru aproape tot ce trebuia scris nu pentru web, nu pentru procesarea textului, ci pentru aplicații simple, pentru sisteme de operare, pentru jucării - în general, pentru orice. Dar C ++ este de fapt un limbaj înfiorător. De ce? Pentru că, în primul rând, a moștenit toate problemele C din cauza compatibilității cu versiunea inversă. Acolo încă mai putea fi ucis într-un milion de moduri diferite, aceleași care erau în C (desigur, noi modalități au fost adăugate în C++). În același timp, dacă scrieți totul bine și corect, așa cum au fost concepute de autorii lui C ++, atunci, desigur, era imposibil să vă sinucideți cu vechile metode și se pare că erau mai puține. Cu toate acestea, avea un model de obiect foarte ciudat. Împărțirea programului în module, în bucăți de orice fel a venit în general din C (dacă poți scrie include în C sau C ++ - de fapt, a fost concepută ca pur și simplu inserarea textului bibliotecii în programul tău, în la sfârșit, când scrieți o grămadă de incluziuni, aveți totul - dacă este „primitiv”, așa cum era la început - totul este inserat într-un singur fișier și apoi totul durează teribil de mult pentru a compila, pentru că merge de mai multe ori.versiunile sunt chiar mai bune.

În general, C++ are o mulțime de dezavantaje. Calificările unui programator trebuiau să fie mari pentru a scrie în C++, iar astfel de programatori erau scumpi (atât formarea, cât și altceva, adică este greu să găsești programatori pe piață, trebuie să plătească mult, bine, în general, nu este cazul...). Și computerele noastre numără din ce în ce mai repede, se ieftinesc, oamenii își cumpără computere noi și își doresc mai multe aplicații, mai multe jucării pentru telefon, în general - mai multă bucurie.

Așa a apărut Java (Java). De asemenea, există o poveste destul de amuzantă, cum a apărut numele în această limbă. Există programatori, ei beau cafea tot timpul și pe vremea aceea era la modă să bea cafea, care creștea pe insula Java. Limbajul a fost conceput ca un limbaj pentru aparatele încorporate, în special pentru o mașină de cafea. Așa a apărut numele...
Ce a început cu ea, ce a fost bun la ea și de ce a câștigat atât de multă popularitate? În primul rând, au scăpat complet de moștenirea lui Sishny. Fără indicații, mult mai puține moduri de a trage orice parte a corpului și de a sparge totul. În al doilea rând, au introdus idei mult mai recente în ceea ce privește modelul obiect – adică C++ a apărut mult mai devreme decât Java și a folosit un model obiect mai arhaic, „sălbatic”. Ei bine, aici (profesorul arată spre Java) era deja mai gândit atunci, iar în teorie oamenii s-au gândit, iar în practică au aplicat și au făcut totul mult mai mișto.

Și în sfârșit, al treilea. Programele noastre Java au fost asamblate nu în cod de mașină, ci în cod pentru o mașină virtuală. Adică ați avut o mașină virtuală JVM (VM) - Javovsky. Programele tale au fost colectate într-un fel de prezentare intermediară și apoi, cu ajutorul acestei mașini, au fost deja executate. Ce a făcut? În primul rând, a încetinit, iar în al doilea rând, a mâncat memoria cu o forță teribilă, iar în al treilea rând era portabil oriunde (teoretic) - chiar și la o filtru de cafea, chiar și la o râșniță de cafea, chiar și la un computer, chiar și la un telefon mobil. Pe de o parte, acest lucru este bun, adică tocmai ați scris o implementare a unei mașini virtuale, apoi rulați programele Java peste tot. Dar, pe de altă parte, este rău că același telefon avea puțină memorie în acel moment, a existat o performanță scăzută și, în plus, toate acestea au început să se plictisească și să încetinească.

Dar nici acesta nu este motivul principal pentru care limba a fost inventată în general. Limbajul Java a fost inventat pentru a reduce cerințele pentru calificările programatorilor. Adică, programatorii mai săraci pot scrie programe bune în Java, deoarece Java nu permite scrierea programelor proaste - nu există nici un mijloc acolo pentru a scrie programe proaste. Acolo poți scrie doar programe bune. Ei bine, în înțelegerea creatorilor limbii.

Adică dacă în C, în C++, în Python, pe orice, putem dizolva un fel de gunoi înfiorător din proiectul nostru, unde avem totul amestecat, adunat ore în șir și acolo altceva. În Java, puteți dizolva și coșul de gunoi, dar pentru aceasta trebuie deja să faceți ceva efort. Adică, în mod implicit, nu se dovedește a fi o „grămadă de gunoi”, apar alte probleme, că ceva a fost moștenit sau moștenit acolo - în general, pentru o linie semnificativă, există zece nu foarte semnificative. Pe de altă parte, poate un astfel de programator cu calificare medie poate scrie un cod destul de de înaltă calitate.
Suntem aproape la final. La noi, următorul lucru care a apărut este .Net (va ajunge), bine, și în special ne interesează C # (aproape la fel [conferențiarul arată spre Java], adică există diferențe în detalii, dacă alegi între ele - vezi unde plătești mai mulți bani).

Și încă un lucru este JavaScript. Nu are nimic de-a face cu limbajul Java, a apărut în același an - cuvântul a fost la modă, au licențiat marca comercială pentru utilizare.

Care este principalul lucru la care să acordați atenție? (Lectorul desenează săgeți de la C ++ la Java, .Net, C #, JavaScript și PHP). Pentru a scrie un program simplu într-una dintre aceste limbi și în multe altele - dacă cunoașteți C ++, în general nu trebuie să știți nimic altceva - luați și scrieți în C ++, apoi adăugați dolari la început , altceva face lucrurile mărunte și începe să funcționeze pentru tine la orice (profesorul arată limbajele cărora le-au fost alocate săgețile din C++). Adică sunt extrem de asemănătoare în unele lucruri simple. Dacă rezolvați unele probleme școlare, sarcini educaționale, altceva (nu proiectați un proiect mare - aveți un fișier care citește numere, afișează numere în consolă, face altceva), atunci nu există aproape nicio diferență între aceste limbi. Este clar că JavaScript și PHP sunt specializate, au totul puțin diferit. Și aici (profesorul arată spre Java și C #) există foarte puțină diferență în general.

De atunci, au apărut tot felul de alte lucruri interesante, dar nu este clar dacă vor trăi sau vor muri cu succes. Ce folosesc acum, pentru ce sarcini?

Selectarea limbii în funcție de sarcină

Să presupunem că vă confruntați cu sarcina de a scrie un driver pentru o placă video. Ce limbă vei folosi astăzi? (Strigă din partea publicului: Java!) De ce... Java este grozav, dar de ce nu Ruby sau PHP? (Lectorul vorbește sarcastic.)

Programare la nivel scăzut

Dacă scrieți ceva la nivel scăzut, atunci C este cea mai bună alegere, dar de fapt am auzit ceva (dar nu am văzut) că C ++ este folosit pentru asta. Dar cu greu cred în asta, pentru că în C poți controla clar - din moment ce ai dat atâția octeți de memorie, atunci așa și așa va fi. Și în C ++ (STL), cum este implementat un șir? Ei bine, cumva implementat. Și până la urmă nu știm cum și ce se întâmplă acolo, poate vom rămâne fără memorie pe placa noastră video sau se va întâmpla altceva. Prin urmare, C încă trăiește și nu moare, astfel de sarcini de programare a sistemului încă există - scrie un sistem de operare, scrie drivere, scrie altceva - C este grozav pentru asta. În plus, acum există tot felul de dispozitive (Internetul lucrurilor promite că este pe cale să apară) care trăiesc pe baterii (și, desigur, vor fi milioane, totul va fi agățat cu acest Internet al lucrurilor) , ar trebui să fie foarte ieftine și să consume foarte puțină energie electrică. În consecință, vor exista 2 KB de memorie, un procesor de 5 kHz, ei bine, desigur, nu va funcționa să înșurubați un fel de mașină virtuală sau limbaj de scripting în viitorul apropiat, ceea ce înseamnă că va trebui să scrieți ceva în C. Și chiar și acum, de exemplu, calcule pe o placă video (OpenCL sau altă tehnologie) - nu vin cu un nou limbaj pentru a scrie programe pentru ei - fac C acolo cu niște restricții mari. Doar pentru că oamenii știu deja cum, de ce să învețe ceva nou? Formal, acesta este probabil și, într-un sens, C.

Programare web

Să presupunem că vrei să scrii un nou Facebook (rețea socială). Pe ce vei scrie asta? (Din audiență vorbesc despre HTML și CSS.) HTML, CSS este design și vrem să putem adăuga fotografii, prieteni, să lăsăm comentarii acolo.

Pentru partea de scriptare - adică ceea ce se va întâmpla pe partea clientului - este JavaScript. Și uneori JavaScript este generat într-o altă limbă și trimis (se întâmplă ca scriptul să fie generat... pentru că uneori este mai ușor să gestionezi unele modificări de logică în acest fel).

În mod surprinzător, este scris în PHP - și Facebook și multe alte proiecte mari. Desigur, a trebuit să scriu unele dintre lucrurile mele, astfel încât să funcționeze în continuare bine, și nu așa cum a fost făcut „tyap-blooper”, dar ei au făcut-o. Practic, nu prea contează în ce scrii, dar nu recomand Perl. Aici și acum, desigur, nimeni nu scrie nimic de la zero pentru web. Toată lumea scrie un fel de cadru sau ceva de genul. Cumparaturi online? Am descărcat un cadru pentru un magazin online - ei bine, asta este, am scris un magazin online.

Programare de afaceri

Apoi, vrei să scrii o aplicație bancară plictisitoare. Sau, de exemplu, ai pe cineva care vinde carduri SIM? Poate ți-ai cumpărat vreodată un telefon sau altceva și ți-au spus: „Sistemul se blochează, nu putem face nimic”. Pe ce vei scrie o astfel de aplicație? (Un strigăt al publicului despre Python) Nu poți scrie așa ceva în Python, ce ești?! Nu merită să scrii nimic pentru afaceri în Python. De ce? Pentru că atunci când scrieți ceva în Python, nu puteți găsi un număr semnificativ de erori în procesul de scriere. Python este tastat dinamic în toate felurile posibile și, în general, puteți ascunde un bug, astfel încât să apară într-o astfel de situație încât nici măcar nu puteți înțelege ce au făcut acești utilizatori strâmbi acolo, că totul este stricat pentru dvs. Adică, este mai bine să scrieți scripturi mici pentru dvs. în Python - înțelegeți ce se întâmplă acolo și ce se face. Ei bine, sau ceva ce nu este păcat să arunci: vrei să lansezi ceva înaintea concurenților tăi, așa că dacă se va rupe de fiecare dată. Ai scris în Python și gata - ai preluat piața. Și dacă scrii ceva mult timp, de exemplu, un fel de aplicație bancară (ca să aprobe împrumuturi, altceva) - o scrii în Java. Pentru că există o chestiune serioasă, bucăți de hârtie, bani, documente, altceva, dar nu poți să încurci atât de mult în ea încât totul se va strica, altfel oamenii vor fi jigniți - banii lor s-au dus și nu au ajuns nicăieri, momentul în care șirul s-a transformat într-un număr sau invers. Deci, înseamnă că iei metodic Java și scrii, scrii... Ei bine, sau pe.Net, astfel de situații, în principiu, se întâmplă și ele. Acolo, desigur, puteți întâmpina și probleme, dar probabilitatea ca acest lucru este oarecum mai mică.

Programare pentru armată, aerospațială

Acum imaginați-vă că au decis să vă trimită pe Lună într-o rachetă. Ce ați folosi mai degrabă pentru a scrie codul care controlează motoarele rachetei? Să aruncăm o privire. Acest lucru, probabil (conferențiarul arată în Perl, Python, PHP, Ruby), nu merită - încetinește, se întâmplă altceva, ei bine, în general, nu aș fi de acord să zbor pe o astfel de rachetă. În C++? Sincer să fiu, nici eu nu aș avea încredere în mine, pentru că sunt prea multe moduri de a te sinucide în C++. Când ești acolo undeva în spațiu, nu e prea bine.

Poate în Java? Se pare că totul este destul de fiabil acolo și arhitectura este bună, fără tipuri sălbatice, fără memorie în exces. Să presupunem că a venit cel mai crucial moment și Java nostru a decis să colecteze gunoiul pentru noi. Trebuie să aterizăm, să încetinim, iar ea spune: „Nu, gunoiul pleacă”. În general, nici nu foarte bine.

Sincer să fiu, aș prefera ca acest program să fie scris în Pascal. Mie, desigur, nu prea-mi place Pascal, dar cumva, în astfel de chestiuni, ar fi foarte tare.

Utilizarea mai multor limbi simultan pentru dezvoltarea de software

Ei bine, ce ar trebui spus în general despre limbile moderne. În zilele noastre, multe proiecte nu trăiesc într-o singură limbă, adică unele dintre ele trăiesc într-o limbă, altele într-o altă limbă, iar altele într-o a treia. De exemplu, dacă aveți un fel de aplicație web care prelucrează cantități sălbatice de informații, accesul la discuri (nici măcar la baze de date, sunt atât de mari încât nici măcar o bază de date nu acceptă unele deja scrise) sunt probabil scrise într-o formă mai mică. -nivel C pentru a scrie extrem de rapid pe disc și toate celelalte. Desigur, scrierea întregului proiect în C nu merită. Poate că există un fel de logică intermediară scrisă în Java care apelează funcții Cis pentru apeluri rapide. Ei bine, frontend-ul (ceea ce se uită utilizatorul), desigur, este deja scris în ceva, în unele scripturi, în ceva care este executat direct de browser (JavaScript). Și toate acestea trăiesc împreună și interacționează cu succes.

În dezvoltarea unor aplicații, chiar și a celor mari, uneori oamenii ce fac? Ei iau și scriu un prototip în Python (cum va funcționa totul), schițează, gândesc la un fel de arhitectură. Scrierea pe el este într-adevăr foarte rapidă - au aruncat un prototip, au experimentat cu el și au spus: „Wo! E atât de tare!” Și complet rescris. S-ar părea că au făcut treaba de două ori, a durat de două ori mai mult (bine, una și jumătate). Dar nu! Se dovedește adesea că această metodă nu este rea, pentru că dacă scrieți imediat în ceva, de exemplu, în Java și apoi decideți: „Nu, haideți să refactorăm, să schimbăm complet arhitectura și toate astea”, atunci veți cheltui de 10 ori mai mult timp... Astfel de lucruri există și trăiesc.

Condiții pentru succesul oricărui limbaj de programare

Acum să vorbim despre motivul pentru care unele limbi frumoase nu au supraviețuit sau nu au trăit într-un spațiu foarte limitat. Când Wirth a văzut ce au făcut companiile proaste Apple, Borland și tot ce au făcut cu Pascalul său, a venit cu un limbaj și mai bun - Oberon. Era doar extrem de minimalist - adică erau foarte puține comenzi (Șiruri? De ce avem nevoie de șiruri? Vom face o serie de caractere!). Ei bine, ceva nu a funcționat pentru el, în măsura în care a putut.

Inca un lucru. Armata SUA le-a cerut să dezvolte și un limbaj cool, în care totul funcționează și totul poate fi scris. Rezultatul este un limbaj destul de monstruos numit Ada, în care, totuși, ei mai scriu ceva, dar din nou - numai pentru militari.

Care este problema? De ce unele limbi precum Python, pe care nicio companie nu l-a susținut la început, au preluat piața. PHP, care este, de asemenea, prost proiectat, a preluat și a capturat piața (cea mai mare parte) de la sine. Și s-au investit tot felul de miliarde de dolari (lectorul arată pe Ada) și nu s-au dus nicăieri, nu s-a întâmplat nimic. Care este motivul pentru aceasta? Acest lucru se datorează faptului că nu există infrastructură în jurul acestor limbi. Adică limbajul poate fi excelent, dar atâta timp cât nu există documentație, atâta timp cât nu există o comunitate care să poată răspunde la întrebări (pe Stack Overflow) și, în sfârșit, cel mai important, atâta timp cât nu există un număr mare a bibliotecilor, limba nu se aprinde. Adică, tu, de exemplu, ai vrut să scrii un site web pe Oberon. De ce nu? Și începe confuzia... Nu vă puteți ridica serverul web pe Oberon pentru a testa ușor, nu puteți conecta nicio bibliotecă, pentru că nu sunt pe Oberon. Și toate acestea se fac printr-un fel de cârje, forțele dispar și, în general, scuipi și scrii site-ul în C pur în loc de Oberon. Și acele limbi care pot folosi biblioteci din alte limbi trăiesc bine. Același Python în acele locuri în care încetinește. Ei bine, în general, tot felul de lucruri standard, cum ar fi sortarea și altceva, sunt scrise în C, iar el (Python) știe să interacționeze cu ele.

Java are, de asemenea, o interfață nativă Java. Acesta este în esență C, adică acolo (în opinia mea, vor să interzică tot timpul, dar se pare că nu au interzis încă) aceste limbi pot interacționa cu bibliotecile deja existente (în principal cele Sishny). Și datorită acestui lucru iau și lucrează. Ideea pe care încerc să ți-o transmit este clară, nu? Nu scrieți în limbi care nu știu cum să conectați biblioteca C. Ei bine, dacă vrei să te bucuri de ceva cool. Ei bine, și treptat ele (limbile) sunt acoperite cu propriul lor tip de infrastructură. Și trăiesc cumva bine.

Limbajul de programare și orientare în carieră

Acum haideți să vorbim despre cum să înțelegeți ce doriți în viață. Ce sunt lucrurile cool? Puteți face un fel de programare de sisteme, nu? Este grozav să numărăm aceste biciclete acolo, vrei să lansezi quadcoptere, niște camere și altceva de făcut. Atunci C este probabil alegerea ta.

Dacă vrei să scrii, poate nu cele mai interesante aplicații din viață, dar e mișto pentru tine să le proiectezi, să te gândești la toate și să faci mulți bani pentru a sta și te plictisești de cele mai multe ori (trebuie să plătești pentru asta dacă sunteți de înaltă calitate domnișoară), iată-le - Java, .Net. Te duci la muncă la o bancă, scrii, mergi la muncă la nouă într-o cămașă albă, primești un salariu bun și scrii conform recomandărilor celor mai bune surse Java, .Net-sheep și toate astea...

Dacă vrei să scrii orice aplicație, un browser, niște jucării, altceva, atunci C ++ este grozav. Dacă vrei să scrii site-uri web, iată-le, limbile la alegere (conferențiarul arată în Perl, Python, PHP, Ruby), nu este mare diferență. Singurul lucru este că PHP va muri înainte de Python, așa că dacă ți-e lene să înveți lucruri noi, atunci învață Python. Nu vei observa o mare diferență, dar vei rezista mai mult.

De asemenea, ce se întâmplă cu Ruby nu este clar. Ei bine, puteți și PHP, dacă l-ați învățat deja, deoarece sunt atât de simple încât nu durează atât de mult să reînvățați acolo.

Și, în sfârșit, există o altă zonă de aplicare a limbajelor de programare - atunci când le folosește un non-programator. Să presupunem că ești matematician, fizician, chimist, analist, oricine și trebuie să calculezi rapid ceva, să analizezi câteva date (pentru biologi, de exemplu, câte vulpi arctice trăiesc pe Insulele Commander). Puteți introduce toate acestea într-un tabel în Excel sau îl puteți analiza cu ceva. Python este, de asemenea, potrivit pentru asta, știe cum să lucreze cu text și bibliotecile sunt pline de tot felul, statistice și toate astea. Dacă doriți să faceți un fel de învățare automată, să procesați niște date, să preziceți, atunci acest lucru se face și cel mai rapid în Python acum. Cu toate acestea, trebuie remarcat faptul că sarcinile sunt foarte diferite. De exemplu, dacă doriți să tranzacționați la bursă instantaneu în condițiile în care cotațiile se schimbă tot timpul, atunci oricât de cool ați scrie Machine Learning în Python, oamenii care au scris ceva mai rapid vor avea timp să cumpere totul mai devreme, în timp ce vei fi numărat, chiar dacă algoritmii lor sunt mai răi. Prin urmare, chiar și aceste sarcini de învățare automată (unele dintre ele) necesită performanțe ridicate (și extrem de ridicate) și, în consecință, alte limbi.

Singura modalitate de a ști ce vrei este să încerci totul. Acum o voi spune ca una dintre viziunile despre cum poți încerca totul. Cum să devii un programator și unul fericit? Asa de. Pornim de la zero. Aici îți studiezi la școală matematica, limba rusă și alte discipline obligatorii și opționale, iar cunoștințele tale în domeniul programarii se reflectă pe tablă (lectorul arată o tablă goală) în acest moment. Și vrei să devii o persoană fericită, să faci ceea ce îți place, să câștigi mulți bani și să nu te refuzi nimic și să fii fericit.

O modalitate de a face asta. Există, desigur, tot felul de povești inspiratoare despre oameni care nu au mers deloc la universitate, sau au părăsit-o și au devenit miliardari, proprietari de companii și așa mai departe. Dar trebuie remarcat faptul că majoritatea oamenilor care poate nu au devenit miliardari, dar trăiesc și bine, totuși au absolvit universitatea la un moment dat.

Care este situația noastră cu admiterea la universitate (acum studiezi la școală)? În timp ce ești la școală, trebuie să înțelegi că următorul pas este să te înscrii și să ai grijă de asta. Treci examenul sau câștigă olimpiada. La examen, puteți folosi Pascal, C ++ (inclusiv C pur), Python (nu le voi aminti mai departe). La Olimpiada - același Pascal, același C++, același Python (vom vorbi acum despre problemele lui) și, cel mai adesea, există Java. Încă se poate întâmpla orice în funcție de olimpiade, dar nu de esență.

Cum arată graficul distribuției limbilor la Olimpiada de informatică a Rusiei? Oamenii care participă la All-Russian, cea mai tare Olimpiada, pe ce scriu? Arată așa (aici înseamnă Pascal, și aici este vorba despre 2000, și aici este aproximativ zero, aici este C ++ și aici este 2015).

În 2000, aproape nimeni nu a scris în C++. Cincisprezece ani mai târziu, aproape nimeni nu scrie în Pascal, în ciuda faptului că Pascal este modern. Aceasta este o limbă care poate face aproape totul la fel. Doar că toată lumea a devenit prea leneș să învețe asta, fiecare nouă tendință, și toată lumea continuă să scrie în Borland Pascal, care desigur nu poate face nimic. În C ++ oamenii scriu niște algoritmi de sortare (STL) - grozav, au scris sortare () și atât. Pe Pascal, pe obișnuit, pe vechi - aceasta este o problemă. Au scris ceva set (necesar) - grozav, l-au scris in C++, iar in Pascal chinul este continuu. Pe noile Pascals, desigur, puteți face acest lucru, dar de fapt costă bani. Poate că nu ați observat, dar este.

Există și Java, dar Java are o mulțime de litere. Este pentru proiecte mari, dar pentru programele mici de unică folosință se dovedește a fi destul de rău, pentru că există o mulțime de litere inutile. Dar și unii oameni scriu, poți învăța să scrii pe el. Dar la examenul de stat unificat nu este, iar examenul de stat unificat va trebui să fie promovat în cea mai mare parte.

Ce este cel mai bine pentru examen? Pentru examen, cel mai bine este (dacă nu știi nimic și nu te învață nimic la școală) să înveți Python. Unele sarcini ale examenului sunt perfect rezolvate pe el. La olimpiade, în general, se dovedește că C ++ este (folosit), pentru că Python este foarte lent, nu se rezolvă totul acolo.

Astfel, ai studiat un mic subset al limbajului și niște algoritmi (eventual) și ai rezolvat o mulțime de probleme pentru a obține o diplomă de olimpiade și a merge la universitate pentru a obține studii superioare.

Acum vă voi spune despre modul în care noi cei de la HSE construim cursul, în ce ordine sunt limbile, cum sunt studiate în matematică aplicată și informatică la Facultatea de Științe Aplicate, ceea ce facem cu Yandex. În primul semestru - Python (nu complet, despre cum ar trebui să înveți la școală) și C ++ (mai larg, mult mai larg decât se predă de obicei în școli). Să-ți spun imediat ca să nu te sperii, dacă vrei să intri brusc, spune: „De ce, știu deja toate astea, de ce mă duc să studiez undeva? Aș prefera să merg în altă parte.” Pentru cei care știu deja să programeze bine, există posibilitatea de a merge direct la studiul algoritmilor, și într-o pregătire destul de teoretică. Nu ne uităm la ele acum, asta (arată spre tablă) este pentru cei care programează mediu sau deloc.

În primul semestru, ei studiază elementele de bază ale Python, doar pentru ca oamenii să învețe să programeze și pentru ca nimeni să nu fie jignit în mod deosebit. Python este rar predat în școli, majoritatea oamenilor vin cu cunoștințe de Pascal sau C++. Practic chiar și Pascal, dacă este o școală de masă. Ei bine, pentru ca nimeni să nu fie jignit, toată lumea învață o nouă limbă (de parcă ar fi în condiții egale). Și C ++ pur și simplu pentru că apoi puteți merge oriunde de la C ++.

Apoi urmează cursul „Algoritmi” și un proiect de curs separat. Algoritmi clasici cu implementare. Nu că în teorie am luat ceva, am calculat complexitatea. La prelegere, am luat-o, am calculat complexitatea, la seminar - am luat-o, am implementat algoritmul. Un proiect este despre elevii care fac ceva terminat. De exemplu, unul dintre proiecte a fost: să numărăm... Să zicem că ai o mulțime de apartamente la Moscova și înțelegi: „O, am o mulțime de lucruri inutile, o să închiriez câteva. Și au stabilit un preț și nimeni nu vrea să închirieze un apartament de la tine - probabil prea scump. Sau au pus un fel de preț, l-au scos imediat și te gândești: „Oh, probabil că l-am leșinat ieftin”, și te superi și tu. Adică a fost necesar să se calculeze cât a costat închirierea unui apartament? Conduceți în date - vă construiește o estimare. Un astfel de site, care a constat din mai multe lucruri: primiți sugestii, analizați, aplicați un fel de algoritm de învățare automată (probabil) fără pretenții și faceți o fața web frumoasă în care puteți alege ceva, să conduceți ceva în, niște metri, orice număr de camere , numărul de saune, numărul de jacuzzi din apartamentul dvs. și estimați aproximativ costul. Adică un fel de lucru terminat, nu foarte complicat. Aici înseamnă (profesorul arată cursul despre algoritmi) un C++ atât de viguros, cu I/O consolă. Ei bine, aici (profesorul arată inscripția „proiect”) este ceva sub îndrumarea unui mentor, eventual cu baze de date, poate cu analizarea textelor și cu altceva.
Apoi urmează al treilea semestru - un curs numit „Sisteme informatice”. Există destul de puțin asamblator pentru înțelegere (foarte puțin) și apoi, ceva asemănător cu C-ul pur și interacțiunea cu sistemele de operare, programarea sistemului în esență. Și un proiect pentru un seminar este, de asemenea, ceva pe tema tuturor interacțiunilor de rețea, la nivel destul de scăzut: dezvoltați o utilitate, de exemplu rsync (sincronizare, poate știți. În C pur, mai mult sau mai puțin, scrieți un analog de rsync, pe care le veți avea prin folderele de sincronizare în rețea cu toate accesele la fișiere și așa mai departe).

Și în sfârșit, al patrulea. Nici nu stiu cum sa-i numesc, aceasta este o asa vinaigreta de tehnologii necesare dezvoltarii reale, de exemplu, dezvoltarii web. Adică, aceasta este o aplicație practică a bazelor de date, iarăși ceva asemănător cu ceea ce s-a făcut în proiect (lectorul arată proiectul de anul 2), dar mai aprofundat. Adică astfel de lucruri mai mult sau mai puțin concrete sunt deja programare practică. În paralel cu aceasta, există orice teorie, ei bine, aici sunt angajați și în știință.

Și după două cursuri, oamenii se împrăștie pentru a face ceea ce îi interesează, deoarece acest lucru acoperă destul de larg astfel de elemente de bază ale programării, iar oamenii în acest moment înțeleg deja că nu vor să se ocupe în niciun fel de sistemele informatice (ei, de exemplu, nu le-a plăcut programarea sistemului), dar vor să se ocupe de niște algoritmi teoretici, de dificultatea de a calcula, de a veni cu lucruri noi, distribuite sau altceva. Sau, dimpotrivă, ei cred că nu au prea multe aici ( lectorul indică primul curs cu Python și C++) du-te, atunci ( lectorul indică o a treia linie de curs, cu programarea sistemului) - cum nu vă place, numărați octeții și setați tot felul de restricții la citire-scriere, faceți fluxuri, fire și altceva. Și în conformitate cu aceasta, oamenii aleg o anumită direcție și învață. Adică, în principiu, ca să nu dezvolți „sindromul rățuței” – ți-ai văzut mai întâi Pascalul și acum spui „Pascalul este putere”; sau mai avansat - ați văzut C ++ și ați început să spuneți despre toată lumea că C ++ este puternic și orice altceva nu este foarte bun.

Aici trebuie să ne uităm la asta (profesorul arată lista de cursuri de pe tablă) mai larg - aceasta este una dintre metodele care a fost aleasă, în special la HSE (a apărut recent, deci este destul de modernă). Există și alte moduri de a ne cunoaște. În alte universități bune, într-o ordine puțin diferită și alte accente sunt plasate. Dar încearcă și să-i familiarizeze pe oameni cu tot ceea ce au.

Cum își caută un programator un loc de muncă

Tu esti asta ( lectorul arată lista de cursuri) a făcut totul, a studiat la universitate, a studiat ceva mai productiv încă doi ani și trebuie să mergi la muncă. Cum alegi ceva cu care să lucrezi? În primul rând, ai ajuns să cunoști totul, ai mers adânc undeva și știi deja ce iubești. Trebuie să alegi ceea ce iubești în mod natural. Pentru că dacă iubești, vei investi energie, vei avea motivație și în general totul va fi bine. Pentru că nu este vorba doar de bani, ci este de a face acest lucru interesant și plăcut pentru tine. Ei bine, și vrei să intri într-o companie grozavă, să obții un loc de muncă. Ce fel de persoană mi-ar plăcea să văd personal? De exemplu, o sută de studenți vin la mine - trebuie să iau doi sau unul la muncă. De ce vin, nu înțeleg deloc cine sunt, ce sunt, cum sunt? În cel mai bun caz, îmi vor arăta diploma pe care au primit-o la universitate, iar eu voi spune: „Vai! Aceasta este o diplomă grozavă, dar aceasta nu este atât de bună!” Și aș putea să greșesc, apropo. Poate că persoana respectivă a avut mult timp liber și a învățat mult mai bine.

Ce ar fi grozav? În primul rând, un proiect open source pe care l-ați scris de la început până la sfârșit. Este de dorit, dacă fac un fel de infrastructură pentru ca datele să poată fi citite rapid, sau altceva, atunci, bineînțeles, m-ar interesa să îmi scrie ceva open source. Nu făcut un site web, ci ceva pe această temă. De ce mă interesează asta? Pot să mă uit la codul tău, pot vedea cât de des te-ai comis, pot vedea cum ai reacționat la erori de la utilizatori, erori de la dezvoltatorii care îl folosesc - totul este scris, mă uit la toate și mă gândesc: „Uau, acest bug nu a mai fost aici de doi ani.închis, aici i-ai răspuns nepoliticos utilizatorului, apoi nu iau altceva”. Adică acesta este proiectul tău personal.

În continuare, ce altceva ar fi tare? Aș vrea să văd cum ați făcut munca în echipă. Adică vii la mine pentru un interviu și spui: „Eu și băieții de la universitate am făcut o aplicație bună. Făceam o bază de date acolo, făceau un fel de aplicație mobilă acolo și aveam și un tip care lucra acolo, o fată-designer, un băiat cu suport tehnic. Eram cinci și am făcut un proiect grozav.” Ei bine, văd care este cu adevărat proiectul tău, spun: „Ce este al tău?” Mă uit din nou la cod și înțeleg că știi să lucrezi în echipă cu oameni.

Un programator nu este cel care stă singur (un indie de genul ăsta) în garaj, undeva cu luminile stinse, nu vorbește cu nimeni, își ia barbă și scrie. Totuși, există un fel de interacțiune cu oamenii. Cu un șef, de exemplu, care poate uneori să te înjure (șefii, sunt atât de, nu întotdeauna amabili). Și văd că știi să lucrezi cu oamenii și mă bucură dacă ai o echipă bună. Chiar dacă nu este bine, este mai bine decât să nu-l ai.

Ce altceva mi-ar plăcea personal? Dacă te-ai arătat în proiecte mari. De exemplu, am comis ceva pentru nucleul Linux, dacă faceți programare de sistem, am remediat o eroare. Adică, au arătat că poți citi codul altcuiva și că poți face unele modificări. Mă uit: „Oh, într-adevăr, ți-ai dat seama de ceva complicat și ai remediat niște erori!” Și încep să fiu foarte fericit de asta. Pentru că am... ei bine, nu știu... programatorul meu a renunțat pentru că concurenții i-au oferit un salariu mai mare și trebuie urgent să tac pe cineva - tu. Parcă ai scris doar de la zero, dar nu știi să citești și să editezi codul altcuiva și mă supăr.

Și în sfârșit, în funcție de poziția specifică, există diverse alte lucruri. Dacă sunteți analist de locuri de muncă, aș dori să rezolvați sarcini de analiză a datelor pe Kaggle. Dacă obții un loc de muncă pe niște lucruri algoritmice, aș vrea să faci niște algoritmi în programarea sportivă. Și în sfârșit, dacă te-ai gândit la profesie, citește cum se țin interviurile, ai întâlnit că unii oameni de acolo își exprimă o mare nemulțumire: „Am venit și mă întreabă care este hobby-ul meu. Stau ca o bufniță și nu răspund, pentru că nu am niciun hobby, ”- și ei cred că HR’s fac asta. De fapt, ei încearcă să-și dea seama cât de prietenos și adecvat ești. Dacă ești neprietenos și inadecvat, atunci oricât de geniu și de workaholic ai fi, un specialist dur, cu mari cunoștințe, va fi dificil pentru echipa să lucreze cu tine și nu vei scoate proiectul singur. În plus, chiar dacă te întinzi, îți poți imagina ce sarcină pentru companie. Și că vei veni mâine și vei spune: „Mărește-mi salariul de 10 ori, că altfel te părăsesc”. De înțeles, companiile nu vor să intre în această situație. Prin urmare, creșterea adecvării și bunăvoinței în sine este la fel de importantă (cel puțin) ca și dezvoltarea unui fel de abilități profesionale.

Pentru a rezuma, ce poți spune? Ce limbi sunt bune și care sunt rele? Ei bine, într-un grup de limbi, de exemplu între Ruby, Python și PHP, pe care să o alegem? Desigur, răspunsul corect este Python, dar de fapt diferența dintre ele este în numărul de erori permise, în cantitate de altceva - 5%, ei bine, poate 10%. Adică, dacă aveți deja un proiect gata făcut scris în PHP, atunci nimeni înțelept nu va spune: „Să rescriem totul în Python”. Ei vor spune: „Să angajăm mai mulți dezvoltatori PHP și să continuăm să scriem în PHP”. Grozav, nu este o alegere rea. Este clar că, dacă începeți brusc să scrieți un proiect, atunci poate fi înțelept să alegeți Python acum. Deși, depinde și. Poate că aveți o grămadă de dezvoltatori PHP ieftini pe piață, dar cei Python sunt scumpi și vă gândiți: „Da, tehnologia este mai tare, dar voi economisi bani pe dezvoltatori gata făcute”. Și asta e tot, grozav, ai venit deja și lucrezi acolo.
Cum aleg între Java și C++? Da, se întâmplă același lucru. Cred că până când te vei decide în ce limbă să începi un nou mare proiect, vei dobândi cunoștințe în domeniul tău profesional și vei putea face alegerea corectă. În acest moment, nu trebuie să faceți încă această alegere, așa că vă sfătuiesc să faceți ceea ce vă place.

Bazele, așa cum am spus deja, foarte, foarte bazele programării (ce este o funcție, ce sunt dacă, pentru, matrice, altceva) pot fi învățate mai mult sau mai puțin în orice limbă. De exemplu, în C ++, pentru că arată ca o mulțime de lucruri, iar specificul din el (la acest nivel) este cel mai puțin, iar literele sunt cele mai puțin de scris inutile. Ei bine, atunci când înveți niște lucruri arhitecturale complexe, învață și te îngrijorezi prea mult despre asta. Adică, principalul lucru este - încercați, căutați ce vă place și când vă dați seama că este deja ora 4 dimineața și vă așezați pentru a vă distra și scrieți pentru că vă place - probabil că este în acest moment ca ti-ai gasit...

Orice persoană care decide să stăpânească elementele de bază ale procesului de creare a programelor de calculator, își pune întrebarea care sunt cele mai populare limbaje de programare astăzi și care sunt cele mai bune de învățat. Și dacă la prima întrebare este foarte ușor de răspuns, atunci la a doua trebuie să răspundă elevul însuși, pe baza planurilor și nevoilor sale.

Să aruncăm o privire rapidă la cele mai populare limbaje de programare, astfel încât să îl poți alege pe cel care te atrage și să începi să îl înveți.

programare?

Înainte de a dezasambla principalele limbaje de programare și de a le descrie, este necesar să dezasamblați conceptul în sine.

Un limbaj de programare este un sistem de semne formal care este folosit pentru a scrie programe de calculator. Ca orice altă limbă, are propriile reguli lexicale, semantice și sintactice.

Distingeți limbaje de nivel scăzut și înalt de programare. Astăzi îl folosesc în principal pe al doilea.

Limbaje de programare de nivel înalt și scăzut

Limbajul de programare de nivel scăzut are o structură apropiată de structură.În acest caz, comenzile sunt notate cu zerouri și unu, ci cu notații mnemonice. Cel mai faimos limbaj de programare de nivel scăzut este limbajul de asamblare.

Lucrul cu oricare dintre limbi necesită calificări înalte, iar înțelegerea, în plus, necesită mult timp pentru a scrie programe. În același timp, folosind cele joase, puteți crea programe mici, dar în același timp eficiente. Programatorilor începători nu li se recomandă să înceapă cunoștințele cu ei.

Limbajele de programare de nivel înalt se caracterizează prin prezența unor constructe semantice pentru descrierea operațiilor. Studiul lor necesită mult timp, iar aplicarea lor în practică necesită îngrijire și înțelegere a structurilor și regulilor de bază ale sintaxei și vocabularului. Dar, în același timp, competența în limbi de nivel înalt vă permite să creați proiecte mari, colorate, multifuncționale în timp record.

Nivelul înalt include Pascal, Java, C, C++, C #, Delphi și multe altele. Sunt folosite pentru a scrie software și aplicații.

Cele mai populare limbaje de programare

Care sunt cele mai populare limbaje de programare astăzi?

În ultimii ani, cele mai populare și solicitate sunt Java, C, C++, Python, C#, care se numără printre cele mai importante limbaje de programare. Ele formează baza programelor moderne și sunt folosite la scrierea oricărui proiect mare. Peste 70% dintre programatori lucrează cu aceste limbaje. Se preconizează că în următorii 10 ani vor avea în continuare aceeași cerere ca și astăzi.

Ruby, PHP, JavaScript sunt considerate nu mai puțin populare. Majoritatea experților se concentrează și asupra lor.

În general, indiferent de popularitate, orice specialist, respectându-se mai mult sau mai puțin, trebuie să cunoască cel puțin mai multe limbi de diferite niveluri. Acest lucru se datorează faptului că majoritatea proiectelor mari sunt dezvoltate în diferite limbi. De exemplu, unele module sunt scrise folosind C, altele sunt dezvoltate în Java, iar altele în Delphi.

C, C++ și C #

Să începem cu familia C.

Limbajul C este compilat și dezvoltat în anii '70. Pe baza acesteia, au fost create ulterior limbaje precum C++ și C #, Java.

C ++ este un limbaj puternic conceput pentru a crea atât utilități și drivere de nivel scăzut, cât și aplicații și complexe software foarte impresionante.

C # este un limbaj modern orientat pe obiecte bazat pe limbajele C și C++. Are un sistem de tip sigur. Una dintre caracteristicile sale distinctive este că este, de asemenea, foarte asemănătoare cu un alt limbaj de programare popular - Java.

Unul dintre dezavantajele limbajului este că vă permite să creați aplicații doar pentru sistemul de operare Windows și, în plus, este foarte greoaie, ceea ce înseamnă că programele scrise în el ocupă mult spațiu.

Se poate observa că în multe feluri C, C++ și C # sunt limbaje de programare pentru începători. După ce le stăpânești, poți fi sigur că învățarea unei noi limbi va dura un minim de timp.

Puteți să vă familiarizați cu ele și să vă scrieți primele aplicații într-un mediu special Borland sau Visual Studio.

JavaScript

JavaScript este un limbaj cu capabilități orientate pe obiecte. Dezvoltat în 1996 și este unul dintre cele mai populare astăzi. Limbajul este folosit în principal pentru crearea de scripturi pe Internet și funcționează în browserele majore precum Internet Explorer, Firefox, Opera. De asemenea, este strâns legat de HTML și CSS, așa că trebuie să stăpânești elementele de bază ale acestor limbi înainte de a începe să le înveți.

Este demn de remarcat faptul că, în ciuda asemănării numelui, JavaScript și Java sunt două limbi complet diferite.

Acest limbaj este potrivit pentru cei care se concentrează pe crearea de browsere și scripturi, aplicații și suplimente pentru acestea. Dacă intenționați să vă creați propriile site-uri, trebuie și să îl cunoașteți mai bine.

Java

Având în vedere cele mai populare limbaje de programare, nu putem decât să menționăm Java. Este un limbaj de programare orientat către obiective care a fost utilizat din 1995. Este destul de ușor și funcționează pe orice mașină Java de orice arhitectură. Este folosit pentru dezvoltarea de aplicații pentru Android și iOS.

Piton

Python - a cărui sarcină principală este de a crește productivitatea dezvoltatorului, face codul mai lizibil. Are o listă mică de constructe sintactice și o bibliotecă standard de funcții foarte impresionantă. Dezvoltarea limbii a început în anii 90 și continuă până în zilele noastre. Este folosit pentru dezvoltarea diferitelor proiecte, extensii și integrarea aplicațiilor dezvoltate anterior.

Elementele de bază ale limbajului Python pot fi învățate atât ca punct de plecare pentru programare, cât și ca un al doilea limbaj complementar.

Rubin

Ruby este un limbaj de programare de nivel înalt care conține părți din Perl, Smalltalk, Eiffel, Ada și Lisp. Folosit din 1995. Principalele avantaje ale limbajului sunt simplitatea și flexibilitatea. Potrivit atât pentru scrierea de aplicații mici, cât și pentru dezvoltarea de programe serioase.

limbaj PHP

PHP este un limbaj de scripting destul de popular conceput pentru construirea de aplicații web. Destul de des este inclus și în lista „Limbaje de programare pentru începători” și recomandat pentru învățare.

Vă poate ajuta să creați aplicații web de înaltă calitate într-un interval de timp foarte scurt. Limba are o structură simplă și de înțeles, care vă permite să o învățați în câteva zile.

Concluzie

Am trecut în revistă cele mai populare limbaje de programare, al căror studiu vă va ajuta pe viitor să vă creați cu succes proiectele și să câștigați bani ca programator. Nu există un consens cu privire la limbajul de studiat, dar, în același timp, experții notează că este de dorit să cunoașteți mai multe limbaje de programare, deoarece acest lucru va extinde și mai mult domeniul de activitate și va facilita lucrul la diferite proiecte în echipă.

Programarea este o întreagă știință care vă permite să creați programe de calculator. Include un număr mare de operații și algoritmi diferiți care formează un singur limbaj de programare. Deci, ce este și care sunt diferitele limbaje de programare? Articolul oferă răspunsuri și oferă, de asemenea, o listă generală a limbajelor de programare.

Istoria apariției și schimbării limbajelor programelor ar trebui studiată împreună cu istoria dezvoltării tehnologiei computerelor, deoarece aceste concepte sunt direct legate. Fără limbaje de programare, ar fi imposibil să se creeze vreun program pentru funcționarea unui computer, ceea ce înseamnă că crearea computerelor ar deveni un exercițiu fără sens.

Primul limbaj mașină a fost inventat în 1941 de Konrad Zuse, care este inventatorul motorului analitic. Puțin mai târziu, în 1943, Howard Aiken a creat mașina Mark 1, capabilă să citească instrucțiuni la nivelul codului mașinii.

În anii 1950, a existat o cerere activă pentru dezvoltarea de software, iar limbajul mașinii nu putea gestiona cantități mari de cod, așa că a fost creat un nou mod de comunicare cu computerele. Assembler este primul limbaj mnemonic care înlocuiește instrucțiunile mașinii. De-a lungul anilor, lista limbajelor de programare crește, deoarece domeniul de aplicare a tehnologiilor informatice devine din ce în ce mai larg.

Clasificarea limbajelor de programare

În acest moment, există peste 300 de limbaje de programare. Fiecare dintre ele are propriile caracteristici și este potrivit pentru o anumită sarcină. Toate limbajele de programare pot fi împărțite aproximativ în mai multe grupuri:

  • Orientat pe aspect (ideea principală este separarea funcționalității pentru a crește eficiența modulelor software).
  • Structural (bazat pe ideea de a crea o structură ierarhică a blocurilor individuale de program).
  • Logic (bazat pe teoria aparatului logicii matematice și a regulilor de rezoluție).
  • Orientat pe obiecte (în astfel de programare nu mai sunt folosiți algoritmi, ci obiecte care aparțin unei anumite clase).
  • Multi-paradigma (combină mai multe paradigme, iar programatorul însuși decide ce limbaj să folosească într-un anumit caz).
  • Funcțional (elementele principale sunt funcții care modifică valoarea în funcție de rezultatele calculelor datelor inițiale).

Programare pentru incepatori

Mulți oameni își pun întrebarea, ce este programarea? Practic, este o modalitate de a comunica cu un computer. Datorită limbajelor de programare, putem seta sarcini specifice pentru diverse dispozitive prin crearea de aplicații sau programe speciale. Când studiezi această știință în stadiul inițial, cel mai important lucru este să alegi limbaje de programare potrivite (interesante pentru tine). Lista de start este mai jos:

  • Basic a fost inventat în 1964, aparține familiei de limbaje de nivel înalt și este folosit pentru a scrie programe de aplicație.
  • Python („Python”) este destul de ușor de învățat datorită sintaxei sale simple și lizibile, dar avantajul este că poate fi folosit pentru a crea atât programe desktop obișnuite, cât și aplicații web.
  • Pascal ("Pascal") - una dintre cele mai vechi limbi (1969), creată pentru predarea studenților. Modificarea sa modernă este puternic tipărită și structurată, dar Pascal este un limbaj destul de logic, care este de înțeles la nivel intuitiv.

Aceasta nu este o listă completă de limbaje de programare pentru începători. Există un număr mare de sintaxe care sunt disponibile pentru înțelegere și cu siguranță vor fi solicitate în următorii ani. Fiecare are dreptul să aleagă independent direcția care va fi interesantă pentru el.

Începătorii au ocazia să accelereze învățarea programării și a elementelor fundamentale ale acesteia datorită instrumentelor speciale. Asistentul principal este mediul de dezvoltare integrat pentru programe și aplicații Visual Basic ("Visual Basic" este, de asemenea, un limbaj de programare care a moștenit stilul limbajului Basic al anilor 1970).

Nivelurile limbajului de programare

Toate limbajele formalizate destinate creării, descrierii de programe și algoritmi pentru rezolvarea problemelor pe computere sunt împărțite în două categorii principale: limbaje de programare de nivel scăzut (lista este prezentată mai jos) și cele de nivel înalt. Să vorbim despre fiecare dintre ele separat.

Limbile de nivel scăzut sunt concepute pentru a crea instrucțiuni de mașină pentru procesoare. Principalul lor avantaj este că folosesc notația mnemonică, adică în loc de o secvență de zerouri și unu (din sistemul de numere binar), computerul își amintește un cuvânt abreviat semnificativ din limba engleză. Cele mai cunoscute limbi de nivel scăzut sunt „Assembler” (există mai multe subspecii ale acestui limbaj, fiecare dintre ele având multe în comun, dar diferă doar printr-un set de directive și macrocomenzi suplimentare), CIL (disponibil în .Net platformă) și JAVA Bytecode.

Limbaje de programare de nivel înalt: o listă

Limbile de nivel înalt sunt concepute pentru confortul și eficiența aplicațiilor; sunt exact opusul limbilor de nivel scăzut. Caracteristica lor distinctivă este prezența structurilor semantice care descriu succint și concis structurile și algoritmii programelor. În limbile de nivel scăzut, descrierea lor în codul mașinii ar fi prea lungă și de neînțeles. Limbile de nivel înalt sunt independente de platformă. În schimb, compilatorii îndeplinesc funcția de traducător: traduc textul programului în instrucțiuni elementare ale mașinii.

Următoarea listă de limbaje de programare: C ("C"), C # ("C-sharp"), "Fortran", "Pascal", Java ("Java") - sunt printre cele mai utilizate sintaxe de nivel înalt. Are următoarele proprietăți: aceste limbaje funcționează cu structuri complexe, acceptă tipuri de date șir și operațiuni cu fișiere I/O de informații și au, de asemenea, avantajul de a fi mult mai ușor de lucrat datorită lizibilității și sintaxei clare.

Cele mai utilizate limbaje de programare

Practic, puteți scrie un program în orice limbă. Întrebarea este, va funcționa eficient și fără probleme? De aceea, ar trebui alese cele mai potrivite limbaje de programare pentru rezolvarea diferitelor probleme. Lista după popularitate poate fi caracterizată după cum urmează:

  • Limbaje OOP: Java, C++, Python, PHP, VisualBasic și JavaScript;
  • un grup de limbaje structurale: Basic, Fortran și Pascal;
  • multi-paradigmă: C #, Delphi, Curry și Scala.

Domeniul de aplicare al programelor și aplicațiilor

Alegerea limbii în care este scris acest sau acel program depinde în mare măsură de domeniul de aplicare. Deci, de exemplu, pentru a lucra cu „hardware-ul” computerului în sine (drivere de scriere și programe de suport), cea mai bună opțiune ar fi C („C”) sau C ++, care sunt incluse în principalele limbaje de programare (vezi lista de mai sus). Și pentru dezvoltarea de aplicații mobile, inclusiv jocuri, ar trebui să alegeți Java sau C # ("C-Sharp").

Dacă nu v-ați hotărât încă în ce direcție să lucrați, vă recomandăm să începeți să învățați din limbajele C sau C++. Au o sintaxă foarte clară, o împărțire structurală clară în clase și funcții. În plus, cunoscând C sau C++, puteți învăța cu ușurință orice alt limbaj de programare.

Top articole similare