LIMBAJUL DE PROGRAMARE ȘI TIPURILE LUI

Un limbaj de programare este un sistem formal de semne pentru scrierea de programe de calculator. Un limbaj de programare definește un set de reguli lexicale, sintactice și semantice care definesc aspect programe și acțiuni pe care executorul (computerul) le va efectua sub controlul său.

Dificultatea este că computerul include doar 1 și 0: încercați să vorbiți doar 0 și 1, îmi veți spune câteva noutăți. 😉. Pentru a vorbi cu un computer, trebuie să utilizați un „traducător”. Există mulți „traducători” și fiecare „traducător” are propria limbă. Astfel, nu veți scrie în limba computerului, ci în limba „traducător”. Un traducător care înțelege ceea ce îi spui îl transformă pe toate în 0 și 1 pe care computerul le poate înțelege perfect.

Nu există nicio discuție cu computerul, acesta este un monolog. Suntem lideri și dăm ordine. El îl ascultă. Aceste comenzi se numesc instrucțiuni. Astfel, un program este o secvență de instrucțiuni precum.

  • Afișează zona în care utilizatorul își poate introduce numele.
  • Dacă utilizatorul face clic pe butonul de închidere, programul se închide.
Vedeți, instrucțiunile sunt clare. Computerul știe exact ce să facă.

Un limbaj de programare la nivel înalt este un limbaj de programare conceput pentru viteză și ușurință în utilizare de către programator. Principala caracteristică a limbajelor la nivel înalt este abstractizarea, adică introducerea unor constructe semantice care descriu pe scurt astfel de structuri de date și operații pe ele, ale căror descrieri în codul mașinii (sau alt limbaj de programare de nivel scăzut) sunt foarte lungi și greu de înțeles.

Ce este un limbaj interpretat?

Limbajul de programare ne va permite să scriem toate aceste instrucțiuni într-un limbaj pe care „traducătorul” îl poate înțelege. Traducătorul le convertește apoi în 0 și 1 pe care computerul le poate înțelege și executa. Această întreagă secvență de instrucțiuni se numește „cod sursă”.


În principiu, există 2 tipuri de „limbă”. Există două moduri principale de operare. Limbi interpretate de limbi compilate. ... Un limbaj interpretat este limba în care fiecare linie a unei instrucțiuni este citită și tradusă pentru executare. Pentru ca acest lucru să funcționeze, interpretul trebuie să aibă acces la codul sursă.

Limbajul de programare de nivel scăzut (limbaj de programare de nivel scăzut) este un limbaj de programare apropiat de programare direct în codurile mașinii procesorului real sau virtual (de exemplu, Java, Microsoft .NET) folosit. Notarea mnemonică este de obicei utilizată pentru a indica instrucțiunile mașinii. Acest lucru vă permite să memorați comenzile nu sub forma unei secvențe de zerouri binare și unele, ci sub forma abrevierilor semnificative ale cuvintelor în limba umană (de obicei engleza).

Ce este un limbaj compilat?

Putem reprezenta toate acestea după cum urmează. În această diagramă, vedem. Prin urmare, este ușor de înțeles asta. Rândurile sunt citite și traduse după cum este necesar, sursă trebuie să fie prezent pe computer, interpretul trebuie să fie prezent și pe computer. Cu un limbaj compilat este diferit. Dezvoltator software va efectua o operație numită compilare. Această operație, efectuată dintr-un software special numit compilator, convertește tot codul sursă în cod mașină.

LIMBI DE PROGRAMARE LA NIVEL SCAD

Primele computere au trebuit să programeze cu coduri binare ale mașinii. Cu toate acestea, programarea în acest mod este o sarcină destul de laborioasă și complicată. Pentru a simplifica această sarcină, au început să apară limbaje de programare de nivel scăzut, ceea ce a făcut posibilă setarea instrucțiunilor mașinii într-o formă mai ușor de citit de om. Pentru a le converti în cod binar, au fost create programe speciale - traducători.

Limbaj interpretat versus limbaj compilat: care sunt diferențele?

Aveți nevoie doar de acest fișier executabil pentru a rula software-ul pe computer. Iată o diagramă care rezumă totul. De fiecare dată când software-ul este modificat de către dezvoltator, programul trebuie recompilat. Limbaj interpretat, limbaj compilat: ambele au avantajele lor și ambele au dezavantajele lor.

Avantajul unui limbaj interpretat este portabilitatea sa, adică capacitatea sa de a funcționa pe diferite tipuri. Pe de altă parte, principalul dezavantaj al unui limbaj interpretat este viteza sa. Într-adevăr, după cum ați văzut, interpretul traduce codul sursă linie cu linie, ceea ce durează puțin. Un limbaj interpretat este întotdeauna puțin mai lent decât un limbaj compilat. În cele din urmă, prin trimiterea codului sursă la computerul pe care va rula, software-ul este mai puțin protejat de copiere și codul sursă poate fi modificat.

Fig. 1. Un exemplu de cod al mașinii și reprezentarea acestuia în asamblare

Traducătorii sunt împărțiți în:

    compilatoare - transformați textul programului în cod mașină care poate fi salvat și apoi utilizat fără un compilator (un exemplu sunt fișierele executabile cu extensia *. exe);

    interpreți - transformați o parte a unui program în cod mașină, executați și apoi treceți la partea următoare. În acest caz, interpretul este utilizat de fiecare dată când programul este executat.

    Dar le face și mai eficiente în ceea ce privește viteza și funcționalitatea. Și, în sfârșit, pentru a fi destul de complet, există limbaje „mixte”. Aceste limbi sunt compilate de bytecode și acest bytecode va fi interpretat în computer la distanță... Să aruncăm o privire la a doua parte a acestui articol.

    Îi poți stăpâni la perfecțiune în Bulgaria și poți face o carieră. Nu trebuie să fiți în Statele Unite pentru a obține cele mai necesare limbaje de programare la perfecțiune - termenii sunt disponibili și în Bulgaria. Era programării și inovației software abia începe! Potrivit Biroului Statisticii Muncii din SUA, locurile de muncă în domeniul IT vor crește cu până la 8% în următorii șapte ani. Și, luând această cifră la mii de locuri de muncă în acest moment, creșterea va fi cu adevărat tangibilă.

Un exemplu de limbaj de nivel scăzut este asamblarea. Limbajele de nivel scăzut se concentrează pe un anumit tip de procesor și iau în considerare particularitățile sale, prin urmare, pentru a transporta un program în limbaj de asamblare pe o altă platformă hardware, acesta trebuie rescris aproape complet. Există anumite diferențe în sintaxa programelor pentru diferite compilatoare. Adevărat, procesoarele centrale pentru computerele de la AMD și Intel sunt practic compatibile și diferă doar în anumite comenzi specifice. Dar procesoarele specializate pentru alte dispozitive, de exemplu, plăcile video, telefoanele, conțin diferențe semnificative.

Pentru fiecare specialist în domeniu tehnologia Informatiei o instruire bună și adecvată este esențială. Și, în ciuda dominanței incontestabile a Americii și Bulgariei, este un loc minunat pentru oamenii tineri și ambițioși pentru a obține o educație bună și o carieră în sectorul în creștere rapidă. Aceasta este o expansiune dinamică și rapidă a sectorului IT din Bulgaria, care a necesitat crearea unui număr de instituții de învățământ specializate. Acesta este un semn sigur că programarea are un viitor și se află în limitele sale.

Vă garantăm că nu trebuie să fiți în SUA pentru a excela. Acest lucru permite dezvoltatorilor să răspundă nevoilor utilizatorilor diferiți și multipli. De asemenea, poate crea aplicații web complete fără a utiliza alte limbaje de programare. Dacă cineva a decis deja să urmeze o carieră de programator, este doar în interesul său să urmeze tendințele actuale în programare, astfel încât portofoliul său de servicii să fie mereu actualizat. Desigur, limbile pot fi predate doar pentru distracție.

