12本最具影响力的程序员书籍
要成为一个更好的开拓人员,我应当读哪些书?我真的需求念书吗?
这是一个很值得切磋的成绩,而且也是我在成为软件工程师之时问了很多导师的一个成绩。但成绩是,很多人引荐的是不合主题的不合书本。他们引荐的书在他们看来是伟大的,但没有人能奉告我,要想成为一个伟大的工程师,我应当阅读什么,哪些是首要的、是必读的书本。
我从我的导师那儿学到了很多对象,并认识到,我依然有很多对象需求进修,还有许多不合的书需求阅读。我决定每个月读一本专业领域(软件工程)的书。随着时候的堆集,我总结出了我认为想要成为一个顶级开拓人员必需阅读的书单。
事前声明——只是阅读这些书不会让你成为一个伟大的开拓者。你还需求堆集多年的任务经历,并利用这些书中的准绳到理想实际中,并在理想世界中生长你处理成绩的才干。
阅读这些书可以帮忙你避免一些罕见的圈套和漏洞,一些开拓人员晚期经历的圈套和犯过的漏洞。我何等停顿在我刚进入软件领域的时辰,就有人向我引荐这些书啊,而且我此刻依然很高兴本人发觉并几次阅读了这些书!也许你已在大学读合计机科学或工程课程的时辰读到过个中的一些书。也许在阿谁时辰,你感觉它们其实不首要,可是我可以用我亲自经历来申明我使用和利用了许多来自于这些书的准绳。
我还要指出的是,此书单其实不详实。每年乡村有许多伟大的著作问世。这些只是对我和我的职业生活生计影响最大的书本。另外,这些书和使用什么说话有关,可以利用于任何软件说话。
好了,让我们开端引见这些书吧! (请拍手)
(这些都是必不成少的,我将按照它们对我的影响巨细从后往前引见。)
12.《Working Effectively with Legacy Code》
我之所以爱好这本书,是由于几近一切的软件开拓人员,在其职业生活生计的某个时辰,常常会不得不支撑和任务于遗留系统。在这本书中,Michael Feathers供给了从开端到竣事的战略,以便于更有用地任务于未经测试的遗留代码库。本书自创了Michael为其有名的Object Mentor专题研讨会创作的材料:Michael用于指点的手艺,以帮忙开拓人员,手艺经管人员和测试人员掌控遗留系统。
11.《The Mythical Man-Month》
本书是一本典范之作,但比来被点窜和更正了。使人诧异的是这本书依然与软件产物开拓紧密亲密相关。若是你处置软件的话,这本书是必读的。这本书最有价值的部门,我信任,是“plan to throw out”原型章节。虽然我们的方针但凡是做一个更大,更好,更快,不管它是什么的对象,可是我们总会建立出一些不得不被保存,需求重做的对象。这类景象我亲自经历过很多很屡次。是以,关头是要plan to throw out(打算扔掉),这样你才干顺应接上去的景象。若是你胡想第一个产物就ok,那末你就会有扔掉它们的风险,由于产物的改良和生长是不成避免的。打算扔掉也有助于经由过程设置合理的里程碑来抵达进度方针。
10.《Design Patterns》
若是你筹算成为一位架构师或系统的设想人员,那末你很有能够会被要求阅读这本书。这是一本被誉为有史以来最伟大的相关于软件开拓的书,具体讲述了许多不合的设想方式,这么多年来一向在帮忙软件工程师避免和措置行业面临的罕见成绩。遵循这本书的战略可以助你制造更高品德,矫捷和可保护的软件。传说中的“四人帮”就是这本书,由于它是由四个有名的作者合营编写的。
9.《Programming Pearls 第二版》
这本书和这书单上的其他书本略有不合。我想说这本书可以帮忙一小我“像一个法度圭表标准员一样思虑”。《Programming Pearls》是先前揭晓在“Communications of the ACM(美国合计机学会通讯)”的15篇专栏的一个大纲。这些专栏涵盖了遍及与编程相关的主题:从需求汇集到功能优化。重点关心编码手艺和算法。
每个专栏被组织为一个章节。章节但凡以一个理想成绩的景象闪现开首。然后,提出各类处理方案和呼应的经历经验。写作气焰明晰晦涩。
《Programming Pearls》不是教授新编程概念的平常书本。虽然它包含了优良,有时以至是相当别致的设法主张,但这本书的手段不是教你一些新的对象,而是帮忙你成为一个更好的成绩处理者。
8.《CODE: The Hidden Language of Computer Hardware and Software》
这本书清算了成立和开拓庞杂系统的少量“魔法”。此刻的笼统是如斯之多,乃至于一些低条理的细节反而不为开拓人员所知。虽然你能够不会发觉本人在实际中时辰使用着这本书——但我信任,知道本人正在建立什么和全部编排的任务道理是什么,总归是一个好主张。当你需求翻开“黑匣子”,深切软件或硬件来处理一个厌恶的bug的时辰,它就可以派上用途了。Charles Petzold写的《CODE: The Hidden Language of Computer Hardware and Software》梳理了许多编程概念——从数字系统的十进制,八进制,二进制到初级说话。这本书引见了基于包的通讯和谈和TCP。许多章节教授教化了相关硬件的概念,有五个章节触及到了软件和教导操作系统,浮点运算和图形用户界面。
7.《The Art of Computer Programming》
这又是一部典范之作。由有名的合计机科学家教授Donald Knuth编著,并取得行业内浩瀚顶尖法度圭表标准员的分歧好评。以至连Bill Gates也对这本书赞誉有加:
“若是你认为你是一个真正优良的法度圭表标准员……那末就去读[Knuth的]《The Art of Computer Programming》吧……若是你能读懂整本书,那末请必然要给我发简历。”
这本书以根基的编程概念和手艺开首,然后聚焦于更具体的消息构造——合计机内的消息暗示,数据元素之间的构造联系,和若何有用地措置这些成绩。另外还供给了根基的利用法度圭表标准给仿真模拟,数值编制,符号合计,软件和系统设想。
6.《Refactoring》
Martin Fowler写的《Refactoring》首要关于改良现有代码的设想。这是一个修改软件系统而不修改代码的内部行动,却能提高它内部构造的过程。通太重构,你以至可以将一个糟的设想从头建筑为一个很好的设想。这本书对重构准绳停止了深切切磋,包含在那里发觉重构的机缘,和若何成立所需的测试。另外还有一个目录有40多个已用细节证实的重构,这些细节包含什么时辰和为什么要使用重构,慢慢申明若何完成重构,并举例申明重构是若何任务的。这本书用Java作为其首要说话而写,但个中的思绪适用于任何OO说话。
5.《Clean Code》
《Clean Code》,作者Robert C. Martin,分为三个部门。第一部门引见准绳、方式和编写洁净代码的实际编制。第二部门包含若干个庞杂度渐进的研讨案例。每个案例研讨就是一个洁净代码的操练,也是经由过程处理代码库中的一些成绩让代码变得健全、高效的操练。第三部门是决定性的一个部门:每个伶仃的章节在成立案例研讨的时辰包含了一系列启示式的教授教化法。最初取得了描写我们在编写、阅读和清算代码时的思虑编制的常识库。
4.《Introduction to Algorithms》
这必需是理解和使用算法(将在软件开拓中触及良多)的最好书本。有些关于算法的书虽然松散,但不周全——还有一些虽然触及面广,但却贫乏松散性。《Introduction to Algorithms》奇异地连系了松散性和周全性。这本书涵盖了遍及又深切的算法,使得书中的设想和阐明可以或许面向一切条理的阅读人员。每个章节绝对自力,可看做是一个进修单元。算法用英语和可读的伪代码描写。它使用低级根基的注释,其实不牺牲笼盖的深度和材料的松散性。第一版不只遍及成为了世界各地高校的教材,还成为了专业人士的尺度参考书。第二版新增了算法,几率阐明,随机算法,线性打算的章节。
3.《Structure and Interpretation of Computer Programs》
以一种对处理成绩和编程手艺阐明和松散的立场,这本书面向于工程。《Structure and Interpretation of Computer Programs》强调经由过程不合编制来阐扬焦点感化,以措置合计模子中的时候。其奇异的编制使得它很是适合于合计机科学课程,和编程说话和法度圭表标准设想的入门。这本书进一步注释了4个最有名的编程说话范式——号令式编程,面向对象编程,基于逻辑编程和利用性编程。
2.《Pragmatic Programmer》
这是我最早阅读的编程书本之一。是我的一个伴侣在我就职第一份专业任务的时辰引荐给我的。我很高兴他这么做了。虽然这本书写于1999年,可是它的概念是我们以一种务实的立场去开拓庞杂系统的根本。法度圭表标准员也是工匠,他们被练习使用一组特定的对象(编纂器,对象经管,版本跟踪器)生成某种可在必然景象中(硬件组件上的操作系统)任务的产物(法度圭表标准)。和任何其他工艺一样,合计机编程也孕育出了聪明,但个中的大大都聪明是不克不及从大学或认证课程中学到的。大大都法度圭表标准员只能经由过程自力的实验,时候一点点的堆集,才干把握这些所谓的技能。在《Pragmatic Programmer》一书中,Andrew Hunt和David Thomas编纂了良多他们在别离作为软件设想者和代码编写者的职业生活生计中发觉的谬误。
作者的一些适用性倡议很是具体,而且明显很易于尝试。他们倡议读者去进修,例如一个文本编纂器,然后在各类景象下使用它。他们还倡议使用版本跟踪软件——即使是对最小型的项目,进修正则表达式语法和文本操作说话。书中还有其他许多也很是有价值的倡议。在调试部门,作者指出:“若是你看到蹄印的话,应当斟酌马这个规模,而不是斑马。”也就是说,要思疑一切,然后从最显眼的中央寻觅成绩。还相关于预估时候和费用,和将集成测试归入到开拓过程的倡议。《Pragmatic Programmer》让人爱不释手的还有两个启事:它会更明晰地梳理你本人堆集的聪明,它还会给你引见你还没斟酌到的任务编制。
1.《Code Complete 2》
就是它了!这就是我认为首屈一指值得阅读的书(请恕我妄语),若是你要成为一个优良的软件工程师的话。它被遍及认为是最好的适用性编程指南之一,Steve McConnell最初的《Code Complete》在畴昔的10多年时候里,一向在帮忙开拓人员编写更好的软件。此刻,这部典范书本已周全更新,点窜成了前沿的实际编制——和数以百计的新的代码示例——修订了软件构造的艺术和科学。从研讨、学术界战斗常商业实际中捕捉常识系统,McConnell将最有用的手艺和必需知道的准绳总结成明晰又务实的指点。不管你的经历水平,开拓景象,还有项目规模若何,这本书都可以启示和激起你的思虑,帮忙你制造最优良的代码。
不竭地摸索技能和战略,可以帮忙你:
最小庞杂性和最大创意的设想
取得协同开拓带来的益处
利用防御性编程手艺,以增添和摈除漏洞
操纵机缘安然地重构或改良代码
使用针对你项手段构造编制
快速有用地调试成绩
早早地精确处理关头的构造成绩
从头到尾项目制造高质量的项目
这12本书到此就引见结束了!