Informatica este știința care se ocupă cu procesarea sistematică a informației, de obicei prin intermediul unui calculator. Informatica s-a dezvoltat cutremurător în ultimul secol, și a ajuns să fie folosită în mai toate domeniile de activitate. Iată o scurtă listă cu cele mai importante evenimente din dezvoltarea informaticii, până la apariția primelor calculatoare:

  • 1623: Wilhelm Schickard a proiectat o mașină de calcul, însă proiectul a fost abandonat din cauza unui incendiu ce a distrus clădirea în care se afla prototipul.
  • 1640: Blaise Pascal, un renumit matematician, fizician și filozof francez a construit pascalina, un dispozitiv mecanic de calcul.
  • 1672: Gottfried Wilhelm Leibniz a inventat Socotitorul în trepte, pe care l-a finalizat în 1694.
  • 1703: Gottfried Leibniz a dezvoltat algebra booleană, care stă la baza sistemelor de calcul din ziua de astăzi, deoarece această algebră folosește doar valorile 0 și 1, care sunt cel mai ușor de reprezentat din punct de vedere fizic. De exemplu, 0 poate fi un bec stins, iar 1 unul aprins.
  • 1801: Joseph Marie Jacquard a creat un război ce funcționa pe baza cartelelor perforate, demonstrând că mașinile pot fi construite în jurul sistemului binar.
  • 1835: Charles Babbage a inventat mașina analitică, pe care însă nu a reușit să o construiască. Aceasta era alimentată de un motor cu aburi și funcționa pe baza cartelelor perforate.
  • 1936: Alan Turing a descris în 1936 principiile de funcționare ale Mașinii Turing, o mașină de calcul programabilă. Aceasta a fost implementată pentru prima oară, mai târziu, de John von Neumann, care a definit o arhitectură ce folosea aceeași memorie atât pentru stocarea programelor cât și a datelor.
  • 1945: A fost finalizată construirea ENIAC (Electronic Numerical Integrator And Computer), primul calculator electronic care putea efectua 5.000 de operații de adunare și scădere pe secundă, fiind de o mie de ori mai rapid decât celelalte mașini. ENIAC cântărea 30 de tone și folosea peste 18.000 de tuburi!
  • 1954: IBM lansează un calculator mai mic, IBM 650, care cântărea peste 900 kg.
  • 1957: Este lansat Fortran, primul limbaj de programare de nivel înalt.

ENIAC

Acesta a fost doar începutul, căci lucrurile au evoluat foarte repede de atunci: Au apărut primele computere personale cu interfață grafică, C++ – primul limbaj ce suportă programare orientată pe obiect (OOP), primele telefoane inteligente și așa mai departe.

Ce este un algoritm?

Un algoritm este un set de pași ce trebuie urmați pentru a rezolva o problemă. Această noțiune stă la baza informaticii și a fost definită de matematicianul persan Al-Khwarizmi. Algoritmii sunt implementați de obicei prin scrierea unui program, folosind un limbaj de programare. Un exemplu de algoritm este cel de preparare a unei rețete culinare, folosind diverse ingrediente și unelte:

  1. Încălzește cuptorul la 160 °C.
  2. Pregătește ingredientele: făină, unt, zahăr, lapte și ouă.
  3. Amestecă ingredientele într-un bol.
  4. Toarnă amestecul într-o tavă.
  5. Lasă preparatul la copt 50 de minute.

Algoritm

Proprietățile pe care orice algoritm trebuie să le aibă într-o măsură mai mică sau mai mare sunt:

  • Corectitudinea: Algoritmul trebuie să furnizeze o soluție corectă pentru problema dată.
  • Determinismul: Plecând de la un anumit set de date de intrare, rezultatul trebuie să fie unic.
  • Generalitatea: Algoritmul trebuie să rezolve o clasă de probleme, nu doar o problemă particulară. De exemplu, dacă vrem să elaborăm un algoritm care rezolvă o ecuație de gradul II, e de preferat ca acesta să poată rezolva orice ecuație de forma $ax^2+bx+c=0$, indiferent de valorile variabilelor $a$, $b$ și $c$.
  • Claritatea: Algoritmul nu trebuie să conțină ambiguități.
  • Finitudinea: Algoritmul trebuie să se oprească într-un număr finit de pași – mai exact să nu intre într-o buclă infinită.
  • Eficiența: Algoritmul trebuie să fie cât mai eficient, adică să se oprească după un număr cât mai mic de pași. Dacă se poate demonstra că numărul de pași pe care îi face algoritmul pentru a rezolva problema este cel mai mic posibil, atunci algoritmul este optim.

