我最近阅读了Eric Steven Raymond的文章“如何成为黑客”,我喜欢他建议学习5种关键语言(他建议使用Python,C / C ++,Lisp,Java和Perl)作为覆盖主要语言的方法今天使用的编程范例。
他的建议是,程序员知道的特定语言并不重要。由于两个原因,了解不同的编程方法更为重要。
第一个原因是,一旦你知道解决问题的方法的一般方法,它就会使得学习新语言变得微不足道。
第二个原因是没有一种最好的语言 - 它们都有权衡。考虑到特定类型的问题,最好知道要选择哪种语言。这是我最感兴趣的,但我有一个问题,他真正区分他建议的5种语言。似乎有很多重叠。
所以我的具体问题是,鉴于这5种语言,他们的预期编程范式是什么,并给出一个最适合的问题类型的例子。
一个示例答案(我不确定这个答案是否正确):
Perl
- mainly a functional language
- great for quick text substitutions in multiple files from the command line.
我发现了一些其他类似的问题,但我想特别了解这5种语言。我只是在寻找一个起点,没有太详细。提前谢谢!
答案 0 :(得分:11)
我认为你接近错了。正如esr自己所说,重要的不是语言,而是范式。所以当你这么说时
- Perl是一种功能语言
- 非常适合在命令行的多个文件中进行快速文本替换
醇>
你缺少一种功能语言的要点,即它们非常适合使用自下而上的方法构建大型系统:用完善的功能解决一堆(精心挑选的)小问题,直到我们有一个完整的系统。我们通过识别我们正在使用的算法具有共同点并使用更高阶函数来封装它们的共性来减少代码重复。我们通过使用更高阶函数来最小化(明显)分支行为,以便仅仅为我们在特定情况下所需的函数做出贡献。
同样,我可以这么说
- Java主要是OOP语言
- 这对于编写大型,强大的系统非常有用,
醇>
但是忽略了OOP语言是关于在代码中从问题域建模概念的观点,这样我们就可以用一种明确的方式来强制解决手头的问题。我们通过识别相关概念的共同点来封装代码重复,并在描述它的类中封装处理这些共性的代码。我们通过提供具有适当不同行为的抽象的不同子类来最小化(明显)分支行为。
总的来说,编程语言及其相关范例的基本点是
允许您不考虑任何不影响结果程序质量的事情。如果那不是(很大程度上)理想的事情,那么我们都会编写机器代码。
这是通过(除其他事项外)为构建抽象提供一组工具来实现的。
到处逛逛,选择一个你喜欢并擅长的人。只要确保你了解其他人何时允许更好的解决方案(这可能意味着最终也会擅长于他们;)。我认为你可以主要采取“好的解决方案”来表示“明确地将代码映射到想法”。 (关于效率的模数会强迫你(提供借口?)用C语言写作)
答案 1 :(得分:-2)
如果可以的话,去一所能为您提供各种语言经验的学校。
ESR并非完全脚踏实地。他作为哲学家而闻名,但他写的是什么重要的代码?
要了解今天流行的范例,只需在任何最新项目中开始编码即可。目前流行的范例是最容易接触的。然而,尝试“学习”所有复杂的语言(如C ++或Java)会让人感到困惑。每种语言都有深度,需要时间通过应用到实际项目。你不能只是坐下来做它。
也就是说,在
中编写一些玩具项目当然是值得的as
,不适合人类使用)
答案 2 :(得分:-2)
ESR的语言选择不仅基于范例,还基于它们的用法,每个语言都由以下表示:
更严重的是,python是 最精心设计的语言; 所有的功能只是很好地融合在一个干净,设计良好,易于学习的语言中,而不是玩具语言。它是一种多功能,全面,通用的语言,几乎在任何情况下都可以使用:桌面应用程序,Web应用程序,嵌入式脚本语言,系统管理等,从最小的单行程脚本到成千上万的脚本的线条。它的亮点是语言的设计本身。 AFAIK,这门课没有其他语言。
Perl表示用于shell脚本或作业自动化的一类语言,您需要调用一系列程序,对其输出进行一些转换,并将结果作为另一个程序的输入提供。这个类中的其他语言是bash,但是bash缺少perl所拥有的许多强大的字符串操作(不要开始说bash可以调用perl或sed或awk)。
Java代表了一种在业界广泛使用的语言,并且投入了大量的时间和金钱。因为它们无处不在,所以几乎任何东西都有很多好的图书馆和框架;如果你能想到一个问题,很可能这个问题已经被其他人解决了,他们已经为它编写了一个库。黑客应该知道这些语言,因为如果您可以避免编写任何代码(或避免编写太多代码),它可以提高工作效率。此类中的其他语言/框架是.NET,Django,RoR。
Lisp代表了功能范例。知道如何在功能范式中思考和写作有很多好处,我在此不再赘述。此外,Lisp具有非常强大的元编程功能,这对Lisp来说几乎是独一无二的。这个类中的其他语言(功能,而不是元编程)包括Haskell,Scheme,Clojure,F#等。
C / C ++表示用于编写OS内核,设备驱动程序和速度关键代码的低级语言。这类语言的语义接近于裸机(尤其是C语言,在C ++中不那么简单),黑客应该知道这种叫做CPU的金属是如何工作的,否则他就不能称自己为黑客。本课程中的其他语言是汇编,但我认为即使ESR也同意汇编太低级别,无法做任何有效的事情。
虽然他提到的许多语言确实共享了很大一部分重叠(例如Python,C ++,Perl支持OOP);每个语言类都有一个独特的高亮显示。
就个人而言,如果我有机会添加另一种语言,我会添加PHP。 Web应用程序越来越普遍。 PHP表示用于Web应用程序的一类语言,此类中的其他语言包括JSP,ColdFusion等。
简而言之,黑客就是: