首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【那些年,小弟我们一起读过的书】-学院派码农-经验分享(小弟我们学校一不错的童鞋的经验分享-求版主置顶)

2012-10-06 
【那些年,我们一起读过的书】--学院派码农--经验分享(我们学校一不错的童鞋的经验分享-求版主置顶)本期导读:

【那些年,我们一起读过的书】--学院派码农--经验分享(我们学校一不错的童鞋的经验分享-求版主置顶)
本期导读:你是否还在为如何学习编程语言痛苦不堪?你是否还在为看哪本编程的书纠结不已?你是否还没有找到合适的学习网站?本期我们特意邀请了黄超学长给我们推荐了一些平台和开发方面的书目,另外还推荐了一些你所不知的资讯网站,千万不要错过!!!

 

 

 

  漫漫邮子路“邮子书荐”(一)

 

 

 

学院派码农

 

   

﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋

 

引言

 

  很害怕说的不好,写的不对,误人子弟,那就罪过了。由于平时主要是用C/C++做一些图像和视频方面的处理,所以下面列的也主要是C/C++方面的内容。

 

  我们这个行业虽然技术更新非常快,但是普遍认为基本功才是最重要的。CPU体系结构、汇编、C/C++、操作系统、数据结构和算法、计算机网络,永远都是程序员的护生法宝,就如同少林寺的《易筋经》;学会了《易筋经》,几乎可以无所不能,任你创造武功。我们想想操作系统、编译器、虚拟机都是怎么开发的就知道这些知识的重要性了。先推荐一本书《深入理解计算机系统》,这本书是需要不断研究的一本经典,每次看都会有新的收获。这本书对计算机软硬件体系结构进行了深入浅出的介绍,涵盖的内容较多,值得反复研究。

 

  对于编码、程序最好还是深挖,更多的要去了解底层、了解程序背后的东西。要了解编译器在背后为我们做了什么,链接器又做了什么,程序在加载的时候是怎么一个过程,程序在执行的时候CPU、高速缓存、内存、操作系统是怎么样协作工作让程序顺畅的跑起来的。下面列出一些主题和书目,都是个人的一些想法和偏好,看完这些收获确实很大,但是其中还有很多不理解的,可能还有理解不正确的,还需要再钻研,也许需要在项目中或者到工作中才会有更深刻的体会和认知。下面我会就C语言、C++、Linux、Windows、数据结构、算法方面推荐一些我认为值得看得书,并分享一下自己在编程时的一些感受,希望能对家有所帮助。

 

  书目推荐篇

 

 C语言
 

  相信C语言都是学过的,基本的概念语法什么的应该都是懂的,这里就直接推荐书了。

 

《C程序设计语言(第2版新版)》:这本应该时刻放在手边,经常翻,超级大师的作品,字字珠玑,深刻透彻。这本书可以作为了解C语言思想的书籍,看过之后会对C有很大的了解。写的很精练,但是内容涵盖又非常的广,感觉是多一页不多,少一页不少的那种。由于是C语言设计者写的,所以里面会提到函数的设计思路。

 

《C和指针》、《C陷阱与缺陷》、《C专家编程》:三本一起来,暂且称其为C语言(进阶书)三杰。如果你想成为一个严肃的程序员,这三本必须读。起点有点高,但看某些内容时颇有顿悟之感。C语言的精髓是指针,而这三本书对指针和数组,还有函数这些问题分析的相当透彻。C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。要想学好C语言,那么指针是必须熟练掌握的。

 

《C语言深度解剖》:这个是已出版的书,作者之前在网上放了电子版的,叫《C语言深度剖析》,比较深入的研究了C语言。 其实这本书中,很多都是《C专家编程》、《C和指针》、《C陷阱与缺陷》中的内容,作者用自己的理解写出来,让人更容易理解和接受,而且对于知识点的讲解都配有相关例子。但是书中有一些错误需要自己辨别。而且所有的分析都基于VC6.0,太依赖特定的编译器了,所以里面说到的结论对不对还需要我们自己深思。总的来说还是一本值得看的书。

 

