Ce sunt limbajele de programare. Alegerea unui limbaj de programare

By Alexandru Corbaru

Deoarece dezvoltarea tehnologiei computerului nu stă pe loc, modalitățile și metodele de programare, precum și limbajele de programare, sunt în mod constant îmbunătățite. Luați în considerare ce limbi există în domeniul computerelor moderne și clasificarea lor.

Informații generale

Lista limbajelor de programare este atât de largă și de variată, încât stabilirea ei completă este o sarcină aproape imposibilă. Dintre toate limbile, se pot distinge trei subgrupuri principale:

mașină (limbaje de programare de nivel scăzut);

orientat spre mașină (asamblori);

independent de mașină ( nivel inalt);

Printre dezvoltatorii modernului software cele mai populare sunt următoarele limbaje majore de programare. Lista este afișată în ordinea descrescătoare a popularității:

Java. HTML. Visual Basic. Delphi.

Această listă de limbaje de programare este departe de a fi completă, dar acestea sunt cele mai populare limbaje pe care un programator ar trebui să le cunoască atunci când aplică pentru un loc de muncă. Toate sunt limbaje de programare la nivel înalt.

Bazele programării

Limbajele de programare de nivel scăzut sunt cele care necesită luarea în considerare a tipului și capacităților procesorului. Operatorii și metodele de operare ale acestor limbaje de programare sunt suficient de apropiate de codul mașinii, necesită cunoașterea dispozitivului de memorie calculator personalși modul în care procesorul îl accesează.

Este greu de numit limbi diferite programare de nivel scăzut. Lista va fi în continuare redusă la o limbă dominantă - asamblarea. Deoarece vă permite să compuneți coduri de program în notație apropiată de codul mașinii, asamblatorul este utilizat exclusiv la scrierea software-ului de sistem, cum ar fi OS, driverele de dispozitiv și la programarea codurilor de control ale microcircuitelor.

Dezavantajul unor astfel de limbaje de programare este că programele din ele sunt scrise pentru a efectua sarcini specifice pe un anumit dispozitiv și executarea lor este imposibilă dacă este transferată către un alt procesor.

Dezvoltarea aplicației

Lista limbajelor de programare pentru crearea de aplicații personalizate, precum și pentru dezvoltarea și implementarea software-ului personalizat are mii de poziții. După cum ați înțeles, o astfel de varietate se datorează faptului că un anumit limbaj este potrivit pentru rezolvarea anumitor probleme.

În ciuda faptului că aceste limbaje de programare sunt definite într-un grup separat, execuția lor are loc în codul mașinii. Pentru executare programul terminat linie cu linie și traducerea acestuia în codul mașinii sunt utilizate programe speciale- interpreți. Dacă traducerea codului de program dintr-o limbă în alta se efectuează fără executarea comenzilor, atunci acest lucru se face de către programele de compilare. În general, programele concepute pentru a traduce programe scrise dintr-un limbaj de programare formal în altul se numesc traducători.

Să aruncăm o privire mai atentă asupra limbajelor de programare la nivel înalt. Nu vom face o listă, vom scrie doar câteva detalii despre fiecare dintre cele mai populare.

SQL

Un limbaj de programare specializat este destinat în primul rând pentru lucrul cu sistemele de gestionare a bazelor de date și programarea acestora. SQL se traduce prin „specializat. Deoarece piața bazelor de date a crescut exponențial în ultimele decenii, popularitatea acestui limbaj nu ar trebui să fie o surpriză”.

Există diverse opinii cu privire la viitorul acestui limbaj. Se crede fără echivoc că tehnologia pentru crearea relațională a fost la cel mai bun nivel, dar timpul său se termină. Nevoia de dezvoltare în legătură cu creșterea volumelor de date prelucrate îi conduce pe specialiști la ideea că, în viitor, omenirea are nevoie pur și simplu de o tranziție de la tehnologii relaționale la tehnologii post-relaționale, dar luând în considerare păstrarea compatibilității cu băncile de date existente.

Javascript

Se ocupă pe bună dreptate pe locul doi printre limbajele de programare la nivel înalt. Ușor de învățat, ușor de utilizat. Adaptabilitatea crescută la programare în comparație cu progenitorul duce la faptul că milioane de oameni din întreaga lume lucrează cu acest limbaj. Un limbaj orientat pe obiecte bazat pe C ++, adaptat la crearea de programe și aplicații care pot gestiona fluxuri uriașe de informații în medii specializate și să țină seama de specificul mediului pentru implementarea produselor gata făcute

Tehnologia Java este fundamentul care permite o creștere nelimitată a infrastructurii întreprinderilor și companiilor, capabile să conecteze sisteme de diferite calibre, de la conectarea la o rețea de telefonie prin Wi-Fi și terminarea cu supercomputerele.

XML

Descendent al HTML, această tehnologie este un limbaj de markup extensibil. Este adaptat pentru interpretarea documentelor. Cele mai complexe transformări și modificări ale documentelor sunt efectuate asupra acestuia. XML este utilizat pentru a transfera și stoca temporar date atunci când lucrați cu diferite baze de date relaționale pe Internet.

XML a ajuns deja la punctul în care poate pretinde că este tehnologia fundamentală pentru construirea rețelelor corporative.

Programăm în limba rusă

Cele mai populare limbaje de programare folosesc vocabularul în limba engleză. Cu toate acestea, pe lângă acestea, există și limbaje de programare rusești. Lista în limba rusă este mică, iar în care sunt folosite este foarte specializată. Aici sunt cateva exemple.

1C: Enterprise. Un întreg sistem conceput pentru a gestiona o organizație în toate domeniile de activitate. Adesea în reclame pentru căutarea angajaților puteți găsi

Verb. Analog al lui Pascal de limbă engleză.

Robik. Un limbaj de programare specializat conceput pentru a-i învăța pe copii noțiunile de bază ale programării.

Spadă. Un limbaj bazat pe proceduri tastat dinamic.

După cum puteți vedea, lista limbajelor de programare este atât de largă și variată încât este imposibil să o acoperiți cu orice clasificare și listă. Dacă decideți să începeți programarea la nivel amator sau profesional, atunci amintiți-vă că un programator este o profesie creativă care necesită nu numai cunoștințe, ci și fantezie, imaginație, intuiție și chiar puțin noroc.

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

Am decis să dedicăm prima noastră postare din acest an unui subiect foarte de bază, o prelegere despre care a fost susținută în 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

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.

