zasady projektowania języka
dobrze zaprojektowany język specyficzny dla domeny, lub ogólnie język, daje ludziom możliwość zarówno szybkiego i zwięzłego wyrażania swoich myśli, jak i łatwego zrozumienia reakcji zwrotnej. Badania są szczególnie ważne, ponieważ bezpośrednio wpływają na szybkość iteracji-testowania nowych pomysłów i zrozumienia wyników pośrednich. Szybkie iteracje umożliwiają testowanie szerszego zakresu parametrów, w tym tych, które nie powinny działać na pierwszy rzut oka, co pozwala znacznie lepiej zrozumieć badaną dziedzinę. Tak więc konstrukcja języka bezpośrednio wpływa nie tylko na całkowity czas potrzebny do rozwiązania problemu w sposób nieliniowy, ale często jest kluczem do znalezienia rozwiązania w ogóle.
pojawia się ważne pytanie — jaki jest dobry język? Czy są jakieś wytyczne, których powinien przestrzegać każdy język specyficzny dla danej domeny? Wierzymy, że istnieją dwie podstawowe zasady:
- ludzie potrzebują natychmiastowego połączenia z tym, co robią
zasada ta została po raz pierwszy publicznie wprowadzona przez Bretta Victora, wizjonera interakcji człowiek-komputer, podczas jego wykładu Wymyślającego Zasady. Każde naruszenie tej zasady wyobcuje użytkownika od rzeczywistych problemów, które próbuje rozwiązać, co w konsekwencji zmniejsza zrozumienie i zwiększa liczbę błędów. - ludzie nie mogą być ograniczeni przez narzędzie, którego używają
ludzie mają tendencję do odrzucania każdego narzędzia, które oczywiście ogranicza ich ekspresję. To jest dokładny powód, dla którego tak wiele rozwiązań WYSIWYG, takich jak twórcy stron internetowych, twórcy gier lub wizualne języki programowania, nigdy nie nadrabia zaległości. Każdy DSL bardziej złożony niż edytor tekstu WYSIWYG może łatwo naruszyć tę zasadę, dostarczając swoim użytkownikom zbyt ograniczony zestaw predefiniowanych komponentów wysokiego poziomu. Nawet jeśli te komponenty można rozszerzyć poprzez pisanie kodu, potrzeba uciekania się do jakiegoś podstawowego języka programowania psuje projekt i czyni go bezużytecznym dla mniej technicznej publiczności.
naruszenie zasady
naruszenie którejkolwiek z tych zasad zawsze prowadzi do nieoptymalnego rozwiązania. Rozważmy jeszcze raz projekt graficzny. Czy używanie Photoshopa jest zawsze lepsze niż pisanie kodu HTML, Sass i JavaScript? Prawdopodobnie. Rozwiązania te naruszają odpowiednio pierwszą i drugą zasadę. Photoshop zapewnia WYSIWYG Digital canvas z ograniczonym zestawem predefiniowanych, trudno rozszerzalnych narzędzi. Z drugiej strony HTML, Sass i JavaScript zapewniają interfejs tekstowy, a tym samym alienują użytkownika od jego prawdziwego stworzenia, ale nie ustanawiają ścisłego ograniczenia ekspresji. Rozważmy dwa przypadki użycia:
- projekt strony internetowej. Na pasku menu znajduje się pięć, równomiernie ułożonych pozycji. Jeśli chcesz dodać nowy element i zmienić paletę kolorów strony, wystarczy zmodyfikować pojedynczą linię w HTML i zmienną koloru w Sass. Bez względu na to, jak skomplikowana jest strona internetowa, każdy element będzie aktualizowany automatycznie. To samo w Photoshopie wymaga więcej czasu o kilka rzędów wielkości-utwórz nowy element menu, użyj narzędzia wyrównania do układania elementów, ręcznie Zmień kolory i prawdopodobnie ponownie zastosuj niektóre przekształcenia i filtry w bardziej złożonych obszarach witryny.
- malarstwo artystyczne. Użycie HTML, SVG i Sass w edytorze tekstu do wyrażenia artystycznej wizji byłoby niemożliwe. Im bardziej kreatywny i odkrywalny jest proces, tym ważniejszy staje się zestaw narzędzi WYSIWYG i natychmiastowa pętla sprzężenia zwrotnego.
czy można by połączyć oba podejścia? Jest to nie tylko możliwe, istnieją już rozwiązania zmierzające we właściwym kierunku. Pomyśl o szkicu, który stał się najlepszym zestawem narzędzi do projektowania dla systemu Mac OS. Dlaczego tak wiele osób woli to od Photoshopa? Odpowiedź jest zaskakująco prosta-Sketch ogranicza ekspresję użytkownika mniej niż Photoshop. Pozwala tworzyć elementy projektu wielokrotnego użytku, a następnie masowo aktualizować ich parametry, podobnie jak Sass, ale w interaktywnym środowisku WYSIWYG. Istnieje wiele innych sposobów, aby jeszcze bardziej poprawić wrażenia projektanta. Obejrzyj kolejną prelekcję Bretta Victora, rysującego dynamiczne wizualizacje, aby uzyskać dalsze inspiracje.
Klątwa DSLs
jeśli znamy bardzo podstawowe zasady idealnego języka specyficznego dla domeny, dlaczego dostępne narzędzia specyficzne dla domeny jeszcze nie istnieją? Dlaczego nie żyjemy w nieograniczonym świecie WYSIWYG?
podczas gdy języki specyficzne dla domeny zapewniają niezrównany sposób manipulowania i rozumienia danych, po cichu przemycają zepsute wzorce projektowe oprogramowania. Istnienie wielu, małych DSL, które nie mogą ze sobą rozmawiać, prowadzi w dłuższej perspektywie do dysfunkcyjnego, rozdrobnionego Świata oprogramowania.
w realnym świecie istnieje stała współpraca między domenami. Manipulacja obrazem jest często wykorzystywana na potrzeby uczenia maszynowego i bioinformatyki, które z kolei stają się coraz ważniejszym narzędziem w architekturze i projektowaniu pojazdów. Szybki rozwój IoT skutkuje mniejszymi i bardziej autonomicznymi urządzeniami, co otwiera nowy świat dla wczesnego wykrywania chorób, systemów monitorowania zdrowia lub inteligentnych miast.
jednak w świecie oprogramowania nie ma prawie żadnej współpracy. Programiści piszą ten sam kod w kółko, co prowadzi do wysokich kosztów rozwoju i stagnacji innowacji. Nie możesz po prostu wziąć edytora kształtów z ulubionego oprogramowania graficznego, dostosować go do swoich potrzeb, przykleić go za pomocą narzędzi uczenia maszynowego i stworzyć wspomagane Sztuczną Inteligencją narzędzie do modelowania 3D na potrzeby drukowania 3D. Zamiast godzin, obecnie potrzebujesz dni lub miesięcy, aby wykonać takie zadanie. Nawet jeśli znajdziesz biblioteki, które implementują podobną funkcjonalność, musisz wykonać ogromną ilość pracy, zanim będzie ona zgodna z zasadą „no limits” i zapewni prawdziwie Elastyczne środowisko, aby użytkownicy mogli Dopracować sposób budowy modelu. W rezultacie, zamiast ulepszać istniejące komponenty lub wymyślać nowe sposoby manipulowania danymi, Programiści ponownie wdrażają znane rozwiązania od podstaw w każdej nowej aplikacji.
Luna, język
wytyczne dla języków specyficznych dla domeny są jasne. Aby zapewnić natychmiastowe połączenie między ludźmi i ich tworzeniem, języki specyficzne dla domeny muszą łączyć bogatą wizualizację danych i intuicyjną manipulację danymi w jednym, płynnym doświadczeniu. Nie ma jednak reguły, jak to zrobić poprawnie. Zdecydowanie zależy to od konkretnej domeny i preferencji użytkownika, co sprawia, że drugi paradygmat, możliwość dostosowywania komponentów, jest jeszcze ważniejszy.
przestrzeganie drugiej zasady jest jednak trudniejsze. Jak zaprojektować język i mieć pewność, że nie ogranicza on ekspresji ludzi? Jak możemy pozwolić użytkownikom zarówno tworzyć niestandardowe komponenty wielokrotnego użytku, jak i głęboko modyfikować istniejące, a jednocześnie utrzymywać prosty interfejs i nie wymagać od nich bycia programistami? Chodzi o to, aby użytkownik mógł stopniowo zmieniać perspektywę. Zamiast uciekać się do bazowego języka programowania, możemy pozwolić dosłownie zanurzyć się w każdym komponencie i użyć tego samego (lub bardzo podobnego) języka do opisania, w jaki sposób komponenty się komunikują. Nurkowanie dalej w zagnieżdżonych komponentach pozwala użytkownikom stopniowo przejść od wysokiego do niskiego poziomu abstrakcji na żądanie.
To właśnie robi Luna. Został zbudowany na trzech głównych koncepcjach:
- środowisko wizualizacji i manipulacji danymi
z najwyższej perspektywy Luna pozwala na wizualizację i manipulowanie danymi za pomocą interaktywnych i rozszerzalnych komponentów WYSIWYG. Ponadto Luna umożliwia łatwe definiowanie nowych komponentów, modyfikowanie istniejących i dzielenie się nimi ze społecznością. - wykres przepływu danych
możesz dosłownie pomniejszyć, aby zobaczyć, jak komponenty wysokiego poziomu są połączone ze sobą, tworząc wykres przepływu danych. Możesz je przepinać lub wstawiać nowe komponenty, aby na nowo zdefiniować działanie wykresu. Luna dostarcza komponenty, które rozprzestrzeniają się na wszystkich poziomach abstrakcji, od wysokiego do niskiego. Od malowania kanwy przez funkcje statystyczne po operatory bitowe - zagnieżdżone wykresy przepływu danych i reprezentacja kodu
każdy komponent w Luna jest zbudowany z innych komponentów, bez wyjątku. Zawsze możesz nurkować aż do pożądanego poziomu abstrakcji i dostosować go do swoich potrzeb. Możesz również zwinąć kilka połączonych komponentów w nowy, bardziej wydajny i udostępnić go innym. Co więcej, Luna zapewnia swoim użytkownikom wyjątkową możliwość przełączania się między reprezentacjami-od wykresu przepływu danych do kodu i odwrotnie. Implikuje to bardzo ważną prawdę-wykres jest tak potężny jak kod.
Luna została zaprojektowana jako ujednolicone środowisko do budowania i hostowania bogatych wizualnie języków specyficznych dla domen. Zaciera granice między domenami, umożliwiając narzędziom z różnych dziedzin bezproblemową komunikację i współistnienie.