如果我有一些其他编程经验,学习C++的最佳方法是什么?

22

想听听你对我学习C++的策略的看法。虽然我知道精通一门编程语言需要多年的时间,但我只是希望尽快达到可以被认为有能力使用它的水平。为什么要尽快?因为当我说“尽快”时,实际上是在说我很有决心,而且我不希望它永远持续下去。如果需要五年才能变得有能力,那就需要五年。我并不指望24小时或30天内就能掌握。

关于我:我没有计算机科学学位,我有人类学学位和图书馆科学硕士学位。学习计算机科学基础知识,如大O符号、二叉树和链表、排序算法等一直是一个挑战。可能没有什么能代替一流的计算机科学学位。 :( 我有多年的编程经验,从2001年开始使用PHP,2003年开始使用ActionScript,之后不久就学习了JavaScript。我现在已经学习Python约两年了,并且通过阅读K&R书籍和编写一些程序学习了C语言,但我可能不会被聘用为C工作。最近也学了Objective-C。目前我在一个网站上担任JavaScript&Python&CSS开发员。

总之,这是我的策略:阅读Stroustrup的书(我刚开始看第一部分),同时开始一个简单的C++项目,并完成许多Stroustrup习题。

你有什么想法吗?


当你说“Stroustrup的书”时,你是指他的新书《使用C++编程原理和实践》还是指《C++程序设计语言》? - ChrisW
哪个版本?我发现第一版是一本合理的K&R风格的介绍语言的书,但当然现在已经过时了。而第三版我完全不喜欢,它是一个混杂着C ++相关、软件工程相关和无关紧要的材料的巨大混乱。 - bobince
13个回答

25

Bjarne的书非常好,尤其是对于C++语法的讲解,但真正使你成为一名熟练的C++程序员的是Meyers的Effective C++。赶紧获取并阅读吧。

像我一样没有计算机科学学位的人也可以在硅谷初创公司工作。这是可能的,你只需要注意市场上有什么需求,并且永远不要停止学习。许多计算机科学专业毕业的学生最终会在他们没有学过的语言中工作,所以一定要打好基础。如果听到陌生的概念,一定要找一本好书和一家咖啡店认真学习。C++知识会随着时间而来- 靠Stroustrup和Meyers,你已经掌握了成为优秀C++程序员所需的90%的知识。


16

我的通常建议是保持C和C++的分离。不要假设C的建议或最佳实践适用于C ++,反之亦然。记住这一点可能会帮助您避免许多不良习惯。


4
因此,你应该始终将它们称为“C和C ++”,而不是“C / C ++”,尤其是在简历中。如果你只是指的具有类似于C的语法的编程语言,那么通常称之为“Algol-like语言”。 - rmeador

5

成为更好的编程者的关键之一就是让别人看你的代码。当别人对你的代码说“WTF”时,你可以改进它并从错误中学习。

尝试使用代码分析工具,尝试使用C++规范(例如Google的http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml),尝试使用Valgrind检测内存泄漏。学习如何手动编写Make脚本,尝试一些跨平台编译以了解哪些部分比较棘手。

您还可以查看一些流行的库,例如Boost。

至于项目,将其开源,以便人们可以查看并给出建议。为了真正融入您缺乏的计算机科学教育,获取一篇科学论文,并尝试使用C++实现它。检查结果并进行比较。


4

我认为Stroustrop的书不是一个好的起点。它更多地是一本高级/参考书。我建议从《C++ 编程思想》(第一卷)(以及第二卷)开始学习。并且多写代码。一旦你掌握了基本的代码,我建议阅读Scott Meyer的Effective C++系列和Stroustrop的书。


我也曾经和你一样想,但实际上Stroustrup有一本新书是针对初学者的,我还没有看过。 - ChrisW
《C++编程思想》对于初学者来说比《The C++ Programming Language》更加困难。 - Nemanja Trifunovic

4

以下是我建议的阅读/学习列表:

  • 首先阅读《Thinking in C++》第一版(掌握语法)
  • 阅读Scott Meyer的《Effective C++》(掌握更细微的差别)

之后,您可以扩展到以下内容。除了第一个之外,其他都可以跳过。您可以使用boost、STL或其他工具来学习这些内容:

  1. 学习使用字符串和其他容器(知道何时使用哪个容器)
  2. 假设您已经了解XML,请从C++中学习如何使用XML(也许编写一个WBXML到XML的转换器)
  3. 复习TCP/IP基础知识(也许编写一个基于XMPP的简单聊天客户端)
  4. 您可能希望学习一些GUI工具包,如GTK+、Qt、MFC等

此时,您可能想扩展到阅读有关设计模式的内容。我推荐《Design Patterns Explained》。

在使用C++工作超过一年后,您可能想要阅读《Inside the C++ Object Model》等书籍。

此外,我不建议您阅读Stroustrup的书籍,但因人而异。

希望对您有所帮助。


2
学习Qt。相信我,我以开发各种C++应用为生。使用C++与Qt使您的生产力无限提高。我曾经结合了许多不同的库(Boost、Intel's、数据库连接器等)才能实现我们所做的事情(高性能/实时计算)。最后,我发现我需要的80%以上已经包含在Qt中。
更不用说,在我看来,Qt拥有任何框架/库中最好的文档,这使得自学非常容易。
尝试一下,亲身感受一下。
免责声明:我只是一个开发人员——我不为诺基亚工作。 =p

1

听起来不错。开始吧!


1

听起来你走在了正确的轨道上;

1)给自己设定一些难度逐渐增加的小项目(比如Hello World,抽奖器等等)

2)找几本好书,其中包含练习题,可以用作参考。

大约15年前我读过这本书,但我记得Stroustrup的书并不是“如何学习C++”中最友好的一本。你可能需要在亚马逊上花些时间比较一下。


1
坦白说,如果你已经很好地学习了C语言,并且已经学过面向对象编程(因为你学过Objective-C),那么你不需要过度思考学习C++的方法。
话虽如此,你的计划是不错的。

1

如果你对C有很好的掌握,那么一旦你掌握了面向对象编程(OOP)的概念,学习C++并不是一个巨大的飞跃...希望你已经通过熟练掌握Python来掌握了这些概念。从C语言过来,学习C++最重要的事情就是真正熟悉标准模板库(STL),以及使用它时涉及到的所有微妙之处。

个人认为,Stroustrup的书并不是学习该语言的好书,它更像是一本参考书。我建议阅读C++ Primer Plus这本更好的书籍,以及Meyers的Effective C++ books,以真正学会如何连贯地使用该语言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接