M-am apucat sa invat C#. Nu am fost niciodata programator, dar un pic de scripting si ceva baze de date mai stiu, cat sa fiu periculos
Nu vreau sa devin programator, imi trebuie cat sa inteleg ce e scris prin chestii facute de indieni, care tot crapa si pe care nu le suport eu, dar care imi busesc platforma de care sunt responsabil. Gen 0% disk idle time pe unul din discurile unui server, o saptamana in sir. Nu pe toate discurile si nu pe toate serverele. Si nici un indian nu stie de ce.
Fac un curs de ASP.NET Web API. Ceva C# stiam, am mai scris cod pentru CLI cand am vrut sa fac niste scripturi in care sa nu isi bage oameni mai periculosi ca mine nasul si sa le modifice, in loc de PHP editabil le dadeam cate un EXE. Deci nu pornesc chiar de la zero, dar impresia mea pana acum e ca sunt nu zero, ci negativ.
Am inceput sa cred ca cei care au inventat OOP si apoi l-au popularizat mainstream erau niste cretini. O chestie care e utilza in anumite cazuri a ajuns sa fie folosita oricand, oricum, iar gradul de perversiune doar creste, e un soi de hipstereala intelectuala sa faci ceva si mai complex, care sa poata fi complet inteles si corect utilizat de cat mai putini oameni.
Concret: ca sa faci server side niste cod care sa raspunda la un HTTP GET si sa returnezi niste date dintr-un query SQL ai nevoie in PHP de vreo 20 de linii de cod. In C# ai nevoie de 18 de fisiere, majoritatea cu minim 20 de linii de cod. Ai un fisier de initializare. Ai un controller. Ai un Data Transfer Object care are zero cod functional (doar declaratii), dar care face implicit niste lucruri pentru ca Microshit a decis ca poate sa te ajute facand lucruri pe care sa nu le faci tu, dar pentru a evita sa scrii 2 linii de cod trebuie sa scrii alte 8 linii in alt fisier in alta parte. Mai ai inca un set intreg de fisiere pentru Data Access, ca sa definesti modelul de date, adica 4 coloane care oricum sunt deja definite in SQL, asa ca daca Microshit vrea sa ajute ori sa le ia direct din baza (ca mai ai si definitii despre baza de date si tabela), ori sa taca din gura si sa o lase balta.
Am zis de 2 fisiere goale de configurare in 2 locuri diferite fara de care nu merge aplicatia? Exemplu:
Code:
namespace ExploreCalifornia.Config
{
public static class GlobalConfig
{
}
}
Ce anume configureaza?
Toate astea ca sa te ajute sa scrii cod care arata bine, dar care nu are nici un pic de lizibilitate. Trebuie ori sa stii pe dinafara ce e in alea 18 fisiere (pentru un singur controller si o singura metoda), ori sa le ai deschise pe toate in Visual Shit si sa tot "peek definition", "go to definition", ca pana la urma cea mai mare parte a functionalitatii sa nu fie in cod, ci implicita. De pilda: vrei o ruta pentru /api/tours? Pai daca controllerul se numeste TourController si ai o metoda al carui nume incepe cu Get (si continua cu orice, get GetLostSucker), orice apel la /api/tours se duce la metoda aia. Logic, pentru ca automobile. Si daca ai un DTO, cheswtia asta de mai jos face ceva:
Code:
var query = _context.Tours.AsQueryable();
query = query.Where(i => i.Price <= request.MaxPrice
&& i.Price >= request.MinPrice);
return query.ToList();
Cu explicatii: query e o cerere la baza de date. Nu e definita aici, nu conteaza ce face, daca vrei sa vezi ce face mergi si cauta. Apoi partea cu query.Where care o filtrare pentru ca DTO pentru ca ... ? Si la final, acel return nu spune ce sa returneze, ci spune sa execute acel query si apoi sa returneze rezultatele. Simplu, elegant, combini mai multe actiuni intr-o linie. Pe vremuri cand nu existau aplicatii de infrumusetat codul era un banc clasic prin revistele de IT tiparite (cand mai existau) sa dea un bloc de cod C din ala pe o singura linie (gen CSS minificat) si sa te intrebe ce face codul ala.
Baza de date: e simplu, nu trebuie sa faci nimic. Serios, merge. Din cauza la unul din cele vreo 30 de packages care sunt incluse in proiect, merge. Si nu trebuie sa faci nimic, daca exista o tabela cu numele care corespunde cu numele modelului, merge singura. Normal, si campuri ale caror nume se potriveste cu obiectul dau. Totul se bazeaza pe potriveala, nu pe asignari. In rest, face Microshit totul pentru tine, tu nu trebuie sa stii nimic. Nu trebuie sa intelegi nimic. Nimeni nu trebuie sa inteleaga nimic, ci prin incercari se ajunge la ceva care functioneaza, daca se strica exista consultanti care pot sa repare problema si asa ajunge Internetul plin de cod plin de buguri, cu securitatea varza, cu probleme de performanta si tot ce se poate, pentru ca Microshit te ajuta sa scrii repede cod pe care nu il intelegi si nu il stapanesti. ***
Vorbesc de aia 80% din programatori care nu si-au dedicat 2-3 ani din viata ca sa invete si sa inteleaga bine .NET framework si cei 20 de ani din spate. Vorbesc strict de .NET, nu de Java, PHP, Rust, Ruby, Golang si alte limbaje despre care nu stiu suficient sau nu stiu nimic, ca sa pot vorbi despre ele. Vorbesc de 100% din aplicatiile pe care le avem la serviciu si de 100% din indienii care le-au scris. Sau cel putin 100% din aia cu care am interactionat, desi as fi reticent sa cred ca i-au scos la inaintare doar pe cei mai slabi dintre ei.
*** Mi-am amintit de un exemplu clasic de dat cu capul in bara: developer PHP senior (asa zice angajatorul lui, nu eu) face un query de genul "SELECT * FROM a WHERE id NOT IN b". Pentru ca modelul lui a si ala b se potriveau cu tabelele a si b din baza de date, asa lucra el cu baza de date si acel query nu era scris de mana, ci generat de cine stie ce framework de PHP in care lucra el. Eu aia am gasit rulat in serverul de SQL cand am investigat.
Si merge in prima saptamana de productie, merge in a doua, pana cand vine cineva cu cerinta sa se importe datele pe 3 ani, ca au nevoie de istorie online pe 3 ani (don't ask, automobile). Si timpul de raspuns se duce naibii, acel query ia brusc de 100 spre 1000 de ori mai mult sa ruleze. Pentru ca atunci cand ai date mai mult de alea 100 de randuri din tutorialele de programare si ai cod SQL generat de framework, viata de server admin suddenly sucks. Nu lamai, ci chestii hardcore.