链接:https://www.zhihu.com/question/32087709
编辑:深度学习与计算机视觉
声明:仅做学术分享,侵删
即将读研,虽然考的是本专业(GIS),但是研究生读的专业在计算机学院,要求所有研究生都要会编程。
本科期间学过C++,但是基本忘的差不多。现在暑假已经被要求到学院搞项目,但是因为对编程只有概念上的认识,所以现在都是在自学C++。
这几天开始从头看C++ primer,但是因为基础实在薄弱,很多内容看很久都看不懂,上网查资料也是一片模糊。看了几天之后,觉得我学习的方法有问题(我是每天都在练习他的习题)。
我知道学习程序语言要多敲代码,但是这个敲代码不知道从哪里入手,看书也不知道哪些是重点,哪些现在可以不看的。完全没有一个详细的规划,很乱。求大神给些意见!
相信也有其他小伙伴有类似疑惑,特此摘录了一些小伙伴的回答,以供参考!
作者:dawnmist
https://www.zhihu.com/question/32087709/answer/54936403
个人经验,C++ primer 第一次可以跳着看。关键是要尽快用起来,在使用中熟练,而不是在细节中迷失。
以C++ Primer第五版为例,第一遍读的时候:
Part1也就是前七章,除了6.6,6.7节,都要通读。尤其是第三章初步介绍了vector和string,简直就是新手福音,搞定这两个容器就能写一些简单的程序。
Part2基本就是数据结构和算法,如果有基础读起来很轻松。
9,11两章介绍的容器,以及12.1节的智能指针要通读。多用智能指针和容器,远离segment fault. 第10章里的泛型算法可以慢慢读,读完以后可以写出高逼格的函数式风格C++。12.2节讲了怎么用new和delete分配空间,题主作为新手,知道这种写法就行,写程序时尽量用容器代替原始数组,尤其是代码里最好不要有delete。
Part3是块硬骨头,标题就是Tools for Class Authors. 作为一个"class user",有些部分第一次是可以略过的。
13章很重要,要细读。初始化,复制,赋值,右值引用是C++里很微妙很重要的部分,别的语言对于这些概念很少有区分得这么细的。这一章不但要精读,还要完全掌握。
14章的操作符重载第一次可以观其大略;14.9节第一次可以跳过。
15章讲OOP,重要性不言而喻。如果之前一点概念都没有,学起来会觉得比较抽象。网上关于OOP有很多通俗有趣的文章,可以一起看看。
16章讲泛型编程,第一次读16.1节,掌握最基本的函数模板和类模板就行了。
Part4就更高档了,很多内容第一次就算啃下来,长久不用又忘了。第一次读推荐把18.2节读懂,命名空间简单易用效果好。别的内容可以观其大略,用时再看。17.1节的tuple是个有趣的东东,可以读一读。17.3节的正则表达式和17.4节的随机数也许有用,也可以读一读。如果需要读写文件,要读一下17.5.2节的raw I/O和17.5.3节的random I/O。
最后给题主的建议是,写C++,要尽量避免C的写法。用static_cast而不是括号转换符;用vector而不是C里面的数组;用string而不是char *;用智能指针而不是原始指针。当然I/O是个例外,printf()还是比cout好用的;转换数字和字符串时sprintf()也比stringstream快
作者:vczh
https://www.zhihu.com/question/32087709/answer/977501204
c++primer就是用来给你学习语法的,然后你就找点什么来做。一般我建议学到指针操作字符串之后,就着手复刻windows记事本。
学编程是一件周期长达10年的事情,早期根本不需要在乎学习效率,只要不断的沉迷于开发软件就可以了,知识自己就回来了。
只有知道为什么野鸡套路不行,你学习正规套路才会掌握得更好。适当走点弯路,提高学习质量
作者:匿名用户
https://www.zhihu.com/question/32087709/answer/55497335
对于工程性、技术性的知识,没有实践的感性认识作为基础,读也读不懂。那么问题来了,没有实践就没法读懂,没法读懂自然也就没法去做正确且高质量的实践,问题似乎进入了一个死循环。
学习东西最怕不知道学的东西有什么用处,只要是这样,多半会半途而废。而个问题的深层次原因就是上面说的。
要想打破这个死循环,你唯一能做的就是调整心态,然后读一点就实践一点,一点一点的往前挪。这是学习任何新知识所必需的“痛苦”经历。在这里我给你几点建议,帮助你尽可能的减轻“痛苦”,让你起码能有一个开始:
1.第一遍要通读,而且可以不求甚解,但必须读的有速度,不要在不懂的地方过多的停留,不要试图在第一遍的时候就搞懂所有细节。假如读到后面需要前面的知识,但是又忘记了,可回头看,也可不回看。很多人想用c++ primer学习c++,但是第一遍都没读完就放弃了。
2.接上条。读第一遍的目的是让你知道c++都有什么东西,先混个脸熟,等日后见到一些比较高级的特性心里不会发慌。
3.调整心态,不要急于求成,除非你已经拥有了丰富的编程经验,否则一个假期不可能到达熟练掌握c++的程度。要认清这一点,遇到挫折了不要怀疑自己,大家都是这么过来的。
4.c++不是一门可以边学边干的语言,里面坑很多,要是一知半解就去用,很可能掉坑里了还不知道。
5.如果觉得c++ primer太厚,可以读读作者写的另外一本:Essential C++ (豆瓣)。
6.关于书上的习题,第一遍看的时候可以不做。原因是做习题就会陷入到细节中,学任何东西过早的陷入细节都不是好事情。凡是过早陷入细节的,很少有能坚持到最后的。
作者:dabbler0606
https://www.zhihu.com/question/32087709/answer/54871907
首先,看c++primer
一定要看第5版
1.从头开始看,别跳
c++11穿插在书的每一个角落,跳到后面你可能看到新标准又返回来看.
而且这种经典书看几遍每次也会有新收获
2.课后习题一定要做
课后习题才是查露补缺.一定要做,做题和不做差别太大了,而且课后很多经典题
3.最好记笔记,这种大部头不能保证所有都常用,所以有些会忘的很快..记了笔记可以快速记忆起来自己看的
以上是我看完c++primer第4版没做习题和第5版做完课后习题的感受
这么做比较费时间,但是c++语法层应该没问题了。
习题答案github有很多
作者:Godbird
https://www.zhihu.com/question/32087709/answer/147704354
老实说,我觉得如果你真的一点编程经验都没有完全从零开始的话,C++ Primer的Primer一词对你来说可能并不适用。这本书其实还是有一些门槛的,只是相对于其它比如Inside C++Object Model,Effective C++,Exceptional C++甚至The C++ Programming Language这些书来说门槛要低那么一点。
所以,如果你是科班出身,大可以不紧不慢的在大学里学完C++的课程再来看这本书。可以加深你对C++的认识,如果你直接就入门这本书学编程,其实我并不推荐。
另外这本书真的很实用,很多技巧是工作中马上就能用到的,所以无论你做什么行业,只要用C++开发程序,这本书我认为无论如何都是值得一看的。
作者:南边的风
https://www.zhihu.com/question/32087709/answer/54907249
我C++ Primer Plus和C++ Primer 都看过,我还是比较喜欢C++ Primer Plus的风格,可能由于是从C Primer Plus看过来的,网上有每个实例的完整代码,边调试边看书会效果比较好。
C++ Primer相对 C++ Primer Plus要抽象一点,也更深一点,但是缺少完整的实例工程,学起来不是很好,个人建议先看C++ Primer Plus,把每个实例调试一遍,实践出来的效果更好,C++ Primer就当做是工具书吧,有疑惑的时候再翻翻。C++ 过于庞大,一定要有实际的工程代码才能理解的比较好。例如opencv是C++写的计算机视觉库,拿几个工程来练练手,看opencv函数的实现细节,几个工程下来,C++会进步不少的!
作者:胖子许木木
https://www.zhihu.com/question/32087709/answer/980134433
编程是理论+实践相结合的活,二者缺一不可
《C++ Primer》里面没有非常高深的理论,全是基本语法,以普通人的智商学起来不难,半年怎么也够了。但为什么很多人学完《C++ Primer》还是什么都做不了。
真的是C++的锅么?不是的,是因为C++涉及的应用面太广,例如:
RPC网络开发 (grpc, Nginx, baidu-rpc)
数据库开发 (LevelDB, RocksDB, MySQL, MongoDB, Redis)
多媒体开发 (FFmpeg, imageMagick)
人工智能开发 (Tensorflow, Caffe2, MXNet, PaddlePaddle)
编译或解释器开发 (V8, HHVM)
游戏或渲染引擎开发 (Webkit引擎)
桌面开发(GUI)
驱动设备开发
上面列出来的每一个方向都涉及到两项基础知识的储备
操作系统
数据结构和算法
这两项知识有必读的几本书:
《深入理解计算机系统》
《现代操作系统》
《UNIX环境高级编程》
《算法》
《算法导论》
以上均是理论,平均每本书都是600页+, 五本3000页,加上《C++ Primer》3600页绰绰有余。
怎么实践这两项基本知识呢:
数据结构和算法:边看书边刷LeetCode,还能锻炼C++基本语法,额外多想一下是否线程安全?
操作系统方面:找准某个方向,先熟悉开源软件如何用,再看看有哪些功能,根据功能造轮子。
怎么造轮子呢,首先看下企业内部简化版研发流程:
需求提出----->系统设计-----> 开发-----> 测试----->部署
对应自己造轮子的时候:
系统设计可能会缺少,因为大多数初学者没什么设计能力,能实现就不错了
部署会缺少,轮子嘛,肯定不是非常完备,自己玩玩就行了
测试会缺少一部分,能把单测写了就不错了
那最后只剩下需求提出和研发:
需求提出是需要细化的,空想是想不出来的?想不出来需求,就得先把开源软件用熟悉了,看看有哪些功能,记下来,拆解开,一旦功能拆解清楚,研发其实是相对简单了。
总之学习C++需要理论和实践相辅相成。3600页的理论+实践,没两年下不来,何况这些书不是一遍能过,至少得3遍,需做好长期准备。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