我已经学习了一段时间的C++,我发现它非常强大.但是,问题是抽象级别不是很多,我必须自己做内存管理.我可以使用哪些语言使用更高级别的抽象.
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是唯一真正的选择,而浏览器实际上是作为一个平台进入自己的应用程序.如果你没有对浏览器做很多事情,你会发现可用的标准库相当有限,但是有很多好的框架填补了一些空白.
其他一些有趣的,虽然更多的利基选择
Smalltalk - 在Ruby和Python阵营中或多或少,并且我理解它的速度要快得多.小心虽然_我见过很多优秀的工程师学习Smalltalk并且永远不会回来;)
Objective-C - 当C面向对象时,C++采用单向(静态类型),而Objective-C采用另一种方式(动态类型).它非常受Smalltalk的启发,如果你在Mac/iPhone上,它有一个很好的标准库.在内存管理方面,与我列出的其他内容不同,它不是垃圾收集(虽然现在是Mac OS X 10.5的一个选项),但它确实有一个引用计数方案,这使得生活比手动管理内存简单得多.
Lisp - 我自己从来没有学过它,超出了我需要的小Emacs黑客攻击.据我所知,这些图书馆当时很不错,但虽然这种语言仍然非常优雅,但它们却落后于时代.
Haskel - 如果你希望从对象和类中完全中断,Haskel及其功能方法是一种有趣的方法(或者如上所述,或者如果你在.Net领域则是F#).基本上,你放弃循环和变量,而不是递归地做所有事情.需要一些时间来包装你的想法,并且可能对大多数现实世界的应用程序来说都不实用,但它是一个很好的学习方法.
Eiffel - 我喜欢它 - 非常干净的语法,专为严肃的工程类型系统而设计.静态类型如C#和Java,以及较弱的标准库,但它会让你真正考虑语言和类库设计.
ActionScript和Flex - Flash的编程接口,它基于似乎是静态类型的JavaScript版本.我已经玩了一下,如果你对开发基于媒体的应用程序感兴趣,那就很光滑了.您还可以通过Flex推出浏览器,进入Air平台,构建真正的桌面应用程序.
我会说从你的问题中你可能还没有完成对C++的学习.如果你还在做自己的记忆管理,那么你还有很长的路要走我的朋友!
查看auto_ptr和shared_ptr - 查看Boost库.
与抽象类似 - 你有什么特别抱怨的?AFAIK对于其他强类型语言中存在的C++没有太大的帮助.
我知道这不能回答你的问题 - 你想要向前迈进,但C++是你从未真正停止学习的事情之一.如果你感到无聊,可以进行模板和模板元编程的短暂尝试......
到目前为止,我看到了很多很棒的建议.但是,我认为缺少了一些东西,汇编程序.
为何学习汇编语言?
这并不像你想象的那么困难.汇编语言的范围比许多现代语言要小很多,你需要了解一些技巧才能理解它,但它并不复杂.
它拓宽了您的知识基础.了解基本面几乎总是有益的,即使在高水平工作时也是如此.
它在调试时非常有用.特别是在没有源代码的情况下调试本机代码,您从学习汇编程序中获得的知识可以增强您在这些情况下实现跨越式调试的能力.
它为您提供了更多选择.当罕见的环境出现在需要汇编代码的地方时,你不会无助.
这对你的简历很有帮助.它表明你学到的只是保持当前工作所需的最低限度,它表现出对基础知识的好奇心,它会让你进入不同类的程序员,而且这个课程往往更有经验,更有能力.
这很酷.
一些汇编语言资源:
Sandpile.org(汇编语言/处理器架构参考)
Gavin的80x86大会指南(一个不错的在线教程)
基于Intel的计算机的汇编语言(5e)(x86汇编的体面教科书)
尝试像Haskell这样非常陌生的东西会让你以不同的方式思考.它还可以帮助您递归思考.C++有递归,但它渗透到功能语言的更多部分.