Jazyk konstrukční principy
dobře navržený domény-konkrétní jazyk, nebo jazyk obecně, dává lidem možnost jak vyjádřit své myšlenky v rychlé a stručné způsobem, stejně jako pochopit zpětnou vazbu, odpověď snadno. Je obzvláště důležité pro výzkum, protože přímo ovlivňuje, jak rychle můžete iterovat-testovat nové nápady a porozumět průběžným výsledkům. Rychle iterací, aby bylo možné otestovat širší škálu parametrů včetně těch, které by měl fungovat na první pohled, což vám umožní mnohem lépe pochopit doménu, kterou vyšetřuje. Návrh jazyka tedy přímo ovlivňuje nejen celkový čas potřebný k vyřešení problému nelineárním způsobem, ale často je klíčem k nalezení řešení vůbec.
vyvstává důležitá otázka-co je dobrý jazyk? Existují nějaké pokyny, které by měl každý jazyk specifický pro doménu dodržovat? Věříme, že existují dva základní principy:
- Lidé potřebují bezprostřední vztah k tomu, co oni dělají,
Tento princip byl poprvé veřejně představen Brett Victor, interakce člověk-počítač vizionář, během jeho řeči Vynalézat z Principu. Jakékoli porušení tohoto principu odcizuje uživatele od skutečných problémů, které se snaží vyřešit, což následně snižuje porozumění a zvyšuje počet chyb. - lidé nemohou být omezeni nástrojem, který používají
Lidé mají tendenci odmítat jakýkoli nástroj, který zjevně omezuje jejich expresivitu. To je přesný důvod, proč tolik řešení WYSIWYG, jako jsou tvůrci webových stránek, tvůrci her nebo vizuální programovací jazyky, nikdy nedoženou. Jakýkoli DSL složitější než textový editor WYSIWYG může tento princip snadno porušit tím, že svým uživatelům poskytne příliš omezenou sadu předdefinovaných komponent na vysoké úrovni. I když lze tyto komponenty rozšířit psaním kódu, potřeba uchýlit se k nějakému základnímu programovacímu jazyku kazí design a činí jej nepoužitelným pro méně technické publikum.
porušení principu
porušení kteréhokoli z těchto principů vždy vede k suboptimálnímu řešení. Podívejme se znovu na grafický design. Je používání Photoshopu vždy lepší než psaní kódu HTML,Sass a JavaScript? Pravděpodobně. Tato řešení porušují první a druhý princip. Photoshop poskytuje digitální plátno WYSIWYG s omezenou sadou předdefinovaných, těžko rozšiřitelných nástrojů. HTML, Sass a JavaScript, na druhé straně, poskytují textové rozhraní, a tak odcizit uživateli z reálných míst, ale není nastaveno pevné omezení na expresivitu. Zvažme dva případy použití:
- design webových stránek. Na panelu nabídek je pět rovnoměrně uspořádaných položek. Pokud chcete přidat novou položku a změnit paletu barev webu, stačí upravit jeden řádek v HTML a barevnou proměnnou v Sass. Bez ohledu na to, jak složitý je web, každý prvek se automaticky aktualizuje. Totéž ve Photoshopu vyžaduje několik řádů více času-vytvořte novou položku nabídky, pomocí nástroje zarovnání uspořádejte prvky, ručně změňte barvy a pravděpodobně znovu aplikujte některé transformace a filtry ve složitějších oblastech webových stránek.
- umělecký obraz. Použití HTML, SVG a Sass v textovém editoru k vyjádření umělecké vize by bylo stěží možné. Čím je proces kreativnější a objevitelnější, tím důležitější je sada nástrojů WYSIWYG a smyčka okamžité zpětné vazby.
bylo by možné spojit oba přístupy? Není to jen možné, už existují řešení směřující správným směrem. Přemýšlejte o náčrtu, který se stal dokonalým návrhem nástrojů pro Mac OS. Proč to tolik lidí dává přednost Photoshopu? Odpověď je překvapivě jednoduchá-Sketch omezuje svou uživatelskou expresivitu méně než Photoshop. Umožňuje vytvářet opakovaně použitelné konstrukční prvky a poté hromadně aktualizovat jejich parametry, stejně jako Sass, ale v interaktivním prostředí WYSIWYG. Existuje mnoho dalších způsobů, jak dále zlepšit zkušenosti designéra. Podívejte se na další přednášku od Bretta Victora, kreslení dynamických vizualizací, pro další inspiraci.
prokletí DSL
pokud známe základní principy dokonalého specifického jazyka domény, proč tam ještě nejsou dostupné nástroje specifické pro doménu? Proč nežijeme v neomezeném světě WYSIWYG?
zatímco jazyky specifické pro doménu poskytují jedinečný způsob manipulace a porozumění datům, také tiše propašují zkažené vzory návrhu softwaru. Existence mnoha malých DSL, které spolu nemohou mluvit, vede z dlouhodobého hlediska k nefunkčnímu, roztříštěnému softwarovému světu.
v reálném světě existuje neustálá spolupráce mezi doménami. Manipulace s obrázky se často používá pro potřeby strojového učení a bioinformatiky, které se zase stále více stávají důležitým nástrojem pro architekturu a design vozidel. Rychlý vývoj IoT má za následek menší a autonomnější zařízení, která otevírají nový svět pro včasnou detekci nemocí, systémy monitorování zdraví nebo inteligentní města.
ve světě softwaru však téměř neexistuje žádná spolupráce. Vývojáři softwaru píší stejný kód znovu a znovu, což vede k vysokým nákladům na vývoj a stagnaci inovací. Nemůžete si jen tak vzít tvar editor z vašeho oblíbeného grafického software, doladit ho pro své potřeby, lepidlo s strojového učení nástroje a vytvořit AI-podporované 3D modelovací nástroj pro potřeby 3D tisku. Místo hodin, v současné době potřebujete dny nebo měsíce k provedení takového úkolu. I když najdete knihovny, které implementují podobné funkce, je třeba udělat obrovské množství práce, než se bude řídit zásadou „bez omezení“ a poskytne skutečně flexibilní prostředí, takže vaši uživatelé mohou doladit, jak je model postaven. Výsledkem je, že namísto vylepšení stávajících komponent nebo vymýšlení nových způsobů manipulace s daty vývojáři znovu implementují známá řešení od nuly v každé nové aplikaci.
Luna, jazyk
pokyny pro jazyky specifické pro doménu, které se řídí prvním principem, jsou jasné. S cílem poskytovat bezprostřední spojení mezi lidmi a jejich tvorba, domény specifické jazyky, je třeba kombinovat bohatou vizualizaci dat a intuitivní manipulace s daty v jediném, hladký zážitek. Neexistuje však žádné pravidlo, jak to udělat správně. Silně závisí na konkrétní doméně a preferencích uživatele, což činí druhé paradigma, schopnost přizpůsobit komponenty, ještě důležitější.
následovat druhý princip je však složitější. Jak můžeme navrhnout jazyk a být si jisti, že neomezuje expresivitu lidí? Jak můžeme umožnit uživatelům vytvářet vlastní opakovaně použitelné komponenty a hluboce upravovat stávající, ale udržovat rozhraní jednoduché a nevyžadovat, aby byli programátory? Cílem je umožnit uživateli postupně měnit perspektivu. Místo se uchylovat k základní programovací jazyk, můžeme umožní doslova se ponořit do každé složky a použít stejný (nebo velmi podobný) jazyk popsat, jak dílčí komponenty komunikovat. Potápění dále do vnořených komponent umožňuje uživatelům postupně postupovat z vysoké na nízkou úroveň abstrakce na vyžádání.
to je přesně to, co Luna dělá. Byl postaven na tři hlavní pojmy:
- Data vizualizace a manipulace prostředí
Z nejvyšší perspektivy, Luna vám umožňuje zobrazit a manipulovat data pomocí interaktivních a rozšiřitelný WYSIWYG komponent. Luna navíc poskytuje způsob, jak snadno definovat nové komponenty, upravit stávající a sdílet je s komunitou. - graf toku dat
můžete doslova oddálit, abyste viděli, jak jsou komponenty na vysoké úrovni propojeny a vytvářejí graf toku dat. Můžete je znovu připojit nebo vložit nové komponenty a předefinovat, jak graf funguje. Luna dodává komponenty, které se rozprostírají na všech úrovních abstrakce, od vysoké po nízkou. Od malování plátna přes statistické funkce až po bitové operátory - vnořené grafy datových toků a reprezentace kódu
každá komponenta v Luna je bez výjimky postavena z jiných komponent. Vždy se můžete ponořit až na požadovanou úroveň abstrakce a doladit ji podle svých potřeb. Můžete také sbalit několik připojených komponent do nového, výkonnějšího a sdílet je s ostatními. Navíc Luna poskytuje svým uživatelům velmi jedinečnou schopnost přepínat mezi reprezentacemi-od grafu toku dat po kód a naopak. Znamená to velmi důležitou pravdu — graf je stejně silný jako kód.
Luna byla navržena jako jednotné prostředí pro vytváření a hostování vizuálně bohatých jazyků specifických pro doménu. Stírá hranice mezi doménami, což umožňuje nástrojům z různých oblastí bezproblémovou komunikaci a koexistenci.