我最近阅读了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种语言.我只是在寻找一个起点,没有太详细.提前致谢!
最佳答案 我觉得你接近错了.正如埃斯尔自己所说,重要的不是语言,而是范式.所以当你说的时候
- Perl is a functional language
- It’s great for quick text substitutions in multiple files from the command line
您缺少一种功能语言的要点,即它们非常适合使用自下而上的方法构建大型系统:使用设计良好的函数解决一堆(精心选择的)小问题,直到我们拥有一个完整的系统.我们通过识别我们正在使用的算法具有共同点并使用更高阶函数来封装它们的共性来减少代码重复.我们通过使用更高阶函数来最小化(明显)分支行为,以便仅仅为我们在特定情况下所需的函数做出贡献.
同样,我可以这么说
- Java is mainly an OOP language
- It’s good for writing large, robust systems,
但这忽略了OOP语言是关于在代码中从问题域建模概念的观点,这样我们就可以通过一种明确的方式来强制解决手头的问题.我们通过识别相关概念的共同点来封装代码重复,并在描述它的类中封装处理这些共性的代码.我们通过提供具有适当不同行为的抽象的不同子类来最小化(明显)分支行为.
总的来说,编程语言及其相关范例的基本点是
>让您不要考虑任何不影响最终程序质量的事情.如果那不是(很大程度上)理想的事情,那么我们都会编写机器代码.
>这是通过(除其他事项外)提供一组用于构建抽象的工具来实现的.
到处逛逛,挑一个你喜欢的,擅长的.只要确保你了解其他人何时允许更好的解决方案(这可能意味着最终也会擅长于他们;).我认为你可以主要采取“好的解决方案”来表示“清晰地将代码映射到思想”. (关于效率的模数会强迫你(提供借口?)用C语言编写)