汇编语言/C/Python/Perl/Lisp/Scheme程序员正在寻找新的学习内容。

5

我现在正在工作中使用Python/Django,所以我需要一个家庭项目。 我想学点新东西,所以我想看看Java。

部署Java Web应用程序最受尊重的Web框架是什么? 我不看Ruby on Rails的唯一原因是它的ORM和其他部分与Django非常相似。

或者,有人认为我应该看看Seaside/Smalltalk吗? 有人能解释一下我为什么要这样做吗?

如果有人能为Haskell提出好的论据,那么我会考虑它。 不过我需要一个Web框架和数据库访问库。

如果我不习惯通过x86 / asm来进行堆栈范式,我会考虑使用Factor/Forth。 我也愿意听任何反对意见。

另请参阅:http://www.reddit.com/r/programming/comments/9v3uf/asm_c_python_perl_lisp_scheme_programmer_looking/


请自行链接:参见http://www.reddit.com/r/programming/comments/9v3uf/asm_c_python_perl_lisp_scheme_programmer_looking/ - Brian
@Brian 好的,可以给我链接吗? - callen
已添加并检查社区维基。 - callen
12个回答

14

凭借您的技能范围,为什么不学习一些超出舒适区的内容,比如木工或绘画,或者其他数百种与您领域无关的技能呢。

到了某个时候,所有语言都是相同的,学习另一门语言将获得少之又少的好处。

而对于完全不同的事物,您将成为一个更加全面的人。例如,我喜欢绘画和高尔夫球,尽管我在这两方面都不是很擅长——当我问我的高尔夫球教练我的障碍等级时,他说我无法将球打直:-)

我发现我喜欢做一些我不习惯的事情,因为这是一个全新的体验。学习另一项计算机技能在一段时间后变得容易,因此从中获得快乐的喜悦会降低。

别误解我的意思,我喜欢跟上领域的发展,但大多数情况下,最新的技术对我的职业生涯没有带来任何好处,因为我所做的工作大部分是在稳定的技术上进行的。您可能处于不同的情况。


1
我曾经试着画画,结果连续工作了90个小时,做出了一幅风格略有不同的德拉罗切名画的复制品。总之,最后效果不尽如人意。木工?我在纽约,这不太可能。我想提高自己的编程能力,因为只有这个对我的生活影响很大。如果我碰到一个潜在的与编程无关的学习/实践课题,我会认真考虑,基于你的建议,但我不会特意去追求那样的东西。 - callen
2
在某个时候,所有的语言都是相同的。但我们离那个时候还有很长很长的路要走。 - itowlson
1
我认为他的意思是,你只能用有限的方法来试图让一个愚蠢的计算机按照你的意愿工作。 - Benjamin Peterson
1
@adriyel,我猜你指的不是90个小时不间断(没有睡觉)。否则,那可能就是为什么结果很糟糕的原因了:-) 但要把这件事放在正确的角度来看待,这只是一个两周的工作(基于每周40多个小时)- 我怀疑你不会在那段时间里精通任何东西。但我明白你想专注于编程,如果这是让你开心的事情,那很好,各有所好嘛。我只是提出了一个可能的替代方案。@itowlson,我并不是指将来某个时候,而是在我的职业生涯中意识到所有语言归结为相同的概念。 - paxdiablo
1
概念可能略有不同,但一旦掌握了几种语言,差异很小。汇编语言、C、Pascal、Fortran、COBOL等之间没有区别。任何面向对象的语言也是一样。事实上,面向对象只是对我们早期过程式语言中已经进行的封装的扩展。F#可能会有所不同,我还没有看过,但我见过的几乎每种语言都归结为非常古老的序列/选择/迭代模型。 - paxdiablo
1
不,我的意思是一周内连续工作90个小时。那是一幅特别的画作。在我彻底崩溃之前,我可能花了3个月的时间绘画。我不关心爱好。我不关心木材。我不关心油漆,我不关心美学。我只关心提高我的编程技能。我已经花了足够的时间在哲学、历史、法律和各种其他学科上摸索。我再也不关心它们了。我只想成为尽可能优秀的程序员,并专注于尽快退休。 - callen

6

Haskell 目前作为一种思维训练工具非常流行,但如果您已经熟悉Lisp和Scheme,则可能不会太困难。它是纯函数式的,因此没有任何副作用。您必须使用单子(monads)来打印文本并执行其他需要特定顺序的操作。它也完全惰性求值,因此您可以在Haskell中创建无限列表而不必担心内存消耗。

Haskell Platform 可能并不完整,但旨在成为Haskell的可移植库集。它的软件包列表包括一些用于CGI处理和(X)HTML生成的软件包。


