『壹』 电脑编程初学者看什么书
1、《代码大全》史蒂夫·迈克康奈尔
“优秀的编程实践的网络全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。这本书有 50 页在谈论代码布局。” —— Joel Spolsky
对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中 99% 的观念。– esac
2、《程序员修炼之道》安德鲁·亨特、大卫·托马斯
对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。
虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个 P2P 的音乐交换网络图,那这本书就适合你了。—— Joel
3、《计算机程序的构造和解释》Harold Abelson、 Gerald Jay Sussman、Julie Sussman
《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。
其他书籍则处理算法。这些书都有自己所属的位置。
然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美。
它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。
4、《C程序设计语言》Brian W. Kernighan / Dennis M. Ritchie
这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。
5、《算法导论》 Thomas H.Cormen/Charles E.Leiserson/Ronald L.Rivest/Clifford Stein
在我看来,代码只是一个工具,并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建“管理”层。
我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron
『贰』 计算机编程专业必读的书有哪些 我是学计算机的
1.生活丰富多彩,会令你一生都难忘,但难忘有很多种,你可以学了很多东西而难忘,也会因为什么都没学到而难忘!
2.计算机专业是一个很枯燥的专业,但即来之、则安之,只要你努力学,也会发现其中的乐趣的。
3.记住:万丈高楼平地起!基础很重要,尤其是专业基础课,只有打好基础才能学得更深。
4.C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好。
5.C语言与C++语言是两回事。就像大熊猫和小熊猫一样,只是名字很像。
6.请先学习专业课《数据结构》、《计算机组成原理》,不要刚开始就拿着一本VC在看,你连面向对象都搞不清楚,看VC没有任何用处。
7.对编程有一定的认识后,就可以学习C++了。(是C++而不是VC,这两个也是两码事。C++是一门语言,而VC教程则是讲解如何使用MFC类库,学习VC应建立在充分了解C++的基础之上。看VC的书,是学不了C++语言的。)
8.学习编程的秘诀是:编程,编程,再编程;
9.认真学习每一门专业课,那是你今后的饭碗。
10.在学校的实验室就算你做错一万次程序都不会有人骂你,如果在公司你试试看!所以多去实验室上机,现在错得多了,毕业后就错得少了。
11.从现在开始,在写程序时就要养成良好的习惯。
12.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路。
13.你会买好多参考书,那么请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码。
14.Asp、Jsp、Php、VC、C#、.NET这些东西都会过时,不会过时的是数据结构和优秀的算法!
15.记住:书到用时方恨少。不要让这种事发生在你身上,在学校你有充足的时间和条件读书,多读书,如果有条件多读原版书,你要知道,当一个翻译者翻译一本书时,他会不知不觉把他的理念写进书中,那本书就会变得像鸡肋!
16.我还是强调认真听专业课,因为有些课像《数据结构》、《编译原理》、《操作系统》等等,这种课老师讲一分钟能让你明白的内容,你自己看要看好几个月,有的甚至看了好几年都看不明白。
17.抓住在学校里的各种实践的机会,要为自己积累经验,就业时经验比什么都有用。
18.多去图书馆,每个学校的图书馆都有很多好书等你去看!
19.编程不是技术活,而是体力活。
20.如果你决定了要当一个好的程序员,那么请你放弃游戏和上网聊天,除非你是那种每天只要玩游戏就能写出好程序的天才!
21.你要有足够的韧性和毅力!有个高手出一一道题测试你的韧性和毅力:找个10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。
22.找到只属于你自己的学习方法。不要盲目的追随别人的方法,适合自己的才是最好的!
『叁』 计算机程序设计有哪些经典必读书籍
1、Java
Java编程语言销携(第三版)---Java四大名著----JamesGosling(Java之父)
Java编程思想(第2版)----Java四大名毁搭著----BruceEckel
Java编程思想(第3版)----Java四大名著----------------BruceEckel
JAVA2核心技术卷I:基础知识(原书第7版)---Java四大名著-----CayHorstmann
JAVA2核心技术卷II:高级特性(原书第7版)----Java四大名著-----CayHorstmann
EffectiveJava中文版------Java四大名著--------JoshuaBloch
精通Struts:基于MVC的JavaWeb设计与纤斗拿开发---孙卫琴
精通Hibernate:Java对象持久化技术详解---孙卫琴
Tomcat与JavaWeb开发技术详解------------孙卫琴
Java与模式------------------------------阎宏
2、C#
C#程序设计-------CharlesPetzold“windows编程泰山北斗”---C#语言“倚天屠龙双剑”
C#Primer中文版--------StanleyB.Lippman---C#语言“倚天屠龙双剑”
.NET框架程序设计(修订版)--------JeffreyRichter“windows编程泰山北斗”---.NET平台四大天王
c#Windows程序设计----------CharlesPetzold“windows编程泰山北斗”------.NET平台四大天王
.NET程序设计技术内幕-------------JeffProsise---.NET平台四大天王
.NET本质论--第1卷:公共语言运行库(中文版)--------ChrisSells---.NET平台四大天王
3、C++
C++程序设计语言(特别版)---c++八大金刚----BjarneStroustrup“C++之父”
C++Primer(第3版)中文版----c++八大金刚---StanleyB.Lippman
C++Primer(第4版)中文版----c++八大金刚---StanleyB.Lippman
C++标准程序库—自修教程与参考手册--c++八大金刚--NicolaiM.Josuttis
C++语言的设计和演化-----c++八大金刚----BjarneStroustrup“C++之父”
深度探索C++对象模型---c++八大金刚----StanleyB.Lippman
EssentialC++中文版---c++八大金刚---StanleyB.Lippman
EffectiveC++中文版2ndEdition-----c++八大金刚------ScottMeyers
MoreEffectiveC++中文版----c++八大金刚------ScottMeyers
C++编程思想(第2版)第1卷:标准C++导引--------BruceEckel
C++编程思想(第2版)第2卷:实用编程技术--------BruceEckel
C++程序设计--------------------------谭浩强
C++程序设计教程(第2版)--------------钱能
C++PrimerPlus(第五版)中文版---StephenPrata
广博如四库全书Thec++programminglanguage、c++Primer
深奥如山重水复Insidethec++objectmodel
程序库大全Thec++standardlibray
工程经验之积累Effectivec++、MoreEffectivec++、Exceptionalc++
C++八大金刚:
1、Essentitalc++---lippman---C++之父,旁枝暂略,主攻核心,轻薄短小,初学者
2、Thec++programminglanguage----C++之父,技术权威,用词深峻,思想深远,c++网络全书代表,圣经。
3、c++Primer----lippman---纵横书市十数年,c++最佳教本,c++网络全书代表。
4、Insidethec++objectmodel-----lippman----揭示c++底层,非常好,非常难。
5、Effectivec++-----通过50个编程实例,展示专家经验,行文有趣,深处浅出。
6、MoreEffectivec++----通过35个编程实例,展示专家经验,行文有趣,深处浅出。
7、Thec++standardlibray---c++标准库的网络全书。
8、设计模式:可复用面向对象软件的基础------good!
4、C语言
C程序设计语言(第2版·新版)---C语言“倚天屠龙双剑”---BrianW.Kernighan“C语言之父”
CPrimerPlus中文版(第五版)--------C语言“倚天屠龙双剑”---StephenPrata
C程序设计(第三版)---------------------------谭浩强
C语言大全(第四版)---------------------------HERBERTSCHILDT
C语言接口与实现:创建可重用软件的技术-------------DAVIDR.HANSON
C语言参考手册(原书第5版)--------------------------SamuelP.Harbison
C程序设计教程---------------------------------H.M.Deitel/P.J.Deitel
C陷阱与缺陷-----------------------------------AndrewKoenig
5、VB
VisualBasic.NET技术内幕-----VB编程三剑客-----------FrancescoBalena“vb首席大师”
Windows程序设计-VisualBasic.NET语言描述--VB编程三剑客-----CharlesPetzold“windows编程泰山北斗”---
.NET框架程序设计:VisualBasic.NET语言描述--VB编程三剑客--JeffreyRichter“windows编程泰山北斗”---,FrancescoBalena“vb首席大师”
VisualBasic6编程技术大全------------------------FrancescoBalena“vb首席大师”
VisualBasic.NET从入门到精通-------------------------Petroutsos,E.
高级VISUALBASIC编程-----------------------------------MATTHEWCURLAND
6、Delphi
InsideVCL(深入核心——VCL架构剖析)----------李维
Delphi7高效数据库程序设计--------------李维
面向对象开发实践之路(Delphi版)----------李维
7、VC
Windows程序设计(第5版)-----CharlesPetzold“windows编程泰山北斗”---
Windows核心编程----------JeffreyRichter“windows编程泰山北斗”---
Windows高级编程指南---------JeffreyRichter“windows编程泰山北斗”---
深入浅出MFC(第二版)-----“MFC四大天王”-------侯捷
MFCWindows程序设计(第2版)---MFC四大天王”---------JeffProsise
VisualC++技术内幕(第4版)--MFC四大天王”--------DavidKruglinski
深入解析MFC-------------MFC四大天王”-----------GeorgeShepherd
VisualC++.NET技术内幕(第6版)-MFC四大天王”------------DavidKruglinski
8、VF
VisualFoxpro程序设计参考手册-------------------张洪举
专家门诊——VisualFoxPro开发答疑160问-------------------张洪举
VisualFoxPro6.0/9.0解决方案与范例大全-------------------张洪举
VisualFoxPro软件开发模式与应用案例-------------------张洪举
9、黑客
应用密码学(协议算法与C源程序-----------BruceSchneier
网络信息安全的真相-----------BruceSchneier
黑客大曝光:网络安全机密与解决方案(第5版)--------STUARTMCCLURE
软件加密技术内幕------------看雪学院
加密与解密——软件保护技术与完全解决方案------------看雪学院
加密与解密(第二版)--------段钢
10、汇编
Intel微处理器结构、编程与接口(第六版)---------BarryB.Brey
80*86、奔腾机汇编语言程序设计---------BarryB.Brey
Windows环境下32位汇编语言程序设计(第2版)-----------罗云彬
IBM-PC汇编语言程序设计(第2版)本书是国内优秀教材--------沈美明温冬婵
IBMPC汇编语言程序设计(第五版)这本书籍是国外优秀教材-------PETERABEL著,沈美明温冬蝉译
11、驱动开发
WindowsWDM设备驱动程序开发指南------------------------------------ChrisCant
Windows2000/XPWDM设备驱动程序开发(第2版)--------------------------武安河
WINDOWS2000/XPWDM设备驱动程序开发--------------------------------武安河
12、网络
计算机网络第四版中文版----网络编程三剑客--------------AndrewS.Tanenbaum
TCP/IP详解3卷本--------------------RichardStevens----网络编程三剑客
UNIX网络编程2卷本--------------------RichardStevens----网络编程三剑客
用TCP/IP进行网际互联-----------DouglasE.Comer
高级TCP/IP编程-------------------JonC.Snader
C++网络编程-----------------------DouglasSchmidt
UNIX环境高级编程(第2版)--------------------RichardStevens
13、算法
计算机程序设计艺术-------Donald.E.Knuth----------算法“倚天屠龙”双剑
算法导论-----------------ThomasH.Cormen--------算法“倚天屠龙”双剑
离散数学及其应用----------KennethH.Rosen
具体数学—计算机科学基础--------Donald.E.Knuth
14、图形编程
Windows图形编程----------------FENGYUAN--图形编程界的CharlesPetzold之书
15、数据结构
数据结构C++语言描述》58.00(DataStructuresC++)WilliamFord,WilliamTopp刘卫东沈官林
数据结构算法与应用-C++语言描述》49.00SartejSahni汪诗林孙晓东等机械工业出版社
16、软件工程
设计模式--可复用面向对象软件的基础
重构—改善既有代码的设计
17、操作系统
深入理解计算机系统(修订版)-------RANDALE.BRYANT
18、Unix
UNIX网络编程卷I套接字联网API(英文版第三版
UNIX编程艺术
UNIX环境高级编程(英文影印第2版-----UNIX编程“圣经
UNIX环境高级编程(英文影印版)(第2版)
99-UNIX环境高级编程(第2版)
UNIX环境高级编程(第2版)---UNIX编程“圣经
UNIX网络编程第1卷:套接口API(第3版)
UNIX网络编程卷2:进程间通信(第2版)(英文影印版)
UNIX网络编程(第二版)第2卷:进程间通信
UNIX编程环境
UNIX网络编程卷I套接字联网API(英文版第三版
UNIX系统编程
UNIX环境高级编程
UNIX环境高级编程(英文影印版
88-linux内核分析及编程
UNIX网络编程卷I套接字联网API(英文版第三版)
UNIX网络编程第1卷:套接口API(第3版)
UNIX网络编程(第二版)第2卷:进程间通信
UNIX网络编程卷2:进程间通信(第2版)(英文影印版)
UNIX网络编程(第2版)第1卷:套接口API和X/Open传输接口API
UNIX网络编程(卷1):连网的APLS:套接字与XTI(第二版)(英文影印版)
UNIX环境高级编程
UNIX环境高级编程(英文版)
UNIX环境高级编程(第2版)
Unix技术手册
19、Linux
Linux内核设计与实现
Linux内核完全注释
LINUX内核分析及编程
GNU/Linux编程指南(第二版)
Linux设备驱动程序(第三版)
嵌入式设计及Linux驱动开发指南——基于ARM9处理器
Linux设备驱动程序第三版(英文影印版)
Linux内核设计与实现(第2版)
Linux内核设计与实现(英文影印版)(第2版)
linux技术手册
20、游戏编程
Windows游戏编程大师技巧(第二版
游戏之旅--我的编程感悟
OpenGL超级宝典:第三版
OpenGL编程指南(第四版)
Java游戏高级编程
J2ME手机游戏编程入门
游戏之旅——我的编程感悟
游戏开发中的人工智能(英文影印版)
3D游戏:卷2动画与高级实时渲染技术
面向对象的游戏开发
Java游戏高级编程
3D游戏编程大师技巧
游戏编程精粹
面向对象的游戏开发
3D游戏卷1:实时渲染与软件技术
3D游戏:卷2动画与高级实时渲染技
J2ME手机游戏编程入门
Direct3D游戏编程入门教程(第二版
21、移动开发
WindowsMobile手机应用开发
SYMBIANOSC++手机应用开发
68-WindowsMobile手机应用开发--傅曦齐宇徐骏
48-SYMBIANOSC++手机应用开发(第2卷)------------------RICHARDHARRISON著,周良忠王伯欣译
68-SYMBIANOSC++手机应用开发---------------RICHARDHARRISON著,周良忠译
WindowsCE.net内核定制及应用程序开发---------周毓林宁杨陆贵强付林林
嵌入式系统WindowsCE开发技巧与实例--傅曦
PalmOS编程实践---绝版
22、单片机
单片机轻松入门----------------------------------周坚(平凡老师)
单片机典型模块设计实例导航-----------------------求是科技
例说8051----------------------------------------张义和陈敌北
KEILCX51V7.0单片机高级语言编程与ΜVISION2应用实践-----徐爱钧
单片机应用程序设计技术(修订版)--------------------周航慈
8051单片机实践与应用-------------------------------吴金戎
MCS-51系列单片机实用接口技术---------------------李华
23、串并口通讯
VisualC++/TurboC串口通信编程实践------------------龚建伟
VISUALBASIC与RS-232串行通信控制(最新版)----------范逸之
24、电子
无线电识图与电路故障分析轻松入门(第二版)-------------------胡斌
无线电元器件检测与修理技术轻松入门(第二版)-------------------胡斌
图表细说电子技术识图-------------------胡斌
图表细说电子元器件-------------------胡斌
图表细说元器件及实用电路-------------------胡
『肆』 如何阅读《深入理解计算机系统》这本书
结构、操作系统、体系结构、编译原理、计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高 从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码 其中学习linux常用命令时就要学会自己编译内核,优化系统,调整参数 安装和常用命令书太多了,找本稍微详细点的就ok,其间需要学会正则表达式 系统编程推荐《高级unix环境编程》,黑话叫APUE 还有《unix网络编程》 这时候大概还需要看资料理解elf文件格式,连接器和加载器,cmu的一本教材中文名为《深入理解计算机系统》比较好 内核开发阅读内核源码阶段,从写驱动入手逐渐深入linux内核开发 参考书如下《linux device drivers》,黑话叫ldd 《linux kernel development》,黑话叫lkd 《understading the linux kernel》,黑话叫utlk 《linux源码情景分析》 这四本书为搞内核的必读书籍 最后,第三阶段和第四阶段最重动手,空言无益,光看书也不罩,不动手那些东西理解不了 学习linux/unix编程方法的建议 建议学习路径: 首先先学学编辑器,vim, emacs什么的都行。 然后学make file文件,只要知道一点就行,这样就可以准备编程序了。 然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。 如果想学习UNIX/LINUX的编程,《APUE》绝对经典的教材,加深一下功底,学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。 然后再看Douglus E. Comer的《用TCP/IP进行网际互连》第一卷,学习一下网络的知识,再看《UNP》的第一卷,不仅学习网络编程,而且对系统编程的一些常用的技型晌巧就很熟悉了,如果继续网络编程,建议看《TCP/IP进行网际互连》的第三卷,里面有很多关于应用协议telnet、ftp等协议的编程。 如果想写设备驱动程序,首先您的系统编程的接口比如文件、IPC等必须要熟知了,再学习《LDD》2。 对于几本经典教材的评价: 《The C Programing Language》K&R 经典的C语言程序设计教材,作者是C语言的发明者,教材内容深入浅出。虽然有点老,但是必备的一本手册,现在有时候我还常翻翻。篇幅比较小,但是每看一遍,就有一遍的收获。另外也可用谭浩强的《C语言程序设计》代替。 《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常经典的书(废话,Stevens的书哪有不经典的!),虽然初学者就可以看,但是事实上它是《Unix Network Programing》的一本辅助资料。国内的翻译的《UNIX环境高级编程》的水平不怎么样,现在有影印版,直接读英文比读中文来得容易。 《Unix Network Programing》W.Richard Stevens:第一卷讲BSD Socket网络编程接口和另外一种网络编程接口的,不过现在一般都用BSD Socket,所以这本书只要看大约一半多就可以了。第二卷没有设计到网络的东西,主衫敬要讲进程间通讯和Posix线程。所以看了《APUE》以后,就可以看它了,基本上系统的东西就由《APUE》和《UNP》vol2概括了。看过《UNP》以后,您就会知道系统编程的绝大部分编程技巧,即使卷一是讲网络编程的。国内是清华翻译得《Unix网络编程》,翻译者得功底也比较高,翻译地比较好。所以建议还是看中文版。 《TCP/IP祥解》一共三卷,卷一讲协议,卷二讲实现,卷三讲编程应用。我没有怎么看过。,但是据说也很经典的,因为我没有时间看卷二,所以不便评价。 《用TCP/IP进行网际互连》Douglus.E.Comer 一共三卷,卷一讲原理,卷二讲实现,卷三讲高级协议。感觉上这一套要比Stevens的那一套要好,就连Stevens也不得不承认它的第一卷非常经典。事实上,第一卷即使你没有一点网络的知识,看完以后也会对网络的来龙去脉了如指掌。第一卷中还有很多习题也设计得经典和实用,因为作者本身就是一位教师,并且卷一是国外研究生的教材。习题并没有答案,留给读者思卜塌锋考,因为问题得答案可以让你成为一个中级的Hacker,这些问题的答案可以象Douglus索取,不过只有他只给教师卷二我没有怎么看,卷三可以作为参考手册,其中地例子也很经典。如果您看过Qterm的源代码,就会知道Qterm的telnet 实现部分大多数就是从这本书的源代码过来的。对于网络原理的书,我推荐它,而不是Stevens的《TCP/IP祥解》。 《Operating System - Design and Implement》这个是讲操作系统的书,用Minix做的例子。作者母语不是英文,所以英文看起来比较晦涩。国内翻译的是《操作系统设计与实现》,我没看过中文版,因为翻译者是尤晋元,他翻译的《APUE》已经让我失望头顶了。读了这本书,对操作系统的底层怎么工作的就会 有一个清晰的认识。 《Linux Device Driver》2e ,为数不多的关于Linux设备驱动程序的好书。不过内容有些杂乱,如果您没有一些写驱动的经验,初次看会有些摸不着南北。国内翻译的是《Linux设备驱动程序》第二版,第一版,第二版的译者我都有很深的接触,不过总体上来说,虽然第二版翻译的有些不尽人意,但是相比第一版来说已经超出了一大截。要读这一本书,至少应该先找一些《计算机原理》《计算机体系结构》的书来马马虎虎读读,至少应该对硬件和计算机的工作过程有一些了解。
『伍』 自学计算机编程应该看些什么书
一:第一阶段 C语言-------《C语言设计》 作者:谭浩强 大多数人都推荐谭浩强这本书,谭浩强的C语言程序设计,我觉得更适合当教科书,主要是篇幅没有那么大,书本的内容不是很全,由老师带入门是最好的。 《C Primer Plus》第五版 作者:Stephen Prata 这本书比较厚,内容也比较基础,扩展的也比较广,自学容易上手,唯一的缺陷在于它是外国人编写,而国内的翻译往往让人难以满意,如果你有较好的英语水平,最好阅读英文版的。 《C语言入门经典》第四版 作者:Ivor Horton 二:第二阶段 这一阶段看个人主攻的方向了,安卓一般就JAVA,PC游戏、软件C++,也有推荐C#,这些都是主流语言,其他语言要看个人爱好与发展。 面向对象的语言,一般懂一门,之后要转其他语言也很容易的,其实思想都差不多,主要的不同在于语法。C#容易上手,一个月入门,一年精通,而C++却有点难,一年入门,二十年也未必敢说自己精通。如果有时间,可以了解一下汇编语言。 C++ Primer, 4rd Edition (入门类: C++ Primer, 4rd Edition Thinking in C++, 2nd Edition The C++ Standard Library: A Tutorial and Reference 进阶类: The C++ Programming Language, Special Edition The Design and Evolution of C++ Inside C++ Object Model C++ Templates: The Complete Guide STL 源码剖析 Generic Programming and the STL Modern C++ Design: Generic Programming and Design Patterns Applied 应用技巧类: Effective C++, 2nd Editon More Effective C++ Exceptional C++ More Exceptional C++ Effective STL Ruminations on C++) 三:第三阶段 API/SDK------------- 《windows程序设计》(Jeff Prosise) 这书主要是开发Windows软件要深入研读的,毕竟是WindowsAPI。如果是主攻C++,那么这本书你可以大概略读一遍,不用过多的深入追究,QT才是C++主要深入思虑的关键。 四:第四阶段 MFC----《VC++技术内幕》、《深入浅出MFC》及视频教程孙鑫 VC++6.0 如果是C++,QT是要重点学习的对象。 五:第五阶段 COM/DCOM/ATL/COM+---------《COM技术内幕》 未知阶段: 《数据结构》,《算法导论》这些基本是编程的核心了,编程的很大情况都依赖于算法的实现,这个两门基本要深入研究,这是决定编程能力的核心标准。 如果不弄底层的话,《操作系统原理》可以简单地了解。
『陆』 如何阅读和学习《计算机程序设计艺术(TAOCP)》
哦,上帝!《The Art of Computer Programming》引那位出名的王垠对TAOCP的评论: 本来早就想想写一个对于Knuth的The Art of Computer Programming的看法。 没想到一去Amazon就找到一个同类 关于Knuth的 TAOCP,我想,大部分人声称看了他的书,或者买了他的书,不过是作为一种炫耀的资本或者摆设。我对门的同学几年前就买了一套三本,全新的精装本,花了 200多块钱。可是呢,他从来就没看。我把它借过来,看了几页就放在那里没有看了。我哪有时间看他用那些一个字节6位的机器语言实现简单的链表!有一天一个师弟走进来,看到那套书在我书架上,显示出一种敬畏感:“挖!师兄!你好牛啊!居然看这么高深的书!” 我一愣。嗯,不错嘛,这套书放在书架上可以让人对我刮目相看。这恐怕就是它对很多人的实际作用。还有人可以帮助神化这套书,同时也神化自己,比如他可以这么说:“谁要是看完了Don Knuth的 The Art of Computer Programming 我就雇用他!” 这样可以显得比一般看过书的人还要高一等。据说Bill Gates就是这么做的。我怀疑他自己看完过没有。 我讨厌这套书的一个原因就是Knuth故意用一个叫 MIX 的处理器的机器语言来写这本书。虽然在新版的书里他设计了一种新的处理器 MMIX,但是换汤不换药。他以为一部“永恒”的计算机编程书不应该使用高级语言,因为它们很容易过时。但是他错了,机器语言恰恰是最容易过时的东西,看看现在有多少牌子的更新换代的处理器就知道。而世界上确实存在非常高级的语言从60年代到现在都没有过时。我预言,MMIX会在不久的将来被淘汰。很好笑的是MMIX是在MIX上加了一个“M”,代表Millennium(千禧年)。关于它的专著也起名为 MMIXware---A RISC Computer for the Third Millennium。一千年甚至短短一百年,几十年以后,计算机还是不是二进制的集成电路都说不清楚,况且这个处理器其实就是从别的处理器比如RISC II, Sparc之类的捡了一点东西,没有什么大的创新。他就把这个处理器的模拟程序印在纸上卖,曰:“一个优秀的程序要像一部好的小说一样容易读懂。一个优秀的程序员会在将来拿到普利策奖。” 用机器语言写一点初级的计算机入门部分还可以,但是用来写整整一部书未免容易让读者只见树木不见森林了。看TAOCP最容易出现的一种现象就是,“哇!原来这个程序可以这么写。” 但是你不知道为啥那么写。虽然可以知道一些底层的原因,但是最根本的原理,读者始终不会明白。就像看清楚了一张图片上的每一个像素,却认不出图片上其实是一个熟人。看清楚了棋盘上每一个棋子能走的地方,却不能赢棋。Dijkstra 说计算科学不应该被叫做"computer science",就像外科手术不应该叫做"knife science"。可是这关Knuth什么事呢,他的书名叫做 The Art of... 再说他的支票吧…… 很多人拿了Knuth的支票就作为一种可以炫耀的东西。以前我就看到一个Cambridge的教授主页上挂着一个Knuth支票的照片。Knuth的支票真的可以作为炫耀的资本吗?告诉你们,我找到的错误都是typo而已,没想到他也给我支票。谁叫他打字不小心,Millennium都能打成 Millenium?嘿!我凑足了一顿饭钱的支票时就想去中国银行兑现,准备换了钱大吃一顿。可是银行的职员告诉我,他们必须把支票寄回美国才能拿到现金,办理这件事的费用大大高于支票本身的价值!所以Knuth相当于给我一些空头支票。Damn!早该想到的,他为什么不往大家的信用卡上面转账,而使用支票这种过时的东西!他明显觉得有他签名的支票,肯定谁也不会拿去兑现,甚至装裱在相框里作为纪念。hmmm... 算你狠~ 好了,啰里啰唆。还是看看这个别人写的书评。White elephant,这确实道出了我对这套书的感觉。 (但是评价者有些观点我不能苟同,比如“O(n)表示法足够了”。) 希望以后对 paper 也有这种公开的 comments! Dan Friedman 的故事 (4)——C311当我刚从 Cornell 转学到 IU 的时候,Dan Friedman 叫我去上他的研究生程序语言课 B521。我当时以自己在 Cornell 上过程序语言课程为由,想不去上他的课。Friedman 把我叫到他的办公室,让我在他旁边坐下来,和蔼的对我说:“王垠,我知道你在 Cornell 上过这种课。我也知道 Cornell 是比 IU 好很多的学校。可是每个老师的教学方法都是不一样的,你应该来上我的课。我和我的朋友们在这里做教授,不是因为喜欢这个学校,而是因为我们的家人和朋友都在这里。”后来由于跟 Amr Sabry(我现在的导师)的课程 B522 时间重合,他特别安排我坐在本科生的 C311 的课堂上,却拿研究生课程的学分。后来发现,这两门课的内容基本没有区别,只不过研究生的作业要多一些。 在第一堂课上,他说了一句让我记忆至今的话:“《The Little Schemer》和《Essentials of Programming Languages》是这门课的参考教材,但是我上课从来不讲我的书里的内容。”刚一开始,我就发现这门课跟我在 Cornell 学到的东西很不一样。虽然有些概念,比如 closure,CPS,我在 Cornell 都学过,在他的课堂上,我却看到这些概念完全不同的一面,以至于我觉得其实我之前完全不懂这些概念!这是因为在 Cornell 学到这些东西的时候只是用来应付作业,而在 Friedman 的课上,我利用它们来完成有实际意义的目标,所以才真正的体会到这些概念的内涵和价值。 一个例子就是课程进入到没几个星期的时候,我们开始写解释器来执行简单的 Scheme 程序。然后我们把这个解释器进行 CPS 变换,引入全局变量作为"寄存器" (register),把 CPS 产生的 continuation 转换成数据结构(也就是堆栈)。最后我们得到的是一个抽象机 (abstract machine),而这在本质上相当于一个真实机器里的中央处理器(CPU)或者虚拟机(比如 JVM)。所以我们其实从无到有,“发明”了 CPU!从这里,我才真正的理解到寄存器,堆栈等的本质,以及我们为什么需要它们。我才真正的明白了,冯诺依曼体系构架为什么要设计成这个样子。后来他让我们去看一篇他的好朋友 Olivier Danvy 的论文,讲述如何从各种不同的解释器经过 CPS 变换得出不同种类的抽象机模型。这是我第一次感觉到程序语言的理论对于现实世界的巨大威力,也让我理解到,机器并不是计算的本质。机器可以用任何可行的技术实现,比如集成电路,激光,量子,分子,基因…… 但是无论用什么作为机器的材料,我们所要表达的语义,也就是计算的本质,却是不变的。 而这些还不是我那届 C311 全部的内容。后半学期,我们开始学习 miniKanren,一种他自己设计的用于教学的逻辑式语言 (logic programming language)。这个语言类似 Prolog,但是它把 Prolog 的很多缺点给去掉了,而且变得更加容易理解。教材是免费送给我们的《The Reasoned Schemer》。在书的最后,两页纸的篇幅,就是整个 miniKanren 语言的实现!我学得比较快,后来就开始捣鼓这个实现,把有些部分重新设计了一下,然后加入了一些我想要的功能。这样的教学,给了我设计逻辑式语言的能力,而不只是停留于一个使用者。这是学习 Prolog 不可能做到的事情,因为 Prolog 实现的复杂性,会让初学者无从下手,只能停留在使用者的阶段。 我很幸运当初听了他的话,去上了这门课,否则我就不会是今天的我。 谁是真正的程序语言专家Knuth 也曾有类似的说法:“要是看不懂 TAOCP,就别当程序员。”他总是被誉为“计算机科学的神”,在他的演讲里大谈文学,艺术,上帝和宗教,给人陡增神秘感。他总是说程序员应该学习机器语言,而不是高级语言,机器才是不变的真理。但是 Knuth 却不是从科学的角度来看这个问题,而只是他个人的偏见。当他看到 Fortran, Lisp, ALGOL, Pascal, C, C++, Java 这些语言的发展仿佛没有尽头的时候,他并没有理解其中不变的原理。在程序语言的设计上,他不是一个强者。他很有可能根本不理解 lambda calculus 和类型理论,否则他不会设计出像 TeX 那样毫无章法的语言。TeX 排版的质量无可厚非,但是到了1978年还仍然采用程序语言专家们早已深恶痛绝的 dynamic scoping,再加上其它一些蹩脚的设计,说明他对程序语言理论缺乏理解。实际上 TeX 含有一个图灵完备的扩展语言,是因为 Knuth 采纳了 Guy Steele(Scheme 的发明者)的建议,然而 Knuth 却没有把它设计好。 Knuth 觉得机器是不变的真理,所以他坚持用机器语言来写作 TAOCP。但是由于机器语言缺乏抽象,程序员没法专注于真正的问题。使用机器语言来描述算法,会把本来很简单的问题都显得高深难懂,仿佛这书永远也看不完。有多少人真正的看过 TAOCP 呢?恐怕大部分人把这套书买回去,只是把它们摆在书架上做面子。只要有人说机器语言太难懂,这些人就会说你自己不够聪明,不配做程序员。而其实呢,他们自己都没看过。 机器不是计算的本质这个事实,很多人包括 Dijkstra,早就看到了。他说:“计算机科学是个错误的名字,因为它不是计算机的科学,这就像外科手术不是刀子的科学。”而这是几乎每一个程序语言专家都明白的道理。在他们的眼里,这不再是道听途说或者个人观点,而是可以用逻辑来证明的事实。真正明白计算本质的人,可以设计出全新的硬件来来满足语义的需要,而不是受控于处理器的设计。他们甚至可以超越集成电路,而使用另外的技术来制造机器。这些都说明,计算其实是独立于机器的。 有不好的想法不要紧,但是如果把不好的想法硬说成是好的,那就会阻碍历史发展了。我并不否认 Knuth 和 Ritchie 对算法,排版和操作系统的重要贡献,但是由于他们以及他们崇拜者经常在有关语言的事情上误导群众,所以觉得有必要指出他们的一些局限性。Linus Torvalds, Guido van Rossum, Eric Raymond, Paul Graham 也经常发表对语言的评论,被很多人奉为圣旨,但其实他们言论里面很少有真知灼见。 其实我要说的不过是,通常程序员们膜拜的偶像,大部分都不是真正的程序语言专家。希望你不要觉得这是危言耸听,实际上这些是大部分世界级的计算机科学家们很多年前就知道的事情。
『柒』 电脑编程入门书籍,应该先看什么
我转载的,感觉对你有用!!! 都是我看过或正要看的书,晾晾书架,希望对后来者也有一点作用,当年我也是浪费时间看了一些没有价值的书籍,颇为后悔,现将精华总结如下:
c语言篇:(虽有人说学C++不用先学c,但我颇不以为然,不知数据为何,又何来的封装继承多态)
1:c语言入门大学教程c语言谭浩强版足以。
2:windows c语言API编程基础,推荐《windows程序设计(第5版)》 Charles Petzold着,通过学习可对界面编程一览无遗,剩下的就是看怎样用c++进行包装,体会c++面向对象复用代码的威力了。
3:《TCP/IP协议及网络编程技术》 罗军舟等编着 清华大学出版社 国货上品,是应用c语言在windows下进行网络编程的好教材.也是使用c++进行网络编程的知识准备。
C++基础篇: 1:《C++Primer(3or4版)》入门第一部.
2:《深入浅出MFC》 侯捷着 国货精品,本应归入学习vc的范畴,但他实际是对widows API的c++框架介绍,用来做vc项目只能起辅助作用,对建立c++面向对象思想却多有启迪。
3: 《C++标准程序库》 侯捷/孟岩译 库是语言的延伸,学习c++不可不看。
4: 《C++实践之路》 周良忠译 一个计算器例子贯穿全书,几乎用到C++所有知识,真正的例子驱动教学法。
面向对象技术:
1: 《设计模式-可复用面向对象软件的基础》 美国四人帮的跨时代大作 230页却足以开启一个时代,真正体现了面向对象技术的价值,是代码复用的经典之作,不能不看。
2: 《UML Distilled》 UML建模很火欧,但对我来说看主要目的是看懂类关系草图,这本小书足以。
c++进阶篇
1: 《C++高级编程》 刘鑫等译 有对c++知识的精要总结其中包括如何更好地实现重用、如何有效地测试和调试等C++专业人员常用的一些技术与方法,值得了解。
2: 《Effective C++》,《必知必会》,《c++编程规范》 三本小书却足以检测你对c++知识掌握的真正情况。
c++高阶篇:(本人仍在阅读中)
1: 《深入探索c++对象模型》 侯捷译 对C++内存布局的深入介绍,是真正理解com/corba等组件技术的必备基础。
2: 《C++ Templates中文版》 陈伟柱译 模板圣经,现代c++发展的前沿泛型编程思想总结 (是看懂boost类库的知识储备)。
3:《C++设计新思维》 侯捷/於春景译 泛型编程与设计模式的综合应用,锻炼思维的好书,(已经买了半年多了,等我有空时一定看'_')。
其他:
C++编程思想,C++语言之父的c++语言特别版 等书本人只在书店里见过,没有阅读就不敢置评了。
(一)语言入门:
《C++ Primer》
最新版本:第三版(第四版国外已上架,国内一些网上书店也在预订中)
适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是好事。
《The C++ Programming Language》/《C++程序设计语言》
最新版本:第三版特别版
简称TC++PL,有其他语言的丰富经验的。(也有人简称之为“TCPL”,但需与另一本《The C Programmer Language》区分开来)
《Essential C++》
《Accelerated C++》
这两本薄一些,都是不错的选择。《Accelerated C++》本人没有读过,从各方面的评价来看,完全值得推荐。
以上几本书都有相应的中文版,而且翻译的质量都不错。上面的书未必都需要读一遍,但无论如何,TC++PL是应该阅读的。
(二)进阶A:
这个路线侧重于语言本身
《Effective C++》
最新版本:第二版(第三版国外已上架,国内一些网上书店也在预订中)
简称EC。C++程序员必读!很多时候,我们说C++圣经不是指TC++PL,而是这一本。《The Pragmatic Programmer》一书中写到:“一旦你发现自己要参与C++项目的开发,赶快跑(不要走)到书店去购买Scott Mayer的《Effective C++》,可能还要《More Effective C++》”。
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 编程规范》
个人认为此书应为C++程序员必备的案头书。几乎Effective系列和Exceptional系列都在这里得到了总结。最新的模版、异常的业界经验都在这里的到了体现。可能的唯一缺陷就是对一个新手而言,关于“为什么这么做”的问题,解释的不够。
我的看法是:如果你不理解其中的条款,记忆,并且照做;如果你理解其中的条款,我猜你一定会同意书中的观点。我认为这本书中的内容至少在2009年以前都不会过时,人们将广为传诵它制定的101条戒律。
还不知道他的简称,也许“101”会成为一个候选者?
提到《Effective C++》,那么另外三本书一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新书《Exceptional C++ Style》也是值得一看的好书。
上述几本书,一本也不应该放过。
个人建议上述书籍按顺序阅读。并且,在将来反复阅读这几本书。
『捌』 自学编程需要哪些入门书籍
1、《实战Java程序设计》
这是一本既注重实战,同时也注重底层“内功”专训练的书,非常适属合初学者阅读!
『玖』 如何阅读和学习《计算机程序设计艺术》(TAOCP)
首先总的原则是:你如果用最难的厅弯瞎扮空方式学,你会收获最多。
并且最难的方式就是:你读它,如果遇到一个问题,一个定理,一个例子,没搞懂,不要再继续看,不要看答案,把书合起来,然后绞尽脑汁地想,用几个小时几天时间,把它搞定,然后再继续看书,看答案。
方式训练,你可以最快地在思维上跟TAOCP看齐并且必闹孝须做题,例题,习题,题题过,这本书只适合有耐心有毅力能抽出几个月闭关什么都不做专门学习这本书的人。
《计算机程序设计艺术》系列被公认为计算机科学领域的权威之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。
MMIX 是新一代的以 RISC 为基础的计算机,比其前身 MIX 更加精简。
本书由两本小册子合并而成,第一部分描述了 MMIX 的内存、寄存器、指令、加载与存储等基础概念,并介绍了关于 MMIX 的一些基本编程技术。
第二部分使用该语言重新实现了 TAOCP 前 3 卷中的所有算法。
『拾』 自学电脑编程需要哪些书
我觉得自学,最重要的是把握住自己的心态。心态好了,才会学进去,要不然是不行的,心态不好,是学不进去的。
终于有一天,我厌倦了控制台的黑白屏幕,只有一个黑白的盒子,这不是我想要的生活。所以我找到了Windows编程(watercress)这本精彩的书,开始挖掘我的Windows平台。从Windows消息机制到创建窗口,添加控件,处理事件,窗口绘图,线程,多媒体,网络。也可在小程序中进行,如:记事本、蛇、俄罗斯方块等。不知廉耻,我要粘贴代码:songbaoming / Tetris·GitHub,丹尼尔小心!虽然每一步我都很努力,但最终我学会了,充满了成就感,我离开了人生的顶峰,离我更近了!
先把它写在这里,估计这些已经足够你看一段时间了。如果你选择道路,算法的背面,数据结构,离散数学,数据库,啊,编译理论啊,计算机系统等等,直到你被大学相关的专业人员录取,当然,是你的食物,慢慢消化它。