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


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 различных парадигм. Это может быть просто язык математических выражений.

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

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

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


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

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


2
+1 за «Тогда ты преуспеешь, в том, что это работает, но все еще отстой»
— Иван

1
@Ivan: Спасибо :) Это, вероятно, еще одна хорошая часть опыта обучения: самоанализ, смирение и настойчивость!
— Хайлем

1
Я согласен с Хайлем. Количество, которое вы узнаете о программировании в целом, о том, как работают языки, о различных методах реализации, будет того стоить. Да, вы, вероятно, будете единственным, кто когда-либо увидит это, но это станет вашим маленьким любимым проектом, над которым вы работаете, чтобы улучшить себя.
— RJay75

3

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

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


2

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

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

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


1

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

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

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


2
Я не знаю ... один большой труд любви превосходит двадцать одноразовых приложений, которые могут стоить вам по сто баксов за каждое.
— ChaosPandion

Реализация специфичных для предметной области языков может существенно ускорить разработку практического проекта. Так что это может быть весьма полезным в финансовом отношении, а также эстетически приятно.
— SK-logic

1
Некоторые люди создают вещи, потому что им нравится создавать вещи ... не потому, что упомянутый акт творения принесет им немного денег.
— Джетти

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

@ Райан - прости, что пропустил эту часть.
— Джетти

-2

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

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

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

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

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

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

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

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


-1 он четко сказал, что это будет для личного обучения.
— GrandmasterB

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

2
Да, вы правы - ни один программист-новичок никогда не напишет свой первый "Hello, World!" - в конце концов, было бы намного лучше просто скачать существующий. И что такое « рамки » в этом контексте?
— SK-logic

5
@Rudy, реализация компилятора или интерпретатора - это такой тривиальный и базовый навык, который очень близок к «Hello, World!». Вот почему это обязательно в любом приличном курсе CS. И, несмотря на тривиальность, эта задача учит ряд очень полезных навыков, применимых на практике практически в любой области. Нет необходимости упоминать, что реализация DSL чрезвычайно важна (учтите, что упомянутый вами Hibernate - это DSL, и в нем есть несколько встроенных интерпретаторов и компиляторов, некоторые из которых довольно плохо реализованы).
— SK-logic

3
@ SK-logic - Вы не помогаете моей самооценке здесь ... :)
— ChaosPandion
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.