换句话说,这里没有 Web 框架。这就把它从列表中删除了,我将把它作为一个副业想法申请。 - callen
我从未说过“没有Web框架”,我只是提供了一组相对成熟的简单Web工具。如果您想要其他可能感兴趣的库列表,请查看此处(http://www.haskell.org/haskellwiki/RPC)。 - Chris Lutz

4
听起来你对Web编程很感兴趣,所以小谈/海滨是一个很好的选择。在我看来,即使从未使用过它,每个人都应该学习小谈,而且海滨是一个与您习惯的Web框架非常不同的框架。例如Django,全部都是关于REST,而海滨的哲学基本上是“与REST无关”。
如果你从未在基于图像的环境中编码过,那么似乎有一种...自然的魔力。许多在Smalltalk中起源的IDE功能已经在基于文件的语言IDE中实现,但这总是感觉像是一种不自然的移植,而这些相同的功能在Smalltalk中则感觉自然。
看看Pharo吧。给它足够的时间适应没有菜单栏的事实,并看看它是否能够吸引你。

我实际上来自于系统编程的背景,网络编程只是我的日常工作。我接受这个建议,因为这将是一个陌生的经历。 - callen

3
我建议使用Java。当我在找工作时,我注意到有很多Java开发人员的职位空缺,所以Java很流行,你可能会有机会使用你的Java技能。
然后你应该尝试Scala。Scala是一种类似于Python的语言,它使用函数式编程来制作非常可扩展的程序。与Python不同,在Scala中你需要声明事物的类型。Scala运行在Java虚拟机上,因此可以在Java商店中使用。

http://www.scala-lang.org/

我可能只是因为这是我打算学习的下两种语言,所以才给你这个答案。

你可能也应该花一些时间玩弄JavaScript。JavaScript 有点像意图成为“隐形Lisp”,我想你会很快掌握它。

http://www.crockford.com/javascript/javascript.html

http://bc.tech.coop/blog/030920.html

而且,玩得开心点。写一个游戏什么的!


2

从您的列表中,我认为您需要学习一门完全面向对象的语言。

您可以尝试学习 Ruby,但是我建议您学习 JavaScript,因为它提供了许多有趣的功能,可能出乎您的意料,比如支持闭包、高阶函数和原型继承 - 而且学习它也很有趣,变得非常流行。


列表不完整,我已经编写了Ruby代码,只是没有用Rails。Python为什么不完全面向对象,而Ruby是呢?我经常在Python中使用闭包。http://ivan.truemesh.com/archives/000392.html之前也用过JavaScript,只是不太喜欢它。我试图避免列出/取消世界上我所接触的所有事物,而是通过引导对话走向几种不同的技术来指导这一点。你选择忽略这一点,这让我很难过。 :( - callen
我猜如果你已经理解了命令式、函数式和面向对象编程,那么我认为你不会在另一种语言中找到表达计算的新方式。为什么不开始关注我们正在面临的一些难题,比如多核机器上的并发性。为此,我建议你看看JVM上的Clojure和它的Compojure Web框架。你将会处理Java,但它并不是特别流行(但Haskell或Smalltalk也不是)。 - Marcus Booster

2
“不过,我需要一个Web框架和与之配套的数据库访问库。”
如果你所有的编程都基于Web框架和SQL数据库,那么即使你切换语言,你也只是用不同的语法解决相同的问题。
使用不同的数据模型构建一些东西——如Prolog、概念图、RDF、Linda/JavaSpaces、XQuery、HDF5、ASN.1或不同的网络模型——XMPP pub-sub、SNMP、零配置网格或一群ZigBee启用的Arduino。
也许可以看看像Oz、Io或Erlang/OTP这样的语言,它们是分布式的,而不是像你提到的那些主要是单片的。

0

你为什么不试试OCaml呢?如果你(不幸地)回到.NET世界,你会带着对F#的了解。


0

Java Spring框架怎么样?

http://www.springsource.org/

或者是 NHibernate?

http://en.wikipedia.org/wiki/NHibernate

最终决定权在你手中。因为我只列举了其中两个。当我专业地编写静态语言时...我会尝试学习动态或脚本语言。反之亦然。

此外,我会尝试学习一些完全不同或超出我的领域的东西...也许是Powershell、Korn shell或ActionScript。


PowerShell或Korn shell不会像我所寻求的那样挑战我,也不适用于我拥有的副业创意。 - callen
另外,就@NHibernate而言,我刚刚脱离了.NET世界,我宁愿不回去。 - callen

0
什么是最受尊重的Web框架来部署Java Web应用程序? 没有一个单一的Web框架比其他更受尊敬。 Struts2、Spring MVC、Stripes或Wicket(基于事件)都是不错的选择(我个人喜欢Stripes)。但您需要更多的持久性(Hibernate或JPA)和粘合剂(Spring)。
Grails(Groovy on Rails)是另一个不错的选择。
此外,是否有人认为我应该看看Seaside/Smalltalk?有人能解释一下我为什么要这样做吗? 嗯,我想了解Smalltalk肯定没错,但我没有看到选择Smalltalk而不选择像Java这样的现代语言的好理由。关于工具,我对这个领域一无所知,除了VisualAge for Smalltalk,但就个人而言,我真的离它很远。
如果有人能为Haskell提出一个好的论点,那么我会考虑它...看起来我不是这方面的专家。
如果我不太熟悉基于 x86/汇编语言的堆栈范式,我会考虑使用 factor/forth。我也愿意听取任何相反的观点。

Java中的Web应用程序通常是共享状态的,还是更像Django/Rails?您列出的各种Web框架之间有什么区别? - callen

0

我建议你学习掌握Lisp(某种相关方言),这样即使你的简历上有Lisp和Scheme,真正地深入学习也是值得的。参见http://www.paulgraham.com/avg.html 了解原因。

另外,Prolog可能会引起你的兴趣。它与SQL有关,但用于编程而不是与组织好的数据表进行通信。

如果你想瞄准Web技术,我只有Java的经验。在这里,最新的Java Server Faces (JSF)允许使用Ajax更新页面,Google Web Toolkit允许创建非常丰富的基于组件的网页。这些可能足够吸引你学习足够多的Java,以便发现它们的乐趣 :)


我简历上没有“Lisp”,但我已经学习过两遍SICP和一遍Graham的Lisp书籍。我很好地掌握了它,学到了很多。现在是时候继续前进了。当人们自以为是时,我真的不喜欢这种情况。 - callen
在这种情况下,我建议进行iPhone开发... - Thorbjørn Ravn Andersen

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