În cadrul prelegerii, se spune despre ce sunt limbajele de programare, 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. 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), aceasta însemna zero sau una. Ș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 foarte interesantă atunci - pentru a face găuri - și odată cu dezvoltarea științei și tehnologiei, desigur, au început să vină cu tot felul de lucruri mai „interesante”. De exemplu, asamblorul (Assembler), care deja a făcut viața un pic 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 echipă, au fost folosite tot felul de cuvinte similare cu „uman” Engleză- unele add sau mov - și apoi au fost enumerate registrele sau zonele de memorie, variabilele cu care trebuie efectuate aceste operații. Dar este clar că acest lucru, în general, a necesitat și o mare presiune 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 (la acel moment, desigur, nu era suficient).

Treptat, a devenit clar că este foarte dificil să dezvolți programe complexe atât de mari. Productivitatea programatorului în aceste comenzi a fost extrem de redusă - adică a scris mai multe linii pe zi (semnificative) și fiecare linie nu a făcut nimic special - unele operații aritmetice simple. Și oamenii au dorit să facă limbile mult mai asemănătoare cu limba 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 el, atunci vei fi foarte neplăcut, îți garantez! Modernul Fortran este încă în viață astăzi, dar este destul de diferit de ceea ce a fost înainte.

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 în 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ă în prezent, o parte semnificativă a tuturor tranzacțiilor bancare se efectuează folosind programe scrise în acesta (COBOL) și totuși oamenii scriu 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 a fost dificil și pentru a scrie a trebuit 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 arată 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 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 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 au puțin de-a face cu BASIC-ul anului 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 limbă de predare. Î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 sa limbă - Pascal. Și apoi firma Borland (și mai înainte multe alte firme - Apple era angajată, î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, 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 limbi erau pentru matematică, pentru afaceri, pentru toate lucrurile astea. Ș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 Asteroizilor - 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 era lentă. Ș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 altă arhitectură, iar jocul a fost scris în Assembler.

Au rescris-o, desigur, chiar au tăiat unele caracteristici pentru a se 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 sistemului, 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 astfel a apărut limbajul C, care a avut un impact uriaș asupra tuturor celor de mai târziu. Toate acestea (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, în ordine să trăiești și mai bine, să trăiești și 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 (bine, doar unul imens) - puteți face orice, chiar și să vă împușcați în picior, să vă împușcați în picior cu o ficțiune, în celălalt picior, să fotografiați cu un picior în celălalt picior, în general - pe care vrei să-l faci. Dar, în același timp, unele lucruri arhitecturale sunt destul de dificil de făcut acolo - 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, am scăpat de 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 obiect, 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 plus față de abordarea obiectelor (în C ++), Biblioteca de șabloane standard (STL) a apărut rapid. 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 este deja în versiunile 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 iată șiruri care pot fi comparate între ele, trebuia să scrieți trei tipuri diferite care fac exact același lucru, au doar tipuri de date diferite. 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 concepute în principal pentru procesarea textului - de exemplu, Perl, Python (atunci nu era foarte faimos), PHP, Ruby - acestea sunt limbile de scriptare care într-un singur sau într-un grad diferit, ei încă trăiesc (toți au reușit să apară înainte de 2000, chiar mult mai devreme).

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

Perl a fost conceput pentru procesarea textelor - în acele zile deja exista atât de multă memorie în computere încât era posibil să introduci un text acolo ș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ă dau seama de 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 într-adevăr mai ușor de rescris decât de a afla ce este acolo și de a remedia problema.

În această 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, astfel încât totul să se întâmple dinamic pentru noi, să fie completate 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. Scrierea în C sau C ++ pur a fost o idee proastă. Ș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ă, avea un fel de carte de oaspeți, 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, pur și simplu pentru că îi era atât de convenabil. Și am numit-o Personal HomePage. A împărtășit-o și a spus: „Oameni, uite ce piesă am scris, totul este mult mai clar aici decât pe Pearl și o poți edita”. Și oamenilor le-a plăcut.

Apoi a renunțat la caz. În general, ca rezultat, acest PHP a început să trăiască și în timp a devenit mult mai popular decât Perl. Dar această „traumă a nașterii” lui (ideea de 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 este prin sublinieri, în general, oricum, setările sunt ici și colo, și modul în care toate acestea vor 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, în acel moment nu era scrisă nici o programare de sistem, nici o logică de afaceri, 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 cu versiunile anterioare. Ar mai putea fi uciși cu un milion căi diferite , aceleași care erau în C (desigur, au fost adăugate noi modalități î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ă ucideț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., în la sfârșit, când scrieți o grămadă de incluziuni, aveți de toate - 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 de lung pentru a compila, deoarece merge de mai multe ori. versiunile sunt și 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, în general, 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 acolo, ei beau cafea tot timpul și în acea perioadă era la modă să bem cafea, care a crescut 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 tău și de a sparge totul. În al doilea rând, au implementat idei mult mai recente în ceea ce privește modelul obiectului - 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 arată Java), era deja mai bine 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 codul unei mașini virtuale. 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 memoria cu o forță teribilă și, î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. Ei bine, în înțelegerea creatorilor limbajului.

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, colectat ore în șir și acolo altceva. În Java, puteți, de asemenea, să 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 și moștenit acolo - în general, se obțin zece linii nu foarte semnificative pentru o linie semnificativă. 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), bine, și în special suntem interesați de C # (aproape la fel [lectorul indică 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, 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 altceva - iei și scrii în C ++, apoi adaugi dolari la început , altceva face lucrurile mici și începe să funcționeze pentru tine 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, 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 (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ă

Programare la nivel scăzut

Programare web

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 grozav, dar de ce nu Ruby sau PHP? (Lectorul vorbește sarcastic.)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 în mod clar - deoarece ai dat atât de mulți octeți de memorie, înseamnă că atât de mult 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 lucrurilor promite că este pe cale să vină) care trăiesc pe baterii (și, desigur, vor fi milioane de ele, totul va fi agățat cu acest Internet al lucrurilor) , ar trebui să fie foarte ieftine și să consume foarte puțin electricitate. Î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ă va trebui să scrieți ceva în C. Și chiar și acum, de exemplu, calculele pe o placă video (OpenCL sau altă tehnologie) - nu vin Limba noua; limbaj nou să 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.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 design și vrem să putem adăuga fotografii, prieteni, să lăsăm comentarii acolo.

Pentru partea de scriptare - adică ce se va întâmpla din partea clientului - este JavaScript. Mai mult, 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ă-mi scriu propriile 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ă cu adevărat î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

Programare pentru armată, aerospațială

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 erori în procesul de scriere. Python este tastat dinamic în toate modurile posibile și, în general, acolo puteți ascunde o eroare, 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 este rupt 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 de aruncat: doriți să lansați ceva înaintea concurenților dvs., așa că dacă se va defecta 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ă (astfel încât să aprobe împrumuturi, altceva) - o scrii în Java. Pentru că există o problemă serioasă, hârtii, bani, documente, altceva, dar nu vă puteți deranja atât de mult încât totul se va defecta, altfel oamenii vor fi jigniți - banii lor au dispărut și nu au ajuns nicăieri, în momentul în care șir 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ă și ele. Acolo, desigur, puteți întâmpina și probleme, dar totuși probabilitatea este ceva mai mică.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 rachete? Să 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 în mine, deoarece 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ă colecteze gunoiul pentru noi. Trebuie să aterizăm, să încetinim și ea spune: „Nu, gunoiul merge”. În general, nici foarte bine.

Pentru a fi sincer, aș prefera ca acest program să fie scris în Pascal. Desigur, nu-mi place Pascal, dar într-un fel ar fi foarte grozav.

Folosirea 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 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, acestea sunt atât de mari încât chiar și o bază de date nu acceptă unele deja scrise) sunt scrise probabil în unele, apoi reduse -nivelul C 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ții 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 a celor mari, ce fac uneori oamenii? Ei iau și scriu un prototip în Python (cum va funcționa), 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, unu ș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ă refacem, schimbăm complet arhitectura și toate astea”, 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 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. Era 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 a fost rugată să le dezvolte și pe ele limbaj mișto, pe 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 - numai 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 și a captat piața (cea mai mare parte) de la sine. Și au fost investite tot felul de miliarde de dolari (lectorul îi arată 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âta 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. 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 și 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 existente (în principal cu cele Sishny). Și datorită acestui lucru, ei iau și lucrează. Ideea pe care încerc să 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 mișto. Ei bine, și treptat ele (limbile) sunt acoperite cu propriul lor tip de 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 să numeri aceste biciclete acolo, vrei să lansezi quadcoptere, niște camere și să faci altceva. Atunci C este probabil alegerea ta.

Dacă vrei să scrii, poate că nu sunt cele mai interesante aplicații din viață, dar e mișto să le concepi, să te gândești la toate și să câștigi mulți bani, pentru faptul că stai și îți este dor de cele mai multe ori (ai să plătiți pentru asta dacă sunteți de calitate superioară), iată-i - Java, .Net. Te duci la muncă într-o bancă, scrii, mergi la muncă la nouă cu o cămașă albă, 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 fel de 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, să utilizați PHP, dacă ați învățat deja, deoarece sunt atât de simple încât nu durează atât de mult timp pentru a vă recalifica.

Ș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 acest lucru, ș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 la bursă, în condițiile în care cotațiile se schimbă tot timpul, atunci oricâ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 veți 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 puteți încerca totul. Cum să devii programator și fericit? Asa de. Începem de la zero. Aici studiați la școală matematica, limba rusă și alte discipline obligatorii și opționale, iar cunoștințele dvs. în domeniul programării sunt reflectate pe tablă (lectorul indică un tablou gol) pe acest moment... Și vrei să devii o persoană fericită, să faci ceea ce îți place, să câștigi mulți bani și să nu-ți refuzi nimic și să te distrezi.

O modalitate de a face acest lucru. 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 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.

Cum arată graficul distribuției limbilor la Olimpiada All-Russian in Informatics? 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 este aproximativ zero, aici este C ++, și aici este 2015).

