II.

Limbajele de programare și crearea de software

O modalitate obișnuită de a defini un limbaj de programare este „un limbaj artificial creat pentru a permite unei persoane să dea instrucțiuni unui computer.” Computerele nu pot înțelege engleza, araba sau chineza, chiar dacă oameni pot învăța, în mod tehnic, codul binar (limbajul de bază al computerelor), aproape nimeni nu o face. Iată de ce avem nevoie de o modalitate intermediară de comunicare, pe care o denumim limbaje de programare.

După cum am văzut în secțiunea I, programatorii au creat limbajele de programare și soluțiile software încă de la începuturile sistemelor de calcul. În această secțiune veți înțelege cum au evoluat limbajele de programare și ce puteți face cu acestea.

Limbaje de programare de nivel scăzut

Inițial, la începuturile computerelor, codul de asamblare și codul binar erau principalele limbaje de comunicare cu computerele, pentru a le cere să execute comenzi prin traducerea datelor în secvențe de „unu” și „zero”; codul binar.

Codul informatic, cunoscut și sub denumirea de limbaj binar, este o serie de „unu” și „zero” care reprezintă o comandă pentru procesorul unui computer (CPU). Limbajul de asamblare este mult mai inteligibil decât limbajul binar. Limbajul de asamblare folosește coduri mnemonice pentru a se referi la instrucțiunile din codul de instrucțiuni, mai curând decât să folosească valorile numerice ale instrucțiunilor în mod direct.

Ar putea părea că aceste limbaje nu mai sunt importante, deoarece sunt invizibile pentru majoritatea utilizatorilor de computere, însă realitatea este că încă folosim aceste limbaje în computerele noastre moderne. Acestea sunt elementele fundamentale ale oricărui computer. Fiecare CPU poate executa un set specific de instrucțiuni care corespunde mărcii sau arhitecturii respectivului CPU.

Însă, de ce ați vrea să învățați limbaje de nivel inferior și programare de nivel inferior, în orice caz? Există mai multe motive, inclusiv:

  • Unele părți din sistemele noastre de operare, și chiar virusuri, au fost scrise în limbajul de asamblare.

  • Dacă doriți să lucrați în programarea GPU utilizând limbaje de nivel superior, precum CUDA sau OpenCL, va trebui să înțelegeți programarea de nivel inferior.

  • Dacă doriți să fiți mai buni la învățarea automată, vă puteți optimiza codul utilizând limbajul de asamblare pentru a gestiona în mod eficient memoria.

  • Dacă doriți să învățați în profunzime cum funcționează sistemele de operare, cunoașterea limbajului de asamblare va fi utilă. Limbajul de asamblare se folosește în mod obișnuit în codul de bootare a unui sistem, codul de nivel inferior care inițializează și testează hardware-ul sistemului înainte de bootarea sistemului de operare

  • Limbajul de asamblare este util în ingineria inversă. Multe programe se distribuie doar sub forma codului de instrucțiuni care nu este complicat de tradus într-un limbaj de asamblare de către un dezasamblor, însă este mult mai dificil de tradus într-un limbaj de un nivel superior printr-un decompilator.

După ce ați văzut cum și de ce ați putea studia mai multe despre limbajele de nivel inferior, suntem gata să învățăm despre limbajele de nivel superior.

Set de denumiri de limbaj software
Set de denumiri de limbaj software

Limbajele de programare de nivel superior

Știm că un computer înțelege codul binar, dar noi înșine nu-l înțelegem pe acesta - sau doar o mână de oameni de pe Glob sunt capabili de acest lucru.

La sfârșitul anilor 1950, utilizatorii de computere (în principal oameni de știință și întreprinderi mari) trebuiau adesea să scrie ei înșiși software. Dezavantajul acestei situații era că fiecare întreprindere sau laborator trebuia să aibă pe cineva capabil să programeze computerul și software-ul era creat pentru un sistem informatic specific, ceea ce făcea imposibil schimbul de software deoarece acestea nu erau compatibile. Au fost inventați compilatorii, iar acest fapt a susținut dezvoltarea limbajelor de programare de nivel superior, niște limbaje mai abstracte care sunt mai ușor de înțeles.

Note

Un compilator traduce codul scris într-un limbaj informatic în alt limbaj informatic.

Primele limbaje de nivel superior dezvoltate în anii 1950 erau FORTRAN, COBOL și BASIC. Acestea permiteau programelor să fie specifice într-un mod abstract, independent de detaliile precise ale arhitecturii hardware a computerului. (Wolfram 2002).

