想学 C++,求老司机分享自学线路(推介书目或者视频)

2016-11-22 22:50:47 +08:00
 Liwendian

感觉 C++好强大,好像学

3292 次点击
所在节点    C
30 条回复
000wangxinyu000
2016-11-23 08:59:29 +08:00
其实先接受面向对象的思想比较重要吧~
com2c
2016-11-23 09:23:01 +08:00
visionsmile
2016-11-23 09:27:26 +08:00
楼上说的很多了,有 C 基础之后可以直接去看 C++ Primer ,但 C++ Primer 并不是一本零基础的书。最好看之前有 C 的知识,而且章节顺序排列有些古怪,有些前面提到的内容你只有看到后面才能明白。但只有 C++ Primer 并不够,其实 C++ Primer 也只是列出了一些 C++工程中比较常用的部分,但 C++还有很多特性在 C++ Primer 中没写的(去读读代码就会发现别人的用法都看不懂...),这个可以看 TC++PL(The C++ Programming Language),其实 TC++PL 主要还是当手册来用,不过可以先大概过一遍有个基本的了解。后续就是 Effective 系列了,尤其是 Effective C++这个是必看的。建议阅读顺序为 C++ Primer->Effective C++->TC++PL ,会让你对 C++有更深的了解。我写过一份书单你可以参考一下: [学习 C/C++的一些书籍和工具]( https://imzlp.me/2016/06/12/some-of-the-c-and-cpp-books-and-learning-tools/)
starcraft
2016-11-23 09:49:16 +08:00
primer 这破书,少看为妙。
coderluan
2016-11-23 10:13:13 +08:00
NB 的东西多了,不要为了学习而学习。

C++主要分应用和算法两个方向:
应用方向基本没啥市场潜力和性价比可言,建议选择更合适的语言。
算法方向 C++只是工具,核心是各种算法和专业知识,这样的话推荐方向是:
C 语言(看一本经典书就行《 C 和指针》《 C 程序设计语言》) -》 C++(语法随便看看,重点是面向对象, Primer ))-》数据结构 /操作系统 /算法 /编译原理(弄本简单的大学教材就行)-》你想做的领域的知识和算法。

学完了,你就可以做你想做的或者找工作了。东西做完了或者找到工作了,之后再按上面顺序深入学习即可,这时候才到上面 Effective C++之类书登场。

PS :如果就是感受下 C/C++与 Java 之类的不同,找一本《 Learning C the hard way 》当故事书看就行了。
hitmanx
2016-11-23 11:20:58 +08:00
@veelog Sad but true.
q397064399
2016-11-23 12:54:00 +08:00
第一,从择业的角度来讲,选择一门语言其实就选择了其背后整个生态环境与利益链,
业界这 10 年来 C++市场在下滑是有道理的,做应用开发 C++暴露了太多底层细节,开发速度太慢,
而且招个新手写出来的代码还容易出错,
做底层开发,追求极致性能, C 语言几乎是不二之选,而 C++带来的那些所谓的 函数式 泛型 等等
在这些底层场景显得有点鸡肋了,话说这么多年了, Linux 还是 C 在主导
所以这些年, C# Java PHP 等语言在应用领域大行其道,不是没有原因的。

第二, C++标准库很难用,以 GP 为范式弄出来的 STL ,代码出问题很难定位,
C++11 之后 boost 与 stl 有很多重叠的地方,而且 C++命名空间是个历史遗留的坑,像 shared_make boost 跟 stl 都有实现,如果偷懒的话 很容易出现混淆的问题

第三,编程本来就很难了,学一门操蛋的语言让编程变得更难是没有意义的,
高效的算法并不取决于语言,而是取决于算法本身是否是当前应用场景的最优解,实在不行的话,你可以把 Java 全部译成机器码,再不行的话,还可以加钱买机器,毕竟有的时候 加钱上机器比程序员的优化靠谱多了

第四,所有的编程其实都可以用 if else 就能完成,如果将编码工作从编程活动中剥离开来,编码的本身就是人与机器对话的过程,从 Java 这个 10 多年的发展来看,业界达成了一个共识就是 开发应该分项目来选择语言,对于绝大部分面向用户的应用开发 应该牺牲一部分性能来 降低程序员犯错的可能性, 例如 Java 取消了 指针 虚函数( Java 的所有类方法都是 虚的,直接覆盖即可,无需声明)加入了垃圾回收 等等高级的特性,这些设计 无一不是为了降低程序员与机器对话所需要学习的难度

第五,很多初学者觉得学习一门很难的语言是有必要的,很多业界高手也是这样鼓吹地,你不要去学 Java ,先学 C/C++ 在学习 C/C++的路途上,会学习到很多计算原理的知识,这其实是本末倒置。
编程首要的问题 是学会如何解决问题,而解决问题的方式 并不需要计算机,在早些年的时候,美国还人工算过导弹轨迹,难道这些算法就不能移植到计算机上面了?
我认为一个程序员需要了解计算机的底层原理运作,例如函数调用时栈的展开 程序申请的堆内存是如何分配的,但是并不需要从 C/C++这条路上走过去,你随便找几本 例如 CSAPP 之类 讲底层原理的书就好了, C++能远离就远离吧。

第六,编程 最重要的是思想,而不是语言,好的语言 应该在 程序员的学习成本与机器运行时性能 做出妥协,而不是处处让人踩进坑,很显然 C++处处让人踩进坑,否则 C++不会沦落到今日的地步

最后一句话,珍爱生命,远离 C++
xuyuheng0905
2016-11-23 13:12:00 +08:00
黑的漂亮
Liwendian
2016-11-23 18:47:45 +08:00
被老司机们赶下了车。。。。。
q397064399
2016-11-24 07:17:24 +08:00
@Liwendian 要学也是可以的,但是要把 C++的学习限制在一定的范围,不要 GP 函数式 一堆全都装进学习计划,绝大部分人,把 C++都是当做 C with Class ,你去问他们模板函数 模板类 以及很多高级用法都是不怎么会用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/322502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX