Dacă ești un entuziast al programării sau informaticii în general, e imposibil să nu fi auzit de C#. Dar dacă nu ai auzit, află că se pronunță C Sharp (sharp = ascuțit) și nu C hashtag, C diez etc.

Nu e glumă, sunt oameni pe care i-am auzit pronunțând așa și e cumva de înțeles, pentru că în era social media atunci când vezi un “#” te duce instant cu gândul la hashtag, nu?

De unde provine

Bazele limbajului C# au fost puse undeva la finalul anilor ‘90, dar prima lui denumire nu a fost C#, ci COOL, care era abrevierea de la C-like Object Oriented Language (Limbaj de programare orientat pe obiecte, care seamănă cu C, unde C e un limbaj de programare mult mai vechi și care e practic părintele cam tuturor limbajelor de programare de azi).

Numele lui a fost schimbat din COOL în C# în scurt timp după pentru a nu intra în conflict de drepturi de autor.

Mecanismele interne ale limbajului erau foarte asemănătoare cu cele ale unui limbaj deja existent și care prinsese deja ceva popularitate, denumit Java. Astfel că Anders Hejlsberg, fondatorul C#, a fost acuzat că încerca defapt să copieze Java și că nu aducea prea multă inovație în implementarea lui.

În prezent, la peste 20 de ani de la fondarea limbajului, Anders Hejlsberg împreună cu Microsoft au dus limbajul în topul celor mai populare limbaje de programare, iar C# reușește să acapareze o cotă de piață din ce în ce mai are în fiecare an.

Ce este .NET

C# e doar o parte din ecuația asta, el reprezintă doar limbajul (cuvintele folosite pentru a defini instrucțiuni), iar .NET e un set de unelte care te ajută să pui pe picioare aplicații rapid, fără să fie nevoie să reinventezi roata la fiecare proiect nou.

Un exemplu pe care îmi place să-l dau este așa:

Gândește-te că vrei să-ți construiești un nou PC de la 0. Pentru a face asta te duci la cel mai apropiat magazin care vinde piese și îți cumperi de-acolo: o placă de bază, o placă video, niște memorie RAM, un procesor, o sursă, o carcasă șamd. Pentru că nu știi și nici nu ai putea să-ți construiești singur componentele astea de la 0. Astfel că mergi la magazin, le cumperi și doar le asamblezi.

Sigur că pare simplu, dar trebuie să ai ceva cunoștințe de hardware să înțelegi care este rolul fiecărei componente, care sunt condițiile ca ele să poată funcționa bine împreună, să fie compatibile, să înțelegi cum se montează șamd.

În analogia de mai sus, .NET este magazinul care îți vinde piesele, iar C# reprezintă cunoștințele tale în asamblarea lor.

Nu inventezi nimic de la 0, ci doar asamblezi o serie de componente pentru a obține produsul dorit, în cazul ăsta calculatorul.

În cazul programării vei asambla componente de cod (.NET) cu care vei interacționa folosind C# pentru a obține produsul software dorit.

Acum că ai înțeles esența, definiția .NET este cam așa: o colecție de biblioteci care îți dau posibilitatea să scrii și să rulezi programe sau aplicații construind doar logica din spatele programelor respective, nu și infrastructura, cum ar fi structuri de date, comunicarea cu protocoale precum HTTP, criptografie, securitate etc.

Ce poți face cu C#

C# acoperă tot spectrul de aplicații posibile din prezent:

Aplicații desktop, mobile cât și web

Deși în trecut Microsoft oferea pentru C# suite independente de dezvoltare pentru fiecare tip de platformă în parte, în ultimii ani lucrurile au început să se uniformizeze și C# a devenit capabil (prin ecosistemul .NET) de dezvoltarea de aplicații pentru toate platformele posibile printr-o singură suită.

Asta te ajută enorm pe tine ca și programator, pentru că nu mai e nevoie să înveți cum să folosești unelte diferite pentru fiecare tip de aplicație în parte, ci doar trebuie să ții cont de anumite particularități și să înțelegi că fiecare mediu (desktop, mobile sau web) în parte e diferit.

