Tworzenie nowego języka skryptowego do nauki? [Zamknięte]


13

Czy warto tworzyć język skryptowy do własnych doświadczeń edukacyjnych?

Pytam dlatego, że dostępnych jest już tak wiele języków programowania, wiem, że mój nigdy nie będzie miał innego rzeczywistego zastosowania niż zapewnienie dobrej nauki. Widzę jednak wady polegające na tym, że próbuję uczynić język skryptowy doświadczeniem uczenia się: zajmie to dużo czasu i wysiłku, w których mógłbym robić coś bardziej „produktywnego”.

Czy tworzenie języka programowania (w tym pisanie szkiców zgodnie z jego przeznaczeniem, składni, filozofii, tłumacza itp.) Byłoby warte czasu, wysiłku i nauki? Czy są też inne projekty, z których mógłbym skorzystać więcej?


3
Inną opcją jest wdrożenie istniejącego języka. Przez ponad rok powoli rozwijałem dialekt ECMAScript o nazwie Maczeta i sporo się nauczyłem.
ChaosPandion,

Interesujące, nie myślałem o tym.
Ivan

2
1) Naucz się tego ... www1.idc.ac.il/tecs 2) i tego ... mitpress.mit.edu/sicp
Joe Internet

możesz również rozważyć wniesienie wkładu do istniejących projektów v8, SpiderMonkey lub Python
treecoder

3
IMHO, najlepszym sposobem na naukę nowych języków programowania jest wdrożenie dla nich kompilatorów (lub przynajmniej znaczących podzbiorów języków oryginalnych). Tak, jest to rzeczywiście przydatne doświadczenie edukacyjne.
SK-logic

Odpowiedzi:


15

Zbuduj swoje umiejętności i swoje portfolio

Moim zdaniem byłoby to bardzo dobre doświadczenie edukacyjne, ponieważ:

  • zmusić cię do spojrzenia pod maską ,
  • poprowadzi Cię, aby dowiedzieć się, jak rzeczy są wykonywane wewnętrznie ,
  • zachęcać do przeglądania i porównywania innych wdrożeń ,
  • utrzymuj swoje umiejętności algorytmiczne na bieżąco ,
  • sprawi, że kod (i miejmy nadzieję dokument ) dużo, co nie jest złe,
  • dać ci znaczący projekt i bazę kodów, którą możesz udostępnić online wszystkim, aby zobaczyć, na przykład:
    • osobista przyjemność i satysfakcja ,
    • pokazanie swoich umiejętności potencjalnym pracodawcom,
    • komunikować się i wymieniać z rówieśnikami zainteresowanymi tym samym obszarem,
    • potencjalnie pozwól mu urosnąć w coś więcej ...

Dlatego uważam to za produkt, użyteczny i ogólnie „warty tego”.

Zaczynaj

Teraz możesz korzystać z różnych metod, w zależności od tego, ile czasu planujesz poświęcić na to ...:

  • Jeśli masz ograniczone ramy czasowe, powiedziałbym, że nurkujesz i koduje to.
  • Jeśli masz szersze ramy czasowe, możesz rzeczywiście przejść długą drogę i napisać specyfikacje, samouczki, instrukcję obsługi itp.

Zacznij od małego

Wolałbym raczej zacząć od małej . Nikt nigdy nie, o którym wiem, napisał wprost tak niesamowitego języka. Potkniesz się i upadniesz, i upadniesz, i upadniesz i upadniesz . Potem odniesiesz sukces, ponieważ działa, ale nadal jest do bani, więc zaczynasz od nowa. Dodajesz nowe funkcje i wreszcie robi się fajnie, ale nagle zdajesz sobie sprawę, że istnieje podstawowa koncepcja, którą spieprzyłeś na początku. Więc zaczynasz od nowa jeszcze raz ...

Wydaje mi się to bardzo pouczające.

Śmiało (i udostępnij nam link).

Mały, jak w „krótkim”