Beneficii

Limbile de nivel scăzut sunt utilizate pentru a crea programe eficiente și compacte, pe măsură ce dezvoltatorul câștigă acces la toate capacitățile procesorului.

dezavantaje

    Un programator care lucrează cu limbaje de nivel scăzut trebuie să fie foarte calificat și să aibă o bună înțelegere a sistemului de microprocesor pentru care este creat programul. Deci, dacă este creat un program pentru un computer, trebuie să cunoașteți structura computerului și, mai ales, dispozitivul și caracteristicile procesorului său;

    Pe scurt, aceasta este o valoare care indică popularitatea unui anumit limbaj de programare. Indicele este actualizat o dată pe lună, iar poziția fiecărei limbi este determinată de numărul de programatori cu experiență care lucrează cu ea în întreaga lume, oferă cursuri în aceste limbi și, bineînțeles, vă va spune și câte părți terțe cu această limbă lucrează pe piață. Metodologia exactă este descrisă aici.

    Dar să trecem la clasamentul în sine. Dar poate fi folosit și pentru a crea aplicații. Variația de la an la an a fost de -0,70%. Datorită capacităților sale, este popular și pe platformele încorporate. ... În fiecare an, un tip sare în clasament și ia cel mai mult.

    programul rezultat nu poate fi transferat pe un computer sau dispozitiv cu un alt tip de procesor;

    timp semnificativ de dezvoltare pentru programe mari și complexe.

Limbajele de nivel scăzut, de regulă, sunt utilizate pentru scrierea de programe de sistem mici, drivere de dispozitiv, module pentru interfețe cu echipamente nestandardizate, programarea microprocesoarelor specializate, atunci când cele mai importante cerințe sunt compacitatea, viteza și capacitatea de a accesa direct resursele hardware.

Indiferent ce limbă dorește să împartă, un lucru este sigur - un aspirant la programator trebuie să învețe și să cunoască cel puțin unul limba noua; limbaj nou în an. Nu pentru ușurința plasării, ci pentru a privi din nou problemele dintr-un unghi nou.

Un pachet poate consta din mai multe fișiere și nu este necesar să respectați o regulă fixă \u200b\u200batunci când denumiți fișierele în sine și subdirectoarele unde sunt localizate. Din nou, convenția este că numele pachetului se bazează pe directorul în care se află sursa pachetului.

Să luăm un exemplu despre cum sunt compilate bibliotecile. Principiul este să găsiți toate subdirectoarele de lucru, să verificați dacă conțin unele fișiere și, dacă da, fișierele din fiecare director sunt realizate dintr-un pachet. Treptat, prin ferestre separate, discutăm despre implementarea pachetului pong. acesta este un singur fișier. Ca și în cazul oricărui fișier, acesta trebuie să înceapă și cu o declarație de pachet. Dar importul arată diferit aici, nu-i așa?

Assembler este un limbaj de nivel scăzut, care este încă utilizat pe scară largă astăzi.

LIMBI DE PROGRAMARE LA NIVEL ÎNALT

Se ia în considerare primul limbaj de programare la nivel înalt limbajul computerului Plankalkül, dezvoltat de inginerul german Konrad Zuse în perioada 1942-1946. Cu toate acestea, un traducător pentru acesta nu a existat decât în \u200b\u200b2000. Primul traducător de limbă la nivel înalt din lume este PP (Programming Program), alias PP-1, testat cu succes în 1954. Traducător PP-2 (1955, locul 4 în lume) translator) optimiza deja și conținea propriul încărcător și depanator, o bibliotecă de proceduri standard, iar traducătorul PP pentru computerele Strela-4 conținea deja un linker de module. Cu toate acestea, utilizarea pe scară largă a limbajelor la nivel înalt a început odată cu apariția Fortran și crearea unui compilator pentru acest limbaj (1957).

Dacă importăm un singur pachet, putem folosi formularul trunchiat; dacă dorim mai multe, adăugăm paranteze și separăm pachetele cu punct și virgulă. Dacă nu ne place numele pachetului dat de autorul său, îl putem redenumi.

Import. Sau puteți importa tot ceea ce a fost exportat dintr-un pachet în spațiul de nume al fișierului respectiv. Numele tipului nou creat este indicat imediat după clauza de tip. Acesta este un identificator și, ca orice altceva, este adevărat că, dacă începe cu o literă mare, este exportat din pachet.

Limbajele la nivel înalt se străduiesc nu numai să faciliteze soluționarea problemelor complexe de programare, ci și să simplifice portarea software-ului. Utilizarea unei varietăți de traducători și interpreți asigură faptul că programele scrise în limbi de nivel înalt comunică cu diferite sisteme de operare și hardware, în timp ce codul lor sursă rămâne, în mod ideal, neschimbat.

Denumirea de acest tip urmează definiția sa. În codul de mai sus, sunt definite două tipuri - bloc și pong. O interfață este un tip abstract care definește ce funcții pot fi apelate la tipurile care implementează interfața. Este o interfață goală - nu necesită apelarea unei funcții pe tip.

Această interfață se potrivește cu toate tipurile. O structură este un tip de date care asociază alte tipuri de date cu un singur obiect. Structurile sunt formate din membri, fiecare cu numele și tipul său. Pong va stoca informații despre masa de ping pong. Metodele diferă de funcții prin faptul că între tasta funcțională și numele metodei, „acesta” explicit este numele și tipul valorii pe care metoda poate fi apelată. Acesta este modul în care sunt implementate interfețele.

Acest tip de izolare a limbajelor la nivel înalt de implementarea hardware a unui computer are, pe lângă multe avantaje, și dezavantaje. În special, nu permite instrucțiuni simple și precise pentru echipamentul utilizat. Programele scrise în limbaje de nivel înalt sunt mai ușor de înțeles pentru un programator, dar mai puțin eficiente decât omologii lor scrise în limbaje de nivel scăzut. Una dintre consecințe a fost adăugarea suportului pentru unul sau alt limbaj de nivel scăzut (limbaj de asamblare) într-un număr de limbaje de programare profesionale moderne de nivel înalt.

Nu este folosit aici, ci pentru a le denumi, dar este procedura recomandată, deoarece documentează ce este și este mai elocventă decât oricare. Nu vă faceți griji cu privire la gât, totul este optimizat, astfel încât să puteți crea 100.000 fără a bate un ochi și nu se întâmplă nimic. Canalele sunt un mod de comunicare a combustibililor.

Acum îi putem atribui cu fericire valori. Operator: \u003d acești doi pași pot fi comprimați într-unul - în funcție de tipul returnat al expresiei, tipul variabilei este dedus în dreapta operatorului, „o declară” și îi atribuie valoarea expresiei evaluate. Cu toate acestea, acum este creată o variabilă, deci orice atribuire suplimentară este deja furnizată de operatorul \u003d.

Exemple: C, C ++, C #, Java, Python, PHP, Ruby, Perl, Pascal, Delphi, Lisp... Limbile de nivel înalt au capacitatea de a lucra cu structuri de date complexe. Majoritatea au suport integrat pentru tipuri de șiruri, obiecte, operații de I / O de fișiere și așa mai departe. Dezavantajul limbajelor de nivel înalt este că programele sunt mai mari decât programele în limbaje de nivel scăzut. Prin urmare, limbajele la nivel înalt sunt utilizate în principal pentru dezvoltarea de software a computerelor și dispozitivelor care au o cantitate mare de memorie. Și diferite subtipuri de asamblare sunt utilizate pentru programarea altor dispozitive, unde dimensiunea programului este critică.

Iată una mai clasică pentru - titlul are trei părți, separate prin punct și virgulă: flexiune; stat; la fiecare iterație, acest lucru se face pe corp. Apoi terminăm pongul, astfel încât să îl trimitem în locul canalului zero așteptat și să semnăm pe canal că s-a terminat.

