文章目录
- 写在前面
- 《代码大全2》
- 前 言
- 哪些人适合阅读本书
- 还可以从哪些地方找到更多相关信息
- 本书的关键收益
- 为什么要写这本书
- 推荐理由
- 粉丝福利
- 写在后面
写在前面
如果你曾经想要学习软件开发,却因为零基础而感到困惑,那么《代码大全2纪念版》是你的完美选择!这本书已经成为业界的经典之作,并且具有很高的口碑和评价。它将引导你从代码的基本原理开始学习,一步步帮助你成为一名优秀的程序员,如果你想实现你的软件开发梦想,那么这将是你必读的好书!
《代码大全2》
京东直达:https://item.jd.com/13228095.html
前 言
在写作本书的过程中,我主要考虑的是缩短同一个行业中两端的差距,一端是权威、专业人士,另一端是普通的商用实践人员。在如涓涓细流一般“浸润”并被普及成为业内知晓的通用实践之前,许多强大的编程技术其实早已经隐身于期刊杂志和学术论文中很多年。
在二十一世纪的前十年,处于前沿的软件开发实践已经得到了突飞猛进的发展。然而,通用实践却一直裹足不前。bug 随处可见,交付时间一拖再拖,超出预算,等等,这样的情形在很多软件项目中仍然屡见不鲜,甚至还有很多软件根本无法满足其用户的要求。来自软件行业和学术机构的研究人员发现,早在二十世纪七十年代,就有许多足以消除大多数编程难题的高效实践。然而,这些高效实践的报道并没有走出专业技术期刊的影响圈,以至于还有相当一部分软件组织在二十一世纪的前十几年,仍然没有采用这些高效的编程实践。研究还发现,一项研究进展走向商用实践,一般需要五到十年甚至更多的时间(Raghavan and Chand 1989, Rogers 1995, Parnas 1999)。这本书最初的写作动机就是以高效的方式缩短这个过程,使这些关键的发现可以马上供大多数程序员采用。
哪些人适合阅读本书
本书中包含的研究和编程逸事将帮助大家创建高质量的软件,更轻松、更快速地做好自己的工作。本书将帮助你看清楚过去存在的难题,从而知道未来如何避免。书中描述的编程实践将帮助你从容掌控大型项目,帮助你成功维护和修改软件,直到满足项目变更的需求。
- 有经验的程序员
作为一本内容全面和容易上手的软件开发实践指南,本书适合有经验的程序员阅读。本书聚焦于软件构建( 软件生命周期内程序员最熟悉的部分),初衷是让自学成才的程序员以及受过正规训练的程序员能够透彻理解功能强大的软件开发技术。 - 技术带头人
许多技术带头人都用《代码大全2》来培训过团队中资历较浅的程序员。不过,那么也可以用本书来填补自己的知识空白。如果是有经验的程序员,也许不会完全认同书中得出的结论,但如果仔细阅读本书并认真思考每个难题后,那么你会发现自己从此以后可以从容解答别人提出的任何一个软件构建方面的难题了,因为这些问题你都认真思考过。 - 自学的程序员
如果没有接受过太多正规培训,那么这本书将会是你如影随形的良伴。每年有近5 万名新手进入软件开发行业(BLS 2004, Hecker 2004),但每年实际只有3.5 万人有软件相关的学位(NCES 2002)。* 根据这些数字,很快可以得出一个结论,有很多程序员都没有接受过正规的软件开发教育。在由工程师、会计、科学家、教师和小企业主组成的新兴专业人士团体中,出现了自学成才的程序员,编程是他们日常工作中的一部分,但他们并不认为自己就是程序员。无论受过什么程度的编程开发培训,本书都可以帮助你见微知著,洞悉高效的编程实践。 - 学生
前面提到经验丰富但缺乏正规专业教育的程序员,与其相对应的便是年轻的学生。作为职场新人,他们往往理论知识丰富,但缺乏构建软件产品的实际动手经验。那些实用的、关于好代码的学问和知识,通常传递得很慢,在软件架构师、项目主管、业务分析和资深程序员共同参与的形如宗教仪式的“舞蹈”中,真正传承下来的有用实践,可谓少之又少。留下来的往往都是个别程序员的试验品和错误。本书的目的是代替这些传统智慧盛宴的慢传递方式,通过精挑细选,将之前就有的技巧提示和有效的开发策略高度整合到一起。对学生而言,本书可以帮助他们从学术环境轻松迁移到专业开发环境。
还可以从哪些地方找到更多相关信息
本书综合介绍大量软件构建技术,这些技术的来源很广泛。多年以来,除了广泛散落在很多地方以外,关于软件构建的大部分智慧结晶并没有作为书面参考被记录下来(Hildebrand 1989, McConnell 1997a)。
这里想谈一下Github 的情况。Github 在2021 年11 月公布的Octoverse报告中指出,Github 开发者数量目前已达到7300 万,其中美国开发者人数约1355 万,中国有755 万。总体而言,2021 年比前一年新增了21.3 万名首次开源项目贡献者。到2025 年,用户数量预计会达到1亿。
其实呢,专业程序员用的那些高效、高能的编程技术并不神秘。只不过,在日复一日埋头于眼前项目的奔波和劳累中,真的几乎没有几个专家还能够有时间公开分享自己的经验和教训,导致广大程序员很难找到一个好的资源集中介绍编程相关信息。
本书描述的编程技术正好可以填补入门级教科书和高级编程教科书之间的空白。在读过Java 编程入门、中高级Java 编程和高级Java 编程之后,你会读哪一本关于编程的书呢?你会读详细介绍英特尔或摩托罗拉硬件的书,介绍Windows 或Linux 操作系统功能以及其他编程语言的书,那些没有详细参考书的编程语言或程序,是没有人会用的。但是,本书是少数几本只专注于讨论编程的书。有些总能让人受益匪浅的编程技术就是适用于任何环境或者语言的通用实践。对于这样的实践,其他的书一般都略过不提,本书则不同,偏偏就要集中介绍这些通用实践。
本书可谓博采众长,选材来源广泛,如下图所示。要想获得本书包含的所有信息,另一个唯一可取的方式是遍历浩如烟海的文字,在汗牛充栋的书山和几百册技术类期刊中寻宝,同时你本人还需要加持丰富的开发实践经验。如果这些都没问题,你仍然可以从本书中受益,因为它“海纳百川”,把所有精华汇聚于一处,非常方便你随时参考。
- 专业经验
- 介绍编程语言的书
- 其他介绍软件的书
- 杂志上
- 发表的文章
- 软件构建
- 技术参考
本书的关键收益
不管背景如何,本书都可以帮助你以更少的时间和更少的痛苦写出更好的程序。
- 一本完整的软件构建参考 本书讨论了软件构建的方方面面,比如软件质量和编程思维。它直击软件构建的真实细节,比如构建类的步骤,抽丝剥茧,阐述数据和控制结构的使用、调试、重构和代码调优技术及策略等。对于这些主题,不必按顺序从头读到尾。因为本书在设计的时候,已经优先考虑到要让大家更容易找到自己感兴趣的具体信息。
- 随时可用的检查清单 全书包含35 个检查清单,可以用来评估软件架构、设计方法、类和子程序的质量、变量名称、控制结构、代码布局和测试用例等。
- 时新的信息 本书描述前沿技术,许多技术都还没有普及成为商业开发实践。本书的素材取自行业实践和研究机构,描述的很多开发技术在未来很多年都普遍适用。
- 从更广的视角来看待软件开发 通过本书,你将有机会以参观者的角度,不再疲于奔命,而是冷静下来搞清楚哪些行得通,哪些行不通。实干派的程序员基本上没有时间读上几百本书籍和专业技术期刊上发表的文章( 其中的精华都包含在本书中)。纳入本书的研究经验和开发经验将帮助你展开想象,启发你对项目的思考,让你能够选择策略性的行动,从而使自己不至于反反复复地掉入同样的坑中。
- 字字珠玑,全是干货 有些技术书籍华而不实,废话十之八九,仅有一两成的真知灼见。本书兼容并蓄,会讲到每种编程技术的利与弊。对于特定项目的具体要求,你显然比旁观者更为清楚。所以,为了帮助你在特定条件下作出更好的决策,本书提供了你需要掌握的客观信息。
- 可以应用于大多数常见编程语言的概念 本书描述的技术可以充分用于你所选择的编程语言,不管是C++ 语言、C# 语言、Java 语言还是其他语言。
- 大量代码示例 本书包含将近500 个代码示例,好代码有,烂代码也有。之所以包含这么多代码示例,是因为我个人从这些代码示例中受益匪浅。推己及人,我希望其他程序员也能够从中收获良多。这些代码范例涉及多种编程语言,因为至少掌握两种语言通常是区分专业程序员和非专业程序员的分水岭。作为一名程序员,一旦意识到编程准则超越于任何一种特定语言的语法,就意味着专业知识的殿堂已经向他敞开大门,质量和生产力从此以后将出现质的飞跃。为了尽可能减轻多种编程语言所带来的负担,我有意回避了只有真正内行才看得懂的语言特性( 除非还有具体展开的讨论)。你不需要通过理解不同代码片段之间的每个细微差异来理解它们的意义。如果把注意力集中在要阐述的关键点上,你会发现自己完全能够读懂代码,不管它是用什么语言来写的。为了让你更容易理解,我特别针对代码范例中的重要部分增加了注释。
- 访问其他信息来源 本书收集了大部分以软件构建为主题的信息,但这还没完。除第1 章外,各章的“更多资源”小节还给出了其他书籍和文章,以方便大家进一步了解最感兴趣的主题。
为什么要写这本书
软件工程领域已经充分意识到,迫切需要一本全面包含高效开发实践的软件开发参考手册。
计算机科学与技术委员会有一份报告指出,软件开发质量和生产力要想取得最大的效益,只能来自于对现有高效软件工程实践相关知识进行编纂、分类并广泛传播(CSTB 1990, McConnell 1997a)。该委员会最后得出一个结论:与这些软件工程实践相关的知识的传播策略要根植于“软件工程参考手册”这个基本概念。
软件构建是一个长期不受重视的主题 有那么一段时间,软件开发和写代码被混为一谈。但在软件开发周期中一些独特的活动被识别出来之后,圈子中有些思想领袖就开始花时间分析项目管理、需求、设计和测试,并掀起一场轰轰烈烈的方法论之争。对这些新领域进行研究的热潮,把原本一脉相承的代码构建冷落在一旁,就像它和软件开发没有什么关系一样。
对代码构建的讨论之所以冷门,还有一个原因。有人建议,如果把代码构建当作独立的软件开发活动,就意味着必须把它当作一个独立的阶段。实际上,软件活动和阶段真的没有必要有任何一一对应的特定关系,不管其他软件活动是以阶段、迭代还是其他方式来执行,都不影响我们对代码构建进行讨论,这样做才是“正确”的。
软件构建的重要性不可小觑 软件构建长期被研究人员和技术作家忽略的另一个原因是,他们错误地认为,相较于其他软件开发活动,代码构建是一个相对机械的过程,几乎没有任何改进的机会。然而,事实并非如此。
在小型项目中,代码构建的投入占比一般为65% 左右,中型项目为50%。对于错误,小型项目中代码构建所产生的占比为75%,中型和大型项目则为50% ~ 75%。显然,错误占比为50% ~ 75% 的任何活动都有机会得以显著改进( 第27 章包含更详细的统计数据和分析)。
有评论人士指出,尽管代码构建错误在总的错误中占比很高,但其修复成本低于需求和架构错误。言下之意,代码构建的重要性也就不该那么高。没错,构建错误的修复成本实际上并不高。但研究人员发现,一直以来,一些不起眼儿的代码错误却是最终造成修复成本高达几亿美元的一些软件错误(Weinberg 1983, SEN 1990)。显然,修复成本不高,并不意味着它们就应该优先级低。
具有讽刺意味的是,软件构建之所以不受重视,另一个原因居然是它是软件生命周期中唯一一个必须要认真完成的活动。需求可以靠假设,用不着认真开发;架构可以打折扣,用不着认真设计;测试可以缩水或者略过不做,用不着做全盘计划和执行。但是,如果要开发一个程序,那么一定得好好构建代码,这样一来,构建便在改进开发实践中成为一个独特而富有成效的领域。
关于高效构建实践,还没有一本理想的同类书。
软件构建的重要性既然那么明显,我便理所当然地认为我在构思这本书的时候,肯定已经有其他人写过高效构建实践的书。
显然,业界需要一本介绍如何进行高效编程的书。但我发现,软件构建方面的书乏善可陈,而且都不全面。有些书写于二十世纪九十年代之前甚至更早,讲的是只有真正内行才看得懂的小众语言,比如ALGOL、PL/I、Ratfor 和Smalltalk。有些是压根儿没有写过生产代码*
(译注:所谓生产代码,是指包含系统逻辑并在生产环境中运行的那部分代码。)的教授写的。教授们写的技术书适用于学生的项目,但对于这些技术在整个大规模软件开发环境中是否适用,他们并没有多少概念。还有一些书呢,则鼓吹作者最新最爱的方法体系,完全忽略那些庞大的、经年累月沉淀下来的实践知识宝库。
简而言之,从来没有一本书能够像本书一样,从专业经验、行业研究和学术成果中萃取出这样一套实用的编程技术体系,包含当前的编程语言、面向对象的编程语言以及前沿的开发实践。显然,以编程为主题的书需要由知晓最新理论发展水平的人来写,而不是真正动手写代码构建软件产品并以实践为乐的人来写。对于本书,我的设想是全面而完整地讨论如何构建代码,是一本由程序员写给程序员看的书。
推荐理由
《代码大全2:纪念版》是Steve McConnell所著的一本经典的软件工程书籍,对于那些希望提高自己的编程技能和开发软件的人来说是一本必读书籍。以下是本书的推荐理由:
首先,本书涵盖了广泛的主题,包括代码质量、软件开发流程、软件设计、代码优化、代码调试等方面,加深了读者对软件开发整个过程的理解和掌握。每个主题都形成了一个章节,针对每个章节,作者提供了详细、易于理解的解释,让读者能够深入了解软件开发的各个方面。
其次,本书的讲解方式很系统化,每个章节都有明确的目标和对目标的详细解释,让读者能够清楚地了解每个章节和每个主题的背景和目的。作者还会提供一些实用的技巧和建议,来帮助读者更好地实践和应用这些概念。因此,本书的讲解方式非常清晰、易于理解。
第三,本书给出的具体例子和案例都很有启发性。作者通过结合实际的案例,来说明软件开发过程中可能出现的问题,并提供一些解决方案。本书所提供的这些示例能够帮助读者对软件开发过程中的各个方面进行深入的了解,提高软件开发的效率和质量。
最后,本书内容丰富、系统化,结合了多年的软件工程实践和经验,对于那些希望进一步提高自己编码和软件开发能力的人来说是一本非常有价值的书籍。无论是正在考虑开发自己的软件,还是正在寻找提高自己编程技能的方法,或者是正在处理日常工作中的编码难题,读者都能够从本书中找到一些有用的信息和技巧。
总而言之,《代码大全2:纪念版》是一本非常好的软件开发指导书籍,能够帮助读者提高自己编程技能和提高软件开发的质量,是一本值得推荐的书籍。
粉丝福利
- 现在 点赞收藏评论 “人生苦短,我爱代码”
- 评论区将随机抽取至多三名小伙伴免费赠书一本
- 截止日期:2023年12月17日
写在后面
我是一只有趣的兔子,感谢你的喜欢!