Ce este un limbaj de programare?

Un limbaj de programare este un set bine definit de expresii și reguli pentru formularea instrucțiunilor ce urmează a fi executate de un calculator. Cu alte cuvinte, cu ajutorul lor putem implementa algoritmi pentru a crea diverse aplicații. Limbajele de programare pot fi de nivel scăzut, mediu sau înalt, în funcție de cât de ușor comunică cu procesorul și de cât de mult pot abstractiza datele (cât de mult se apropie de un limbaj natural).

Limbaje de programare

Limbaje Low-Level

Limbajele Low-Level sunt cele mai performante, și sunt folosite de obicei la dezvoltarea sistemelor de operare. Limbajul de cel mai scăzut nivel este codul mașină, care rulează direct pe procesor. În acest limbaj se folosesc doar cifrele binare, așa că practic este imposibil să programezi direct în el. Codul mașină este urmat de limbajele de asamblare, care sunt și ele urâte, dar mult mai OK. Exemplu de cod assembly:

Continuăm cu C, urmat de C++ (datorită OOP-ului), care permit destul de multă abstractizare de date. Multe dintre jocurile 3D de succes sunt făcute (în mare parte) în C++, datorită vitezei sale. Iată o secvență de cod C++ care adună două numere introduse de la tastatură și afișează în consolă suma lor:

Limbaje Mid-Level

Limbajele Mid-Level sunt folosite de obicei pentru a programa aplicații obișnuite, deoarece sunt foarte ușor de înțeles. Aici includem Java și C#. Iată un program Java care, pe scurt, creează o fereastră în care desenează un pătrat roșu:

Limbaje High-Level

Majoritatea limbajelor High-Level sunt interpretate și au performanță mai slabă, însă sunt foarte dinamice. Aici intră Python, Perl, Ruby și JavaScript. Așa se creează în JavaScript o alertă pentru browser:

Ce sunt sintaxa și semantica?

Sintaxa unui limbaj de programare este un set de reguli ce trebuie respectate pentru a scrie cod corect. Semantica unei instrucțiuni reprezintă efectul acesteia.

Ce sunt compilatoarele și interpretoarele?

Compilatorul este un program care transformă codul sursă al unui proiect în cod mașină, creând un fișier executabil. Unele limbaje de programare sunt compilate (se pot compila printr-un compilator), iar celelalte sunt interpretate. Limbajele interpretate sunt cele în care instrucțiunile nu sunt direct executate de calculator, ci de un program auxiliar, care este scris de obicei în limbajul nativ mașinii.

Compiler

Din moment ce limbajele compilate folosesc direct limbajul nativ al mașinii, sunt mult mai rapide decât cele interpretate. Interpretoarele sunt însă mult mai ușor de programat, fiind foarte dificil să scrii compilatoare de calitate. De asemenea, un avantaj al limbajelor interpretate este că nu necesită o etapă de compilare; ele execută instrucțiunile direct.

Compilatoarele sunt tot mai inteligente, așa că au ajuns să facă singure mici optimizări în cadrul programului. În plus, dacă ai vreo eroare de sintaxă sau o eroare la run-time (în timpul rulării programului), atât compilatoarele cât și interpretoarele le specifică clar în consolă.

Ce este un mediu de programare (IDE)?

