总体上可以提高您的编程技能的编程语言?[关闭]


27

您会建议程序员学习哪种语言,不是因为他们会大量使用该语言(但可能会使用),而是因为它可以提高一个人的编程技能,并且可以使人从不同的角度思考(甚至可能更好)。 ) 道路?


12
没有一个。而是:它们中的尽可能多,彼此之间尽可能地不同。

Answers:


27

对于“常规”编程和算法:

  • python,易学易用,漂亮易读。
  • C ++教您真正的计算机。

改变思想的经历:

  • 哈斯克尔
  • 序言

破坏了您的思想并跨越了帕达万和绝地大师之间的界线:

  • 普通LISP

3
是的,同意chrisaycock的观点,C和汇编语言将教您真正的计算机,C ++只是非常微小的一步,但是仍然可以让您处理诸如内存指针和高性能问题之类的东西
Lacrymology 2011年

嗯 Prolog非常棒,但是我看不出它对于提高通用编程技能有何意义。我将其视为一种替代的数学/逻辑符号系统,您可以查询其结构,而不是像编程语言一样(描述静态数据,而不是过程数据)。编辑:它肯定会改变您对某些事物的思考方式,但是某些事物不是编程的。
cbrandolino

Prolog确定正在编程。是的,是声明式编程,并且扎根于逻辑(因此相对于数学而言)。但是仍然在编程。关于最后一点,您认为另一个Lisp(即Scheme)也可以吗?

3
Prolog是逻辑范例中最著名的语言。重要的是,要使您的思维适应所有可以处理的范式,如果您想要成为一名程序员更好的人,那么它将帮助您获得敏捷的思维能力,并且会为您提供新的工具。我想任何Lisp方言都可以做到,我在Common Lisp中看到的是对我来说,它看起来像是最可用于生产的Lisp。
泪论2011年

1
我会投票赞成Scheme,而不是Common Lisp-我想这取决于您是否认为您会在生产中实际使用Lisp。如果不是,请使用Scheme。
Skilldrick 2011年

13

不要忘记Javascript

它具有的OO功能不是您通常的OO功能。它非常适合于高阶函数和闭包,您通常会使用它们。它允许许多功能编程技巧。它非常灵活。

这是实用的,因为每个认真的浏览器都有它。

(当然,它也有许多令人不快的怪癖。很少有实用的语言没有)


1
JS是否具有Java没有的OO功能?
Mahmoud Hossam,

3
@Phobia:JS以完全不同的方式进行面向对象。没有课程。继承是通过原型完成的-本质上,一个对象可以从任何其他对象继承。函数是一流的价值;您不仅可以传递它们,还可以轻松地将新方法分配给现有对象。JS进行数据隐藏的方式也与Java完全不同:对象公开的所有内容都是公共的,因此您可以使用闭包来隐藏数据和方法。请注意,没有“规范的OO”。与C ++相比,JS与Smalltalk发明的“原始” OO有点儿相似,但是Java的OO现在也“规范”了。
9000

11

计算机工作原理的C语言汇编语言

HaskellLISP用于功能性编程和元编程

用于向量和简洁编程的APL

bashtcsh,了解如何以编程方式管理计算机


4
您可以使用同一作者的J代替APL。
9000

组装时+1。在进行任何重大开发之后,您永远不会以相同的方式看待高级语言。如果您正在寻找可以使您以完全不同的方式考虑编码的东西,那么ASM会做到的。
Kurtis

9

我建议方案。

这是一种从Lisp派生的功能编程语言(实际上大多数人认为这是一种方言)。与Common Lisp的主要区别在于,它的方法非常简单- 极为如此。例如,在Scheme的正态分布(任何小于R5的方案,或者Mit / GNU / Scheme)中,您将找不到循环实现:您必须使用尾部递归来制作自己的循环。

它确实具有表达能力,并且它的语法非常适合学习编程方面的新知识,例如:只需看一下代码,您就会知道编译器/解释器将如何工作。

此外,它还附带有史以来最好的编程书籍,《计算机程序的结构和解释》,可从MIT网站免费下载。

我希望这里有一些视频课,希望您立即对这种迷人的语言感兴趣-演讲者是SICP的作者:http ://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- 讲座/


谢谢。但是,我必须警告您,这些课程很容易让热情的程序员感动得流泪。
cbrandolino

@cbrandolino-的确,我们的函数式编程课程使很多人退出了计算机科学程序。
jmort253 2011年

1
Scheme 简约的,但是在R5中它增加了一些疣,而在R6上它肯定很大。很可惜,因为它非常漂亮。有关真正简约但仍实用的语言,请查看Lua
Javier

@哈维尔,你是对的。我将编辑答案以指定实现。
cbrandolino

我在大学的atm上做计划,我讨厌它。不是因为它是一种功能语言,而是我想长期使用它。但是,语法确实使我丧命。键盘上有三种不同类型的花括号(如果计算尖括号,则为四种),并且您仅使用了括号。为什么?使用其他的有什么问题?
Femaref

4

LISP,最好是Scheme与Abelson&Sussman的“计算机程序的结构和解释”相结合,将教您用C / C ++所强加的其他方式来思考。

FORTH,特别是面向块的FORTH,而不是面向文件的FORTH(例如D85),将教您遏制lo态。当您在任何情况下都无法编写超过16行64个字符的例程时,您将不得不进行抽象和分解。


4