Aceste limbaje se utilizează la scrierea programelor, care sunt seturi de instrucțiuni complete și funcționale pe care le utilizează computerele pentru a realiza sarcini, cum ar fi încărcarea unei pagini web, generarea analizelor statistice și găsirea sumei a două numere. Cu toate acestea, codul nu este recunoscut direct de către CPU. Mai curând, acesta trebuie compilat într-un limbaj de nivel inferior.

Deoarece compilarea unui cod extins putea dura foarte mult timp, programatorii au inventat interpretorii.

Note

Un interpretor execută direct instrucțiuni scrise într-un limbaj de programare, fără a mai fi necesar un compilator care să le compileze într-un program de cod de instrucțiuni.

Unele limbaje de programare utilizează atât compilatori, cât și interpretori. Dacă ar trebui să scrieți un program Java într-un editor de text, atunci când ar trebui să îl compilați cu un compilator Java, de fapt ați crea ceva denumit bytecode. Se poate interpreta bytecode ca o etapă intermediară între codul sursă și codul obiect. Atunci când un computer execută un program Java, programele „library” de pe respectivul calculator interpretează bytecode. Aceasta permite Java să nu depindă de platforme - un utilizator are nevoie de „libraries runtime” corecte pentru Java pe computerul propriu pentru a executa programele.

Care sunt diferențele dintre limbajele de nivel inferior și cele de nivel superior?

Principala diferență este că programatorii pot înțelege mai ușor sau interpreta sau compila limbajul de nivel superior în comparație cu codul de instrucțiuni. Pe de altă parte, computerele pot înțelege limbajele de nivel inferior mai ușor decât ființele umane. Să vedem alte câteva diferențe:

Limbaj de nivel superior Limbaj de nivel inferior
Limbaj intuitiv pentru programatori Limbaj intuitiv pentru computere
Limbajul de nivel superior este mai puțin eficient din punctul de vedere al memoriei Limbaj de nivel inferior este foarte eficient din punctul de vedere al memoriei
Mai ușor de curățat de erori Prin comparație, este dificil de curățat de erori
Mai ușor de întreținut Prin comparație, este dificil de întreținut
Portabil Nu este portabil
Poate rula pe orice platformă Depinde de computer
Are nevoie de un compilator sau de un interpretor pentru traducere Are nevoie de un asamblor pentru traducere
Utilizat pe scară largă pentru programare Nu este folosit în mod obișnuit în prezent în programare

Vă scrieți propriile dumneavoastră programe/software

Există o întreagă disciplină dedicată creării de produse de software, denumită ingineria de software. Veți afla mai întâi câte ceva despre ingineria de software, iar ulterior despre limbajele de programare.

Ce este ingineria de software?

Atunci când vă gândiți la software, vedeți în mod obișnuit o interfață care vă permite să faceți ceva cu computerul, ca, spre exemplu, să scrieți texte. Ingineria de software se definește ca procesul de analizare a cerințelor utilizatorului (necesitățile pe care le au utilizatorii pentru a scrie textul) pentru a concepe produsul de software dorit. După care, totul se referă la concepția, construirea și testarea unei aplicații software care va satisface aceste cerințe.

Exemplu

Să vedem diferitele definiții ale ingineriei de software:

  • Inițiativa globală privind etica sistemelor autonome și inteligente (IEEE), în standardul său 610.12-1990, definește ingineria de software ca aplicarea unei abordări sistematice, disciplinate, de calcul, pentru dezvoltarea, operarea și întreținerea de software.

  • Fritz Bauer o definea ca „instituția și principii de inginerie standard utilizate. Te ajută să obțiisoftware, în mod economic, care este fiabil și care funcționează eficient pe computere reale.”

  • Boehm definește ingineria de software ca implicând „aplicația practică a cunoașterii științifice la conceperea creativă și construirea de programe de computer. Include, de asemenea, documentația asociată necesară pentru dezvoltarea, operarea și întreținerea acestora.”

Însă ingineria de software implică mai mult decât codificare?