În 2000, aproape nimeni nu scria în C ++. Au trecut 15 ani și 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, care, 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 destul de rău, pentru că există multe scrisori suplimentare... Dar, de asemenea, unii oameni scriu, puteți învăța să scrieți pe ea. Dar la examenul de stat unificat, nu este și examenul de stat unificat va trebui totuși promovat în cea mai mare parte.

Ce este cel mai bun pentru examen? Pentru examen, cel mai bine (dacă nu știi nimic și nu te învață nimic la școală) să înveți Python. Unele sarcini ale examenului 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 un mic subset al limbajului și câțiva algoritmi (posibil) și ați rezolvat o mulțime de probleme pentru a obține o diplomă de olimpiadă și a merge la universitate pentru a obține studii superioare.

Acum vă voi spune despre cum construim cursul HSE, în ce ordine sunt limbile, cum sunt predate în matematică aplicată și informatică la Facultatea de Științe Aplicate, pe care o 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 pentru a nu vă speriați, dacă dintr-o dată 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 astfel încât nimeni să nu fie foarte ofensat. Python este predat rareori în școli, majoritatea oamenilor vin cu cunoștințe despre Pascal sau C ++. Practic chiar Pascal, dacă este o școală de masă. Ei bine, pentru ca nimeni să nu fie jignit, toată lumea învață o nouă limbă (ca și cum 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 separat proiect de curs... 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 despre studenții care fac 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, 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 stabilit un preț, l-au scos imediat și te gândești: „Oh, probabil l-am dat 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 în mai multe lucruri: luați sugestii, analizați, aplicați un fel de algoritm de învățare automată (probabil) nepretențios și creați o față web frumoasă în care puteți alege ceva, conduce ceva, câțiva metri, orice număr de camere, numărul de saune, numărul de jacuzzi-uri din apartamentul dvs. și estimați aproximativ costul. Adică un fel de finisat, nu prea lucru dificil... 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 analiză de text și altceva.

Apoi vine al treilea semestru, 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 o anumită utilitate, de exemplu rsync (sincronizare, poate știți. În C pur, mai mult sau mai puțin, scrieți un analog al rsync, pe care le veți avea în folderele de sincronizare a rețelei 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, 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 sunt implicați și în știință.

Și după două cursuri, oamenii se dispersează pentru a face ceea ce le interesează, deoarece acest lucru acoperă destul de mult astfel de elemente fundamentale de programare și oamenii în acest moment înțeleg deja că nu vor să se ocupe în niciun fel de sistemele de calculatoare (ei, de exemplu, nu le-a plăcut programarea sistemului), dar vor să se ocupe de niște algoritmi teoretici, dificultatea numărării, să vină cu unele 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, faceț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 Pascal-ul pentru prima dată și acum spui „Pascal este putere”; sau mai avansat - ați văzut C ++ și ați început să vorbiț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ă) 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 a ne cunoaște. Î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 să găsiți un loc de muncă ca programator

Tu esti asta () 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? De exemplu, vin la mine o sută de studenți - trebuie să duc doi la muncă sau unul. 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 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 la toate și mă gândesc: „Wow, acest bug n-a mai fost aici de doi ani. închis, aici ați răspuns nepoliticos utilizatorului, iată altceva - nu-l iau ”. Adică acesta este proiectul tău personal.

Apoi, ce altceva ar fi cool? Aș vrea să văd cum ați făcut munca în echipă. 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, sunt așa, 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 kernel-ul Linux, dacă faceți programare de sistem, 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 ... 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. Văd că ai scris doar de la zero, dar nu știi să citești și să editezi codul altcuiva și mă supăr.

Și, î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 un loc de muncă în unele lucruri algoritmice, aș dori 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 aflat 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 hobby ”- și ei cred că HR-urile fac 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, indiferent cât de genial și de muncitor sunteți, 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”. Înțeles, 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 unui fel de 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%, ei bine, poate 10%. Adică, dacă aveți deja un proiect gata făcut î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 credeț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 potrivita... Î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 sunt dacă, pentru, matrici, altceva) pot fi învățate mai mult sau mai puțin în orice limbă. De exemplu, în C ++, deoarece arată ca o mulțime de lucruri, iar specificul din acesta (la acest nivel) este cel mai mic dintre toate, iar literele sunt cele mai puțin inutile de scris. Ei bine, atunci, când înveți niște lucruri arhitecturale complexe, învață și îngrijorează-te prea mult în legătură cu acest lucru. Adică, principalul lucru este - încercați, căutați ceea ce vă place și când vă dați seama că este deja ora 4 dimineața și stați și scrieți pentru distracție, pentru că vă place, probabil că este la acest moment moment în care ți-ai găsit ...