《高级质量程序设计指南》:林锐的书,顺便也可以了解一下林锐是何许人也。其实这本书讲C++的东西更多一点,比较强调编程规范、编程习惯等方面的问题。提的东西比较广、很重要,可惜讲的不太深,看完这本书以后建议找更多的读物来深入理解。据说有些公司的面试笔试题就选上面的,所以找工作的看看会很有帮助的。

 

C++
 

  如果没有学过C++,那么先找本傻瓜一点的教材翻起来,《C++Primer》。

 

《C++Primer》:一本久负盛名的C++经典教程,这本书几乎包含了有关C++的所有基础知识,包括一些基础的语法,常见的错误解析和最为基础的编程案例以及一些在C++中很经典的实例,这些知识能够使初学者很容易地掌握有关的知识,以最快的速度进入C++学习的“门槛”。但是内容相当多,要全部消化不容易,可以作为工具书放在手头翻。

 

  另外,如果大家想对C++有更深入的了解的话,建议大家看看下面几本书。

 

《Effective C++》、《More Effective C++》:对C++中各类知识点的总结,主要都是实际编程中的一些经验。

 

《C++对象模型》:第一代C++编译器开发主管所写,看这本书,他为你讲述了编译器在处理各种语法时在“后台”所做的事。对C++有较深入了解的同学会在读后有恍然大悟之感,侯捷翻译,质量还是不错的。但内容较深,涉及到标准和编译器的东西比较多,很多东西标准没有明确定义,留给厂商一些自由发挥的空间,对于这些我们不能想当然,要自己去辨别哪些是和编译器相关的。作者所使用的编译器较老,现代编译器是不是还是这样实现,需要自己上机练习,结合汇编代码看。

 

《C++反汇编与逆向分析技术揭秘》:这个对程序调试还是很有帮助的。

 

Linux

 

  至于Linux,由于在现在的学习中用的比较少,了解的也不是很深,就推荐几本网络上公认的好书吧。

 

《鸟哥的Linux私房菜》:相信这个应该是最好的教材了吧,作者完全顾及了初学者的感受,它懂得从哪里讲,以及如何讲才能让所有人都看得懂。从硬件讲起,为安装做铺垫,然后讲到文件的操作,编排得非常有序,内容也非常全了。

 

  另外大家可以看一下《Unix环境高级编程》、《Unix网络编程卷一、卷二》。要是有兴趣还可以研究研究Linux内核,对于理解操作系统,C/C++的学习会有很大的帮助。

 

Windows
 

《Windows核心编程》:原书名为Programming Applications for Microsoft Windows,但是这个Windows核心编程貌似是夸大了一点啊。这不是一本Windows编程的入门读物,而是进阶读物。没有它,你也可以写出各种Windows程序。但是有了它,你的视野一下子就打开了。可以认为是操作系统的延伸,从OS理论到OS实现。由于WINDOWS代码是不可见的,而这本书已经尽最大努力让你在API层上窥探一些系统底层的一些知识。对于Windows平台下的开发,这个最好认真研读。

 

《Windows程序设计(上下册)》:也是经典,当然不一定要所有内容都搞透,用的时候翻就行了。

 

  不过Windows下写程序最好的东西应该还是MSDN,电脑上装个安装版的,不懂的时候就到里面搜,肯定能找到你要的东西,同时还能练英文。

 

数据结构、算法
 

《算法导论》:这个要啃下来不容易,数学的东西比较多;

 

《数据结构与算法分析:C++描述》

 

《编程之美:微软技术面试心得》

 



《编程珠玑》、《编程珠玑(续)》

 

  对于像设计模式这种需要大量经验才可以领悟到的知识,如果你从来没独立写过一个上万行的程序,基本上理解不了设计模式在讲什么。其实这种时候能做的也就是背下来,理解什么的都是扯淡。诸如此类,学习程序,如果要加速那个过程,肯定要花大量的时间写代码。当你把项目做得越大、越复杂、算法越扭曲、界面越华丽、尺寸已经大到你觉得不学习新的方法论就肯定会让代码失控的时候,这个时候你来看设计模式的书,保证是每看到一个模式都觉得人家说到你心坎里去了。那你不仅可以迅速理解,而且以后还可以不由自主的想起来使用它。所以前期的话还是把基本功练扎实了,更高级的主题到我们需要的时候自然而然会去学。

 

  个人经验分享篇
 

1.程序出错了怎么办
 

  程序错了很正常,程序越大调试占用的时间会越多。调程序要有耐心,千万不能浮躁,要静心定性。有时候我们会有这样的想法,认为我们的程序肯定是对的,是不是编译器有问题,这个概率很小啦,碰到错误,我们应该告诉自己肯定是我们的程序有问题。调程序要充分利用好工具,现在一般都是使用IDE,怎么样利用好IDE,不管是Windows平台还是linux平台都要熟练使用开发环境。怎么样调试,跟踪变量、观察内存、甚至是看相应的汇编代码。另外最好熟悉调试的相关快捷键,效率会更高一点。注意编译器链接器给出的出错信息,一般同一类错误给出的提示信息基本都是一样的,解决完错误后想想是怎么原因造成的,再结合错误的提示信息,那么下次碰到相同的出错信息就能知道大概是什么原因了,这样就找到了排错的大致方向,不至于盲目、下不了手。我们也不能盲目相信编译器给出的错误提示,有时候不一定准。这里推荐两本书《程序员的自我修养》(这本书感觉有点乱,但是内容还是很多的,而且讲的也不错,看下来收获还是蛮大的)、《Linkers and loaders》(这本书有中文版的,但是本来英文的就写的比较晦涩,中文版的翻译的也不怎么样,所以看下来会有点压力)。

 

2.阅读源代码,撰写文档很重要

 

  当我们了解了语法,写了一些代码后可以阅读一些他人的代码,有很多开源代码都是很好的选择,甚至是一些库的源代码(TCP/IP卷二:实现、glibc)。看之前先想想如果让你自己实现你会怎么写,然后再去看人家是怎么写的,为什么人家会写的这么简洁,效率这么高。当然还可以看看基本的语法是怎么样用到实际的代码中的,比如宏定义、内联、const,这些是在哪些地方用的,以后自己写的时候也可以学着用。我接触的主要是多媒体通信方面的,X.264、WebRTC(这个比较新,Google的)都是可以研究的。拿到别人的代码,第一步要先把代码跑通,然后熟悉程序的流程,最好能画出流程图来,再看类之间的依赖关系、函数之间的调用关系,最后才去研究相关函数的具体实现。这里提醒一下,我们写代码的时候要尽量写好注释,学会写文档。不管是参加比赛还是将来工作都会要求我们有撰写文档的能力,平时尽量能学着写起来,我知道很多写程序的人很排斥这个(包括我自己),但是还是要强迫自己去写,自己懂了不代表别人也能懂,把自己的想法表达出来也是一种能力。

 

3.书看不懂怎么办

 

  很多时候看书感觉像是在看天书,这个不懂,那个也不懂。看得懂的要仔细看,争取看出更多东西,看不懂的要硬着头皮往下看,不可能是一遍就能看懂的。当然这其中有一些问题,有很多东西看不懂是因为需要先修知识,那么我们就应该把先修的那部分先看懂再回来接着看。还有的情况是我们理解的角度不对,那我们可以求教Google,搜索相关知识点,先看看别人是怎么理解的,然后再回去看。很多时候我们会在不同的书上看到同一知识点,千万不能不看,每个作者对同样问题的理解角度不一样,我们看多了就能从不同的角度去理解,可以对其有立体性的认识。另外一些好的作品是要反复研读的,随着知识的积累,回过头再去看的时候会有新的收获。如果能找到三两同伴一起研究,那就最好不过了。

 

