Создание нового языка сценариев для обучения? [закрыто]

13

Стоит ли создавать язык сценариев для моего личного опыта?

Причина, по которой я спрашиваю, состоит в том, что уже существует так много языков программирования, и я знаю, что у меня никогда не будет никакого реального использования, кроме как для хорошего обучения. Однако я вижу недостатки в том, что я просто пытаюсь сделать язык сценариев учебным процессом: мне потребуется много времени и усилий, чтобы я мог сделать что-то более «продуктивное».

Будет ли создание языка программирования (включая написание проектов его предназначения, синтаксиса, философии, интерпретатора и т. Д.) Стоить времени, усилий и опыта обучения? Или есть другие проекты, от которых я мог бы выиграть больше?

Иван
источник
3
Другой вариант - реализовать существующий язык. Я постепенно разрабатывал диалект ECMAScript под названием « Мачете» более года и выучил немало.
ChaosPandion
Интересно, я не думал об этом.
Иван
2
1) Узнайте это ... www1.idc.ac.il/tecs 2) и это ... mitpress.mit.edu/sicp
Joe Internet
Вы также можете рассмотреть возможность участия в существующих проектах v8, SpiderMonkey или Python
treecoder
3
ИМХО, лучший способ выучить новые языки программирования - это реализовать для них компиляторы (или, по крайней мере, для значительных подмножеств исходных языков). Так что да, это действительно полезный опыт обучения.
SK-logic

Ответы:

15

Создайте свои навыки и свой портфель

На мой взгляд, это был бы очень хороший опыт обучения, так как это:

  • заставить вас заглянуть под капот ,
  • направлять вас, чтобы узнать, как все происходит внутри ,
  • рекомендуем вам посмотреть и сравнить другие реализации ,
  • держать свои навыки алгоритмики в курсе ,
  • заставить вас кодировать (и, надеюсь, документировать ) много, что тоже неплохо,
  • дать вам значительный проект и кодовую базу, которую вы могли бы поделиться в Интернете для всеобщего обозрения, для:
    • личное удовольствие и удовлетворение ,
    • демонстрируя свои навыки потенциальным работодателям,
    • общаться и обмениваться со сверстниками, заинтересованными в той же области,
    • потенциально позволить ему перерасти во что-то большее ...

Так что я считаю это продуктивным, полезным и в целом «стоящим».

Начать

Теперь вы можете использовать разные подходы, в зависимости от того, сколько времени вы планируете потратить на это ...:

  • Если у вас есть ограниченный период времени, я бы сказал, погрузиться и закодировать вещь.
  • Если у вас более широкие временные рамки, тогда вы действительно можете пойти по многогранному пути и написать спецификации, учебные пособия, руководства и т. Д.

Начните с малого

Я бы порекомендовал вам начать с малого . Никто никогда, насколько я знаю, не писал прямо такой потрясающий язык. Вы спотыкаетесь и падаете, и терпите неудачу, и терпите неудачу и терпите неудачу . Тогда вы добьетесь успеха в том, что это работает, но все еще отстой, поэтому вы начинаете все сначала. И вы добавляете новые функции, и это наконец становится классным, но внезапно вы понимаете, что есть фундаментальная концепция, которую вы облажали в начале. Итак, вы начинаете все сначала ...

Кажется, очень познавательно для меня.

Идите дальше (и поделитесь ссылкой с нами).

Маленький, как в «коротком»

Но опять же, я бы порекомендовал вам начать с малого . Не бойтесь, если люди скажут, что это займет много кода и времени. Не обязательно, если вы не стремитесь к сложному языку. Алан Кей и другие инженеры Xerox PARC предположительно разработали раннюю версию Smalltalk, которая помещалась на одном листе бумаги , в качестве цели для краткости (см. Xerox PARC: Dealers of Lightning для подробностей об истории PARC ). Кажется хорошим, образовательным и достаточно ограниченным подходом (пока он не жертвует удобочитаемостью).

Маленький, как в «стесненных»

Вам не нужно сразу поддерживать продвинутую систему типов, функции высшего порядка и набор из 42 различных парадигм. Это может быть просто язык математических выражений.

Повторно использовать (и заглянуть) чужие знания

Вы также можете взглянуть на инструменты, которые используются для написания языков с нуля. Вы можете сами все заново реализовать, но, возможно, также стоит взглянуть, например, на существующие лексеры и генераторы парсеров.

И, очевидно, вы можете прочитать о конструкции компилятора в целом.


Теперь, если мы изменим ваш вопрос так, чтобы он был "НАИБОЛЕЕ продуктивным использованием вашего времени?" это становится совершенно другой проблемой :)

Есть множество других обучающих проектов, которые вы могли бы реализовать, и которые бы обучали и демонстрировали ваши навыки одинаково хорошо, если не лучше. Это зависит от того, к чему вы хотите стремиться.

haylem
источник
2
+1 за «Тогда ты преуспеешь, в том, что это работает, но все еще отстой»
Иван
1
@Ivan: Спасибо :) Это, вероятно, еще одна хорошая часть опыта обучения: самоанализ, смирение и настойчивость!
Хайлем
1
Я согласен с Хайлем. Количество, которое вы узнаете о программировании в целом, о том, как работают языки, о различных методах реализации, будет того стоить. Да, вы, вероятно, будете единственным, кто когда-либо увидит это, но это станет вашим маленьким любимым проектом, над которым вы работаете, чтобы улучшить себя.
RJay75
3