Problema alegerii unui limbaj de programare se confruntă atât cu începătorii care doresc să se arunce în lumea programării interesante, cât și cu programatorii cu experiență care cunosc unul sau mai multe limbaje de programare.

Să aruncăm o privire rapidă la ce limbaje există, la ce servesc și ce limbaj de programare să alegem pentru dvs.

Există un număr mare de limbaje de programare. Fiecare limbă a fost concepută și dezvoltată pentru a rezolva un anumit tip de problemă. Majoritatea limbajelor se suprapun în funcționalitate, astfel încât aceeași sarcină poate fi rezolvată cu instrumente diferite. Dar, în același timp, fiecare limbaj de programare are propriile sale avantaje, chiar și atunci când rezolvă un tip de problemă.

Lista principalelor limbaje de programare pe care le folosesc majoritatea programatorilor

Principalele limbaje de programare:

Iad. Submarin nuclear. Asamblator. ActionScript. ABAP / 4. AutoIt. AWK. DE BAZĂ. C. Cobol. C ++. C #. Cω. Clarion. Clojure. Fuziune la rece. Lisp comun. D. dBase. Delphi. Eiffel. Erlang. F #. Mai departe. Fortran. Gambas. Merge. Macabru. HAL / S. Haskell. Pictogramă. Java. JavaScript. Depozit de vechituri. Lua. MATLAB. Obiect Pascal. Obiectiv-C. OCaml. Oz. Oberon. Analizator. Pascal. Perl. PHP. PowerBASIC. PureBasic. Piton. PL / 1. Prolog. Rubin. Scala. Sistem. Convorbire scurtă. SQL. PL / SQL. Tcl. Vala. Visual Basic. VB.NET

Academic:

Curat. Curry. Siglă. ML. Modula-3. REFAL. Simula. IEC61131-3 Listă de instrucțiuni. SF. FBD. Diagrama scării (LD). SFC

Ezoteric:

HQ9 + / HQ9 ++. INTERCAL. Brainfuck. Brainfork. Înfruntă-te. Malbolge. Piet. Linguriţă. Unlambda. Spatiu alb. FALS

Alte:

ALGOL. ALGOL 68. Modula-2. Miranda. Speranţă

De exemplu, scrierea unui program într-un limbaj de programare va dura destul de mult, dar rezultatul final va fi un program compact și rapid. Acest lucru este foarte important atunci când rezolvați probleme de calcul complexe sau cu o cantitate mare de date. Scrierea unui program în altă limbă va fi de multe ori mai rapidă, dar executarea poate dura mai mult, dimensiunea fișierului de cod interpretat (executabil) va fi mai mare.

De exemplu, să scriem un program simplu C și Python. Funcționalitatea programului este următoarea: utilizatorul introduce un număr digital care indică luna, programul trebuie să afișeze numele corespunzător al lunii în formă verbală.

Cod C:

#include int main (void) (int luna; luna = 13; în timp ce (luna! = 0) (pune ("Introduceți numărul lunii (pentru a ieși, introduceți 0):"); scanf (" n% d", & month); if ((month == 12) || (month == 1) || (month == 2)) (printf ("Winter n n");) if ((month == 3) || (lună == 4) || (lună == 5)) (printf ("Primăvară n n");) dacă ((lună == 6) || (lună == 7) || (lună == 8)) (printf ("Vara n n");) if ((luna == 9) || (luna == 10) || (luna == 11)) (printf ("Toamna n n ");) if (luna> 12) (printf (" Nu există o astfel de lună. n n ");)) printf (" Programul este terminat. :) n "); retur 0; )

Cod Python (opțiunea 1):

# - * - codificare: utf-8 - * - luni = 13 în timp ce luni: tipăriți ("Introduceți numărul lunii (pentru a ieși, introduceți 0):") luni = int (intrare ()) dacă (luni == 12 sau luni == 1 sau luni == 2): print ("Winter") elif (luni == 3 sau luni == 4 sau luni == 5): print ("primăvară") elif (luni == 6 sau luni = = 7 sau luni == 8): print ("Summer") elif (luni == 9 sau luni == 10 sau luni == 11): print ("Toamna") altfel: print ("Pentru a ieși, introduceți" 0 "")

Cod Python (opțiunea 2):

# - * - codare: utf-8 - * - luna = (12: "Iarna", 1: "Iarna", 2: "Iarna", 3: "Primăvara", 4: "Primăvara", 5: "Vara" , 6: "Vară", 7: "Vară", 8: "Vară", 9: "Toamnă", 10: "Toamnă", 11: "Toamnă") i = 13 în timp ce i: print ("Introduceți numărul lunii (pentru a ieși, introduceți 0): ") i = int (input ()) if ((i> 0) și (i< 13)): print(month[i]) elif (i >12): print ("Această lună nu există. Pentru a ieși din program, introduceți" 0 ".") Altfel: print ("Programul este terminat.")

Cod Python (opțiunea 3):