4.我推荐的网站博客

 

  要在CSDN、weibo等社交网络关注技术大牛,订阅RRS。及时了解新语言,对技术要有深入研究而不是仅仅停留在只会调用API的层面上。技术是要靠实力说话的,光忽悠没用,所以尽可能早的去深入了解。另外对他们的关注会了解到更多的业界动向,出现了哪些新技术,作为致力于IT发展的我们应该要有一个全局的认识。对于IT行业、IT企业的发展感兴趣的,可以翻翻吴军老师的《浪潮之巅》,写的很好,值得一读。

 

网站:

 

http://blog.jobbole.com/,一个资讯类网站吧,闲来可以看看;

 

http://www.csdn.net/,这个网站应该不用多介绍;

 

http://www.chinaunix.net/,Linux环境下开发的好去处;

 

http://www.cnblogs.com/,里面总结性的东西比较多。

 

博客:

 

http://blog.csdn.net/DL88250

 

http://blog.csdn.net/byxdaz

 

http://blog.csdn.net/v_JULY_v,算法必看。

 

  上面列的这些网站和博客隔三岔五就上去看看,碰到好的文章保存下来,经常翻出来研究下,学习了一段时间再看又会有新的认识和收获。去论坛里面、博客上面看人家有什么问题,你有没有意识到有这些问题,你能不能解决人家提出的问题,你准备怎么解决,回复者里面是不是有比你更好的解决方案。试着去回答他人的问题,不要怕出错,相互交流才会有更大的提高。总的来说就是向他人学习,和他人探讨问题。通过阅读他人代码提高自己的水平,同时尽可能去帮助他人,用一种开放地思维接受和分析他人的解决方案以及思想。

 

5.注意关注热点

 

  现在很fashion的词——云计算、物联网,吸引了很多人的眼球,其实这只是一个概念,落实到实处还是要有相关的应用、产品推出来。所以包括多核多线程编程、海量数据处理、机器学习等这些都是值得研究的,会有大量的应用用到这些技术,感兴趣的可以深入研究。前面都没有提到数据库,对于数据库还是建议大家要有所了解的,相信将来不管是服务器端、桌面、还是手持终端上的开发,对数据库的要求都会越来越高。

 

6.关于提问题和网络资源的使用

 

  对于不懂的问题或者自己没法解决的问题,先上网搜,现在网络资源这么丰富,绝对不能浪费了。怎么搜、选择什么关键词、到哪边去搜,这又是一门学问了。这样在网上看了一圈、学习了相关知识后再去请教别人就能有更好的认识了,不至于别人讲的一些术语或是基本知识都听不懂。向别人提问题,不管是当面还是在网上发帖,一定要把问题讲清楚,什么平台、什么背景都要说,另外把自己已经理解了多少、或是自己是怎么理解的也最好要说明,这样别人才能针对性的作答。

 

后记

 

  大家也要学会忙里偷闲。多参加娱乐、体育活动、多接触大自然。身体是革命的本钱,你的身体和大脑需要休息,经常站起来活动活动,切忌一直坐着盯着屏幕。

 

  什么事情都怕你坚持,坚持下去总会成功的。对于软件、对于开发才刚上路,要时刻学习、坚持学习。另外前面有什么不对的,不足的地方,希望得到指正,更希望能当面交流,共勉!

 


 

 

 

作者为2010级通信与信息工程学院研二学长××,保研通院×××老师

 

2011.12 获第八届全国研究生数学建模大赛二等奖;



 

2011.11 获中国移动二等奖学金;

 

2010.06 获×××优秀毕业生;

 

2007.11-2009.11 连续三年获××××校“三好学生”;

 

2007.11-2009.11 连续三年获×××二等奖学金;

 

2009.11 获×××单科成绩优秀奖;



[解决办法]
祝你好运
[解决办法]
可惜没有加精!
[解决办法]
很好,注記
[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

[解决办法]

探讨
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

[解决办法]
多谢楼主分享。

热点排行