在过去的3年里,我一直在开发基于C#(.net)和Java(J2EE)的应用程序.
但是现在我觉得,Java,C#让你感到茫然(从学习的角度来看),你可以快速开发你的应用程序,但是你无法理解编程的基本底层概念.
所以,我正在尝试学习C++,但由于指针,多重继承,一些约定以及Java中不存在的C++的其他概念,我发现它有点"混乱".所以,你们有什么建议?我该怎么想?
谢谢
PS:我是一名学生,所以世界上所有的时间都在转移.
avp*_*vpx 12
在我看来,你应该首先学习C,以便正确理解构建C++的基础.拿起Kernighan和Ritchie的"C编程语言"副本,被广泛认为是该语言的最佳参考,并开始阅读它.一旦你完全理解了C,你将拥有所需的低级基础.
C++不再是任何其他现代编程语言的"基础和底层".它有一个计算机模型(一个平面内存地址空间),但操作系统和CPU只是模拟使用多层缓存和分页的模型,所以它不是"真实的".结果是,相同的操作有时可能比其他时间长1000倍.
现代C++还有许多强大的抽象,与Java和C#中提供的抽象相比,与计算机的工作方式没有更直接的关系.OP提到了多重继承 - 显然没有其他OO语言中的继承元素.从Java中省略的C++的许多其他功能是高级抽象(或允许您构建它们),因此在某些方面Java是更低级的语言.在Java中,运算符符号的含义总是相同的,而在C++中,一个简单的==可能会构建一个对象,该对象稍后将用于生成SQL表达式而不是在进程中执行.
JVM和CLR运行时(几乎可以肯定)用C和/或C++编写,因此从这个意义上说,它们恰好形成了今天的层.但是在C/C++层,你仍然会在一个不是"机器如何工作"的抽象中工作,所以你真的只是在学习一组不同的抽象,而不是"现实".并且可以专门设计OS(或实际上是硬件芯片),以便JVM或CLR(如运行时)是系统的本机低级层; 在这样的系统上,C/C++运行时需要"高级"(昂贵)仿真层才能工作.
因此,可能不值得尝试学习如何在"现实"中编程.这些天没人真的那么做; 这是浪费时间.你最好学习编程抽象如何帮助你编写正确的程序.如果一种语言让你的生活变得困难,那就不能证明你正在做"真实的事情".这只是意味着你选择了错误的语言来完成你想做的事情.
我不同意你首先需要学习C语言或汇编语言的观点.C++和C在理论上可能相似,但在实际使用方面却非常不同.通过仅使用C,人们对C++惯用语几乎没有什么收获,虽然在多种语言中获得实践经验是很好的,但是在语言学习中指定先决条件是徒劳的.我认为学习编程概念的最好方法是与熟悉它们的人坐下来谈谈,在StackOverflow上,在论坛中,或者,如果你幸运的话,亲自参与.
在一天结束时,我认为编程确实不是那么难,你可能需要有人一次解释它才能让所有内容都点击.这就是为了构建复杂而美观的机器,一遍又一遍地重复相同的简单概念.