admin管理员组文章数量:1604318
推荐几本好书么
首先是纯C的教材
http://www.vcgood/bbs/forum_posts.asp?TID=1560&PN=2
http://book.chinaz/C/C/index.html
然后是C++的教材
首先是毫无基础的时候,先要初步掌握语法并形成编程的概念
level 0:
接下来是Windows编程
Unix/Linux/BSD系统
相对于Windows,在UNIX下编程获得相关文档要方便很多。由于历史原因,能够看到的教材基本上都经受了考验,几乎个个都是经典,不象Win下有鱼龙混杂泥沙俱下的现象。
三本可以替换的入门书,任选其一即可:
Bruce Molay的《Understanding Unix/Linux Programming A Guide to Theory and Practice》(Unix/Linux编程实践教程)应该是你的第一本书。一句话,大家都说好。
Kay A.Robbins(美), Steve Robbin(美)的《UNIX Systems Programming》(UNIX系统编程)。他是一本介绍UNIX系统的工作原理以及学习UNIX系统程序编写方法的经典教材,一本程序员不可多得的案头必备参考书。
Neil Matthew(英),Richard Stones的《Beginning Linux Programming》(Linux程序设计)。本书是Linux程序设计领域的经典名著,以筒单易懂、内容全面和示例丰富而受到广泛好评。
随后,以下几本书排名不分先后,分属不同方面,想深入的伙计建议都看:
W.Richard Stevens, Stephen A.Rago的《Advanced Programming in the UNIX Environment》(UNIX环境高级编程)
W.Richard Stevens,Bill Fenner, Andrew M. Rudoff,Richard W.Stevens的《Unix Network Programming》(UNIX网络编程),注意这套书是三卷本。
宋宝华的《Linux设备驱动开发详解》。一本介绍Linux设备驱动开发理论、框架与实例的书,是作者多年Linux设备驱动开发从业经验的总结。能够在众多海外强手的教材阵中脱颖而出,足见作者的实力。
Robert Love 的《Linux Kernel Development》(Linux内核设计与实现)。内核相关概念及如何使用内核介绍的非常到位,全书偏应用,主要强调如何用,以及为了用而需要了解的内核实现。
Daniel P. Bovet和Marco Cesati 的《Understanding the Linux Kernel》(深入理解Linux内核),分析内核代码几乎无出其右者。
John Lions(澳)的《Lion'Cornmentary on UNIX 6th Edition With Source Code》(莱昂氏UNIX源代码分析)。本书由上下两篇组成。上篇为UNIX版本6的源代码,下篇是莱昂先生对UNIX操作系统版本6源代码的详细分析。本书语言简洁透彻,曾作为未公开出版物在黑客界广泛流传了二十多年。现在MIT的操作系统的研究生课程里面依然采用的是这本书,unixV6的代码量小,门槛比动辄数百万行的linux更适合初学者。绝对是神作,很难买到这本书,所以如果遇上要毫不犹豫弄到手。
和MSDN类似,Unix/Linux/BSD下也有一个文档大全似的东西,而且只要一个命令就能打开他。他就是所有Unix系统都会自带的man page,完整安装的情况下,他已经存在系统中,更重要的是,他是免费的,相对照的MSDN宇宙版至少需要几百美元。
最后,在UNIX下无论如何都必须翻阅的教材是由公认的Unix编程大师、开源运动领袖人物之一Eric S. Raymond亲自撰写的《The Art of Unix Programming 》(UNIX 编程艺术),这本书著名到他有个专用缩写: TAOUP。他不是在技术层面讨论问题,而是从哲学角度来讨论UNIX编程,从而把编程上升到了艺术的高度。
数据结构和算法
数据结构就是在机器里组织数据的方法,而算法就是解决某个问题的总思路。数据结构和算法有两个层次,一开始的时候,它是语言相关的,尤其是对于数据结构来说,因此C和C++的教材要分开。后来在算法的层面,他就只是一种思想,也就和语言无关了。
清华教授严蔚敏和广东工业大学教授吴伟民的《数据结构(C语言版)》,这是清华计算机系的标准教材,还有什么要补充的么。
清华教授殷人昆的《数据结构(用面向对象方法与C++描述)》,也是清华的教材。
Mark Allen Weiss的《Data Structures and Algorithm Analysis in C》(数据结构与算法分析--C语言描述)和《Data Structures and Algorithm Analysis in C++》(数据结构与算法分析--C++语言描述)。数据结构和算法分析的经典教材。
之后就可以看深入一点的东西了:
王晓东的《算法设计与分析》。国内本科教材,书写得不错。
M.H.Alsuwaiyel(沙特)的 《Algorithms Design Techniques and Analysis》(算法设计技巧与分析)。本书结构简明,内容丰富,适合于作为计算机学科以及相关学科算法课程的教材和参考书,尤其适宜于学过数据结构和离散数学课程之后的算法课教材。同时也可作为从事算法研究的一本好的入门书。
Thomas H.Cormen, Charles E.Leiserson的《Introduction to Algorithms》(算法导论)。这是麻省理工学院计算机系的算法教材,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。
经典中的经典,每一个想要掌握算法精髓的人都必须看的书,算法书中的圣经,他就是:
大师中的大师 Donald E.Knuth的《Art of Computer Programming》(计算机程序设计艺术)。
Donald E. Knuth(唐纳德 E. 克努特,中文名高德纳)是算法和程序设计技术的先驱者、计算机排版系统TEX和METAFONT的发明者,他因这些成就以及大量富于创造力和具有深远影响的著作(19部书,160篇论文)而誉满全球。这么说吧,目前你所能听说过或者还活着的那些计算机软件大牛,没有哪个不直接或间接的受过Knuth的教导。他强悍的程度只用一件小事就可以说明,在撰写这套《计算机程序设计艺术》的过程中,由于感到原有排版系统的不足,他特地重新制作了一套新的计算机排版系统,这套称为TEX的东西目前已经是出版界的标准系统。
《计算机程序设计艺术》这套关于算法分析的多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷已经组成了程序设计理论和实践的惟一的珍贵资源,无数读者都赞扬Knuth的著作对个人的深远影响,科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员已经成功地将他的“菜谱式”的解应用到日常问题上,所有人都由于Knuth在书中表现出的博学、清晰、精确和高度幽默而对他无比敬仰。微软的盖茨曾经说:如果你能完成他书中50%的习题,请尽管给他寄简历。(事实上,用盖茨来衬托Knuth简直是对Knuth先生的侮辱)
此书原定计划为七卷。目前已出版四卷,作者还在撰写后续部分。已出版的分别为:
第1卷 基本算法 Volume 1: Fundamental Algorithms
第2卷 半数值算法 Volume 2: Seminumerical Algorithms
第3卷 排序与查找 Volume 3: Sorting and Searching
第4卷 组合算法 包括:
第4卷 第0册 组合数学和布尔函数 Introduction to Combinatorial Algorithms and Boolean Functions
第4卷 第1册 尚未出版
第4卷 第2册 生成所有元组和排列 Volume 4, Fascicle 2: Generating All Tuples and Permutations
第4卷 第3册 生成所有组合和分划 Volume 4, Fascicle 3: Generating All Combinations and Partitions
第4卷.第4册 生成所有树 Volume 4,Fascicle 4: Generating All Trees History of Combinatorial Generation
各种图形以及其它库
图形库,著名的有两个:OpenGL和DirectX。
OpenGL(“Open Graphics Library”)是一个性能卓越的三维图形标准,是图形硬件的软件接口。他是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准,具有使用简便、效率高、便于移植、性能卓越等特点,独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植。目前包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。包括迪斯尼梦工厂等好莱坞厂商的大批电脑特效程序都是使用的OpenGL库。
OpenGL有两大经典教材:
OpenGL体系结构审核委员会,Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis 联合撰写的《OpenGL Programming Guide: The Official Guide to Learning OpenGL》(OpenGL编程指南),此书因封面为红色,被大家爱称为“红宝书”。
Richard S Wright和Benjamin Lipchak的《OpenGL SuperBible》(OpenGL超级宝典),是另一本合适的入门教材。
OpenGL结构评审委员会的《OpenGL Reference Manual》(OpenGL 参考手册),就和他的名字一样,它是一本文档大全,和“红宝书”相对应,他被称为“蓝宝书” 。
按照前辈的经验,有红蓝两宝书足矣。不过,OpenGL社区的实力雄厚的很,好为人师的大牛也不少。有一位昵称NeHe的大牛,他在自己的网站上放了一整套完整的OpenGl教程,实例教学讲解清晰,而且会跟随OpenGL的发展在随时更新,更重要的是,除了C/C++的标准例程之外,他的例程还几乎涵盖世界上的所有语言,如果想用自己喜欢的独特语言,可以参考页面最下方的联接。NeHe的教程在http://nehe.gamedev/。同时,Nate Robin的例子对你理解OpenGL很有帮助。http://www.gamedev/reference/articles/article839.asp。
OpenGL最权威的资料在他的官方网站 http://www.OpenGL的Documentation中,可以下载到官方教程和例子程序。
DirectX是微软提供的一种应用程序接口(Application Interface)。简单的说它是一个提高系统性能的辅助加速软件。"Direct"的意思是"直接的",而"X"则意味着"无限"。事实上它是一个.dll(动态连接库Dynamic link library)的文件集合。通过这些动态连接库文件,开发者们可以在不考虑设备差异的情况下访问硬件最底层。这项特性使程序员从无尽的硬件驱动程序中解脱了出来。DirectX同时封装了一些COM(Component Object Model)对象,这些 COM 对象为访问系统硬件提供了一个主要的接口。DirectX是一种游戏开发利器,Windows下的大量游戏在制作时都用到了它。DirectX包括很多组件,他们按功能划分为:DirectDraw,Direct3D,DirectMusic,DirectSound,DirectShow,DirectPlay,DirectInput,DirectSetup and AutoPlay等等。
在DirectX中最重要并且最具有代表性的是Direct3D和DirectDraw(在DirectX7.0之后被合并进了Direct3D),它的主要功能就是3D图形。Direct3D和OpenGL处于竞争关系,很难评论他们孰优孰劣。OpenGL专攻图形,而且适用众多平台。而DirectX可以在Win平台下获得多样的服务,而不止是图形。
如果你想学习如何使用DirectX,那么必须得掌握BASIC或Delphi或C++/C#等语言中的一种,纯C是不行的。同时,掌握Win32编程技术以及一些其他相关的知识也是必需的。
Frank D.Luna的《DirectX 9.0 3D游戏开发编程基础》可以作为你的入门书。DierctX合适的入门书其实很多,重点是要注意版本要跟上最新的DircetX才行。
微软的东西,最标准的教材就是MSDN。想深入学习DirectX,就去翻阅MSDN好了。而且,那里也有不错的入门资料。
OpenGL和DirectX的最新进展往往是由显卡厂商作出的,经常去Nvidia和ATI的主页上去关注最新技术是个好选择。
其他库,比如用于构建窗口程序框架的GTK、QT、wxWidgets等,用于科学计算的Blitz、CGAL,网络通讯的ACE,加解密用的Crypto++,测试用的CppUnit,XML用的xml4c、XMLBooster、Xerces c++,当然也少不了即将加入标准库的Boost,这些库由于在不断的发展进化中,实体出版物相对较少,但他们自带的电子文档和相关主站上的资料通常足以满足需求。请记住,既然这些库的作者把他们发布给大家用,他当然要给齐资料让我们知道怎么用才行。
软件工程思想
当软件膨胀到一定程度,它就不是一个人能搞定的了。这个时候,就要像建筑上对待一个大型工程项目一样,通过有效的组织管理来进行软件生产。这种思想就叫软件工程。而实际上,即使是个人开发者,在初窥编程门径之后,也建议学习软件工程,从而培养起好的编程习惯便于将来的集体合作。所谓好习惯的养成是很难的而改掉坏习惯就更难,所以千万不要养成坏习惯。
林锐、韩永泉的《高质量程序设计指南--C++/C语言》会让你大吃一惊,原来你原先的编程习惯就有这么多的漏洞。
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides的《Design Patterns:Elements of Reusable Object-Oriented software》(设计模式:可复用面向对象软件的基础),这是软件复用的权威教材,不过似乎要有很久编程经验之后才能领会。
Andrei Alexandrescu 著 侯捷 译的 《Modern C++ Design Generic Programming and Design Patterns Applied 》(C++设计新思维——泛型编程与设计模式之应用)是从实例上演示设计模式的。
Martin Fowler著 侯捷 译的 《Refactoring: Improving the Design of Existing Code》(重构:改善既有代码的设计),与巨著《设计模式》并称"软工双雄",全美销量超过100000册,亚马逊书店五星书。
Ian Sommerville的《Software Engineering》(软件工程)直接以软件工程为名的书,猜猜也知道有多强,此书已经再版8次。
Frederick P.Brooks的《The Mythical Man-Month: The Essays on Software Engineering》(人月神话)。出版于1975年的《人月神话》是软件开发方面的经典作品。在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践。32年后的今天,他的思想仍然引领我们。他是和《计算机程序设计艺术》一样经典的著作。
找书的诀窍
光看书似乎不解决问题,难道要做题
OJ是什么
OJ的题目大部分是关于算法的。题目的输入输出通常是命令行方式,而非图形界面。也就是说,要关注的不是平台的兼容性、文件的格式抑或窗口的布置这种无关紧要的细节,而是问题本身的逻辑实现。一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态,通过、错误、超时、溢出或是无法编译。
哪里有可用的OJ
内容丰富、分类清晰明了的中文在线评测题库。题量适中(目前大约400题左右),难度面向初学者和中学生,尤为重要的是,界面和题目都是中文的。
xiao
SACO http://ace.delos/usacogate/
版权声明:本文标题:C、C++以及widows编程、数据结构算法等编程书籍推荐 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728457285a1158804.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论