Print ("Introduceți numărul lunii (pentru a ieși, introduceți 0):") m = 13 în timp ce m! = 0: m = int (input ()) print (["Winter", "Spring", "Summer", " Toamna "] [((m + 1)% 11) // 3])

Este nevoie de mai mult timp pentru a scrie codul în C, trebuie să vă gândiți la tipurile de variabile utilizate, dar rezultatul este un program compact. Deoarece compilatorul traduce codul C scris în binar.

În Python, puteți scrie același program de multe ori mai repede, dar în cele din urmă obținem un program care durează puțin mai mult pentru a fi executat și are o dimensiune mai mare a fișierului interpretat. Există, desigur, compilatoare speciale care traduc codul Python în binar. Dar acesta este un subiect separat pentru comparație :)

După cum puteți vedea, numărul de limbi este mare și există mai multe dintre ele în fiecare an. Tehnologiile se desfășoară repede și devin rapid depășite și, împreună cu ele, unele limbaje de programare. Din acest motiv, programatorii trebuie să învețe limbi noi cu tehnologii noi. Există limbi care au existat și s-au dezvoltat de 20-25 de ani. De exemplu, C și Python.

Determinați ce parametri afectează alegerea limbajului de programare

Alegerea direcției. Programare aplicată sau web

Programare (sistem) aplicată- Aceasta este programarea hardware, sisteme la un nivel destul de scăzut. În această direcție, multe depind de mediu (sistem de operare - sistem de operare). Puteți dezvolta totul, de la sisteme de operare, drivere la programe personalizate simple și complexe. Cu alte cuvinte, puteți scrie orice doriți. Datorită faptului că există o mulțime de dependențe, este necesar să ne gândim inițial pentru ce sistem de operare va fi dezvoltat software-ul. Principalele limbaje pentru programarea sistemului sunt Assembler, С, С ++, Python, Perl, Java.

Programare web- practic, înseamnă dezvoltarea a tot ceea ce ține de internet. Acestea sunt site-uri, bloguri, scripturi, constructori, sisteme de gestionare a conținutului etc. Practic nu există dependență de sistem de operare, dar există o serie de alte dependențe asociate, de exemplu, cu browserele și alte programe. În majoritatea cazurilor, când vine vorba de programare web, se utilizează sistemul de operare Linux, pe care se execută codul programului. Browserele în care este afișat rezultatul programului executat pot fi orice și pe orice sistem de operare care există în prezent. Astfel, este posibil să se dezvolte un cod care să funcționeze pe un singur sistem de operare, dar să fie executat și utilizat de orice utilizator pe orice sistem de operare.

Principalele limbaje de programare web sunt Python, PHP, Perl, JS, Ruby, Java. Sintaxă. Cum arată limba Toți oamenii sunt diferiți, au gusturi diferite și este imposibil să-i mulțumești pe toți deodată. Prin urmare, chiar dacă codul este scris în altă limbă mai repede, este posibil să nu fie un avantaj pentru o persoană, deoarece va avea o aversiune la sintaxă de fiecare dată când scrie cod. Cineva seamănă mai mult cu sintaxa care folosește paranteze și ghilimele, unii nu poartă paranteze. Prin urmare, merită să încercați să scrieți câteva programe simple ca "Hello World!" pe limbi diferite programare, pentru a determina în interiorul vostru ceea ce vă place mai mult. Există posibilitatea de a contacta un guru sau un prieten care programează deja A învăța ceva pe cont propriu este foarte dificil, necesită mult timp și, cel mai adesea, duce la rezultate dezastruoase. Pentru a nu fi abandonat în faza de start, cel mai bine este când există cineva în apropiere care studiază deja sau cunoaște un limbaj de programare. Deoarece în procesul de învățare, apar multe întrebări la care este dificil de găsit un răspuns. Când există ajutor, procesul de învățare devine mai interesant și mult mai productiv. Dependența de obiectivul stabilit Doar să înveți să programezi este o sarcină de neînțeles care este puțin probabil să dea un rezultat pozitiv. Trebuie să existe un obiectiv pe care doriți să îl atingeți. De exemplu, poate fi un program pentru procesarea fotografiilor, controlul unui robot care conduce printr-un labirint, scrierea unui driver specific, îmbunătățirea unui program existent pe care îl utilizați, crearea propriului site web. Când îți stabilești un obiectiv, înțelegi ce vrei să obții ca rezultat. Rămâne să alegeți instrumentele pentru rezolvarea problemei. În același timp, dacă ți-ai propus un obiectiv interesant care trezește interesul, nu te lasă să dormi noaptea, atunci te va motiva pozitiv să implementezi și să obții un rezultat pozitiv. Lucrul pentru o anumită companie Există oameni care știu că vor să lucreze în anumite companii mari, în timp ce sunt specialiști în IT. Puteți vedea lista locurilor de muncă vacante pe site-urile web ale companiilor care vă interesează. Cerințele sunt scrise în posturile vacante, ce tehnologii și instrumente ar trebui să cunoască specialistul relevant. Pentru cei cărora le pasă de numărul de zerouri din salariu;) Nu recomand să vă închideți la anumite locuri de muncă de top. Pe de o parte, acesta este un bun punct de referință. Pe de altă parte, trebuie să încerci să fii un angajat de neînlocuit, să fii un specialist de primă clasă în domeniul tău. Pentru a putea aborda sarcini dificile pe care nimeni altcineva nu le poate face. Mai bine să studiezi tot ce poți. De-a lungul timpului, vor veni înțelegerea și experiența care vă vor oferi un avantaj față de ceilalți candidați.

Am luat decizia de a învăța un nou limbaj de programare Python

De ce Python? La urma urmei, există multe alte limbi, mai moderne, care sunt acum considerate mainstream. De exemplu - Ruby.

Dacă răspundeți la întrebări conform planului elaborat anterior, alegerea devine evidentă.