Asta este tot ce putem găsi în ambalajul pong. Ca de obicei, fișierul începe prin definirea pachetului căruia îi aparține. importurile sunt, de asemenea, clare. Pentru ca un program gestionat să fie gestionat, acesta definește câțiva parametri linie de comandafolosind instrumentele din pachetul steaguri.

Limbajele imperative se bazează pe mai multe idei importante, inclusiv reprezentarea acțiunilor sub formă de formule matematice, conceptul de tip de date și teorema transformării structurale.

Un program într-un limbaj imperativ este construit din funcții (subrutine). Programele de limbaj de asamblare pot consta, de asemenea, din subrutine și acest lucru nu este nimic nou, dar limbajele de nivel înalt vă permit să nu vă gândiți la probleme precum organizarea apelurilor, transferul datelor inițiale și returnarea rezultatelor. Descrierea funcției constă dintr-un nume, o listă de parametri (date inițiale), tipul rezultatului și acțiuni care duc la primirea acestui rezultat. Una dintre funcțiile programului este cea principală, executarea acestuia este opera programului.

Șeful va verifica dacă vrem să încercăm ajutor și, dacă da, ni-l vom arăta. Când compilăm și lansăm un program. Există o mulțime de controverse în jurul Go. E adevărat, nimeni nu protejează. Ierarhiile de clasă dură sunt foarte importante. Doar în câteva cazuri veți găsi un astfel de lucru pentru care se va potrivi o astfel de ierarhie. Cu toate acestea, astăzi, cu o tendință care se întâmplă în această taxonomie, acest exemplu este destul de imprecis, dacă nu chiar complet rău. Din când în când existau mai multe grupuri de conducere - imperii; precum animale, plante etc. iar unele studii au arătat că organismele care variază de la animale sau plante își pot schimba complet modul de viață în anumite condiții.

Un exemplu simplu este o funcție care calculează sinusul unui număr. Poate fi numit sin, datele sale inițiale constând dintr-un număr real, rezultatul este și un număr real obținut prin însumarea unui segment dintr-o serie infinită cunoscută (sau executarea comenzii fsin a coprocesorului matematic).

Setul de acțiuni care pot fi efectuate în interiorul unei funcții este foarte limitat. Acesta constă în calcularea expresiilor formulei, apeluri ale altor funcții (care nu este o acțiune separată - un apel funcțional este adesea inclus într-o expresie), alocări, ramuri (un grup de acțiuni care se execută numai atunci când o anumită condiție este adevărată) și bucle (un grup de acțiuni efectuate de mai multe ori, numărul repetările depind de o anumită condiție). Acțiunile pot fi cuibărite unul în celălalt. Se poate părea că setul de ramuri și bucle este prea mic, dar nu este. S-a dovedit că orice algoritm compus din blocuri funcționale (la un nivel scăzut - comenzi aritmetice și comenzi de transfer de date), tranziții condiționale și necondiționate pot fi convertite într-un algoritm echivalent compus doar din blocuri structurale - blocuri funcționale, ramuri și bucle cu Sfârșit. Această afirmație a fost formulată în lucrare de Corrado Bohm și Giuseppe Jacopini „Diagramele de flux, turing mashines și limbi cu doar două reguli de formare” (Communications of ACM, Volumul 9 / Numărul 5 / Mai, 1965).

Dacă trebuie să stocați rezultatele intermediare undeva pentru a efectua acțiunile necesare, în funcție sunt plasate descrieri speciale care conțin numele variabilelor și, eventual, alte informații. Adresele celulelor RAM le vor fi atribuite automat. Unele limbi pot conține, de asemenea, definiții constante și de tip în cadrul funcțiilor. În limbajele Pascal, o funcție este ca un program și poate include definiții nu numai ale constantelor, tipurilor și variabilelor, ci și ale altor funcții.

O declarație de date este o listă de obiecte denumite. Aceste obiecte se numesc variabile. În mai multe limbi, trebuie setat tipul unei variabile, care determină cantitatea de memorie necesară pentru a o plasa și setul de operații la care poate participa. Dar acest lucru nu este neapărat cazul, există limbaje în care tipul variabilei nu este specificat și se poate schimba în timpul executării programului.

De obicei, limbajele de programare oferă un set destul de limitat de tipuri de variabile predefinite și un mijloc de a crea noi tipuri. Unele dintre următoarele tipuri sunt predefinite:

    numere naturale și întregi de diferite dimensiuni;

    numere reale;

    simboluri - litere, cifre, semne ale operațiilor aritmetice etc;

    siruri de caractere;

    valori booleene;

    indicii

Acțiunile asupra datelor pot fi efectuate folosind funcții și operatori.

În limbajul C, de exemplu, simbolurile, șirurile și booleenii sunt nedefiniți. Tipul său de caracter este de fapt un număr întreg scurt și poate fi aritmetic.

Tipurile noi sunt formate prin combinarea într-un singur întreg mai multe elemente de același tip (o matrice, fiecare dintre elementele sale are un număr secvențial) sau elemente de diferite tipuri (structură, fiecare dintre elementele sale are propriul său nume). De exemplu, în majoritatea limbilor, numerele complexe nu sunt definite, dar pot fi definite:

În unele limbi (de exemplu, în C ++), operatorii pot fi definiți pentru tipurile create, ceea ce face posibilă utilizarea variabilelor acestor tipuri în același mod ca și variabilele tipurilor predefinite.

Există și alte modalități de a crea noi tipuri. De exemplu, în Pascal este posibil să se creeze:

    tipuri de intervale (prin specificarea unui interval de valori);

    tipuri de enumerare (prin enumerarea valorilor posibile);

    tipuri de seturi

Variabilele seturilor de tipuri pot fi utilizate pentru a stoca informații despre un set de proprietăți ale unor obiecte. Ceva de genul acesta se poate face folosind variabile întregi, ale căror biți sunt setați pentru a indica prezența proprietăților corespunzătoare. Aparent, utilizarea seturilor este mai robustă împotriva erorilor programatorului.

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

Am decis să consacrăm prima noastră postare din acest an unui subiect foarte de bază, o prelegere despre care a fost susținută la Small ShAD. Elevii de liceu care sunt interesați de tehnologie sunt implicați în aceasta, de aici specificitatea 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 de programe academice la Yandex, director al Centrului pentru Olimpiade Studențești, Facultatea de Informatică, HSE Mihail a pregătit zeci de câștigători și câștigători ai olimpiadelor de programare din toată Rusia.

Ca parte a prelegerii, se spune despre ce sunt limbajele de programare, cum diferă, cum au apărut și care dintre ele sunt mai bune și care sunt mai rele. La început, vom vorbi puțin despre istoria limbajelor - cum au apărut, cum au început oamenii să programeze, cum s-a dezvoltat totul, ce se întâmplă acum. A doua parte va aborda ce fel de sarcini pentru care este potrivită limba, cum să „alegeți limba preferată și să vă bucurați de viață”. De asemenea, lectorul va vorbi puțin despre cum, în opinia sa, să învețe toate acestea și apoi să obțină un loc de muncă.

Ca întotdeauna, sub secțiune este o transcriere detaliată a prelegerii, astfel încât să puteți naviga în conținutul acesteia.

Istoria limbajelor de programare