Putem scrie programe în orice editor de text, cum ar fi NotePad, însă folosirea unui mediu de programare (Integrated Development Environment) este mult mai convenabilă. Un mediu de programare face foarte multe lucruri în locul programatorului, și îl ajută să fie mai productiv. Câteva dintre facilitățile pe care le oferă aproape orice IDE sunt:

  • Syntax Highlighting: Evidențiază elementele de sintaxă în moduri cât mai diverse (variabile de o culoare, operatori de altă culoare, funcții de altă culoare etc.). Acest lucru face codul mai lizibil.
  • AutoComplete: În timp ce scrii cod îți apar pop-up-uri mici cu sugestii de cuvinte. Te scutește de niște tastat.
  • Documentație: Ținând câteva clipe cursorul pe o funcție, o clasă sau altă entitate, ți se va deschide un pop-up cu o scurtă documentație despre aceasta.
  • Compilare/Interpretare: Dai click pe un buton de run și îți rulează programul. Nu mai trebuie să intri în terminal (Command Prompt pentru Windows) și să tastezi comenzi complicate pentru a compila și rula programul.
  • Debugger: Un feature care te ajută să depanezi programul, adică să găsești bug-urile (erorile logice), prin afișarea unui tabel de variabile, de exemplu.
  • Consolă: O zonă în care poți introduce și afișa diferite date. Și ea ajută la debugging. Dacă simți că la o anumită linie din program s-a schimbat în mod neașteptat valoarea unei variabile, o poți afișa în consolă ca să te prinzi de unde vine problema. Consola poate fi găzduită și de terminal (Command Prompt pentru Windows), în special când faci o aplicație fără interfață grafică.

Mediu de programare

Ce sunt bibliotecile, framework-urile și API-urile?

O bibliotecă reprezintă un set de fișiere ce conțin implementările unor funcții, clase etc. Bibliotecile pot fi folosite în programele noastre pentru a nu reinventa roata de fiecare dată când începem un proiect. Orice limbaj trebuie să vină cu un set standard de biblioteci în care să fie implementate lucrurile de bază, cum ar fi funcțiile de citire și scriere pentru consolă. De multe ori vom folosi biblioteci create de alții. De exemplu, C++ nu vine cu o bibliotecă grafică, așa că pentru a crea o aplicație C++ cu interfață grafică vom avea nevoie de o bibliotecă precum SFML sau SDL.

Un framework este un software ce poate conține biblioteci, programe-suport și chiar un limbaj de scripting. În general, un framework conține unelte care ajută la dezvoltarea unui software. Acestea pot fi accesate printr-un API. Un API (Application Programming Interface) este un set funcții și proceduri care permit crearea de aplicații cu acces la facilitățile unui sistem de operare sau altor servicii.

Ce sunt bug-urile?

Un bug este o eroare dintr-un program, care poate produce rezultate neașteptate. Căutarea și rezolvarea acestor bug-uri se numește debugging (depanare), și este coșmarul oricărui programator. Poate dura și câteva luni să rezolvi un bug, iar de multe ori asta înseamnă să generezi alte bug-uri 😉 De obicei, când un programator nu reușește să rezolve un bug, apelează la Stack Overflow, un forum extrem de activ, cu o vechime de aproape 10 ani, unde milioane de programatori din toată lumea sunt pregătiți să te ajute.

Coder, hacker, programator, informatician, dezvoltator

Aparent, cele cinci cuvinte înseamnă același lucru, însă există câteva diferențe între aceste „profesii”. Un coder este o persoană care poate traduce limbajul omenesc într-un limbaj de programare sau de mark-up (ca HTML), și cam atât. Majoritatea lucrează pe partea de front-end a website-urilor și o bună parte dintre ei chiar urăsc matematica. Hackerii sunt cei care lucrează foarte repede cu calculatorul (tastează rapid, iubesc să folosească terminalul, etc.). Ei înțeleg foarte profund anumite zone ale tehnologiei.

Programatorii scriu cod și înțeleg bine algoritmii; de obicei lucrează cel mai bine singuri. Informaticienii (Computer scientists) știu să demonstreze cum funcționează calculatoarele; sunt experți în algoritmică și de obicei sunt și matematicieni. Dezvoltatorii (Developerii) sunt cei care au câte un pic din fiecare; se pot adapta la o grămadă de tehnologii și limbaje, și le pot asambla încât să funcționeze bine împreună. În plus, dezvoltatorii lucrează în echipă și comunică bine cu ceilalți.

Coder, hacker, programator, informatician, dezvoltator

Sper că v-am făcut o imagine de ansamblu asupra informaticii și programării. Puteți începe să învățați limbajul C++ citind acest articol. Dacă aveți întrebări, nu ezitați să le adresați în comentarii 🙂

Îți place conținutul acestui site?

Dacă vrei să mă susții în întreținerea server-ului și în a scrie mai multe articole de calitate pe acest blog, mă poți ajuta printr-o mică donație. Află aici cum o poți face!