Mi-a fost greu să mă decid până nu am făcut un plan. Aveam nevoie de un limbaj care să se potrivească în mod ideal cu mulți parametri simultan. De exemplu, din interes să înveți ceva nou, să conduci un cerc de programare la școală, să conduci un cerc de robotică și programare a robotului la școală, să îți creezi propriul site web, să scrii un joc cu elevii. Ca rezultat, programarea de sistem și web este mixtă. Deoarece accentul principal a fost pus pe robotică și informatică la școală, am început să aleg limbaje, cu accent pe programarea aplicațiilor și simplitate. Deoarece primul meu limbaj de programare a fost Pascal, mi-a plăcut tot ce era mai aproape de sintaxa Pascal. Pe baza faptului că am mai mult de 10 ani de experiență în IT, știu să folosesc căutarea, forumurile, apoi nu am subliniat că nu există niciun guru în apropiere. Pot să răspund eu la multe întrebări. Principalul lucru este să aveți la îndemână o referință lingvistică și internetul. Dacă știți bine noțiunile de programare, știți cum să compuneți algoritmi, atunci în practică trebuie doar să luați o referință cu privire la limbaj și să scrieți cod. Singurul amendament. Am ales o limbă veche de mulți ani. Pentru a avea o mulțime de documentație de înaltă calitate, module gata făcute și a fi interesant din punct de vedere comercial. Obiectivele mele nu erau doar motivante, ci super-motivante și lovite. Creați un robot și programați, creați un site web pe care să postați materiale și rezultate, începeți să predați elevii și pregătiți-vă în avans pentru desfășurarea orelor. Se pare că mi-am stabilit un obiectiv puncte de control... Acolo unde sunt obligat să fac o parte din munca mea, altfel voi eșua nu numai eu, ci și studenții. Acum nu mă interesează să lucrez în companii de top. Din moment ce am trecut deja de această etapă. Vreau să-mi creez propriile proiecte, să-i învăț pe copii. Sunt mulțumit de ceea ce este. Dar dacă te uiți la companiile de top, există o mulțime de oameni care folosesc Python. Salariile programatorilor Python sunt mari. Aceasta înseamnă că studenții care au studiat Python vor putea obține locuri de muncă excelente în companii mari.

Ca rezultat, după filtrare, a mai rămas un singur Python. Deoarece este ideal pentru rezolvarea tuturor sarcinilor enumerate, este mai ușor pentru elevi să învețe, poate fi folosit pentru a dezvolta site-uri web, scripturi, programa roboți, dezvolta jucării, scrie coduri compacte, iar sintaxa sa seamănă cu Pascal. Această limbă este veche de peste 20 de ani, are o documentație excelentă și multe biblioteci gata făcute. Dacă în unele cazuri capacitățile Python nu sunt suficiente, va fi posibil să adăugați funcționalitate în C.

Primul program Python arată astfel:

Print („Bună ziua lume!”) # Nimic mai mult. Acesta este tot codul, împreună cu un comentariu.

Comparativ cu Pascal, C, C ++, PHP, foarte concis și expresiv.

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 determină aspectul programului și acțiunile pe care executorul (computerul) le va efectua sub controlul său.

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 de 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 în alt limbaj de programare de nivel scăzut) sunt foarte lung și greu de înțeles.

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 utilizat (de exemplu, Java, Microsoft .NET). O notație 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).

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 complexă. Pentru a simplifica această sarcină, au început să apară limbaje de programare de nivel scăzut care au 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.

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 (sunt exemple fișiere executabile cu extensia *. exe); interpreți - transformați o parte a unui program în cod mașină, executați-l, apoi treceți la partea următoare. În acest caz, interpretul este utilizat de fiecare dată când programul este executat.

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, trebuie să fie rescris aproape complet. Există, de asemenea, anumite diferențe în sintaxa programelor pentru diferite compilatoare. Este adevărat, procesoarele centrale pentru computerele de la AMD și Intel sunt practic compatibile și diferă doar în anumite echipe specifice. Dar procesoarele specializate pentru alte dispozitive, de exemplu, plăcile video, telefoanele, conțin diferențe semnificative.

Avantaje

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, să aibă o bună înțelegere a structurii 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; 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, când cele mai importante cerințe sunt compacitatea, viteza și capacitatea de a accesa direct hardware-ul resurse.

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

LIMBI DE PROGRAMARE LA NIVEL ÎNALT