Java是全世界大学中最多教授的语言之一,这是有原因的。尽管它通常类似于恐龙,但它使每个人都对现代编程的概念有了很好的了解。它并没有向您显示计算机本身是如何像汇编程序甚至是已经非常抽象的语言C那样工作的。但是飞行员必须能够飞行而不是能够自己建造飞机-学习JAVA作为当今您将以(最常见的)最常见语言编写的任何代码的良好基础:Java,C ++,php,c#,ruby(on rails)python等...

最高


3

带有LINQ的C#3。

这是函数式编程的一个很好的介绍。

尝试编写程序(或解决方案Euler),并用LINQ调用替换尽可能多的循环。
它帮助一个人掌握功能编程和惰性求值的概念。

从那里,可以继续前进到F#


3

放手,我会说Haskell。有两个原因:

  • 这只是学习函数式编程的最佳方法。几乎所有其他语言在默认情况下都允许副作用,但是可以在功能上起作用(是的,这包括ML和Erlang: 有关更多信息,请参见此演讲)。Haskell默认情况下可以运行,但是可以在需要时使用副作用。
  • 绝对是一种鼓励您在编写代码之前进行思考的语言。老实说,这对我来说从来不是真正的问题(如果有的话,恰恰相反)。也就是说,我似乎是少数。我遇到的大多数程序员似乎更多地是“先编码,后问问题”的心态,而不是“在5分钟内编写解决方案之前几天就回答问题”(这通常是我的心态) 。因此,这种语言可以为大多数程序员提供宝贵的经验。

3

如果有人来自C / Java世界,我建议使用Scala。

它不是纯粹的函数式编程语言,而是使用OO来模拟某些函数式编程功能(例如,使用对象来模拟一流的函数和高阶函数)。

因此,如果您熟悉OO,Scala将使用您已经知道的术语来解释功能世界。

我发现我更容易理解Scala中的函数式编程,而不是深入研究诸如Haskell,List等的函数式编程。


2

功能语言是我觉得帮助我今天的地方的语言。即使我从事Web应用程序开发,从功能语言中学到的概念也可以帮助我找到原本无法解决的问题的解决方案。以下是我在大学使用的语言:

  • C ++(不起作用,但是指针和内存管理等概念非常重要)
  • 计划博士
  • ML / Ocaml(我们使用ML / Ocaml编写了另一种语言!)
  • JavaScript(在客户端和服务器端都受到业界欢迎的功能语言)

学习这些语言将帮助您了解抽象的世界,以及如何构建封装其他功能的代码块,隐藏底层细节,以便您专注于高层业务目标。


1

Ruby具有我使用过的功能最强大,最直观的测试框架之一。在我开始用ruby编写测试之前,我不确定我是否真的了解如何正确使用模拟和存根。rSpec和Cucumber是出色的工具。


1

有许多编程语言会要求您以新的方式思考问题(相对于您习惯使用的语言。)学习过的最常见语言是一种命令式语言,它是一种功能性语言,也是一种必需的语言。逻辑语言,例如prologlisp

有些语言受类别理论的影响很大,例如ocamlHaskell,有些则是跨品种的语言,例如Curry(功能和逻辑)。Curry可能是我所知道的最令人讨厌的语言,这不仅是因为它使Haskell具有逻辑编程的全部能力,而且还因为它与基于约束的编程相集成。

Occam-pi是另一种有趣的语言,因为它的并发性非常高,而且还因为最近使用了arduino port


1

一个全面发展的程序员在他/她的袖子上有很多花招,其中包括:

  • 组装,用于学习计算机的工作原理。
  • 一种过程语言,例如C或Pascal。
  • 一种功能语言,例如Scheme。
  • 一种OOP语言,例如Squeak。

所有这些都教给您思考解决问题的方式略有不同。


0

没有明确的目标,您将无法正确学习任何编程语言。知道要使用它的功能之后,您就可以决定哪个程序适合您的需求。

例如,假设有关c#。

C#可以执行Web程序,控制台程序,独立的可执行文件,游戏程序,Silverlight程序和移动程序。虽然语法几乎在每种情况下都是相同的,但在每种情况下其工作方式都不同。例如,一个独立的可执行文件会保留其信息,直到其被卸载或该程序完成为止;而在Web程序中,每次加载页面时该信息都将被销毁,而在Silverlight中,您将花费大部分时间,在一个xml文件。

其次,不要将时间花在外来语言上(例如,Haskel),从企业来讲,很少有值得您努力的程序:java(山丘之王),c#/ vb.net,php和sql。


0

有一个非常简单的用于编写Java Applet的程序,称为处理

如果您刚开始,那么这种语言将使您对变量,循环以及诸如此类的事情有一个非常基本的了解。


0

这里有一些很棒的建议。我可能会亲自使用C或C ++。它们迫使您处理许多对理解事物的工作方式至关重要的概念,但是这些概念往往会被其他语言所混淆。即使您稍后使用的语言隐藏了一些细节,仅仅了解事物的实际运行方式也将对您作为程序员有帮助。

如果您想深入学习汇编语言,那很有趣,但是不要指望它能完成很多工作。:)


0

我会推荐Ruby。Ruby并不要求您更改范例,但是它鼓励您使用多种范例。我认为,这样做的好处是,您不会因无法按自己习惯的方式工作而感到沮丧,而是使用了另一种范式,摆脱了挫败感,并以惯常的方式做事。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.