Să începem de la început. La început, computerele nici nu aveau tastatură! Adică totul era foarte rău - nu aveau tastatură sau ecran, aveau cărți perforate (acestea sunt astfel de lucruri fără găuri sau fără găuri). În consecință, fie știfturile erau împinse acolo, fie străluceau acolo cu lumină. Dacă există o gaură (sau invers), înseamnă un zero sau unul. Și programele de atunci erau scrise folosind coduri de mașină - fiecare operație într-un computer (adunare, scădere, unele operații mai complexe) avea un fel de cod de mașină. Oamenii au ales acest cod pe etichetă, tot felul de adrese în memorie, l-au bătut cu mâinile și l-au înfipt în cititor - și totul a fost numărat. Desigur, munca unui programator nu a fost probabil prea interesantă în acel moment - făcând găuri - și odată cu dezvoltarea științei și tehnologiei, desigur, au început să vină cu tot felul de lucruri mai „interesante”. De exemplu, asamblatorul (Assembler), care deja a făcut viața oarecum 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ă, au fost folosite tot felul de cuvinte similare englezei „umane” - unele adaugă sau mov - bine, și apoi înregistrează sau zone de memorie, variabile cu care acestea să efectueze operații. Dar este clar că acest lucru, în general, a necesitat și o cantitate suficient de mare de tensiune mentală pentru a ține cont de 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 „proaste” și nu puteau înțelege nimic mai „inteligent”. De fapt, compilarea codului mașinii de la asamblator necesită, de asemenea, timp, memorie (desigur, nu era suficientă din acel moment).

Treptat, a devenit clar că este foarte dificil să dezvoltăm programe complexe atât de mari. Productivitatea programatorului în aceste comenzi a fost extrem de redusă - adică a scris mai multe rânduri pe zi (semnificative) și fiecare linie nu a făcut nimic special - unele operații aritmetice simple. Și oamenii doreau să facă limbile mult mai asemănătoare cu limbajul uman, în special cu engleza, pentru a face mai ușoară și mai convenabilă scrierea de 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 speciale perforate pentru eliminarea programelor Fortran. Dar dacă luați acest Fortran acum - după părerea mea, este chiar undeva între 50-60. a apărut - și încearcă să scrii ceva pe ea, îți va fi foarte neplăcut, îți garantez! Modernul Fortran este încă în viață astăzi, dar este destul de diferit de ceea ce a fost.

Alte limbi - acum voi scrie un lucru despre care probabil ați auzit, apoi doar la orice evenimente în care povestesc despre istoria programării - acesta este COBOL. A fost 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 veți găsi un programator pe Kobol, la Moscova. Și undeva nu la Moscova - cu dificultăți și mai mari. Dar, în mod surprinzător, 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 se efectuează folosind programe scrise în acesta (COBOL), iar oamenii încă mai scrie ceva pe ea.

Există și un limbaj „amuzant”, s-a numit Algol (versiunea 68, care caracterizează anul creării sale). Este un limbaj algoritmic. În general, au reușit să facă ceva acolo, dar acum nu prea ne interesează ce pot face. Și în acest caz, excursia noastră în antichitate și în limbi relativ nefolosite poate fi finalizată ș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 utilizat în principal în state - nu există diferențe mari. Ce tendință este vizibilă? La început, totul era dificil și pentru a scrie trebuia să fii aproape inginer, inginer electric, să înțelegi unde sunt închise contactele și altceva pentru programare. Apoi, de asemenea, a fost necesar să stai cu frunzele și să numeri memoria, să ai grijă de ea. Și treptat totul a devenit mai simplu, mai simplu, mai simplu și apoi chiar mai ușor pentru programator - să gândească cât mai puțin posibil pentru o persoană, să facă cât mai mult posibil automat. Pe la sfârșitul acestei perioade (lectorul indică spre Algol și Kobol), încep să apară limbi care, într-un anumit sens, au „supraviețuit” până în prezent.

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

O altă poveste amuzantă este limba Pascal, cunoscută pe scară largă în cercurile universitare, în principal în Rusia și în țările din fosta Uniune Sovietică. A fost și continuă să fie folosit în mod surprinzător ca predarea limbii... În restul lumii, este mai puțin frecvent, dar este și viu și sănătos. Există o astfel de persoană Wirth - aici este un om de știință, un teoretic. A participat la discuția despre Algol, nu i-a plăcut ce s-a întâmplat și a venit cu propria limbă - Pascal. Și apoi firma Borland (și mai înainte multe alte firme - Apple a fost implicată, în special) a luat și a distrus totul. Avea o teorie frumoasă, subțire - „totul va fi bine” - și au luat și au umplut acolo ceea ce oamenii au nevoie pentru muncă. Ei bine, nu a ieșit atât de frumos pe cât a vrut.

Ș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 s-a întâmplat asta? La acea vreme, era imposibil să scrii ceva sistemic în aceste limbi (lectorul arată Fortran, COBOL, Algol). Ce este „sistemic”? De exemplu, un sistem de operare, niște drivere, altceva. Aceste limbaje erau pentru calcule matematice, pentru calcule de afaceri, pentru toate acestea. Și orice altceva a fost scris în Assembler. Au existat unele limbi, acum sunt moarte, adică limba C nu a apărut imediat de la Assembler, ci prin unele lucruri intermediare.

Care este esența? Kernighan și Ritchie adorau să joace jucăria Asteroizi - o navă spațială zboară și există asteroizi, el trage asupra lor și aceștia se destramă. Aveau un server pe care se jucau, dar erau mulți oameni acolo, iar jucăria a încetinit. Și au aflat undeva în biroul lor că au un fel de computer pe care nimeni nu îl folosește. Dar a existat o problemă - era de o arhitectură diferită, iar jocul a fost scris în Assembler.

Au rescris-o, desigur, chiar au tăiat unele caracteristici pentru a juca pe ea. 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 atât de înalt, care să fie potrivit pentru programarea sistemelor, adică în care ar fi posibil să gestionați memoria, în care ar fi posibil să înțelegeți unde este ceva și cum să accesați aceste bucăți de memorie. Și așa a apărut limbajul C, care a avut un impact uriaș asupra tuturor mai târziu. Toți aceștia (lectorul arată Algol, Fortran și alte limbi menționate) au avut o mare influență, dar C - da ...

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

Limbi native din anii 80

Una dintre primele ciudățenii a fost limbajul C ++. Limbajul C are un număr imens de neajunsuri (ei bine, este foarte mare) - puteți face totul, inclusiv să vă împușcați în picior, să vă împușcați în picior cu o ficțiune, în celălalt picior, să trageți cu un picior în celălalt picior, în general - că Vrei să faci. Dar, în același timp, unele lucruri arhitecturale sunt destul de dificil de făcut - din nou, ca și în Assembler, trebuie să ținem evidența unde suntem, ce și ce memorie am alocat; este tot timpul când această memorie „curge” undeva - adică am selectat, am uitat să ștergem, am șters ceva greșit, ne-am târât din memorie, în general - am avut o grămadă de probleme.

C ++ a fost creat inițial ca un set de adăugiri la limbajul C care ar facilita dezvoltarea. În acel moment, programarea orientată pe obiecte 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 din ea o minge de fotbal, un 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 sens, C ++ a implementat această abordare obiect - nu a fost primul limbaj de programare orientat pe obiecte, dar a devenit destul de popular și au început să apară tot felul de caracteristici în el. În același timp, C ++ a păstrat compatibilitatea aproape completă (la acel moment) cu limbajul C, un program scris în C în 99% din cazuri a fost compilat cu succes ca C ++ și chiar a funcționat în același mod. Acest lucru a fost destinat să faciliteze migrarea de la C la C ++.

în afară de abordarea obiectului (în C ++), Biblioteca de șabloane standard (STL) a apărut destul de repede. Cred că la școală, cei care încă l-au învățat pe Pascal au descoperit că, în primul rând, nu aveți o triere încorporată acolo (în vechiul Borland Pascal albastru, acum există deja în versiuni moderne) - există un exemplu (sursă) de sortare, î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 tipuri diferite care fac absolut același lucru, au doar tipuri diferite 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ă, ați avut un program abstract care a sortat cu succes ceva care poate fi comparat între ele.

