o introducere ușor neobișnuită în domeniul arhitecturii software

duminică, 29 iul. 2012, 16:24

Arhitectura, sau mai general proiectarea chestiilor este un subdomeniu al ingineriei ca oricare altul, care se ocupă, am putea spune lipsiți de rigoare, cu descrierea chestiilor în cauză. Bunăoară, dacă doresc, inginer fiind, să proiectez un ciocan spre a rezolva o problemă dată (de obicei bătutul cuielor), va trebui – dat fiind că-s om, iară nu orice om, ci inginer – să îmi formulez un set de cerințe și întrebări adiacente acesteia, legate printre altele de: părțile componente ale ciocanului, felul în care arată acestea, din ce sunt formate și cum se îmbină ele spre a forma mai mult decât suma părților lor.

Fundamentele acestei paradigme sunt aceleași în cazul sistemelor software, motiv pentru care și există în prezent acest domeniu oarecum bizar al ingineriei programelor pe calculator [i]. Diavolul se regăsește bineînțeles în detalii, acolo unde teoreticienii încearcă să prezică evoluția software-ului în timp. Dacă în cazul unui ciocan lucrurile stau destul de simplu – dai cu el până se strică -, software-ul evoluează destul de haotic în timp, degradându-se și pierzându-și din fiabilitate în moduri greu de prevăzut. Colac peste pupăză, inginerii noștri plini de creativitate gândesc modele și implementări care de care mai complexe, când rolul abstractizării e tocmai opusul, anume acela de a simplifica lucrurile. Deci aici zic că ar ajuta un pic să luăm lucrurile de la zero, deci să regândim problema. (mai mult…)

  1. Da, dragi cititori, ingineria software e un ceva anume extrem de bizar prin felul ei de a fi. Aceasta ba apare în, ba dispare din mintea inginerului programator, existând și în același timp încetând să existe pentru acesta la un moment dat. Fenomenul se datorează nu numai faptului că lumea ideilor e volatilă în cadrul unui singur individ, ci și aceluia că oameni diferiți pot privi o singură problemă în moduri complet disjuncte, ajungând astfel să petreacă o perioadă considerabilă de timp stabilindu-și un limbaj comun. Astfel au apărut hack-uri imense dezvoltate de oameni cu interese profund diferite, cum e nucleul Linux, și astfel au luat viață inclusiv unele produse ale consumului de LSD, cum e Unix. []

software-ul și formele

luni, 23 iul. 2012, 18:51

Being abstract is something profoundly different from being vague… The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.

Citatul îi aparține lui Edsger Dijkstra, o personalitate a lumii calculatoarelor înzestrată cu un umor deosebit de cinic, umor pe care acesta l-a exprimat cât se poate de bine în lucrările sale. De asemenea izul pasajului este oarecum ingineresc, fapt care pe mine nu mă va interesa mai deloc pe parcursul articolului.

Una din motivațiile care m-au determinat să meditez pe tema înțelesului și a iadului abstractizării a fost ideea de dificultate a comunicării, deși nu atât a comunicării în sine cât a exprimării chestiilor – adică a atomilor – în limbajul universal [i]. Premisa de la care am plecat atunci a fost aceea că oamenii se deosebesc din acest punct de vedere de celelalte animale prin faptul că pot abstractiza chestii, însă nu am definit prea bine ce înseamnă în general a abstractiza. (mai mult…)

  1. Problema comunicării e o problemă în sine – și cel puțin la fel de dificilă – care rezultă din existența mediului social, apropo de impactul societății asupra evoluției, inteligenței etc. Doresc însă să fac abstracție de aspectele astea deoarece nu le găsesc o relevanță în contextul de față. []

importanța purității în semantică

luni, 26 dec. 2011, 20:32

În cadrul articolului despre semantică am discutat despre cum aceasta e o componentă esențială a limbajului. Reluând, putem afirma că semantica ajută la conceptualizarea obiectelor concrete și implicit la abstractizare, stabilind în același timp și convenții [i]. De asemenea, am afirmat că într-un sistem format dintr-un număr suficient de mare de persoane admitem existența inconsistențelor de reprezentare a conceptelor. Acestea pot exista dintr-o serie de motive precum acela că oamenii sunt în sinea lor diferiți sau că ajung să asimileze concepte în moduri diferite.