Astfel productivitatea folosind C# a explodat și poți scrie și lansa produse software foarte complexe, într-un timp relativ scurt și cu destul de puțin cod scris. În felul ăsta, tu ca și programator trebuie doar să definești logica din aplicațiile tale, lăsând părțile complicate în seama plartformei (.NET) și limbajului.

Pe partea de web, ASP .NET (Active Server Pages) e una din cele mai populare platforme pentru dezvoltarea de aplicații web enterprise, atât pe partea de backend (ASP.NET Web API) cât și pe partea de fullstack (ASP.NET MVC - Model View Controller).

Apropo, în C# Masterclass lucrăm pas cu pas la o aplicație ASP .NET MVC și discutăm de concepte precum: arhitectura MVC, securitate web, baze de date relaționale, folosirea de ORM-uri (Object Relational Mapper) precum Entity Framework și multe altele.

Jocuri

Dacă ești pasionat de jocuri e imposibil să nu fi auzit de Unity. Unity e unul din cele mai populare motoare pentru dezvoltare de jocuri din prezent și care de asemenea folosește în principal C# pentru dezvoltarea motorului lor.

Dacă ai visat întotdeauna să-ți creezi propriul joc cu propriile reguli, Unity e o unealtă foarte facilă pentru a face asta.

Folosind Unity poți pune cap la cap foarte rapid un demo al unui joc așa îți dorești sau cum este în viziunea ta.

Aplicații Cloud

Aplicațiile cloud nu sunt altceva decât cod pe care îl pui într-un mediu pe care tu nu îl deții, ci doar îl poți administra. Îți pui codul să ruleze acolo fără ca tu să-ți faci griji despre servere sau medii hardware care să-ți alimenteze aplicația 24/7.

Cu C# poți face extrem de ușor asta, mai ales folosind Azure, platforma cloud pusă la dispoziție tot de Microsoft, astfel că integrarea dintre cele 2 este cu siguranță una din cele mai strânse.

Machine Learning

Dacă Machine Learning sau dezvoltarea de rețele neuronale (sau popular spus AI - inteligență artificială) e ceea ce te interesează, află că există ceea ce se numește ML .NET, platforma prin care îți antrena modele de inteligență artificială fără să fie nevoie să înveți limbajele de programare specifice acestui domeniu (cum ar fi python).

Internet of Things

Internet of Things, sau prescurtat IoT, e o nișă apărută destul de recent în industria de software development și înglobează aplicații ca cele folosite la automatizările de acasă, lumini sau electrocasnice inteligente, sisteme de supraveghere, senzori etc.

Aici vorbim de codul folosit pentru a face aparatele inteligente, adică acel cod care interacționează direct cu senzorii sau plăcile hardware interne, nu la aplicația folosită de utilizator pentru a da diferite comenzi.

Caracteristici

C# are toate caracteristicile unui limbaj de programare modern și adaptat nevoilor soluțiilor software de azi.

  1. Codul este portabil
  2. Strongly Typed - tipuri verificate la momentul compilării
  3. Management automat al memoriei

Sunt multe concepții greșite în legătură cu C#, multe din cauza problemelor sau limitărilor avute în trecut.

Una din cele mai cunoscute erori pe care oamenii le fac atunci când aud de C#, e că aplicațiile scrise cu limbajul ăsta nu pot fi folosite decât pe Windows sau că e direct dependent de Windows. Ceea ce e greșit. De la apariția .NET Core, aplicațiile scrise cu C# au devenit independente de platformă. Adică pot fi folosite pe toate sistemele de operare cele mai cunoscute: Windows, Linux, MacOS.

Tot de la lansarea .NET Core, ecosistemul a devenit open source. Adică toată lumea poate vedea codul sursă al .NET, poate propune modificări sau pur și simplu aduce contribuții acolo unde e nevoie.

Ăsta a fost unul din avantajele principale pe care le-a avut limbajul rival Java, încă de la început și a ajutat ca limbajul să crească în popularitate foarte rapid, cât și să ofere experiența de dezvoltare dorită de comunitate.

C# face parte din categoria limbajelor de programare denumite “strongly typed” (o traducere apropiată ar fi: strâns legat de tipuri), caz în care, fiecare variabilă declarată, trebuie să aibă și un tip declarat.