Limbaje de script 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 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 scriptare care nu au fost compilate în codul mașinii, ci interpretate. BASIC a fost, de asemenea, interpretat la un moment dat, dar aceste limbaje de scriptare au fost destinate în principal procesării textului - de exemplu, Perl, Python (atunci nu era foarte faimos), PHP, Ruby - acestea sunt limbile de scriptare care se află într-una sau într-un grad diferit, ei încă 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 foarte mult. Care este ideea? Dacă nu compilăm, atunci poate fi permis mult mai mult. De exemplu, un program își poate uita codul și îl poate folosi cumva; știe ce se întâmplă în ea și din această cauză poate face o mulțime de lucruri interesante.

Perl a fost conceput pentru procesarea textului - în acele vremuri exista deja atât de multă memorie în computere încât era posibil să introduci text și să faci ceva util cu acest text (de exemplu, numără cuvinte, caută câteva). Însă, după părerea mea, a fost conceput de oameni care le-au ieșit puțin din minți, pentru că există o astfel de glumă despre el: „Orice set de personaje scrise este un program corect în Pearl”. După părerea mea, nu puteți scrie decât pe ea, nu o puteți citi. Când mă uit la codul din Perl și încerc să înțeleg ceva, nu înțeleg nimic. Poate dacă l-aș cunoaște mai bine, aș înțelege ceva, dar așa cum am auzit de la acei oameni care încă știu cum, spun că este mai ușor să rescrieți. 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 problema.

În acea perioadă, la mijlocul anilor 90, a apărut internetul. La început, era vorba de e-mailuri, site-uri cu HTML static, dar oamenii doreau să adauge un fel de dinamică acolo pentru ca totul să se întâmple dinamic pentru noi, să se completeze unele formulare, 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, modul în care interacționează și, cel mai important, generarea acestor pagini statice (condiționate) care vor fi „scuipate” utilizatorului ca răspuns la solicitarea sa.

În general, nimic altceva decât Pearl nu era potrivit în acel moment. A fost o idee proastă să scrii un handler în C sau C ++ pur. Și din lipsa unui limbaj mai bun la acea vreme (și suficient de lung), Pearl a fost un limbaj popular pentru dezvoltarea web. Desigur, scara 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ă acest lucru - și-a făcut propria pagină de un fel cartea de oaspeți unele, altceva, unele lucruri. Și a scris un set de macro-uri de un fel pentru Pearl, care semăna cu C, pentru că știa să-l folosească pe C, doar pentru că era atât de confortabil. Și am numit-o Personal HomePage. Împărtășit și a spus: „Oameni, uitați-vă la ce piesă am scris, totul este mult mai clar aici decât pe Pearl și puteți să-l editați”. Și oamenilor le-a plăcut.

Apoi a renunțat la caz. În general, ca rezultat, acest PHP a prins viață și a devenit mult mai popular în timp decât Perl. Dar această „traumă a nașterii” lui (o idee ca set de macrocomenzi pentru Pearl) i-a jucat o glumă destul de crudă. Limba 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 compania, nici vreo persoană), dar au existat multe grupuri, fiecare dintre care a văzut ceea ce le-a plăcut. Ca rezultat, funcțiile de acolo sunt numite diferit, nu există nici măcar un stil, totul se face prin sublinieri, în general, setările sunt ici și colo și modul în care va funcționa nu este foarte clar. Dar poți să stai jos și să scrii în PHP în două ore, pentru că așa a intenționat-o.

Python și Ruby: Ruby este mai puțin popular acum, Python este cumva mai bine „tăiat”, să vorbim despre el mai târziu. Este clar că în acele vremuri acestea erau (lectorul indică Perl, Python, Ruby, PHP) limbaje foarte specializate în scopuri foarte specializate. În general, nici o programare a sistemului, nici o logică de afaceri nu era scrisă în ele la acel moment, iar acum nu prea fac asta.

Limbi compilate din anii '90

