我已经学习了一段时间的C ++,我发现它非常强大。但是,问题是抽象级别不是很多,我必须自己做内存管理。 我可以使用哪些语言使用更高级别的抽象。
答案 0 :(得分:47)
Java,C#,Ruby,Python和JavaScript可能是你面前的重大选择。
Java和C#的语言差别不大。您可以从C ++中找到的最大区别是内存管理(即,当不再引用对象时,会自动释放对象)。如果您对桌面样式应用程序感兴趣,或者热衷于静态类型,您可以选择它们(您可能会根据您对Microsoft和Windows平台的感受来选择它们)。在这两种情况下,您都会发现比C ++更常用的标准库。
Python和Ruby从静态类型转移到一个可以在任何对象上调用和处理的世界(如果不存在则在运行时失败)。这既是一个祝福(更少的样板代码)和一个诅咒(编译器不能再为你捕捉这些错误)。再一次,你会发现它们拥有更丰富的标准库,并且比Java / C#更高级。性能是主要的垮台,据我所知,Python比Ruby快一些。要在它们之间做出选择,如果您对Ruby on Rails框架社区的Web开发很感兴趣,那么您可能会选择Ruby,否则就选择Python。
JavaScript与C ++的区别在于它完全取消了类。简单地从其他对象克隆对象,并且可以在运行时向其添加方法和属性。非常灵活,但也很容易变成一团糟。如果您对在浏览器中运行应用程序感兴趣,那么JavaScript是唯一真正的选择,而浏览器实际上是作为一个平台进入自己的应用程序。如果你没有对浏览器做很多事情,你会发现可用的标准库相当有限,但是有很多好的框架填补了一些空白。
其他一些有趣的,但更多的利基选择
答案 1 :(得分:26)
我想从你的问题中说你可能还没有完成对C ++的学习。如果你还在做自己的记忆管理,那么你还有很长的路要走我的朋友!
查看auto_ptr和shared_ptr - 查看Boost库。
与抽象类似 - 你有什么特别抱怨的? AFAIK对于其他强类型语言中存在的C ++并不是很多。
我知道这不能回答你的问题 - 你想要向前迈进,但C ++是你从未真正停止学习的事情之一。如果你觉得无聊,可以短暂地进行模板和模板元编程......
答案 2 :(得分:18)
到目前为止,我看到了很多很棒的建议。但是,我认为缺少了一些东西,汇编程序。
为什么要学习汇编语言?
一些汇编语言资源:
答案 3 :(得分:5)
尝试像Haskell这样非常陌生的东西会让你以不同的方式思考。它还可以帮助您递归思考。 C ++有递归,但它渗透到函数式语言的更多部分。
答案 4 :(得分:4)
ditto Lisp,..或scheme
即使你没有使用它,它也很方便。在学习之后,我只是真的得到了模板编程。
另一个是序言。它让你处于一种非顺序的心态。
答案 5 :(得分:3)
Python和Ruby似乎在Linux / Unix / etc空间中具有最大的吸引力。
ObjectiveC在Macintosh和iPhone上占主导地位。最新的MacOS为框架的一个子集实现了垃圾收集,但是要使用其余部分,您必须自己进行资源管理。
您可以学习Java,因为它也可以进行垃圾收集,但是您需要熟悉的框架数量才能成为高效的Java开发人员,这是令人生畏的。
答案 6 :(得分:3)
如果您对C ++语法和样式感到满意,您可能会发现D是一种有趣的语言。或者如果你想分支出来,Python,C#,Java,Ruby中的任何一个都是很好的选择。
答案 7 :(得分:2)
好吧,如果你正在寻找一个非常高水平的抽象和内存管理,那么我会说lisp将是一个理想的候选人。我现在慢慢地learning,这是我用新语言最有趣的。
说过Python或Ruby可能是表达性和流行度之间更好的折衷方案。如果您正在寻找Web应用程序,Python的Django框架是更好的RAD框架之一。
答案 8 :(得分:2)
方案。
The Little Schemer和Structure and Interpretation of Computer Program会以奇怪而奇妙的方式扩展你的思维。
DrScheme对于初学者来说是一个很好的IDE。 The Scheme Programming Language提供了一个很好的免费参考。
答案 9 :(得分:2)
我会说这取决于你想要尝试的编程类型。如果你想留在OOP方面,学习Python或Ruby,两种语言都提供了一种简单的方法来创建绑定以使用脚本中的C ++代码(出于效率原因)。
如果你需要另一种编程方法,可以学习像Lisp或Haskell这样的“功能”语言。
如果您需要在C ++应用程序中包含快速且小巧的脚本语言,请尝试Lua。
最后但并非最不重要的是,如果您了解Java并且讨厌它,您可以尝试Scala,这是一种可以将Java类与Scala代码混合的语言,非常有趣。
答案 10 :(得分:1)
如果你想抽象内存管理,我会立即想到Java。
答案 11 :(得分:1)
为什么不学习 Qt ?它是一个伟大的应用程序开发框架,可在所有平台甚至移动设备上使用!
答案 12 :(得分:1)
答案 13 :(得分:1)
我认为学习编程语言没有预定义的路线。您可以根据自己的工作需要,学术研究,娱乐等方式学习下一个课程。有很多选择。
在C ++中感觉很舒服,你可以去学习一些程序集。这是一个黑暗的艺术,但是当你遇到一些艰难的调试会话时,你会很高兴。
就更多抽象而言,Smalltalk非常有趣,OOP纯和100%动态(调试是一件令人愉快的事情,而不是静态类型的语言)。 Dolphin Smalltalk是Windows的一个很好的实现,即使是免费的社区版本也可以提供足够的功能。在多平台Smalltalk VM中,请选择Visualworks或Squeak。 Visualworks非常稳定,并附带大量文档。
今天,许多领域都在使用Python。除了基本的语法和语义之外,我对Python一无所知,但是今天它对于许多工作都是必需的。
Java,是Java。有趣的是Java从来没有抓住我。您可能会对Java感兴趣。在这里询问使用C ++或其他OOP语言的优势。
对于Web开发,请使用Javascript,特别是考虑到AJAX wave。那些日子越来越有趣了。我们已经谈到了Smalltalk,好吧,Seaside是一个令人惊叹的Web开发框架。它起作用(至少我试过)Squeak / Visualworks ......它是美丽的。
嗯,还有很多东西可以让你动手:Scheme,LISP,Ruby,Lua,Bash(!),Perl(呃),Haskell ......试一试,玩得开心!
答案 14 :(得分:1)
我建议学习数据库设计和查询语言,如SQL。
您可以从Microsoft Access等桌面工具开始,也可以使用免费的SQL Server Express或Postgre或MySQL。
答案 15 :(得分:1)
尝试c#多:)
答案 16 :(得分:0)
这取决于你想做什么。如果您有一些您有兴趣完成的特定任务,那么请查看最适合这些类型任务的语言。学习语言的最佳方法是实际使用它。
答案 17 :(得分:0)
我建议您选择提供以下4种功能的语言,而不是建议使用特定语言:
这里的想法是扩展您的编程视角,以包含C ++语言不能为您提供的概念。
答案 18 :(得分:0)
我会说开始使用Python。它具有更高的抽象级别,它教你缩进和制作“漂亮”代码的重要性。并不是说“漂亮”非常重要,但它会让代码的未来维护者更加快乐:)
那里有很多示例代码,如果你进入Linux,那里有各种各样的发行版,他们拥有基于语言的所有(或大多数)工具。如果您喜欢深入研究如何管理操作系统(大多数程序员都这样做),那么这是一个良好的开端。在我得到火焰之前,我说管理,而不是实际内核的东西,你最需要C,你应该覆盖。
另一方面,深入了解C方面,忽略OO的东西并学习函数式编程可能会很好。如果你沿着这条路前进,我还建议从基本的汇编语言开始,就像上面提到的一个帖子一样。也许HLA(Randall Hyde的高级大会,他写了一本名为Art of Assembly Language Programming的好书)是一个好的开始。你要么学会热爱记忆管理,要么为你的余生而讨厌。很高兴知道如果你想开始编程事业:)
但是如果你想从编程中找到工作,那么如果你知道自己在做什么,那么Java和J2EE就是一个简单的赚钱机器。恕我直言,它很快就很无聊。
答案 19 :(得分:0)
我推荐python,因为它不仅是一种性感的语言,而且使用非常广泛,并且很容易通过Boost.Python与C ++集成。
但正如Thomi所说,在C ++中有很多值得探索的东西,在Boost库的帮助下,它的开发变得非常容易。
答案 20 :(得分:0)
由于您已经进入C ++,下一步将通过managed C++或C ++的托管扩展来学习.Net。这将使您在.Net框架的大世界中迈出一步。一旦您理解该框架使学习C#,VB.Net等其他.Net语言变得更加舒适。
MC ++擅长的领域之一,在.NET语言中实际上是独一无二的,是能够使用现有的非托管(C ++)应用程序,使用/ clr开关重新编译它,拥有它生成MSIL然后在CLR下运行。这个非凡的壮举恰如其分地被称为“It Just Works(IJW)!”有一些限制,但在大多数情况下,应用程序将运行。 C ++代码可以包含老式的printf语句,MFC,ATL甚至模板!
答案 21 :(得分:0)
就个人而言,我一直用Java,Python,C / ++编程,我最喜欢的是python。虽然C ++可以完成Python可以做的所有事情,但是我编写了一个包含大约10行的Python程序,在C ++中大约需要50行。所以,故事的道德,使用python。
答案 22 :(得分:0)
如果您还没有,请尝试使用脚本语言。它应该改变你的工作方式和认为。希望,以一种很好的方式:)
答案 23 :(得分:0)
我必须为Perl单独回答。虽然Python在功能上大致相当,并且被认为更加干净和现代,但Perl拥有自己的优雅 - 纯粹实用主义的优雅。它还拥有真正伟大的图书馆支持。看看Perl,将你的大脑扩展到与Haskel相反的方向:)(尽管Perl的爱好者声称它可以用于函数式编程)。
答案 24 :(得分:0)
Clojure非常值得探索,因为它符合您的两个标准:
我将仅使用一个抽象给出一些示例:在Clojure中,您可以通过sequence abstraction操纵几乎任何数据结构。
;; treat a vector as a sequence and reverse it
(reverse [1 2 3 4 5])
=> (5 4 3 2 1)
;; Take 10 items from a infinite sequence
(take 10 (range))
=> (0 1 2 3 4 5 6 7 8 9)
;; Treat a String as a sequence of characters, calculate the frequencies
(frequencies "abracadabra")
=> {\a 5, \b 2, \r 2, \c 1, \d 1}
;; Define an infinite lazy sequence of fibonacci numbers, take the first 10
(def fibs (concat [0 1] (lazy-seq (map + fibs (rest fibs)))))
(take 10 fibs)
=> (0 1 1 2 3 5 8 13 21 34)
答案 25 :(得分:0)