我对编程语言很感兴趣。哪些编程领域适合我?

5

我一直对编写和设计编程语言很感兴趣。当然,要找到一个雇主让你在工作中编写编程语言是非常困难的。所以我正在寻找“次优解”。

哪些编程领域能让我获得一些解决相关问题的经验?或者哪些雇主最可能将我所有微不足道的解释器视为相关经验?


6
世界真的需要另一种编程语言吗? - Madi D.
4
@Madi - 是的,世界需要更多的编程语言。除非你的观点是已经存在一种完美的编程语言(我强烈不同意这个观点)。 - Jason Baker
3
那么下一个问题是,你确定就是将创建完美编程语言的那个人吗? :) - Pekka
2
总有创新的空间,我认为我们应该鼓励这样的问题,即使成功的机会很小。 - willcodejavaforfood
1
@willcodejavaforfood: 说得好,但他已经得到了很有建设性的答案,我不担心我们的评论会让他完全沮丧,而Madi D.的问题是一个很好的选择职业道路的问题。 - Pekka
@Pekka是正确的。如果有什么不同意见,“你做不到”这样的回答和评论只会提供鼓励。此外,我似乎记得Guido van Rossum说过类似于“如果你让那些说它做不到的人使你失去信心,你可能也无法成功地创造一种编程语言”。 - Jason Baker
9个回答

7
如果你对语言设计兴趣浓厚,可以考虑攻读博士学位并将其作为研究方向。在学术界,你可以得到各种不赚钱的活动的支持。

2
但我不建议这样做。只有放弃许多其他自由,才能获得学术界的认知自由。(我曾经是一名数学教授。) - Eric Wilson
你能举个例子吗?还有哪些自由? - Daniel Rikowski
1
试试阅读文章《为什么我不是教授或英国大学的衰落和崩溃》,这是一篇深入揭露的文章,由一位于1997年辞职的教授撰写,介绍了自1989年以来英国大学学术氛围逐渐恶化的原因和情况(我在1989年辞职...很高兴我这样做了!)http://www.lambdassociates.org/blog/decline.htm - martinwguy
首先,你可以自由选择居住地。你可以在任何一个相对较大的城市找到程序员的工作,但是学术类工作通常需要全国性的求职。 - Eric Wilson

4

没有。该领域的大多数专业人员并不是为生计而设计语言,而是将现有编译器重新定位到新目标(通常是嵌入式目标),或者在遗留代码的源代码转换系统上工作,在此过程中进行一些语言扩展。

你真的应该问问自己是否想要这个,因为除非你极其幸运,否则这就是你进入这个行业后的现实前景。

请记住,目前大型公共工具链行业的盈利能力并不高,经过30年的编程语言创建,可能有100种语言正在大规模地使用和持续维护。

我知道这很令人沮丧,但我希望它能让你放弃浪漫、业余爱好者的观点,并开始研究这个领域的真实情况。

此外,自己完成小型爱好项目并不是先决条件。你需要展示出你可以在团队中开展大型项目的能力,而不仅仅是你可以自己创建一个小型解释器。如果你真的想追求这个方向,我建议:

  • 继续上学,获得计算机科学的学士(最好是硕士或博士)学位。
  • 加入一些开源团队,参与该领域的重要项目。gcc,以及Java世界、Tracemonkey(Mozilla)、Mono等。在真实世界的场景中获得可验证的经验非常重要。

我并不完全不同意你的观点,但并非每家公司都寻求大规模的贡献。实际上,许多早期创业公司更喜欢能够独立工作的人。话虽如此,我确实认同你的观点,即我可以花更多时间与其他人一起开展项目。 - Jason Baker
你是在说学位证明你能够与其他人合作吗?我不同意。你只是能够与其他学生合作,而不是真正的与其他人共事。 - Tor Valamo
1
我不同意。可能有成千上万种DSL。仅我们公司就有两个为特定任务量身定制的自制DSL,而我们是一家相当小的公司。 - Niki
@Marco - 我不同意。这与教育或经验无关,更多的是关于个性。有些人在大团队中工作效果更好;而另一些人则在小团队中表现更佳。如果我想在像谷歌这样的地方工作,我可能需要很多大团队经验。我认为能够在这样的环境中工作可能比技术造诣更重要。另一方面,如果我想为一个由两个人组成的初创公司工作,他们想知道的可能是我是否能够完成任务并适应新情况。 - Jason Baker
尼基:有多少人被雇用来维护那些DSL? - Marco van de Voort
显示剩余2条评论

3

我认为最好的方法是攻读专门关注语言设计、编译器等方面的高级学位。否则,如果你直接走进一家私人公司开始编写新的语言特性,那么会非常困难。

你也可以更加努力地独立或与小团队合作,制作出比仅仅是一个简单的解释器更为实用的东西。向潜在雇主展示你有能力创造出有用的东西。


2
实际上,视觉编程方面的工作相当多。虽然它不完全是我们所知的传统编程语言工作,但确实存在这样的需求。例如,许多高级数据分析工具都依赖于视觉编程工具(Pentaho)。您不需要费太多力气就可以找到视觉编程的好的实际应用。
要学习视觉编程语言,您需要在该领域的导师指导下进行高级学位研究。除了编程语言方面的内容,您还需要进行一些人机交互/界面方面的工作。

2
我已经作为嵌入式程序员工作了十年。在此之前,我写编译器(以及汇编器、链接器、调试器等)长达20年。
我的同事们开玩笑说我会把每个问题都转化为解析问题。他们是对的。在我的职业生涯中,我多次使用适用于语言设计的技术。
今天,我在业余时间玩弄编译器的东西:http://ellcc.org。这有助于我满足我的语言兴趣。

只是出于好奇,你如何将每个问题都转化为解析问题? - Jason Baker
1
在日常编程中,您可以解析许多不一定是完整语言的内容,例如数据文件、命令行、符号表、调试信息、通信协议等。编译器编写者的工具对于许多编程问题都非常有用。 - Richard Pennington

2

一个拥有丰富“领域”(即复杂行业)的雇主可以从“领域特定语言”中受益。

他们会意识到这一点吗?不太可能。他们很可能被困在他们深厚的领域(和根深蒂固的遗留系统)中,无法看到有针对性的语言可以帮助疏通障碍。

但是,如果你沉浸在一个复杂的行业中足够长时间以获取丰富的领域知识,那么你可能能够用自己的 skunkwork DSL 来转变他们。机会很小。


1

留在学术界吧。如果你想要开发一门新语言,那么你被付费的机会微乎其微。较新的语言往往是某个全新问题领域的表达方式,而你只有在(a)创新问题成为常态,以及(b)没有人为了生计而感到困扰的地方,才能真正遇到开发它们的机会。

请慢慢想清楚。作为一个职业开发者,我最不需要的就是再来一种该死的语言需要去学习 :-)


1

在静态分析中有很多要做的事情,而出现的问题与您感兴趣的相关。


1

大多数目前流行的编程语言都是出于真正的需求而诞生的。Python诞生的原因是一些非C程序员需要自定义其C程序和库的输入。Lua出现是为了在C程序中嵌入脚本语言。Erlang的创造是为了解决对99.9999999%的可用性、热代码加载和高度并发执行的需求。Perl是为了更轻松地编写解析文本文件的程序而产生的。

所以雇主们会问自己一个非常简单的问题,你也应该问自己:我能够提供哪些不存在的解决方案来满足需求?业余工作很少能显示出你正在提供解决方案,大多数时候只是为了重新发明轮子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接