principiile de proiectare a limbajului
un limbaj specific domeniului bine conceput sau o limbă în general, împuternicește oamenii cu capacitatea de a-și exprima gândurile într-un mod rapid și concis, precum și de a înțelege cu ușurință răspunsul de feedback. Este deosebit de important să cercetăm, deoarece afectează în mod direct cât de repede puteți itera — testa idei noi și înțelege rezultatele intermediare. Iterațiile rapide fac posibilă testarea unei game mai largi de parametri, inclusiv a celor care nu ar trebui să funcționeze la prima vedere, permițându-vă să înțelegeți mult mai bine domeniul pe care îl investigați. Astfel, designul limbajului afectează în mod direct nu numai timpul total necesar pentru a rezolva o problemă într-un mod neliniar, ci este adesea cheia pentru a găsi deloc soluția.
apare o întrebare importantă — ce este un limbaj bun? Există îndrumări pe care fiecare limbă specifică domeniului ar trebui să le urmeze? Credem că există două principii de bază:
- oamenii au nevoie de o conexiune imediată la ceea ce fac
acest principiu a fost introdus pentru prima dată public de Brett Victor, un vizionar al interacțiunii om-computer, în timpul discursului său inventând principiul. Orice încălcare a acestui principiu înstrăinează utilizatorul de problemele reale pe care încearcă să le rezolve, ceea ce, prin urmare, scade înțelegerea și crește numărul de greșeli. - oamenii nu pot fi limitați de instrumentul pe care îl folosesc
Oamenii tind să respingă orice instrument care le limitează în mod evident expresivitatea. Acesta este motivul exact pentru care atât de multe soluții WYSIWYG, cum ar fi creatorii de site-uri web, creatorii de jocuri sau limbajele de programare vizuală, nu ajung niciodată din urmă. Orice DSL mai complex decât un editor de text WYSIWYG poate încălca cu ușurință acest principiu oferind utilizatorilor săi un set prea limitat de componente predefinite, la nivel înalt. Chiar dacă aceste componente pot fi extinse prin scrierea de cod, necesitatea de a recurge la un limbaj de programare subiacent strică designul și îl face inutilizabil pentru un public mai puțin tehnic.
încălcarea principiului
încălcarea oricăruia dintre aceste principii duce întotdeauna la o soluție suboptimă. Să luăm în considerare din nou designul grafic. Utilizarea Photoshop este întotdeauna mai bună decât scrierea codului HTML, Sass și JavaScript? Fără îndoială. Aceste soluții încalcă Primul și, respectiv, al doilea principiu. Photoshop oferă o pânză digitală WYSIWYG cu un set limitat de instrumente predefinite, greu extensibile. HTML, Sass și JavaScript, pe de altă parte, oferă o interfață text și, astfel, înstrăinează utilizatorul de creația sa reală, dar nu stabilesc o restricție strictă asupra expresivității. Să luăm în considerare două cazuri de utilizare:
- un design de site web. Există cinci elemente aranjate uniform în bara de meniu. Dacă doriți să adăugați un element nou și să schimbați paleta de culori a site-ului web, tot ce trebuie să faceți este să modificați o singură linie în HTML și o variabilă de culoare în Sass. Indiferent cât de complex este site-ul Web, fiecare element se va actualiza automat. A face același lucru în Photoshop necesită mai multe ordine de mărime mai mult timp — creați un nou element de meniu, utilizați un instrument de aliniere pentru a aranja elementele, schimbați manual culorile și probabil reaplicați unele transformări și filtre în zone de site mai complexe.
- o pictură artistică. Utilizarea HTML, SVG și Sass într-un editor de text pentru a exprima o viziune artistică ar fi cu greu posibilă. Cu cât procesul este mai creativ și mai descoperibil, cu atât setul de instrumente WYSIWYG și bucla de feedback instant devin mai importante.
ar fi posibil să fuzionăm ambele abordări? Nu este doar posibil, există deja soluții care se îndreaptă în direcția cea bună. Gândiți-vă la Sketch, care a devenit setul de instrumente de design final pentru Mac OS. De ce atât de mulți oameni preferă Photoshop? Răspunsul este surprinzător de simplu — Sketch limitează expresivitatea utilizatorului mai puțin decât Photoshop. Vă permite să creați elemente de design reutilizabile și apoi să le actualizați în vrac parametrii, la fel ca Sass, dar într-un mediu interactiv, WYSIWYG. Există multe alte modalități de a îmbunătăți în continuare experiența designerului. Urmăriți o altă discuție de la Brett Victor, desenând Vizualizări dinamice, pentru inspirație suplimentară.
blestemul DSL-urilor
dacă știm principiile de bază pentru un limbaj specific domeniului perfect, de ce instrumentele specifice domeniului disponibile nu există încă? De ce nu trăim într-o lume WYSIWYG nelimitată?
în timp ce limbajele specifice domeniului oferă o modalitate de neegalat de a manipula și înțelege datele, ele introduc, de asemenea, în liniște modele de design software stricate. Existența multor DSL-uri mici, care nu pot vorbi între ele, duce într-o perspectivă lungă la o lume software disfuncțională și fragmentată.
în lumea reală, există o cooperare constantă între domenii. Manipularea imaginii este adesea folosită pentru nevoile de învățare automată și bioinformatică, care la rândul lor devin din ce în ce mai mult un instrument important pentru arhitectură și proiectarea vehiculelor. Dezvoltarea rapidă a IoT are ca rezultat dispozitive mai mici și mai autonome, ceea ce deschide o nouă lume pentru detectarea timpurie a bolilor, sisteme de monitorizare a sănătății sau orașe inteligente.
cu toate acestea, nu există aproape nicio cooperare în lumea software-ului. Dezvoltatorii de Software scriu același cod din nou și din nou, ceea ce duce la costuri ridicate de dezvoltare și stagnare a inovării. Nu puteți lua doar un editor de formă din software-ul dvs. grafic preferat, reglați-l pentru nevoile dvs., lipiți-l cu instrumente de învățare automată și creați un instrument de modelare 3D asistat de AI pentru nevoile imprimării 3D. În loc de ore, în prezent aveți nevoie de zile sau luni pentru a îndeplini o astfel de sarcină. Chiar dacă găsiți biblioteci care implementează funcționalități similare, trebuie făcută o cantitate enormă de muncă înainte de a urma principiul „fără limite” și de a oferi un mediu cu adevărat flexibil, astfel încât utilizatorii dvs. să poată regla fin modul în care este construit modelul. Drept urmare, în loc să îmbunătățească componentele existente sau să inventeze noi modalități de manipulare a datelor, dezvoltatorii reimplementează soluții cunoscute de la zero în fiecare nouă aplicație.
Luna, limba
liniile directoare pentru limbile specifice domeniului care urmează primul principiu sunt clare. Pentru a oferi conexiunea imediată între oameni și crearea lor, limbajele specifice domeniului trebuie să combine vizualizarea bogată a datelor și manipularea intuitivă a datelor într-o singură experiență lină. Cu toate acestea, nu există nicio regulă generală cum să o faceți corect. Depinde foarte mult de domeniul particular și de preferințele utilizatorului, ceea ce face ca a doua paradigmă, capacitatea de personalizare a componentelor, să fie și mai importantă.
cu toate acestea, urmarea celui de-al doilea principiu este mai dificilă. Cum putem proiecta un limbaj și să fim siguri că nu limitează expresivitatea oamenilor? Cum putem permite utilizatorilor să creeze atât componente reutilizabile personalizate, cât și să le modifice profund pe cele existente, dar să păstreze interfața simplă și să nu le solicite să fie programatori? Ideea este de a permite utilizatorului să schimbe treptat perspectiva. În loc să recurgem la un limbaj de programare subiacent, putem permite să ne scufundăm literalmente în fiecare componentă și să folosim același limbaj (sau foarte similar) pentru a descrie modul în care subcomponentele comunică. Scufundarea în continuare în componente imbricate permite utilizatorilor să treacă treptat de la niveluri ridicate la niveluri scăzute de abstractizare la cerere.
exact asta face Luna. Acesta a fost construit pe trei concepte principale:
- vizualizarea datelor și mediu de manipulare
din cea mai înaltă perspectivă, Luna vă permite să vizualizați și să manipuleze datele folosind componente WYSIWYG interactive si extensibile. Mai mult, Luna oferă o modalitate de a defini cu ușurință componente noi, de a le modifica pe cele existente și de a le împărtăși comunității. - grafic flux de date
puteți mări literalmente pentru a vedea modul în care componentele de nivel înalt sunt conectate împreună formând un grafic flux de date. Puteți să le reconectați sau să inserați componente noi pentru a redefini modul în care funcționează graficul. Luna oferă componente care se răspândesc pe toate nivelurile de abstractizare, de la mare la mic. De la pictura o pânză peste funcții statistice la operatorii de biți - imbricate grafice de flux de date și reprezentare Cod
fiecare componentă în Luna este construit din alte componente, fără excepție. Puteți oricând să vă scufundați până la nivelul dorit de abstractizare și să îl reglați fin la nevoile dvs. De asemenea, puteți restrânge mai multe componente conectate într-una nouă, mai puternică și o puteți partaja cu alții. Mai mult, Luna oferă utilizatorilor săi o capacitate foarte unică de a comuta între reprezentări — de la graficul fluxului de date la cod și invers. Aceasta implică un adevăr foarte important — graficul este la fel de puternic ca și Codul.
Luna a fost conceput ca un mediu unificat pentru construirea și găzduirea de limbi specifice domeniului bogat vizual. Estompează granițele dintre domenii, permițând instrumentelor din diferite domenii să comunice și să coexiste fără probleme.