În plus, există o serie de aspecte legate mai mult sau mai puțin de limbaj, aspecte care afectează semantica acestuia. Poate fi vorba de proprietăți de bază ale limbajului [ii] sau de calități emergente, pe care creatorul limbajului vrea sau nu să le imprime acestuia, dar a căror existență necesită demonstrații non-triviale. În această ultimă categorie intră și puritatea. Pentru a face un compromis între rigurozitate și intuiție, voi defini conceptul de puritate în termeni care combină matematica cu calculatoarele.

Să presupunem că avem două obiecte, A și B. Să mai presupunem că putem trage o săgeată f de la A la B (putem nota f : A \rightarrow B, notație identică cu aceea a funcțiilor matematice), săgeată care are semnificația unui proces de calcul. Putem astfel spune că săgeata f trece obiectul A în obiectul B sau că f este un calcul care ia A și are ca efect B.

Fiind date A, B, f ca mai sus, spunem că f este pură dacă și numai dacă f are în mod strict pe B ca efect. Cu alte cuvinte, oricare ar fi obiectul C, C \neq B, atunci f nu are ca efect C. În caz contrar, spunem că f are efecte laterale. (mai mult…)

  1. Spre exemplu, fructul galben plin de suc acru având mărimea aproximativă a pumnului unui adult se numește prin convenție lămâie. Notăm că această definiție duce la necesitatea definirii conceptelor care o alcătuiesc, cum ar fi acela de fruct, de galben, acru etc., ajungând astfel la alte concepte de nivel înalt. Pe de altă parte, dacă punem mâna pe o lămâie concretă, putem comunica mai ușor că aceea este o lămâie, lucru practic imposibil în cazul obiectelor abstracte. Mai notăm și că se poate ajunge ușor la sitații neplăcute cum ar fi cea a definițiilor circulare. []
  2. Bunăoară limba japoneză are sisteme de scriere și o gramatică care îi afectează puternic expresivitatea. Problema în acest caz nu mai e doar una de translatare în alte limbi, ci de-a dreptul de diferență între logicile de exprimare. []

despre înțeles: iadul abstractizării

luni, 4 iul. 2011, 17:10

Titlul nu este nici pe departe trântit la întâmplare. Dacă Dante a crezut de cuviință că un infern structurat pe straturi e mai potrivit (decât ce?), atunci probabil că undeva în alegorie își găsește locul și ideea abstractizării. Pentru că nu doar infernul este o abstractizare – bineînțeles, nu rămâne decât să ne întrebăm: abstractizarea cui? -, ci și abstractizarea poate fi în anumite cazuri un adevărat infern.

Spuneam, când m-am apucat să vorbesc despre semantică, că înțelesurile pot pune și vor pune mereu probleme utilizatorilor de limbaj. Mai mult, fiindcă vorbim aici despre limbă în întregimea sa, structura limbajului poate afecta înțelesul la nivel declarativ. Dacă extindem problema la nivelul unităților literare (adicătelea cel al textelor), atunci lucrurile se împut și mai rău, să nu mai vorbim despre faptul că populații independente au dezvoltat limbi separate, astfel că trecerea unei idei dintr-o limbă în alta îi alterează mai mult sau mai puțin (deseori „mai mult”) înțelesul. În contextul ăsta, lingvistica formală a lui Chomsky se dovedește a fi o unealtă esențială pentru așezarea lucrurilor în ordine, măcar așa, un pic. Chiar și așa, întrebarea care atârnă nesimțit în toate locurile publice este: cum reușim să abstractizăm corect o idee sau o colecție structurată de idei?

Firește, ar fi inutil să mă apuc eu aici să disec gramatici și să înșir reguli de producție. O idee mai bună, zic eu, ar fi să ilustrez problema printr-un exemplu practic la îndemâna cel puțin a unui absolvent de liceu. În plus, limbile de zi cu zi nu mi se par deloc o idee răsărită (din cauza ambiguităților lor inerente), astfel că voi face referire la acele limbi mult mai simple, care se leagă mult mai bine de toată varza formală: limbajele de programare. (mai mult…)