Da, există multe etape necesare pentru crearea de software, atât înainte, cât și după codificare. Pe acestea le denumim ciclul de viață al dezvoltării de software (SDLC), care este structurat într-o secvență bine definită de etape care fac ca procesul de proiectare și dezvoltare să fie eficient. Etapele sunt, după cum urmează:

  • Comunicarea este prima etapă. În mod tipic, un client posibil al unei întreprinderi de software inițiază o solicitare pentru un produs de software dorit.

  • Colectarea cerințelor se referă la încercarea de a obține cât mai multe informații posibil privind cerințele clientului.

  • Studiul de fezabilitate se elaborează atunci când echipa vine cu un plan primar pentru procesul de software.

  • Analiza sistemului are loc atunci când echipa de proiect analizează domeniul de aplicare a proiectului și planifică în consecință calendarul și resursele.

  • Conceperea de software se desfășoară atunci când echipa preia cunoașterea din etapele de colectare a cerințelor și de analiză și concepte, în realitate, produsul de software.

  • Etapa de codificare sau programare are loc atunci când echipa începe să scrie codul programului într-un limbaj de programare adecvat și dezvoltă în mod eficient programele executabile.

  • Testarea este o parte esențială a procesului de a descoperi și rezolva erori potențiale.

  • Etapa de integrare este necesară dacă software-ul ar trebui integrat cu entități externe, precum baze de date sau alte programe.

  • Etapa de implementare are loc atunci când noul software este gata și instalat în realitate pe computerele utilizatorilor.

  • Operarea și întreținerea se referă la confirmarea, în viața reală, a eficienței software. Sunt verificate și rezolvate erorile posibile.

Cascadă prin comparație cu dezvoltarea agilă

Toate etapele sau activitățile de mai sus în SDLC se pot executa într-o ordine diferită în conformitate cu diferitele abordări existente. De asemenea, abordările diferite investesc mai mult sau mai puțin timp în diferitele etape ale SDLC. Aceste etape pot fi parcurse pe rând, ca în abordarea cascadei sau etapele pot fi repetate în iterații diferite care subliniază livrarea incrementală a produsului de software, ca în abordarea agilă.

Comparație între cascadă și dezvoltarea agilă
Comparație între cascadă și dezvoltarea agilă

Metodele tradiționale de dezvoltare de software utilizează ceea ce se cunoaște drept dezvoltarea în cascadă. Înainte, actualizările de software puteau fi descărcate ușor de pe internet sau erau implementate automat de pe internet, procesul dezvoltării în cascadă era proiectat pentru a încerca și a se asigura că, atunci când era trimis clientului, programul software conținea toate caracteristicile necesare cu toate problemele cunoscute testate și rezolvate până când era programată să fie lansată următoarea versiune a programului software. Acest proces este foarte riscant și consumator de timp deoarece testarea produsului se face la sfârșit, după ce dezvoltatorii și designerii au avut nevoie de un interval enorm de timp pentru proiectarea și consolidarea întregului program. Acest tip de proces de dezvoltare favorizează, de asemenea, eficiența de inginerie prin comparație cu experiența utilizatorului final, ceea ce poate duce la frustrarea clienților utilizatori finali din cauza unor probleme neprevăzute de către ingineri, deoarece clienții utilizatori finali nu sunt implicați în procesul de dezvoltare după studiul inițial al cerințelor. Această frustrare a utilizatorului final poate duce la contracte potențial pierdute sau reconstrucții costisitoare.

Abordarea agilă este cea mai bună practică modernă pentru dezvoltarea de software în colaborare între echipe și clienți, prin realizarea de planificare, învățare și comunicare continue pentru a livra software incremental în loc să se livreze programul software în întregime odată la sfârșitul proiectului. Utilizatorii finali (persoanele care vor utiliza programul software în realitate) se află în centrul cerințelor de proiectare și al funcțiilor, și sunt și cei cărora li se va solicita să le testeze pe acestea în incremente mici, în cursul proiectului. În acest mod, dacă devine vizibilă o eroare de proces pentru care a fost proiectat produsul, se pot face ajustări imediat, înainte de a continua construcția. Împărțirea procesului în părți mai mici, testarea continuă și integrarea funcțiilor software în loturi răspândește riscul de investiție în dezvoltare și grăbește implementarea software pentru utilizatori.

Acum dacă știm care este procesul în ansamblu din spatele creării de software, ne vom reîntoarce la codificare și la limbajele de programare.

Note

După cum știți până acum, majoritatea programelor informatice sunt scrise într-un limbaj de programare de nivel superior; cu toate acestea, versiunea unui program, pe care o poate citi ființa umană, se numește codul sursă. Împreună cu un dezvoltator de software, dumneavoastră puteți crea și edita un cod sursă într-un limbaj de nivel superior, utilizând un software IDE sau chiar un editor elementar de text.

Ce este un software IDE?

Un software IDE înseamnă „mediu de dezvoltare integrat” și este o aplicație pe care dezvoltatorii o folosesc pentru a crea programe informatice. În acest caz, „integrat” se referă la modul în care instrumentele de dezvoltare multiple se combină într-un program unic. De exemplu, un IDE tipic include un editor de cod sursă, un detector de erori și un compilator. Majoritatea IDE oferă, de asemenea, o interfață pentru proiect care permite programatorilor să monitorizeze toate fișierele referitoare la un proiect. Multe suportă și controlul versiunilor.

