我已经编程了大约5年的C++,现在我意识到知道如何"以不同方式"思考的价值.
这个问题适用于尝试过其他编程语言的C++程序员,他们遇到过以下问题:
"喔..这太酷了!我不知道我可以像这样编程."
"哇,我从没想过设计问题可以这样解决!"
那么,哪种语言对你有用?我正在寻找最大的效果,所以我认为Java不符合要求.= p我对任何建议持开放态度!
免责声明:我问这个问题主要是因为我想扩大自己的想法.这里无意开始任何编程语言战争!
我可能很自信,主要是C++程序员,因为我已经使用了它,所以你可能会发现我的经历很有趣.
按时间顺序,这里是我学到的语言和我的顿悟.我已经为我强调了重要的一些.当然,有许多不同的语言可以提供相同的见解,我只是分享我自己的个人经历.
Atari Basic - 酷我可以让我的电脑几乎做任何事情,但我一直跑到我的8k内存限制(或者我用完了行号)!
徽标 - 没有行号.我可以逐步构建和运行我的程序(后来我在Lisp,Scheme和Forth中看到了这个)
Pascal - 它就像Basic一样,但具有更多功能(并且没有行号).
C - 这就是指针(现在我理解偷看和戳).
装配 - 啊,这就是为什么C的设计方式.我不妨用C而不是汇编.
C++ - 对象是将程序结构化为逻辑块的好方法
BASH - 使用流(过滤器,源和接收器)进行编程非常强大
PostScript - 字体是程序!基于堆栈的编程是一种非常强大的范例.
Prolog - 所以你可以写一堆约束,让计算机自己解决问题.但是,天哪,很难知道有什么限制让它做我想做的事!
Perl - 如果人们不了解所有规则并不重要.我想有些语言的设计比阅读更容易.
SQL - 查询数据的简便方法.它让我想起了Prolog.(后来它让我想起了函数式编程).
Lisp - 所以你不需要手动内存管理来制作链表!(注意我没有在Lisp上花足够的时间.很多后来的课程都可以用它来学习.)
Object Pascal - Cool,Pascal也可以有对象.
Modula-2 - 奇怪,这看起来像Pascal.
Simula-67 - 嗯......所以这就是面向对象语言的来源?
Java - 一切都可以成为一个对象(我后来才知道更多的东西可以是对象,参见下面的Smalltalk),代码可以编译一次并在不同的平台上运行.我的其他顿悟是接口是构建软件的好方法,垃圾收集真的很强大.
Delphi - 哇,GUI库可以很容易使用.事件是一个很棒的抽象.
C++模板 - 在编译时编写代码非常强大(参见Scheme和Lisp).
C++仿函数和绑定器 - 将函数传递给函数功能强大,但语法很糟糕.(这实际上是我对函数式编程的第一次真实体验,大多数语言显然做得更好).
JavaScript - Prototypes和eval函数非常强大.
XSLT - 我无法相信这是图灵的完整.这必须是学术界变坏的时候发生的事情.
Eiffel - 合同是表达设计假设和要求的好方法.
AspectJ - 横切关注点非常有意义,而且在其他OOPL中很难表达它们.但是通过函数的名称识别它们看起来像是一个黑客?
Scala - 字段和方法是相同的.高阶函数可以很容易编写.编译器可以猜测简单表达式的类型(但不是模板).对象代码可以更简单.模式匹配很整洁,但我什么时候使用它们?特征和混合甚至比界面更好.
C# - 这就像Delphi与C++和Scala混合使用.我可以在运行时反映一切,甚至可以轻松地发出代码.
D - 这就是将单元测试与按合同设计和其他一些东西结合起来,同时保持C++心态的结果.
Smalltalk - 没有真正学到它,但是Smalltalk程序员在这个时候向我指出,在Smalltalk中,一切都是一个对象(没有必要的装箱/拆箱),包括代码块.
LINQ - SQL基本上只是函数式编程.
Lua - 一切都可以成为一张桌子!听起来像JavaScript,但它更容易嵌入.
ML - 当你只使用模式时,你可以编写很多简单的代码.
Lambda演算 - 所以这就是Lisp和函数式编程的来源.
Scheme - 在编译时生成代码非常简单.这很容易扩展.数字处理可以做得很好.保持状态的功能很强大.延续很整洁,但我不在乎.
Frink - 我从未意识到测量单位可能如此复杂.
欢乐 - 这是我见过的最短的代码.这是那里评价最低的语言.
组合逻辑(SKI-Calculus) - 您不需要参数,但可以使用组合器.对Joy来说,Lambda-calculus是Lisp.
Haskell - 我希望我可以编译我的代码.Haskell标准的前奏,必须是我见过的最优雅的库之一.
因素 - 那里有很多很酷的东西,我只是希望我能够学习语法.
K - 基于数组(矢量)的基元操作非常强大.
第四 - 这就像一个超级动力的高级装配.但是要学到很多东西.
Python - 这是非常易读的东西.它就像一堆其他语言的组合.
Erlang - 将程序表达为actor是表达并行性的好方法.
可执行的UML - 异步消息传递是表达并发算法的好方法,无需考虑线程.
Ruby - 构建系统(Rake)可以用真正的编程语言编写.代码块也可以是数据(技术上我通过Scala了解到).
所以当然这个列表比你(或任何其他人)想要的要长得多.为了达到最大效果,我的短名单将是:Scheme(或Lisp),Joy(或PostScript),Erlang,Eiffel,AspectJ,Erlang,ML和Haskell.如果你只想专注于几种语言,并且愿意深入研究它们,那么你可以从掌握Scala或C#中获得很多.当然可能还有一两件事你可以从C++ 0x中学习,特别是如果你推动并刺激它.
Python给了我"如此酷"的反应
对于真正不同的东西,请尝试Lisp或Scheme.
当然是Haskell,但实际上所有这些都改变了我的观点:
我小时候就开始在GWBasic工作,所以我很自然地倾向于程序语言.
我的职业生涯始于C++,这是我建立的基础.
JavaScript - 向我介绍了一流的函数,闭包,动态类型.
Python - 向我介绍了更简单的语法和动态语言.
SQL - 向我介绍了'是'与'做'的语言,代码'是'答案.
Lua - 极简主义并使用简单的数据结构(表)作为所有数据结构的基础.
C#是我的新面包和黄油......垃圾收集的优点,内置于库中等.
C - 我有力量!
我将推出第二个Lisp/Scheme,并建议将Haskell作为一种能够挑战编程方式的语言.O'Reilly的书"真实世界Haskell"是一个实用的介绍,用具体的用例很好地说明.
整个"哇哇......这太酷了!我不知道我可以像那样编程." 当我第一次学习函数式编程时,我得到了启示.在我的例子中,这是通过我在Tcl/Tk中的研究得出的,这是多范式的,但我想你可以从任何强函数语言(例如Lisp或Scheme)获得相同的效果.