Vom merge cam în același timp, dar în cealaltă direcție. În acel moment, am folosit 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? Deoarece, în primul rând, a moștenit toate problemele C datorită compatibilității înapoi. Acolo ar putea fi totuși ucis într-un milion de moduri diferite, la fel ca în C (desigur, au fost adăugate noi moduri în C ++). În același timp, dacă scrieți totul bine și corect, așa cum au conceput autorii C ++, atunci, desigur, a fost imposibil să vă omorâț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 un fel a venit în general de la C (dacă puteți scrie includeți în C sau C ++ - de fapt, a fost conceput ca doar inserarea textului bibliotecii în programul dvs., la final, când scrieți o grămadă de incluziuni, aveți totul - dacă este „primitiv”, așa cum a fost la început - totul este inserat într-un singur fișier și apoi este nevoie de un timp teribil pentru a compila, deoarece rulează de mai multe ori. Același Pascal, Virtovsky, a fost mult mai atent în acest sens, mai târziu versiunile sunt chiar mai bune.

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

Așa a apărut Java (Java). Și acolo este legată o poveste destul de amuzantă, cum a apărut numele în această limbă. Există programatori, ei beau cafea tot timpul și în acea perioadă era la modă să bem cafea, care creștea pe insula Java. Limbajul a fost conceput ca un limbaj pentru aparatele încorporate, în special pentru un aparat de cafea. Așa a apărut numele ...
Ce a început cu ea, ce a fost bine 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ă indicii, mult mai puține moduri de a împușca orice parte a corpului și de a sparge totul. În al doilea rând, au introdus idei mult mai recente în termeni de model de obiect - adică C ++ a apărut mult mai devreme decât Java și a folosit un model de obiect mai arhaic, „sălbatic”. Ei bine, aici (lectorul indică Java) era deja mai gândit atunci, iar în teorie oamenii credeau, iar în practică aplicau și făceau totul mult mai cool.

Și, în sfârșit, al treilea. Programele noastre Java au fost asamblate nu în codul mașinii, ci în cod pentru o mașină virtuală. Adică, aveați o mașină virtuală JVM (VM) - Javovsky. Programele dvs. au fost colectate într-un fel de reprezentare intermediară și apoi, cu ajutorul acestei mașini, au fost deja executate. Ce a făcut? În primul rând, a încetinit și, în al doilea rând, a mâncat memorie cu o forță teribilă, în al treilea rând a fost portabil oriunde (teoretic) - chiar și la o cafetieră, chiar la o mașină de măcinat cafea, chiar la un computer, chiar 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, performanțe scăzute și toate acestea au început să se oprească și să încetinească.

Dar nici acesta nu este principalul motiv 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 nu vă permite să scrieți programe proaste - nu există mijloace pentru a scrie programe proaste. Puteți scrie doar programe bine acolo. Bine, în înțelegerea creatorilor limbii.

Adică, dacă în C, în C ++, în Python, pe orice, putem dizolva din proiectul nostru un fel de gunoi înfiorător, unde avem totul amestecat, colectat ore în șir și 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 de înaltă calitate.
Suntem aproape la sfârșit. La noi, următorul lucru care a apărut este .Net (va ajunge) și, în special, suntem interesați de C # (aproape la fel [lectorul indică Java], adică există diferențe de detalii, dacă alegeți între ele - vedeți unde plătiți mai mulți bani).

Și încă un lucru este JavaScript. Nu are nimic de-a face limbaj Java, a apărut în același an - cuvântul era la modă, au licențiat marcăa folosi.

Care este principalul lucru la care trebuie să fii atent? (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ă știi C ++, în general nu trebuie să știi nimic altceva - iei și scrii în C ++, apoi adaugi dolari la început, altceva faceți lucrurile mici și începe să funcționeze pentru dvs. la orice (lectorul indică limbile la care au fost atribuite 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 sau altceva (nu proiectați un proiect mare - aveți un fișier care citește numere, afișează numere în consolă și face altceva), atunci nu există aproape nicio diferență între acestea limbi. Este clar că JavaScript și PHP sunt specializate, au totul puțin diferit. Și aici (lectorul indică Java și C #) există o diferență foarte mică î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 limbaj veți folosi astăzi? (Strigă din audiență: Java!) De ce ... Java este minunat, 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 cea mai buna alegere - acesta este C, 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 în mod clar - deoarece ai dat atât de mulți 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 că vom rămâne fără memorie pe placa noastră video sau altceva se va întâmpla. Prin urmare, C încă trăiește și nu moare, astfel de sarcini de programare a sistemului încă există - scrieți un sistem de operare, scrieți drivere, scrieți altceva - C este minunat pentru asta. În plus, acum există tot felul de dispozitive (Internetul obiectelor promite că este pe cale să vină) care trăiesc pe baterii (și, în mod firesc, vor fi milioane, totul va fi agățat cu acest Internet al obiectelor), trebuie să fie foarte ieftin și foarte puțină energie electrică a consuma. În consecință, vor exista 2 KB de memorie, un procesor de 5 kHz, bineînțeles, ce să înșurubăm mașină virtuală sau limbajul de scriptare nu va funcționa în viitorul apropiat, ceea ce înseamnă că trebuie să scrieți ceva în C. Și chiar și acum, de exemplu, calculele 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? În mod formal, acesta este probabil, într-un anumit sens, și C.

Programare web

Să presupunem că doriți să scrieți un nou Facebook ( rețea socială). Pe ce vei scrie asta? (Din partea publicului vorbesc despre HTML și CSS.) HTML, CSS este un design și dorim să putem adăuga fotografii, prieteni și comentarii acolo.

Pentru partea de scripting - adică ce se va întâmpla din 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ă gestionați unele modificări ale logicii î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 propriile mele lucruri, astfel încât să funcționeze în continuare bine, și nu așa cum s-a făcut „tyap-blooper”, dar au făcut-o. Practic, nu contează în ce scrieți, dar nu vă 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 acesta. Magazin online? Am descărcat un cadru pentru un magazin online - bine, gata, am scris un magazin online.

Programare de afaceri

Apoi, doriți să scrieți o aplicație bancară plictisitoare. Sau, de exemplu, aveți pe cineva care vinde cărți SIM? Poate că ați cumpărat vreodată un telefon sau altceva și v-au spus: „Aici sistemul este suspendat, nu putem face nimic”. Pe ce vei scrie o astfel de aplicație? (Un strigăt din partea publicului despre Python) Nu poți scrie asta în Python, ce ești?! Nu merită să scrieți nimic pentru afaceri în Python. De ce? Deoarece atunci când scrieți ceva în Python, nu puteți găsi un număr semnificativ de bug-uri în procesul de scriere. Python este tastat dinamic în toate modurile posibile și, în general, acolo 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âmbați acolo, că totul s-a stricat pentru dvs. Adică, este mai bine să scrieți scripturi mici în Python - înțelegeți ce se întâmplă acolo și ce se face. Ei bine, sau ceva care nu este păcat să arunci: vrei să lansezi ceva înaintea concurenților tăi, așa că dacă se va sparge de fiecare dată. Ai scris în Python și gata - ai capturat piața. Și dacă scrii ceva mult timp, de exemplu, un fel de aplicație bancară (astfel încât să aprobe împrumuturi, altceva) - o scrii în Java. Pentru că există o problemă serioasă, hârtii, bani, documente, altceva, dar nu poți să te încurci atât de mult încât totul se va strica, altfel oamenii vor fi jigniți - banii lor au dispărut și nu au ajuns nicăieri, pentru că ai ceva în momentul în care șirul s-a transformat într-un număr sau invers. Deci, înseamnă că luați metodic Java și scrieți, scrieți ... Ei bine, sau pe .Net, astfel de situații, în principiu, se întâmplă. Acolo, desigur, puteți întâmpina și probleme, dar totuși probabilitatea este ceva 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 prefera să scrieți codul care controlează motoarele rachete? Sa vedem. Acest lucru, probabil (lectorul 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 cu o astfel de rachetă. În C ++? Sincer să fiu, nici eu nu aș avea încredere, pentru că există prea multe modalități de a te sinucide în C ++. Când ești acolo undeva în spațiu, nu este prea bine.

Poate 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 momentul cel mai crucial și Java a decis să strângă gunoiul pentru noi. Trebuie să aterizăm, să încetinim și ea spune: „Nu, gunoiul merge”. În general, nici foarte bine.

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

Folosirea mai multor limbi simultan pentru dezvoltarea de software

Și ce ar trebui spus despre limbile moderne în general? În zilele noastre, multe proiecte nu trăiesc într-o limbă, adică unele dintre ele trăiesc într-o limbă, altele în alta și altele într-o a treia. De exemplu, dacă aveți un fel de aplicație web care procesează cantități sălbatice de informații, accesul la discuri (nici măcar la baze de date, sunt atât de mari încât chiar și o bază de date nu acceptă unele deja scrise) sunt scrise probabil apoi C de nivel scăzut pentru a scrie rapid pe disc și toate astea. Bineînțeles, scrierea întregului proiect în C nu merită. Poate că există un fel de logică intermediară scrisă în Java care apelează funcțiile Cis pentru apeluri rapide. Ei bine, frontendul (la 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 mari, uneori ce fac oamenii? Ei iau și scriu un prototip în Python (cum va funcționa totul), schițează, gândesc la un fel de arhitectură. Scrisul pe el este foarte rapid - au aruncat un prototip, au experimentat cu el și au spus: „Wo! E atât de mișto! " Și complet rescris. S-ar părea că au făcut treaba de două ori, a durat de două ori mai mult (bine, unul și jumătate). Dar nu! De multe ori se dovedește că această metodă nu este rea, deoarece dacă scrieți imediat în ceva, de exemplu, în Java, și apoi decideți: „Nu, să refacturăm, schimbăm complet arhitectura și toate astea”, atunci veți petrece 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 au trăit într-un spațiu foarte limitat. Când Wirth a văzut ce fac companiile rele Apple, Borland și tot ce făceau cu Pascal, a venit cu un limbaj și mai bun - Oberon. A fost pur și simplu extrem de minimalist - adică erau foarte puține comenzi (Șiruri? De ce avem nevoie de șiruri? Vom crea 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, mai scriu ceva, dar din nou - doar pentru militari.

Care este problema? De ce unele limbi precum Python, pe care nicio companie nu o susținea la început, au preluat piața. PHP, care este, de asemenea, slab conceput, a preluat piața (cea mai mare parte) de la sine. Și s-au investit tot felul de miliarde de dolari (lectorul îi arată lui Ada) și nu s-a 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ă, limba poate fi excelentă, dar atâta timp cât nu există documentație, atât timp cât nu există o comunitate care să poată răspunde la întrebări (pe Stack Overflow) și, în cele din urmă, cel mai important, atâta timp cât nu există un număr mare de biblioteci, limba nu se declanșează. Adică, de exemplu, ați dorit să scrieți un site web pe Oberon. Și ce este, 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ă, deoarece acestea 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 tău î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 precum sortarea și altceva sunt scrise în C, iar el (Python) știe cum 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 cu cele Sishny). Și datorită acestui lucru, ei iau și lucrează. Înțeleg ideea pe care încerc să ți-o transmit, nu? Nu scrieți în limbi care nu știu cum să conectați biblioteca C. Ei bine, dacă vrei să te bucuri de ceva mișto. Ei bine, și treptat ei (limbile) își dobândesc propria infrastructură. Și trăiesc cumva bine.

Limbaj de programare și orientare în carieră

Acum să vorbim despre cum să înțelegeți ce doriți în viață. Ce sunt lucrurile interesante? Puteți face un fel de programare a sistemelor, nu? Este minunat pentru tine să numeri aceste biciclete acolo, vrei să lansezi quadcopters, niște camere, altceva. Atunci C este probabil alegerea ta.

Dacă vrei să scrii, poate nu sunt cele mai interesante aplicații din viață, dar îți este grozav să le concepi, să te gândești la toate și să câștigi o mulțime de bani pentru ședință și plictiseală de cele mai multe ori (trebuie să plătești asta dacă ești miss), iată-le - Java, .Net. Mergi la muncă într-o bancă, scrii, mergi la treabă albă la nouă, primești un salariu bun și scrii conform recomandărilor celor mai bune surse Java, .Net-oaie și toate astea ...

Dacă doriți să scrieți aplicații, un browser, niște jucării, altceva, atunci C ++ este minunat. Dacă doriți să scrieți site-uri web, iată-le, limbile la alegere (lectorul arată în Perl, Python, PHP, Ruby), nu există prea multe diferențe. Singurul lucru este că PHP va muri înainte de Python, deci, dacă ți-e lene să înveți lucruri noi, atunci învață Python. Nu veți observa o diferență mare, dar veți rezista mai mult.

Ce se întâmplă cu Ruby este, de asemenea, neclar. Ei bine, puteți, de asemenea, PHP, dacă 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 cele din urmă, există un alt domeniu de aplicare a limbajelor de programare - acesta este momentul în care un non-programator le folosește. Să presupunem că sunteți matematician, fizician, chimist, analist, oricine și trebuie să calculați rapid ceva, să analizați câteva date (pentru biologi, de exemplu, câte vulpi arctice trăiesc pe Insulele Comandorului). Puteți introduce toate acestea într-un tabel în Excel sau le puteți analiza cu ceva. Python este, de asemenea, o potrivire bună pentru asta, știe cum să lucreze cu text, iar bibliotecile sunt pline de tot felul, statistice și toate acestea. 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 instantaneu într-o bursă în condițiile în care cotațiile se schimbă tot timpul, atunci indiferent cât de cool de Machine Learning ați scrie în Python, persoanele care au scris în ceva mai repede 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 învățare automată (unii dintre ei) necesită performanta ridicata (și extrem de ridicat) ș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 puteți încerca totul. Cum să devii programator și fericit? Asa de. Începem de la zero. Aici vă studiați matematica, limba rusă și alte discipline obligatorii și opționale la școală, iar cunoștințele dvs. în domeniul programării sunt reflectate pe tablă (lectorul indică un tablou gol) în acest moment. Și vrei să devii o persoană fericită, să faci ceea ce iubești, să câștigi mulți bani și să nu-ți refuzi nimic și să fii fericit.

O modalitate de a face acest lucru. Există, desigur, tot felul de povești inspirate despre oameni care nu au mers niciodată la facultate sau au renunțat ș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 ei bine, au absolvit la un moment dat universitatea.

Care este situația noastră cu admiterea la universitate (acum studiați la școală)? În timp ce sunteți la școală, trebuie să înțelegeți că următorul pas este să vă înscrieți și să aveți grijă de ea. Treci examenul sau câștigă olimpiada. La examen, puteți folosi Pascal, C ++ (inclusiv C pur), Python (nu le voi menționa mai departe). La olimpiadă - același Pascal, același C ++, același Python (vom vorbi despre problemele sale acum) și, cel mai adesea, există Java. În continuare, se poate întâmpla orice, în funcție de olimpiadă, dar nu și esența.

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

În 2000, aproape nimeni nu scria în C ++. Cincisprezece ani mai târziu, aproape nimeni nu scrie în Pascal, în ciuda faptului că Pascal este modern. Acesta este un limbaj care poate face aproape totul la fel. Doar că toată lumea a devenit prea leneșă pentru a învăța acest lucru, fiecare nouă tendință, și toată lumea continuă să scrie în Borland Pascal, ceea ce, desigur, nu poate face nimic. În C ++ oamenii scriu niște algoritmi de sortare (STL) - minunat, au scris sort () și atât. Pe Pascal, pe regulat, pe vechi - aceasta este o problemă. Au scris un set (necesar) - minunat, l-au scris în C ++, în Pascal din nou chinul este continuu. Despre noii Pascali, desigur, puteți face acest lucru, dar de fapt costă bani. Poate că nu ați observat acest lucru, 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 complet rău, deoarece există o mulțime de litere suplimentare. Dar, de asemenea, unii oameni scriu, puteți învăța să scrieți pe ea. Dar la examen, nu este și examenul va trebui în continuare promovat în cea mai mare parte.

Ce este cel mai bun 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 de examen sunt perfect rezolvate pe acesta. La olimpiadă, în general, se dovedește că C ++ este (folosit), deoarece Python este foarte lent, nu totul este rezolvat acolo.

Astfel, ați studiat câteva mici subseturi de limbă și niște algoritmi (posibil) și multe probleme rezolvate pentru a obține o diplomă de olimpiadă și a merge la universitate pentru a obține studii superioare.

Acum vă voi spune despre modul în care noi, 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 eu și 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). Permiteți-mi să vă spun imediat ca să nu vă speriați, dacă deodată doriți să o faceți, spuneți: „De ce, știu deja toate acestea, de ce urmează să studiez undeva? Aș prefera să merg în altă parte ". Pentru cei care știu deja să programeze bine, există o oportunitate de a merge direct la studiul algoritmilor și la o pregătire destul de teoretică. Nu ne uităm la ele acum, acest lucru (indică tabloul) este pentru cei care programează mediu sau deloc.

În primul semestru, ei studiază elementele de bază ale Python, tocmai pentru ca oamenii să învețe să programeze și pentru ca nimeni să nu fie foarte jignit. Python este predat rar în școli, majoritatea oamenilor vin cu cunoștințe despre 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ă (ca și când ar fi în condiții egale). Și C ++ pur și simplu pentru că puteți merge oriunde de la C ++.

Apoi urmează cursul „Algoritmi” și un proiect de curs separat. Algoritmi clasici cu implementare. Nu că, teoretic, am luat ceva, am calculat complexitatea. La prelegere, am luat, am calculat complexitatea, la seminar - am luat, am implementat algoritmul. Un proiect este un student care face ceva terminat. De exemplu, unul dintre proiecte a fost: să număr ... Să presupunem că aveți o mulțime de apartamente la Moscova și înțelegeți: „Oh, am o mulțime de lucruri inutile, le voi închiria. Și au stabilit un preț și nimeni nu vrea să închirieze un apartament de la tine - probabil prea scump. Sau au stabilit un preț, l-au scos imediat și te gândești: „O, probabil l-am trecut ieftin” - și te superi și tu. Adică a fost necesar să se calculeze cât a costat închirierea unui apartament? Conduceți date - vă construiește o estimare. Un astfel de site, care consta din mai multe lucruri: luați sugestii, analizați, aplicați un fel de algoritm de învățare automată (probabil) nepretențios și creați un bot web frumos în care puteți alege ceva, conduce ceva, câțiva 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ă (lectorul indică cursul pe algoritmi) un C ++ atât de puternic, cu consola I / O. Ei bine, aici (lectorul indică inscripția „proiect”) este ceva sub îndrumarea unui mentor, posibil cu baze de date, poate cu analiza textelor și cu altceva.
Apoi vine al treilea semestru - acesta este un curs numit „Computer Systems”. Există un pic de asamblare de înțeles (foarte puțin) și apoi, ceva similar cu C 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, destul de scăzut: dezvoltați un anumit utilitar, de exemplu rsync (sincronizare, poate știți. În C pur, mai mult sau mai puțin, scrieți un analog al rsync, pe care îl veți avea prin rețea sincronizați folderele cu toate accesările la fișiere și așa mai departe).

Și, în sfârșit, al patrulea. Nici nu știu cum să-l numesc, aceasta este o astfel de vinaigretă de tehnologii necesare dezvoltării reale, de exemplu, pentru dezvoltarea web. Adică, aceasta este o aplicație practică a bazelor de date, din nou ceva similar cu ceea ce s-a făcut în proiect (lectorul indică proiectul cursului 2), dar mai aprofundat. Adică, astfel de lucruri mai mult sau mai puțin concrete sunt deja programări practice. În paralel cu aceasta, există orice teorie, ei bine, aici încă fac știință.

Și după două cursuri, oamenii se dispersează pentru a face ceea ce le interesează, deoarece acest lucru acoperă destul de larg astfel de elemente de bază de programare și oamenii în acest moment înțeleg deja că nu vor să facă sisteme informatice în nici un caz (nu le-a plăcut programarea sistemului, de exemplu), dar vor să se ocupe de niște algoritmi teoretici, dificultatea de calcul, venirea unor lucruri noi, distribuite sau altceva. Sau, dimpotrivă, ei cred că nu au prea multe aici ( lectorul indică linia primului curs cu Python și C ++) du-te, apoi ( lectorul indică o a treia linie de curs, cu programare de sistem) - după cum nu vă place, numărați octeți și setați tot felul de restricții la citire-scriere, creați fluxuri, fire și altceva. Și în conformitate cu acest lucru, oamenii aleg o anumită direcție și învață. Adică, în principiu, pentru a nu dezvolta „sindromul rațelor” - ți-ai văzut Pascalul pentru prima dată și acum spui „Pascal 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 că orice altceva nu este foarte bun.

Aici trebuie să analizăm acest lucru (lectorul indică lista cursurilor de pe tablă) într-un mod mai larg - aceasta este una dintre metodele alese, în special la HSE (a apărut recent, deci este destul de modernă). Există și alte modalități de întâlnire. În alte universități bune într-o ordine ușor diferită și se pun alte accente. Dar încearcă, de asemenea, să familiarizeze oamenii cu tot ce au.

Cum arată un programator un loc de muncă

Tu asta ( lectorul indică lista cursurilor) a făcut totul, a studiat la universitate, a studiat ceva mai productiv încă doi ani și trebuie să mergi la muncă. Cum alegeți ceva cu care să lucrați? Mai întâi, ai ajuns să știi 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 de a-i face interesanți și plăcuți pentru dvs. Ei bine, și vrei să intri într-o companie grozavă, să te angajezi. Ce fel de persoană aș dori personal să văd? Să zicem, 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 și voi spune: „Wo! Aceasta este o diplomă interesantă, dar nu este atât de interesantă! " Și aș putea să mă înșel, 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ă, astfel încât datele să poată fi citite rapid sau altceva, atunci, desigur, aș fi interesat să mi se scrie ceva open source. Nu un site realizat, ci ceva pe această temă. De ce sunt interesat de asta? Pot să văd codul dvs., văd cât de des v-ați angajat, văd cum ați reacționat la bug-uri de la utilizatori, bug-uri de la dezvoltatori care îl folosesc - totul este scris, mă uit și mă gândesc: „Wow, acest bug nu a mai fost aici de doi ani închis, aici ai răspuns nepoliticos utilizatorului, apoi nu mai iau altceva ”. Adică acesta este proiectul tău personal.

Apoi, ce altceva ar fi cool? Aș vrea să văd cum ai făcut-o lucru in echipa... Adică, vii la mine pentru un interviu și spui: „Băieții de la universitate și eu am făcut o cerere bună. Am făcut o bază de date acolo, au făcut un fel aplicatie mobilași, de asemenea, un tip a lucrat pentru noi acolo, o fată-designer, un băiat cu asistență tehnică. Eram cinci și am făcut un proiect grozav ". Ei bine, văd care este cu adevărat proiectul tău, spun: „Care 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 (indie așa) în garaj, undeva cu luminile stinse, nu vorbește cu nimeni, își ia barba și scrie. Cu toate acestea, există un fel de interacțiune cu oamenii. Cu un șef, de exemplu, care uneori te poate jura (șefii, așa sunt, nu întotdeauna amabili). Și văd că știi să lucrezi cu oamenii și mă bucură dacă ai o echipă bună de un fel. Chiar dacă nu este bine, este mai bine decât să nu-l ai.

Ce altceva mi-aș dori personal? Dacă te-ai arătat în proiecte mari. De exemplu, ați angajat ceva pentru nucleul Linux, dacă efectuați programarea sistemului, ați remediat o eroare. Adică au arătat că puteți citi codul altcuiva și că puteți face unele modificări la acesta. Mă uit: „O, într-adevăr, ți-ai dat seama de ceva complicat și ai remediat câteva bug-uri!” Și încep să fiu foarte fericit în legătură cu asta. Pentru că am ... ei bine, nu știu ... așa că programatorul meu a renunțat pentru că concurenții i-au oferit un salariu mai mare și trebuie urgent să închid pe cineva - pe tine. Arăt atât de tare încât ai scris doar de la zero, dar nu știi cum să citești și să editezi codul altcuiva și mă supăr.

În cele din urmă, în funcție de poziția specifică, există diverse alte lucruri. Dacă obțineți un loc de muncă ca analist, aș dori să rezolvați sarcini de analiză a datelor pe Kaggle. Dacă veți obține o slujbă la unele lucruri algoritmice, aș vrea să faceți niște algoritmi în programarea sportivă. Și, în sfârșit, dacă v-ați gândit la profesie, citiți cum se țin interviurile, ați î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 un hobby ”și ei cred că HR face asta. De fapt, ei încearcă să-și dea seama cât de prietenos și de adecvat ești. Dacă nu sunteți prietenos și inadecvat, atunci oricât de genial și de muncitor ar fi, un specialist dur, cu cunoștințe mari, va fi dificil pentru echipă să lucreze cu dvs. și nu veți scoate proiectul singur. În plus, chiar dacă vă întindeți, vă puteți imagina ce încărcătură pentru companie. Și că vei veni mâine și vei spune: „Crește-mi salariul de 10 ori, altfel te voi părăsi”. Evident, companiile nu vor să intre în această situație. Prin urmare, creșterea adecvării și a bunăvoinței în sine este la fel de importantă (cel puțin) ca dezvoltarea unor abilități profesionale.

Pentru a rezuma, ce puteț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ă le alegeți? Desigur, răspunsul corect este Python, dar de fapt diferența dintre ele constă în numărul de bug-uri permise, în cantitatea de altceva - 5%, bine, poate 10%. Adică, dacă aveți deja un proiect terminat scris în PHP, atunci nimeni în mintea lor nu va spune: „Să rescriem totul în Python”. Vor spune: „Să angajăm mai mulți dezvoltatori PHP și să scriem în continuare în PHP”. Super, nu este o alegere proastă. Este clar că dacă începeți brusc să scrieți un proiect, atunci poate fi înțelept să alegeți acum Python. Deși, depinde și el. Poate aveți pe piață o grămadă de dezvoltatori PHP ieftini, dar cei Python sunt scumpi și vă gândiți: „Da, tehnologia este mai rece, dar voi economisi bani pe dezvoltatorii deja gata”. Și atât, minunat, 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 veți decide în ce limbă să începeți un nou proiect mare, veți dobândi cunoștințe în domeniul dvs. profesional și veți putea face alegerea corectă. În acest moment, nu trebuie să faceți această alegere încă, așa că vă sfătuiesc să faceți ceea ce vă place.

Elementele de bază, așa cum am spus deja, foarte, foarte elementele de bază ale programării (ce este o funcție, ce este dacă, pentru, matrici, 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 acesta (la acest nivel) este cel mai mic, iar literele sunt cele mai puține pentru a scrie inutile. Ei bine, atunci, când înveți câteva lucruri arhitecturale complexe, învață și îngrijorează-te prea mult în legătură cu acest lucru. 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 distracție și scrieți pentru că vă place - probabil că în acest moment ați găsit ...