Unele IDE oferă un „runtime environment” (RTE - mediu de rulare) pentru testarea programelor software. Atunci când un program este rulat în cadrul RTE, dezvoltatorul poate monitoriza fiecare eveniment care are loc în cadrul aplicației care este în curs de a fi testată. Acest lucru poate fi util la identificarea și rezolvarea erorilor, precum și la localizarea sursei scurgerilor de memorie. Deoarece IDE furnizează o interfață centralizată pentru utilizator pentru scrierea codurilor și testarea programelor, programatorul poate face o schimbare rapid, poate recompila programul și poate rula din nou programul. Programarea rămâne o activitate intensă, însă software IDE ajută la eficientizarea procesului de dezvoltare.

Există un număr incredibil de limbaje de programare informatică utilizate de programatori, dezvoltatori de software, dezvoltatori web și de alți informaticieni profesioniști. Dar câte astfel de limbaje există în realitate?

Potrivit Wikipedia, există aproximativ 700 de limbaje de programare, inclusiv limbaje de programare ezoterice. Alte surse care nu enumeră decât limbajele notabile, tot cuprinde până la un număr impresionant de 245 de limbaje. O altă listă, denumită HOPL, care pretinde că include toate limbajele de programare care au existat vreodată, conține un număr total de 8.945. Unii chiar estimează un total de până la 25.000.

Dar cum puteți alege un limbaj de programare pentru a-l învăța? Și, în realitate, puteți învăța să programați? Răspunsul este da! Puteți și ar trebui, deoarece nevoia de alfabetizare în programare pentru diferite locuri de muncă este ascendentă.

Carlcheo a creat un infografic util care ne ajută să alegem ce limbaj de programare să învățăm și a colectat un punct bun de plecare pentru a învăța unele dintre limbajele menționate.

  • Dacă doriți un limbaj pe care să-l învețe copiii dumneavoastră se recomandă Scratch și, după ce l-ați terminat pe acesta, vi se recomandă să treceți la Python.

  • Dacă doriți să învățați un limbaj pentru a obține un loc de muncă la Facebook sau la Google, cea mai bună alegere pe care-ați putea-o face ar putea fi Python. Și așa se face că Python este un limbaj minunat de ales, în general, deoarece este considerat un limbaj relativ ușor de învățat.

  • Dacă doriți să învățați un limbaj „ușor”, potrivit dezvoltatorilor, alegerile dumneavoastră sunt Python, Ruby și JavaScript. Aceste limbaje vă pot furniza o bază solidă pentru logica și sintaxa de programare. Și, după ce aveți o bază solidă, orice alt limbaj vă va veni ușor de asimilat.

  • Dacă doriți să dezvoltați jocuri, C++ pare să fie limbajul cel mai adecvat.

  • Dacă doriți să programați la un nivel relativ inferior, C și C++ sunt limbajele cele mai adecvate deoarece acestea au tendința de a fi compilate direct în limbajul informatic al platformei care se utilizează. De asemenea, C și C++ vă permit să scrieți într-un mod care este destul de apropiat de majoritatea codurilor de instrucțiuni (pointere incrementale, etc.). Rust este un limbaj mai nou în acest spațiu.

  • Dacă doriți să lucrați pe proiecte pentru iPhone, prin urmare proiecte în legătură cu iOS, cea mai bună alegere este Swift.

  • Dacă doriți să lucrați pe proiecte în legătură cu Android, cea mai bună alegere este Java sau Kotlin.

  • Dacă vă atrage frumusețea site-urilor web, aveți șanse mari să vi se pară interesant să învățați coduri pentru utilizatori (dezvoltare web front-end) și cea mai bună alegere ar fi limbajul JavaScript.

  • Dacă vă atrag serverele (dezvoltare web back-end) și bazele de date, cea mai bună alegere ar fi limbajele Ruby sau Python.

  • Dacă deja știți care este partea de componentă tehnică pe care o considerați de interes, veți alege fie dezvoltare front-end fie dezvoltare back-end.

Și sfatul nostru final: Deoarece există sute de opțiuni pentru a alege un limbaj, este o idee bună să vă puneți două întrebări esențiale înainte de a face orice alegere.

  • Ce v-a făcut să fiți interesați de programare?

  • Ce doriți să faceți în calitate de programator?

Există multe oportunități pentru a vă stimula cariera. Utilizați primul limbaj pentru a învăța să gândiți ca un programator și învățați logica elementară de programare. Și nu uitați că învățarea pe tot parcursul vieții este esențială pentru a ține pasul cu tendințele în ceea ce privește limbajele și tehnologia.

Next section
III. Înțelegerea și utilizarea programelor software pe dispozitivele noastre