Я говорю, давай.

Реализация языка программирования охватывает широкий круг тем, и вы узнаете много нового о том, как все это работает. Вероятно, вы переживете полдюжины неудачных попыток, но опыт обучения неоценим.

tdammers
источник
2

Разработка и реализация (игрушечного, но законченного) языка программирования на самом деле было одним из (обязательных?) Упражнений в одном из моих классов CS старших классов (либо класс компилятора, либо обзор языка программирования, я забыл, какой ...)

Так, по крайней мере, один профессор CS так и думал.

В конечном итоге вы получите гораздо более высокую оценку всех тех «причуд», которые есть в других языках.

hotpaw2
источник
1

Это займет некоторое время, чтобы сделать. Планируете ли вы поддерживать его?

Будет ли создание языка программирования (включая написание проектов его предназначения, синтаксиса, философии, интерпретатора и т. Д.) Стоить времени, усилий и опыта обучения? Или есть другие проекты, от которых я мог бы выиграть больше?

Я предполагаю, что ваше финансовое положение не бесконечно, поэтому я бы сказал, что оно не стоит времени. Вы можете потратить время на другие полезные проекты, которые могут заработать вам деньги. Имейте в виду, что это может быть не тот ответ, который вы ищете, но с логической точки зрения я бы сказал, что ваш язык программирования может быть не правильным проектом в данный момент. Я бы подумал, если бы вы были отставным ученым-компьютерщиком и чувствовали необходимость внести свой вклад в развитие отрасли. Кажется, у тебя сильная страсть к программированию, и это здорово. Но создание нового языка сценариев? Это будет очень длинный проект. За это время вы могли бы создать много приложений, которые вы можете добавить в свое портфолио. Я думаю, что вопрос:

Райан
источник
2
Я не знаю ... один большой труд любви превосходит двадцать одноразовых приложений, которые могут стоить вам по сто баксов за каждое.
ChaosPandion
Реализация специфичных для предметной области языков может существенно ускорить разработку практического проекта. Так что это может быть весьма полезным в финансовом отношении, а также эстетически приятно.
SK-logic
1
Некоторые люди создают вещи, потому что им нравится создавать вещи ... не потому, что упомянутый акт творения принесет им немного денег.
Джетти
@Jetti. Да, я знаю. Вот почему я сказал, что этот ответ может быть не тот, который вы ищете, и я могу сказать, что вы увлекаетесь программированием. Я ценю ваш вклад, хотя, поскольку я ждал, что кто-то скажет что-то вроде того, что вы сказали об этом ответе.
Райан
@ Райан - прости, что пропустил эту часть.
Джетти
-2

Мой тебе совет

Не изобретай велосипед

Источником вдохновения для этой идиоматической метафоры является тот факт, что колесо является архетипом человеческой изобретательности, как благодаря дополнительной мощности и гибкости, которую оно предоставляет своим пользователям, так и благодаря древнему происхождению, которое позволяет ему лежать в основе многих, если не всех, , из современных технологий. Поскольку оно уже было изобретено и не имеет каких-либо эксплуатационных недостатков, попытка его переосмысления была бы бессмысленной и не добавляющей ценности объекту, и была бы пустой тратой времени, отвлекая ресурсы исследователя от, возможно, более достойных целей. которые его или ее навыки могут продвинуться более существенно.

Вы должны спросить себя:

  • Зачем вам нужно создавать сценарии? Разве существующий сценарий недостаточно хорош?
  • Будете ли вы поддерживать и публиковать его, и уверены, что ваш сценарий будет использоваться другими программистами? Если ваш ответ - нет, не делайте этого.

Я понимаю, что вы хотите получить больше опыта в обучении, и по этой причине лично я думаю, что создание инфраструктуры даст вам больше опыта в обучении и с преимуществом, что вы / ваша команда / сообщество сможете использовать его позже, чем при создании сценария.

И этот комикс xkcd немного уместен, просто измените «стандарты» на «язык»:

введите описание изображения здесь

Rudy
источник
-1 он четко сказал, что это будет для личного обучения.
GrandmasterB
Просто хочу быть откровенным, что создание сценария не принесет реального личного опыта и пользы для него самого и сообщества. Я также добавил свой ответ, что создание фреймворка принесет ему и сообществу больше пользы. Я не против получить больше голосов, если вы чувствуете, что это неправда.
Руди
2
Да, вы правы - ни один программист-новичок никогда не напишет свой первый "Hello, World!" - в конце концов, было бы намного лучше просто скачать существующий. И что такое « рамки » в этом контексте?
SK-logic
5
@Rudy, реализация компилятора или интерпретатора - это такой тривиальный и базовый навык, который очень близок к «Hello, World!». Вот почему это обязательно в любом приличном курсе CS. И, несмотря на тривиальность, эта задача учит ряд очень полезных навыков, применимых на практике практически в любой области. Нет необходимости упоминать, что реализация DSL чрезвычайно важна (учтите, что упомянутый вами Hibernate - это DSL, и в нем есть несколько встроенных интерпретаторов и компиляторов, некоторые из которых довольно плохо реализованы).
SK-logic
3
@ SK-logic - Вы не помогаете моей самооценке здесь ... :)
ChaosPandion