Ale znowu polecam zacząć od małego . Nie bój się, jeśli ludzie powiedzą, że zajmie to dużo kodu i czasu. Niekoniecznie, jeśli nie dążysz do skomplikowanego języka. Alan Kay i inni inżynierowie Xerox PARC rzekomo opracowali wczesną wersję Smalltalk, która mieści się na jednym arkuszu papieru , jako cel zwięzłości (przeczytaj Xerox PARC: Dealerzy Błyskawicy, aby uzyskać szczegółowe informacje na temat historii PARC ). Wydaje się być dobrym, edukacyjnym i wystarczająco ograniczonym podejściem (o ile nie obniża czytelności).

Mały, jak w „ograniczonym”

Nie musisz od razu obsługiwać zaawansowanego systemu typowania, funkcji wyższego rzędu i kombinacji 42 różnych paradygmatów. Może to być po prostu matematyczny język wyrażeń.

Ponownie wykorzystaj wiedzę innych

Możesz także rzucić okiem na narzędzia używane do pisania języków od zera. Możesz ponownie zaimplementować wszystko sam, ale być może warto też przyjrzeć się na przykład istniejącym leksykonom i generatorom parserów.

I oczywiście możesz przeczytać więcej na temat budowy kompilatora .


Teraz, jeśli zmienimy twoje pytanie na „czy byłoby to NAJBARDZIEJ produktywne wykorzystanie twojego czasu?” staje się zupełnie inną kwestią :)

Istnieje wiele innych projektów edukacyjnych, z którymi można by się zmierzyć, które mogłyby wyszkolić i zaprezentować Twoje umiejętności równie dobrze, jeśli nie lepiej. To zależy od tego, do czego chcesz dążyć.


2
+1 za „Wtedy odniesiesz sukces, ponieważ działa, ale nadal jest do bani”
Ivan

1
@Ivan: Dzięki :) To prawdopodobnie kolejna dobra część nauki: introspekcja, pokora i wytrwałość!
haylem

1
Zgadzam się z Haylemem. Nauczysz się o programowaniu w ogóle, o tym, jak działają języki, o różnych metodach wdrażania rzeczy. Tak, prawdopodobnie będziesz jedynym, który to zobaczy, ale stanie się to Twoim małym projektem dla zwierząt, nad którym pracujesz, aby się poprawić.
RJay75,

3

Mówię śmiało.

Implementacja języka programowania obejmuje szeroki zakres tematów, a dowiesz się wiele o tym, jak wszystko działa pod maską. Prawdopodobnie przeżyjesz kilkanaście nieudanych prób, ale doświadczenie edukacyjne jest nieocenione.


2

Zaprojektowanie i wdrożenie (zabawnego, ale kompletnego) języka programowania było w rzeczywistości jednym z (wymaganych?) Ćwiczeń w jednej z moich klas CS wyższej klasy (albo klasy kompilatora, albo ankiety w języku programowania, zapomniałem, które ...)

Tak przynajmniej uważał jeden profesor CS.

Skończysz ze znacznie większym uznaniem dla wszystkich tych „dziwactw”, które mają inne języki.


1

Zajmie to trochę czasu. Czy planujesz go utrzymać?

Czy tworzenie języka programowania (w tym pisanie szkiców zgodnie z jego przeznaczeniem, składni, filozofii, tłumacza itp.) Byłoby warte czasu, wysiłku i nauki? Czy są też inne projekty, z których mógłbym skorzystać więcej?

Zakładam, że twój status finansowy nie jest nieskończony, więc powiedziałbym, że nie jest to warte czasu. Możesz spędzać czas na innych przydatnych projektach, które mogą przynieść ci pieniądze. Pamiętaj, że nie może to być odpowiedź, której szukasz, ale z logicznego punktu widzenia powiedziałbym, że Twój język programowania może nie być w tej chwili właściwym projektem. Rozważałbym to, gdybyś był emerytowanym informatykiem i odczuwał potrzebę wniesienia wkładu do branży. Wygląda na to, że masz wielką pasję do programowania i to świetnie. Ale budujesz zupełnie nowy język skryptowy? To będzie wyjątkowo długi projekt. W tym czasie mogłeś zbudować wiele aplikacji, które możesz wrzucić do swojego portfolio. Myślę, że pytanie brzmi:


2
Nie wiem ... jedna wielka praca z miłości przebija dwadzieścia aplikacji, które mogą sprawić, że każda z was będzie kosztować sto dolarów.
ChaosPandion

Wdrożenie języków specyficznych dla domeny może w rzeczywistości znacznie przyspieszyć opracowanie praktycznego projektu. Może to być bardzo satysfakcjonujące finansowo i estetycznie.
SK-logic

1
Niektórzy ludzie tworzą rzeczy, ponieważ lubią je tworzyć ... nie dlatego, że ten akt stworzenia przyniesie im trochę gotówki.
Jetti,

@Jetti. Tak, wiem. Dlatego powiedziałem, że ta odpowiedź może nie być tą, której szukasz, i mogę powiedzieć, że masz pasję do programowania. Doceniam twój wkład, ponieważ czekałem, aż ktoś powie coś takiego, co powiedziałeś o tej odpowiedzi.
Ryan

@ Ryan - przepraszam, że tęskniłem za tą częścią.
Jetti

-2

Moja rada jest dla ciebie

Nie wymyślaj koła ponownie

Inspiracja dla tej idiomatycznej metafory polega na tym, że koło jest archetypem ludzkiej pomysłowości, zarówno ze względu na dodatkową moc i elastyczność, jaką zapewnia użytkownikom, jak i ze starożytnych początków, które pozwalają mu leżeć u podstaw wielu, jeśli nie wszystkich , nowoczesnej technologii. Ponieważ został już wynaleziony i nie ma żadnych wad operacyjnych, próba ponownego wynalezienia go byłaby bezcelowa i nie przyniosłaby żadnej wartości obiektowi, a także stratą czasu, odwracając zasoby badacza od prawdopodobnie bardziej wartościowych celów które jego lub jej umiejętności mogłyby bardziej się rozwinąć.

Powinieneś zadać sobie pytanie:

  • Dlaczego musisz stworzyć skrypt? Czy istniejący skrypt nie jest wystarczająco dobry?
  • Czy będziesz go utrzymywał i publikował i masz pewność, że Twój skrypt będzie używany przez innych programistów? Jeśli twoja odpowiedź brzmi „nie”, nie rób tego.

Rozumiem, że chcesz mieć więcej doświadczenia w nauce i z tego powodu osobiście uważam, że tworzenie frameworka zapewni ci więcej doświadczenia w uczeniu się i będzie miało dodatkową zaletę, że Ty / Twój zespół / społeczność możecie go później wykorzystać, niż tworzenie skryptu.

I ten komiks xkcd jest nieco odpowiedni, wystarczy zmienić „standardy” na „język” również:

wprowadź opis zdjęcia tutaj


-1, wyraźnie powiedział, że będzie to osobiste doświadczenie edukacyjne.
GrandmasterB

Po prostu chcę być szczery, że tworzenie skryptu nie zapewni prawdziwego osobistego doświadczenia edukacyjnego i korzyści dla niego i społeczności. Dodałem również moją odpowiedź, że tworzenie ram faktycznie przyniesie korzyści jemu i społeczności. Nie mam nic przeciwko, aby uzyskać więcej głosów, jeśli uważasz, że to nieprawda.
Rudy,

2
Tak, masz rację - żaden programista pierwszego roku nigdy nie napisze swojego pierwszego „Cześć, świecie!” - w końcu znacznie lepiej byłoby pobrać już istniejący. A czym jest „ framework ” w tym kontekście?
SK-logic

5
@Rudy, implementacja kompilatora lub interpretera jest tak trywialną i podstawową umiejętnością, która jest bardzo zbliżona do „Hello, World!”. Dlatego jest obowiązkowy na każdym dobrym kursie CS. I pomimo tego, że jest trywialne, zadanie to uczy wielu bardzo przydatnych umiejętności, które można zastosować w praktyce w prawie każdym obszarze. Nie trzeba dodawać, że implementacja DSL jest niezwykle ważna (pamiętaj, że Hibernate, o którym wspomniałeś, to DSL, i jest w niej wiele wbudowanych interpreterów i kompilatorów, z których niektóre są dość słabo zaimplementowane).
SK-logic

3
@ SK-logic - Nie pomagasz mi tutaj
poczuć
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.