string name = "Bogdan"; //tipul string
int age = 18; //tipul int
Person person = new Person(); //tipul Person

În cele 3 cazuri de mai sus, după cum se poate observa, fiecare variabilă declarată are și propriul tip: string, int, respectiv Person.

În cazul ăsta, verificarea tipurilor se face la momentul compilării, astfel că dacă vei declara o variabilă ca string, dar valoarea pe care i-o atribui este de exemplu 1, vei primi o eroare de compilare care-ți va spune că valoarea atribuită nu e compatibilă cu tipul declarat.

Spre deosebire de alte limbaje ce nu fac parte din categoria “strongly typed”, ci mai degrabă din cealaltă tabără “dynamically typed”, care verifica alocarea tipurilor în momentul execuției codului. Ăsta e un dezavantaj, pentru că nu vei ști că ai ceva greșit în codul tău până nu îl rulezi.

Spre deosebire de alte limbaje de programare, cum ar fi C++, în C# nu e nevoie să fii cu ochii pe toate resursele pe care le folosești, pentru că dispune de management automat al memoriei, denumit Garbage Collection.

Asta înseamnă că există un mecanism care “face curat” după tine, ceea ce-ți permite să te concentrezi doar pe problemele pe care le ai de rezolvat și mai puțin pe tehnicalități.

Ca să înțelegi mai bine despre ce e vorba, de fiecare dată când folosești o clasă pentru a crea un obiect, obiectul ăla va ocupa ceva memorie în hardware. La limbajele precum C++, trebuie să ai grijă ca după ce te-ai folosit de obiectul respectiv și știi că nu mai ai nevoie de el, să-l “ștergi”, pentru a nu mai ocupa memoria inutil.

Cu C# nu e nevoie să faci asta, întrucât mecanisul denumit Garbage Collection va curăța după tine obiectele rămase nefolosite.

Ar trebui să înveți C# ca prim limbaj de programare?

Cu siguranță da!

Pe lângă caracteristicile descrise mai sus, care îl fac să fie parte din vârful de lance al tehnologiei, ecosistemul .NET (folosit cu C# ca limbaj) este extrem de modern și performant. Mai performant decât principalul competitor pentru aplicații sau sisteme enterprise (adică mari și foarte mari), Java și mult mai performant decât Node.js, motorul folosit împreună cu limbajul JavaScript pentru a dezvolta aplicații de server.

C# formează un echilibru perfect între experiență în utilizare și performanță.

Experiență foarte bună, oferită de multitudinea de caracteristici ale unui limbaj modern. Cu sintaxă familiară și ușor de asimilat, spre deosebire de limbaje mai “low-level”, cum ar fi C sau C++.

Totodată oferă o performanță care este greu de egalat pentru principalii competitori, iar asta îl face să fie foarte des ales de către mari companii și corporații când vine vorba de dezvoltarea de sisteme mari, complicate, cu nevoie de performanță ridicată.

Nevoia de talent devine din ce în ce mai mare la nivel global, pe măsură ce popularitatea limbajului și a ecosistemului crește de la an, la an.

Cum începi să scrii cod de C#

Poate că sună prea simplu, dar în prezent, tot ce trebuie să faci pentru a începe să scrii cod de C# acum, e să mergi pe visualstudio.microsoft.com să descarci și să instalezi Visual Studio. Atenție! Visual Studio, nu Visual Studio Code, sunt 2 aplicații diferite și deși Visual Studio Code sau (VS Code) este suficient de capabil cât să poți scrie C# și cu el, recomand Visual Studio clasic, pentru că are mult mai multe unelte gata integrate care-ți vor ușura viața.

Visual Studio este de asemenea doar pentru Windows, mai exista în trecut o versiune pentru MacOS, dar a fost retrasă în 2024.

Tot ce trebuie să faci în timpul instalării e să selectezi platformele pentru care te interesează să dezvolți aplicații: Web & Cloud, Desktop & Mobile, Gaming etc. pentru ca Visual Studio să instaleze componentele de care ai nevoie pentru a face asta.

Cam atât pentru azi, pe data viitoare!