Primul limbaj de programare la nivel înalt este considerat limbajul pentru computer 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 ​​2000. 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) deja optimiza ș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 de nivel înalt a început odată cu apariția Fortran și crearea unui compilator pentru acest limbaj (1957).

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 permite programelor scrise în limbaje de nivel înalt să comunice cu diverse sisteme de operare și hardware, în timp ce codul sursă al acestora rămâne, în mod ideal, neschimbat.

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 crearea de instrucțiuni simple și precise pentru echipamentul utilizat. Programele scrise în limbaje de nivel înalt sunt mai ușor de înțeles pentru 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-o serie de limbaje de programare profesionale moderne de nivel înalt.

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ă.

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 și 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țiunile care duc la primirea acestui rezultat. Una dintre funcțiile programului este cea principală, executarea acestuia este opera programului.

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 unui coprocesor 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, ramificare (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 de repetări depinde 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 poate fi convertit într-un algoritm echivalent compus doar din blocuri condiționale structurate - blocuri funcționale, ramuri și bucle cu final . Această afirmație a fost formulată în lucrare de Corrado Bohm și Giuseppe Jacopini „Diagramele de flux, turing mashines și limbaje 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, descrieri speciale care conțin nume de variabile și, eventual, alte informații sunt plasate în interiorul funcției. Adresele celulelor RAM le vor fi atribuite automat. Unele limbi conțin, 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 specificat 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ă limbi în care tipul variabilei nu este specificat și se poate modifica î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 acțiunilor 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 se formează prin combinarea într-un singur întreg mai multe elemente de același tip (o matrice, fiecare dintre elementele sale are un număr ordinal) sau elemente de diferite tipuri (o 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 rezistentă la erorile programatorului.

Programare pentru începători

Pentru început, aș dori să spun că oricine poate folosi un computer și crea programe. Nu trebuie să aveți o inteligență incredibilă sau o diplomă în matematică pentru a crea programe pentru computer. Ai nevoie doar de dorința de a-ți da seama de ceva și de răbdare pentru a nu renunța la cursuri.

Abilitatea de a scrie programe este aceeași abilitate ca și abilitatea de a înota, dansa sau jongla. Unii oameni reușesc să facă acest lucru mult mai bine decât alții, dar oricine poate obține anumite rezultate cu o practică adecvată. Din acest motiv, copiii devin competenți în programare de la o vârstă fragedă. Copiii nu sunt neapărat geniali; ei sunt pur și simplu înclinați să învețe lucruri noi și nu se tem să greșească.

În ciuda faptului că computerele par a fi monștri electronici foarte complexi, relaxați-vă. Foarte puțini oameni știu exact cum funcționează motoarele de căutare, ceea ce vă permite să găsiți rapid informațiile de care aveți nevoie pe internet, iar unele persoane nu și-au dat seama cum să conducă o mașină. La fel, aproape oricine poate învăța cum să creeze programe fără a intra în detaliile exact cum funcționează un computer.

În general, programul spune computerului cum să rezolve o problemă. Deoarece lumea este plină de probleme, numărul de programe pe care oamenii le pot scrie este nesfârșit.

Cu toate acestea, pentru a spune computerului cum să rezolve o problemă uriașă, trebuie să spuneți computerului cum să rezolve o serie de mici probleme care constituie marea problemă.

De fapt, programarea nu este deloc dificilă și nu este ceva misterios sau supranatural. Dacă ești capabil să scrii instrucțiuni pas cu pas care va permite unei persoane să vă găsească casa, puteți scrie și un program de computer.

Cea mai grea parte a programării este identificarea micilor probleme care alcătuiesc problema pe care trebuie să o rezolvați. Deoarece computerele sunt absolut stupide, trebuie să le spuneți cum să efectueze orice acțiune.

Dacă credeți că crearea unui program este mai distractivă decât utilizarea acestuia, aveți tot ce aveți nevoie pentru a crea programe pentru computer. Dacă doriți să învățați cum să scrieți programe pentru computer, aveți nevoie de următoarele trei calități.

Urmărire. Dacă vrei ceva foarte rău, îl vei primi cu siguranță (dar dacă faci ceva ilegal, riști să petreci mult timp în închisoare). Dacă vrei să înveți să programezi, dorința ta te va ajuta cu siguranță, indiferent de câte obstacole îți iei în cale.

Curiozitate. O doză sănătoasă de curiozitate vă poate alimenta dorința de a experimenta și de a vă îmbunătăți abilitățile de programare chiar și după citirea acestei cărți. Curiozitatea face ca învățarea programării să fie mai puțin plictisitoare și mai interesantă. Și dacă sunteți interesat, veți studia și aminti cu siguranță mai multe informații decât orice persoană care nu este complet interesată de acest lucru (de exemplu, șeful dvs.).

Imaginație. Programarea computerizată este o abilitate, dar imaginația poate contribui la îmbunătățirea și direcționarea acestei abilități. Un programator începător cu o cantitate destul de mare de imaginație va crea întotdeauna mult mai interesant și programe utile decât un programator minunat, fără imaginație. Dacă nu știi ce să faci cu abilitățile tale de programare, talentul tău va muri pur și simplu fără imaginație.

Aspirația, curiozitatea și imaginația sunt cele mai importante trei calități pe care ar trebui să le posede fiecare programator. Dacă le aveți, trebuie doar să vă faceți griji cu privire la lucrurile mici: ce limbaj de programare să învățați (de exemplu, C ++), ce este în neregulă cu matematica etc.

Printre numeroasele limbaje de programare, puteți găsi întotdeauna exact limbajul potrivit pentru rezolvarea unei sarcini date. Când apare un nou tip de problemă, oamenii creează limbi noi.

Desigur, în realitate computerul înțelege doar un limbaj de unii și zerouri, care se numește limbaj mașină. De obicei, un program scris în limbajul mașinii arată cam așa:

0010 1010 0001 1101

UN 1100 1010 1111

0101 ONO 1101 0101

1101 1111 0010 1001

Mai mult, este foarte important în ce scop este ales limbajul - pentru predarea programării sau pentru rezolvarea unei probleme specifice aplicate. În primul caz, limbajul ar trebui să fie ușor de înțeles, riguros și, dacă este posibil, lipsit de capcane. În al doilea, este un instrument complex, dar eficient și expresiv pentru un profesionist care știe ce vrea.

Acum aș dori să vă clarific ce ar trebui să distingă un limbaj de programare (Basic, Pascal) de implementarea acestuia, care este de obicei prezentat ca parte a unui mediu de programare (Quick Basic, Virtual Pascal) - un set de instrumente pentru editarea textelor sursă, generarea de cod executabil, depanare, gestionarea proiectelor etc. Sintaxa și semantica unui limbaj de programare sunt fixate în standardul de limbaj. Fiecare mediu de programare oferă propriul interpret sau compilator din acest limbaj, ceea ce permite adesea utilizarea unor constructe care nu sunt fixate în standard.

Luați în considerare limbajele de programare principale și populare

Asamblator Acesta este cel mai strălucit reprezentant al limbajelor de nivel scăzut, al cărui set de concepte se bazează pe implementarea hardware. Este un instrument de automatizare pentru programarea directă în codurile procesorului. Instrucțiunile mașinii sunt descrise sub formă de operații mnemonice, ceea ce face posibilă obținerea unei modificări a codului suficient de ridicate. Deoarece setul de instrucțiuni pentru diferite procesoare este diferit, atunci nu este nevoie să vorbim despre compatibilitate. Utilizarea unui asamblator este recomandabilă în cazurile în care este necesar să interacționați direct cu echipamentul sau să obțineți o eficiență mai mare pentru o parte a programului datorită controlului mai mare asupra generării de cod.

Cobol- Un limbaj de programare de nivel înalt dezvoltat la sfârșitul anilor 1950. Asociația CADASIL pentru rezolvarea problemelor comerciale și economice. Diferă în instrumentele avansate pentru lucrul cu fișiere. Deoarece comenzile programelor scrise în această limbă utilizează în mod activ vocabularul și sintaxa englezei obișnuite, Cobol este considerat unul dintre cele mai limbaje simple programare. În prezent este utilizat pentru rezolvarea problemelor economice, informaționale și de altă natură.

Fortran- Un limbaj de programare la nivel înalt dezvoltat de IBM în 1956 pentru a descrie algoritmi pentru rezolvarea problemelor de calcul. Aparține categoriei limbajelor orientate către proceduri. Cele mai comune versiuni ale acestui limbaj sunt Fortran IV, Fortran 77 și Fortran 90. Este utilizat pe toate clasele de calculatoare. Cea mai recentă versiune a sa este utilizată și pe computerele cu arhitectură paralelă.

Iad- Un limbaj de programare la nivel înalt axat pe aplicații în sisteme în timp real și conceput pentru a automatiza sarcinile de control al proceselor și / sau dispozitivelor, de exemplu, pe computerele de la bord (navă, aviație etc.). Dezvoltat la inițiativa Departamentului Apărării al SUA în anii 1980. Numit după matematiciana engleză Ada Augusta Byron (Lovelace), care a trăit în 1815-1851.

DE BAZĂ(Codul de instrucțiuni simbolice multifuncționale pentru începători) Născut în anii 60 în America. BASIC a fost conceput ca un limbaj simplu pentru învățare rapidă. BASIC a devenit standardul de facto pentru microcomputere tocmai datorită ușurinței sale de învățare și implementare. Pentru a atinge această calitate, au fost luate o serie de decizii (lipsa tastării, numerotarea liniilor și GOTO nestructural etc.) care afectează negativ stilul de programare a cursanților. În plus, lipsa mijloacelor expresive a dus la apariția unui număr imens de dialecte ale limbajul, incompatibil unul cu celălalt. versiunile specializate ale BASIC (cum ar fi Visual Basic), în ciuda „structurii” dobândite, au toate aceleași dezavantaje, în primul rând - neglijență în ceea ce privește tipurile și descrierile. sisteme conexe) sau ca o instrument pentru a crea rapid aplicații.

Pascal Dezvoltat de celebrul teoretician N. Wirth pe baza ideilor Algol-68, Pascal a fost destinat în primul rând predării programării. Construită pe principiul „necesar și suficient”, are un control puternic de tip, construiește pentru descrierea structurilor de date arbitrare și un set mic, dar suficient de operatori de programare structurată. Din păcate, dezavantajul simplității și rigorii sunt descrierile greoaie ale constructelor de limbaj. Cea mai faimoasă implementare - Turbo / Borland Pascal - în ciuda diferențelor față de standardul Pascal, este un mediu și un set de biblioteci care fac din predarea limbii străine un sistem industrial pentru a dezvolta programe în mediul MS-DOS.

C și C ++ Limbajul C se bazează pe cerințele unui programator de sistem: acces complet și eficient la toate resursele computerului, instrumente de programare la nivel înalt, portabilitatea programelor între diferite platforme și sisteme de operare. C ++, menținând în același timp compatibilitatea cu C, introduce capabilități de programare orientate pe obiecte, exprimând ideea unei clase (obiect) ca un tip definit de utilizator. Datorită acestor calități, C / C ++ a luat poziția unui limbaj universal pentru orice sarcină. Dar aplicarea sa poate deveni ineficientă atunci când este necesar să obțină un rezultat gata de utilizare în cel mai scurt timp posibil sau în cazul în care abordarea procedurală în sine devine neprofitabilă.

Delphi- aceasta nu este o continuare a afacerii Borland Pascal / Borland C, nișa sa - adică Dezvoltare rapidă a aplicațiilor (RAD) Astfel de instrumente vă permit să creați rapid program de lucru de la componente gata făcute, fără a pierde mult efort pe lucrurile mici. Un loc special în astfel de sisteme îl ocupă capacitățile de lucru cu baze de date.

Lisp- Limbaj algoritmic, dezvoltat în 1960 de J. McCarthy și conceput pentru a manipula liste de elemente de date. Este utilizat în principal în laboratoarele universitare din Statele Unite pentru rezolvarea problemelor legate de inteligența artificială. În Europa, ei preferă să utilizeze Prolog pentru lucrări de inteligență artificială.

Prolog- Un limbaj de programare declarativ la nivel înalt conceput pentru dezvoltarea sistemelor și programelor de inteligență artificială. Aparține categoriei de limbi din a cincea generație. A fost dezvoltat în 1971 la Universitatea din Marsilia (Franța) și este una dintre limbile utilizate pe scară largă și dezvoltate constant. Ultima sa versiune este Prolog 6.0

- Un limbaj de programare la nivel înalt dezvoltat la Massachusetts Institute of Technology în jurul anului 1970 în scopul predării conceptelor matematice. De asemenea, este utilizat în școli și în utilizatorii de PC-uri atunci când scrieți programe pentru a crea desene pe ecranul monitorului și pentru a controla un plotter.

Java Ca un prim exemplu de specializare, Limbaj Java a apărut ca răspuns la nevoia unui limbaj perfect portabil, programe în care rulează eficient din partea clientului WWW. Datorită mediului său specific, Java poate fi o alegere bună pentru un sistem bazat pe tehnologia Internet / Intranet.

ALGOL- Un limbaj de programare la nivel înalt axat pe descrierea algoritmilor pentru rezolvarea problemelor de calcul. A fost creat în 1958 de specialiști din țările din Europa de Vest pentru cercetare științifică. Versiunea Algol-60 a acestui limbaj a fost adoptată de Conferința internațională de la Paris (1960) și a fost folosită pe scară largă pe computerele de a doua generație. Versiunea Algol-68, dezvoltată de un grup de specialiști din Federația Internațională pentru Prelucrarea Informației (IFIP) în 1968, a primit statutul de limbaj internațional de programare universal axat pe rezolvarea nu numai a problemelor de calcul, ci și a informațiilor. Deși în zilele noastre Algol nu este practic folosit, a servit ca bază sau a avut un impact semnificativ asupra dezvoltării altora limbile moderne, de exemplu, Ada, Pascal etc.

Dacă doriți să puneți o întrebare despre un anumit limbaj, utilizați forumul pentru programatori

Se un limbaj mai bun nu exista. Dacă urmează să deveniți un profesionist în scrierea de programe, trebuie să învățați unul dintre limbajele de programare la nivel înalt (cel mai popular limbaj de programare este C ++), precum și unul dintre limbajele de programare a bazei de date ( de exemplu, SQL). După ce ați învățat limbajul de programare C ++, nu puteți greși. Cunoscând acest limbaj, puteți găsi oricând un loc de muncă în orice companie de programare.

În ciuda popularității mari a limbajului de programare C ++, alte limbi sunt adesea folosite. Multe computere vechi rulează încă programe scrise în limbajul de programare COBOL. Prin urmare, avem nevoie de programatori care să poată îmbunătăți aceste programe, precum și să scrie altele noi. Foarte des, companiile mari plătesc salarii mari unor astfel de programatori.

Dacă aveți de gând să lucrați pe cont propriu, este de preferat să învățați cum să creați propriile programe de baze de date. Pentru a face acest lucru, va trebui să învățați limbaje de programare precum SQL sau VBA, care sunt utilizate în Microsoft Access. Pentru a crea pagini Web, trebuie să cunoașteți HTML, precum și puține cunoștințe despre Java, JavaScript, VBScript și alte limbaje de programare pentru Internet. Cel mai necesar va fi limbajul de programare care vă va permite să rezolvați sarcinile care vi se atribuie ușor și rapid. Poate fi C ++, BASIC, Java, SQL sau limbaj de asamblare.

În concluzie, observăm că, din punct de vedere profesional, nu este atât de important în ce limbă și în ce mediu funcționează un programator, cât timp își face munca. Hardware-ul și sistemele de operare se schimbă. Sarcini noi apar dintr-o mare varietate de domenii. Se retrag în trecut și apar noi limbi. Dar oamenii rămân - cei care scriu și cei pentru care sunt scrise programe noi și ale căror cerințe de calitate rămân aceleași indiferent de aceste schimbări.

Aici am analizat elementele de bază ale programării și principalele limbaje de programare.

Vă doresc mult succes cu învățarea programării!