重磅推荐
【产品特色】


【编辑推荐】

● 百度学院精品课“代码的艺术”核心内容首次成书,百度技术培训中心官方指定用书。

● 清华大学、IT名企开设“代码的艺术”课程及讲座,课程获广泛赞誉。

● 成为优秀软件工程师三条路径:

(1)学习-思考-实践;

(2)知识-方法-精神;

(3)基础乃治学之根本。

● 具备正确的意识比掌握具体的知识更重要。

● 读者对象:软件工程师和管理者;计算机和软件方向的在校学生。

● 随书附赠配套视频,作者在线一对一答疑等增值服务。


【内容简介】

● 本书是作者围绕软件工程能力所做的系列培训的内容汇编。这些内容来源于作者20 多年以来对软件工程的学习体会和项目实践,以及对中国工业界软件工程师的观察和教育实践。

● 全书共8章,第1 章说明了什么是软件工程能力,阐述了软件工程能力中的素质要求。第2~8章分别从代码、文档、项目管理这三个方面讲解了提升软件工程能力素质的实践方法。 对于代码,第2章"代码的艺术”对其进行了总体说明,第3 章重点说明了代码评审,第4章以Mini-spider 为例说明了方法如何运用。 对于文档,第5章说明了如何写好项目文档,第6章说明了做研究的基本方法。对于项目管理,第7章简要说明了如何做好项目管理,第8章重点说明了如何做好项目沟通。


【作者简介】

章淼,博士,百度智能云资深研发工程师,BFE开源项目发起人。

1997年至2006年在清华大学从事互联网协议和网络体系结构的研究。

2012年加入百度,一直从事网络基础架构的研发工作。同时积极推动百度的代码质量和工程能力的提升,百度技术培训中心“金牌讲师”,曾任百度代码规范委员会主席。


【媒体评论】

● 推荐序一 ●

作为一位在软件工程领域工作多年的专业人士,我做过研发中心总经理,也一直担任软件企业技术培训机构的负责人,还领导过工程效能部门,甚至组建并亲自带领过软件技术文档团队。一直以来,我看到不少软件工程师和软件开发管理者,对软件研发普遍存在一些错误的认识。

他们认为,只要掌握好编程技能就好,把常用的编程语言和软件工具掌握得越熟练就越有竞争力,他们将大量的精力花在钻研编程技能上,这也和很多用人单位的价值取向有密切关系。在面试和考查软件工程师时,很多用人单位多半考查的是和编程能力相关的内容,一般不考查工程素养。这强化了软件工程师的错误认知,他们更加错误地认为只要会编程就能找到工作。他们还认为,在工程意识或工程素养上的不足,是可以迅速补齐的短板,这些根本不是难事儿,随时都可以改变和提升。

业界还普遍存在一种错误认知,即对于开发某领域的软件,领域知识和编程技能比软件开发的工程意识更为重要,软件如何构建、开发任务如何组织等涉及工程意识的因素,没有得到足够重视,很多人甚至认为这些降低了软件开发的效率,或者干脆对此嗤之以鼻的也大有人在。

我亲身经历了很多项目的失败,究其原因就是软件工程师的工程意识和相关能力偏弱,他们忽视了很多比编程能力更为重要的工程化思维和作为软件工程师的行为约束。他们没有意识到,能力、意识和素养是需要长时间养成的,就像一个人的气质不能在几天之内速成一样。

互联网企业的大多数工程师一毕业就进入公司工作,他们很聪明,技术功底很扎实,但缺乏对实际项目的工程化锤炼,就职公司更需要培养他们的工程意识和素养;也有很多工作多年的软件工程师,因为常年赶任务,也常常忽视工程化能力的培养。

章淼老师在研发一线工作,他在百度技术培训中心开设的“代码的艺术”课程,专门讲授如何提升软件工程师的工程思维、工程素养和工程意识。《代码的艺术》这本书中的很多内容来自章老师的培训课程和演讲材料,也有部分内容来自他以“代码的艺术”为题在多家大型互联网企业分享的内容。在代码、文档和项目管理等多个方面,这本书既介绍了方法,又有他亲身经历的实际案例解剖。无论是刚参加工作的从业者,还是有多年经验的软件工程师,都反映良好,“代码的艺术”课程也因此在百度大受工程师欢迎,他本人也连续多年被百度技术培训中心评为“金牌讲师”。

本书通俗易懂,可以帮助读者迅速掌握软件研发中的关键要领,并将书中的方法运用到实际项目实践中,能够帮助读者掌握正确的软件研发意识,为未来的职业发展打下良好基础。

——陈尚义 百度技术委员会理事长

● 推荐序二 ●

应章淼博士之邀为他的新书《代码的艺术》写推荐序,我感到不胜荣幸。

这本书由章博士在百度内部为上万名工程师进行代码培训的课件结集而成。章博士还基于该课件给等互联网公司的工程师做过培训,并得到了大家的广泛赞誉。因此,这本书实用性极强。三年前,章博士带着基于该课件总结和凝练出的部分内容,来到清华大学“软件工程”课堂上,给计算机系本科生做了《代码的艺术》技术分享,非常受同学们的欢迎,由此看来这本书的内容也比较适合初学者。

章博士既有高校任教经历,又有多年在创业公司、互联网大厂做软件开发的丰富经验,同时还担任过百度代码规范委员会主席。因此一方面,他深知软件工程师面临的挑战和不足,另一方面又了解如何能够让工程师逐步提升软件开发的能力,以及如何具备正确的软件开发意识,并终形成代码编写的完整体系。这本书就是章博士经千锤百炼总结出的关于代码开发的精华。

因此,我强烈向各位软件工程师推荐这本书!

——裴丹 清华大学计算机系长聘副教授,博士生导师;清华大学计算机系本科生必修课“软件工程”任课教师

● 推荐序三 ●

众所周知,Knuth大师写了《计算机程序设计艺术》一书,他认为编程是一种艺术活动,理由是我们还无法自动编程,同时编程本身蕴含了优雅、美丽、美学(Elegance、Beauty、Aesthetics)。福楼拜曾说过:“科学和艺术总在山顶重逢。”本书一以贯之,鼓励软件工程师培养代码品位、追求“代码艺术家”(Code Artist)的境界。以“码农”自嘲的程序员,其实是这个时代很fashion的人。

不要被“艺术”这个字眼吓到,本书讲的是实战。作者基于多年在产品项目实践和公司内外培训中对各种误区、问题的观察,并在软件工程师需具备的10点素质能力中抽出了其中3点形成本书。读者若能对其中的建议践行不辍,必可习惯成自然,在软件开发的路上留下坚实的脚印。

我的主要工作聚焦于测试和研发效能,书中关于代码、文档、项目管理三件事的思考和总结,我深以为然。代码质量不是测出来的,而是内建的,从业者理应加大在缺陷预防方面的投入(包括但不限于代码评审、单元测试等);文档是产品长期可维护的关键,但现实情况是,它总跟不上代码的步伐,有个段子说,程序员讨厌的四件事是“写注释、写文档、别人不写注释、别人不写文档”;项目管理者们(包括RD)面对DDD(Deadline Driven Development,戏称为“上吊绳驱动的开发”)疲于奔命。

互联网系统越来越庞大,当快速迭代证明了业务可行性并实现了业务增长以后,巨大的代码资产库变得复杂,还有个段子说,“世界上遥远的距离不是生与死,而是你亲手制造的BUG就在你眼前,你却怎么都找不到它。”面对软件开发的根本性困难(复杂性、非一致性、易变性和不可见性),我们需要Back to basics(回到根本),那些基本守则永远不会过时。实际上,很多公司仍在为了落地这些简单的规则而努力。

《代码的艺术》这本书风格朴实无华、内容深入浅出,书中有方法有案例,相信软件工程领域不同背景的读者都能从中受益。非常期待作者在工程能力方面的更多作品问世。

——李中杰 高德研发效能中心负责人

● 推荐序四 ●

Frederick P. Brooks教授在40年前提出一个论断:复杂度和可变性是软件研发中的根本困难,概念结构在说明、设计和测试上的复杂度,在短期内没法通过更好的编程语言和更好的工具来消除。虽然软件行业在这40年里蓬勃发展,但从业者依然在消除复杂度上缺乏卓有成效的建树,这也导致软件行业在工业化的进程中依然极度依赖程序员的工程能力,然而优秀的程序员和平庸的程序员之间的效率差异巨大。

《代码的艺术》是一本关于如何提升工程能力的书,然而它又不同于《代码整洁之道》《代码大全》等偏重讨论编程技能的书。本书在强调“更高效率为客户持续交付价值”的前提下,讨论如何通过提升工程能力来提升交付价值的能力,包括识别价值、质量、持续交付,以及持续提升研发效率等,这是一本值得每个有志于提升自身能力的程序员阅读的书。在新技术层出不穷的当下,通过持续学习提升工程能力,对每个程序员都非常重要——通过提升工程能力来提高效率,并形成良性循环,从而避免陷入繁重混乱工程的“焦油坑”。

——何 波 中泰证券股份有限公司金融科技委员会主任

● 推荐序五 ●

首先非常荣幸可以在时间阅读到本书的手稿,也更荣幸被章博士邀请为本书写推荐序。

其实在收到书稿时,多少还是被书名所惊讶到。把“撸码”升华到艺术层面的思考,真是一个大胆且有想法的角度。当完整阅读完书稿后,作为一个从业十多年的程序员,回首自己的经历,真有一种“阅读恨晚”的感觉。虽说自己也是科班出身,有过在外企和大厂工作的经历,却很少真正系统化地思考和总结过自己的工作,所以真心希望此书能被更多对编码工作有更高追求的读者所阅读,相信读完此书,大家会对目前的工作产生非常大的认知蜕变。

说起代码,大家都知道它是承接人与计算机的沟通载体,所以应该具备两面性:对人友好,并能让计算机高效执行。但在很多场景下,我们往往容易忽略前者,特别是身处当前快节奏的IT时代,大家更多地把编码当作一份工作工具,而非职业。这两者的区别是,视为工具则是目标驱使,视为职业则是成长驱使。而只有真正地把编码视为职业,我们才会在编码前、中、后三个阶段来体系化地思考与探索如何把每一步做到好。

回到本书的内容,读者会现发作者花了很多心思,力求教会大家一些正确的意识,而非简单“复制”一些技巧,所以全篇并没有很多编码技巧这一类的陈述,而是从软件工程的意义、对代码工作的认识、项目文档的价值以及项目管理方法等多个方面整体性地讲解各自的意义与价值,从根本上帮助大家正确了解当前的工作与目标,同时又结合一些实际案例,终能够提升大家对编码工作的认识。

后由衷地预祝获得本书的读友,能够开启一段全新的旅程!

——谢马林 百度架构师,JProtobuf github开源项目作者

● 推荐序六 ●

看到这本书的名字,可能很多读者会联想到这本书主要讲解如何写好代码,帮助大家顺利拿到offer。对于企业里的软件工程师来说,代码研发不代表全部工作,事实上写代码可能仅仅占20%的时间。完整的软件研发过程涉及需求分析、产品设计、技术预研、软件开发、调试测试和运行维护等多个环节,同时需要多人紧密协作才能完成。

这让我想到了大学时代那门枯燥的软件工程课程。软件工程一直以来都是本科计算机专业的必修课程之一,但是我相信大部分读者可能和我一样,在上学的时候对于这门课程的印象,可能仅仅是记住了一个所谓的基于“瀑布模型”的软件开发流程的概念,至于其他内容我相信早已还给老师了。而且在学校大家也很少能得到专业的软件工程训练。大部分人在参加工作参与了生产级软件的研发后,才逐步体会到软件工程的重要性。软件研发是一个群体性活动,需要多工种、多团队紧密协同,而软件工程正是让软件研发得以顺利协同而总结出来的科学的软件研发方法论,是保证大型软件保质保量、按期交付的基础学科。

软件工程和其他计算机课程有着很大的不同,我认为软件工程是介于工科和理科之间的综合性学科,它没有编程语言那样非常具体的技术体系,是基于长时间实践总结出来的实践,是技术和团队组织能力的综合体现。软件工程作为一门源于实践的学科,必须在实践中不断体会和锻炼才能逐步取得进步。

和其他介绍软件工程体系的图书不同,本书没有一味地深入到偏学术性的讲解过程中,而是完全源于作者日常工作的实践积累。章淼老师近几年来一直参与提升公司软件工程能力的培训工作,本书的很多内容都来自公司软件工程的相关培训素材,并且融合了数万名工程师的培训反馈和心得体会。很多来自一线工程师的反馈也深深地体现了广大工程师对软件工程知识的匮乏,以及对掌握软件工程方法的渴望,我想这也正是促使章淼老师写作本书的原动力之一。

章淼老师具有20多年关于企业级大型软件的研发经验,在公司主导了大量的软件工程课程的制作和讲解,在软件工程领域拥有扎实的理论体系和实践经验。作为和章淼老师共同参与公司工程能力建设的同事,非常荣幸能为这样一本源于实践的书写一点文字。希望本书能够为广大致力于软件研发的工作者提供一点帮助,让更多的软件工程师能够按照科学和高效的方法从事软件研发工作,早日摆脱“996”的窘境,为中国的软件行业正常化发展贡献微薄的力量。

——郑 然 百度基础架构部,杰出研发架构师

● 推荐序七 ●

我和章老师相识已有二十多年,我们也早过了软件行业“35岁危机”的年龄。人到中年,会不时听到朋友们聊起“年龄危机”这个话题。然而,也有一些朋友不仅没有“年龄危机”的感觉,反而路还越走越宽。为什么他们没有普遍存在的焦虑感呢?我尝试从“技艺人”的角度来说说我的理解。

汉娜阿伦特在《人的境况》中将人类的活动分为劳动(Labour)、工作(Work)和行动(Action)。姑且不论这种分类是否合理,单就软件开发活动而言,劳动和工作的这种区别就很具有讨论的意义。他认为,“劳动”的目的是维持生命,其成果是消耗品,因此“劳动”必须是周而复始的;而“工作”的目的是建立世界,其成果是可存续的,因此“工作”是一劳永逸的。从事“工作”的人,阿伦特称之为“技艺人”。

日复一日的编码、改BUG、开会、反复修改方案……没有明确的开端,也没有明确的结束—这些画面就像卓别林的电影《摩登时代》里描绘的那样,劳动被异化,劳动者成为了实施手段和生产工具。这种不可控的状态,让人失去了自由。这种活动,就是阿伦特所定义的“劳动”。

“技艺人”做事则完全不同:“技艺人”的目标是做成一件完整的作品,他清楚地知道成果是什么样的,知道在使用正确方法的前提下,能在确定的时间得到确定的成果;“技艺人”在工作过程中有着清晰的阶段性目标和明确的反馈,能感受到过程赋予的自信与快乐。换言之,“技艺人”的工作能获得确定性的成功。经过数百万年的进化,人类已经具备了将事情“做成”的本能,因此“技艺人”的工作能带来成功的喜悦,获得心灵的自由。

能将软件“做成”的工程师,就是软件行业的“技艺人”。他们采用系统化和科学化的方法,不断提升研发效率,通过高效、持续的交付高质量软件来向用户提供价值。“技艺人”不存在软件行业里所谓的“35岁危机”。

在本书中,章老师将软件工程能力作为“技艺人”的核心能力,在代码、文档和项目管理三个方面进行了细致全面的阐述。本书书名中虽含有“艺术”两个字,但章老师将“艺术”变成了可以习得的能力。软件工程师的“意识”比“知识”更重要,但“意识”总有些说不清、道不明的感觉(这也是人们认为编程是一门艺术的原因之一)。我过去认为“意识”很难培养,“道可道,非常道”是理所当然。但当我读完本书初稿,看到“艺术”竟然能被一步步习得,不禁对章老师在软件工程和教学方面的功力心悦诚服。

读完本书,我作为从业“老手”,很是汗颜。按照本书描述的工程能力,对于我过去的工作,绝大多数都要算是“失败”的项目或产品。像我这种吃过苦、踩过“坑”的人,很容易和章老师产生共鸣,看到本书会如获至宝。对于技术团队管理者来说,我认为本书可以用于团队能力评估、培训,也能用于总结SOP、实践。对于“老手”“老团队”而言,他们好将本书放在手边,随时翻阅,以做“吾日三省吾身”之用。

对于踩“坑”不多的“新手”而言,在读本书的过程中,他们也许很难有“老手”那种“悔不当初”的深刻感受,但恰恰由于“新手”还没有养成坏习惯,或者坏习惯还不够根深蒂固,所以用心理解、认真实践,相信很快就能通过学习本书提升软件工程能力。一般而言,我们是按照知、行、信的顺序学习知识和技能的。但在阅读本书时,我建议将顺序稍作调整,先“信”,然后“知”和“行”。正如前面所说,从某种程度上说,开发软件是一门“艺术”,以“意识”为先。当你还没有足够的历练时,不妨敞开心扉,先“信”,之后就能够更积极地去知、去行。

读完本书,我对章老师说:“我所在的这家公司团队要是早十年看了这本书,并去实践,至少能多挣一个亿。”虽然像是一句玩笑话,但我认为本书确有这样的价值。

“种一棵树好的时间是十年前,其次是现在。”阅读本书,也是如此。

——戚文敏 北京海华鑫安生物技术有限责任公司产品总监

● 推荐语 ●

在这个技术创新的时代,以物联网、云计算、大数据为代表的技术元素影响着我们的商业活动与生活,所有人开始关注技术力量,并希望通过技术驱动业务乃至改变世界,从国家政策的“互联网 ”到各领域数字化转型,这一切离不开技术赋能,开发者(工程师)迎来高光时刻!

如何更好地承接和实现开发目标,这给开发者提出了更高要求。从代码构建、软件工程到项目管控和沟通等,提升开发者的综合应战能力成为组织的必修课,百度技术培训中心金牌课程“代码的艺术”正是这样一门课程,章淼老师历经十余个班的授课,终归纳总结成《代码的艺术》一书,期待给开发者们带来良策、指引,并实现目标。

—— 刘付强 msup创始人兼CEO

中国整个社会以及互联网行业都转向高质量发展阶段,原来靠各种红利就能有不错结果的日子已经一去不复返。无论对企业、团队,还是个人而言,认真探索并遵循客观规律,苦练基本功和专业所需核心能力(对程序员而言就是本书的主题——工程能力),已越来越重要。本书公开了国内一线大厂的实践总结,是难能可贵的学习资料,出版恰逢其时。

—— 刘 江 北京智源人工智能研究院副院长,前CSDN和《程序员》杂志总编

多年前在百度和章博士一起共事,我们共同推动了百度代码规范和Code Master体系的建立。看到章博士持之以恒,致力于工程能力和意识的培训与倡导,并将我们的工作发扬光大,由衷钦佩。参与创业多年,我愈发感到工程能力是zui容易被忽视但又是非常重要的成功因素。高质量的软件,来自卓越的工程师和团队,而不是靠“堆人头”实现的。

这本书名为《代码的艺术》,但它并不仅仅讲编码,更像是一本软件工程师的自我修炼手册。章博士是知名开源软件BFE的作者,又是工程能力的布道者,始终坚持在“学习—思考—实践”中提升。这本书是集章博士多年经验之大成,既有来自一线、非常落地的实践,又有实践背后的深入思考。相信对追求卓越的工程师和希望打造高效研发团队的管理者都有非常好的指导和启发意义,强烈推荐!

—— 蒋锦鹏 医渡云首席架构师,百度代码规范委员会首任主席

0和1是软件工程师的指尖艺术,每一位工程师都需要将专业方法和体系化思考作为工作上的指导,以此全面提升软件工程能力。《代码的艺术》一书的作者基于大量实践总结出实践方法论,从意识形态层面传递多维度的软件工程能力,让读者更体系化、有针对性地建立自身的能力图谱。

—— 单致豪 腾讯开源联盟主席

在我们接触的众多软件开发人员中,我们发现软件工程能力是关乎一个人能走多远、能发挥多大作用的重要的能力之一。而在高校软件开发类人才培养体系中,关于软件工程能力方面的培养是非常欠缺的。本书基于作者在大厂的长期从业经历,以及在与公司技术开发人员的研讨和培训过程中积累的大量实践,因此对于培养开发者的软件工程意识具有极强的引导作用。本书语言平实,实用性强,是软件工程方面非常好的参考书目。

—— 王 浩 开课吧联席总裁

很荣幸听过章淼老师的一次现场演讲,当时就被他对软件工程的深刻理解所震撼。当拿到《代码的艺术》这本书并快速翻阅后,我就知道这本书已经脱离过往很多图书专注于一招一式的层面上。和章淼老师一样,我一直认为语言只是工具,关于代码的组织、审阅和文档编写,甚至当启动一个新项目时的调研工作和项目进度管理,以及横向沟通能力都是一个项目成功的关键。这方方面面,我们总结为工程的方法论,或者叫“代码的艺术”。我之前看过《架构整洁之道》和《实现领域驱动设计》,相信这本书也可以给你带来一样的感受,再次强烈推荐!

—— 毛 剑 bilibili基础架构部负责人

记得在一次 Gopher China 晚宴上,章博士给我们分享了软件工程师能力知识图谱。那一次让我对软件工程师有了全新认识,软件工程师应该具备编码、文档和管理三种层次的能力,而现在大多数软件工程师都将精力放在编码上。章博士这本书全方位、深层次地给大家分享了软件工程师应该具备的能力。强烈推荐有志于提升自我能力的工程师都深读一下。

—— 谢孟军 Gopher China社区创始人,积梦智能CEO


【目录】

● 第1章 软件工程能力

1.1 为什么要重视工程能力 / 3

1.2 什么是工程能力 / 5

1.2.1 工程能力的误区 / 5

1.2.2 工程能力的定义 / 6

1.3 怎样提升工程能力 / 11

● 第2章 代码的艺术

2.1 背景和初衷 / 17

2.2 代码和艺术 / 18

2.2.1 代码也能成为艺术作品 / 18

2.2.2 软件工程师和“码农” / 22

2.2.3 来自艺术的启发 / 24

2.2.4 写代码并非易事 / 26

2.3 好代码和坏代码 / 28

2.3.1 好代码的特性 / 28

2.3.2 坏代码的例子 / 33

2.4 好代码从哪里来 / 35

2.4.1 好代码不止于编码 / 35

2.4.2 需求分析和系统设计 / 36

2.5 如何做好需求分析 / 41

2.5.1 如何描述需求 / 41

2.5.2 对需求分析的误解 / 43

2.5.3 需求分析的重要性 / 47

2.6 如何做好系统设计 / 47

2.6.1 什么是系统设计 / 48

2.6.2 设计文档的分类 / 49

2.6.3 什么是系统架构 / 50

2.6.4 系统设计的原则和方法 / 52

2.6.5 重视对外接口 / 56

2.7 如何写出好代码 / 59

2.7.1 代码的沟通价值 / 59

2.7.2 模块的设计方法 / 64

2.7.3 划分模块的方法 / 71

2.7.4 函数的设计方法 / 75

2.7.5 代码块的编写注意事项 / 85

2.7.6 软件开发中的命名 / 89

2.8 如何支持系统运营 / 90

2.8.1 可监测性的重要性 / 91

2.8.2 以BFE开源项目为例 / 92

2.9 成为优秀软件工程师的三条路径 / 93

2.9.1 路径一:学习—思考—实践 / 93

2.9.2 路径二:知识—方法—精神 / 96

2.9.3 路径三:基础乃治学之根本 / 98

● 第3章 代码评审

3.1 代码评审的常见误区 / 103

3.2 为什么要做好代码评审 / 104

3.2.1 代码评审的重要意义 / 104

3.2.2 没有做好代码评审的后果 / 106

3.2.3 为什么要提升代码质量 / 106

3.2.4 为什么要提升编码能力 / 108

3.3 如何做好代码评审 / 108

3.3.1 代码评审的常见问题 / 109

3.3.2 代码评审的正确态度 / 109

3.3.3 代码评审的推荐步骤 / 111

3.3.4 对坏代码的简单判断 / 112

3.3.5 代码评审的注意事项 / 113

3.4 如何成为好的代码评审人 / 116

● 第4章 “代码的艺术”应用

4.1 需求的分析 / 121

4.1.1 题目说明 / 121

4.1.2 功能分析 / 122

4.2 软件的架构 / 123

4.2.1 模块切分 / 123

4.2.2 系统架构 / 128

4.2.3 软件组装 / 130

4.2.4 crawler 间的数据共用 / 132

4.2.5 数据封装 / 133

4.2.6 crawler 的执行逻辑 / 134

4.3 多线程机制 / 135

4.3.1 数据互斥访问 / 136

4.3.2 临界区注意事项 / 138

4.3.3 任务的分发 / 141

4.3.4 程序的优雅退出 / 143

4.4 其他实现细节 / 146

4.4.1 配置的读取 / 146

4.4.2 种子信息的读取 / 147

4.4.3 import 的使用 / 150

4.4.4 异常处理 / 151

4.4.5 构造函数的使用 / 153

4.4.6 正则表达式的使用 / 154

4.5 延伸思考 / 156

4.5.1 实现对各网站的限速 / 156

4.5.2 从单机扩展到分布式 / 157

● 第5章 项目文档

5.1 正确认识项目文档 / 161

5.1.1 项目文档的重要作用 / 161

5.1.2 项目文档的常见误区 / 162

5.1.3 项目文档的常见问题 / 164

5.1.4 什么时候需要写项目文档 / 165

5.1.5 项目文档是写给谁的 / 167

5.1.6 项目文档的基本规范 / 169

5.2 项目文档的编写 / 170

5.2.1 编写顺序 / 170

5.2.2 文档标题 / 171

5.2.3 段落编写 / 173

5.2.4 问题划分 / 176

5.2.5 表述模式 / 177

5.3 项目文档中的图片 / 179

5.4 文档的评审 / 185

5.4.1 文档评审常见问题 / 185

5.4.2 文档评审的方法 / 186

5.5 文档的存放 / 187

5.5.1 文档存放常见错误 / 187

5.5.2 文档存放的建议 / 188

5.5.3 文档索引的例子 / 189

5.5.4 存放工具的选择 / 192

5.6 文档编写工具 / 194

5.7 如何提高文档编写能力 / 195

● 第6章 做研究

6.1 什么是研究 / 199

6.2 如何做好研究 / 201

6.2.1 发现问题 / 201

6.2.2 分析问题 / 203

6.2.3 解决问题 / 205

6.3 做好研究的素质 / 206

6.3.1 关于做人 / 206

6.3.2 关于做事 / 208

6.3.3 关于做学问 / 209

● 第7章 项目管理

7.1 重视项目管理 / 213

7.2 相关基本概念 / 215

7.3 项目管理的过程和步骤 / 218

7.3.1 项目启动和规划 / 219

7.3.2 项目执行和监控 / 224

7.3.3 项目总结与回顾 / 227

● 第8章 项目沟通

8.1 项目沟通的重要性 / 233

8.2 项目沟通方式及对比 / 235

8.3 面对面沟通 / 238

8.4 电话沟通 / 239

8.5 会议沟通 / 240

8.6 IM 工具沟通 / 245

8.7 Email 沟通 / 247

● 附录A 延伸阅读图书推荐

软件工程和编程思想类 / 251

项目管理类 / 252

项目文档编写和阅读类 / 252

产品设计类 / 253


【前言】

本书是笔者围绕软件工程能力所做的系列培训的内容汇编。这些内容来源于笔者20多年以来对软件工程的学习体会和项目实践,以及对中国工业界软件工程师的观察和教育实践。

关于软件开发的书已经有很多,软件工程师阅读多的书或许是对某种编程语言的深入解读,或许是对某种架构方法的阐述。或许由于意识上的偏差,很多软件从业者即使已工作多年,但由于对软件工程理论相关图书阅读较少,因此对软件研发的基本理念和原则还是了解得不多。

编写本书的目的是提升软件工程师的基本意识。对于一名软件工程师来说,具备正确的意识比掌握具体的知识更重要。如果具备正确的意识,即使在工作中不记得具体的知识点,也可以在需要的时候进行查阅,而反过来就不是这样了。

本书对一名软件工程师应具备的基本意识和所需掌握的基本方法进行了全貌性介绍,同时内容又不会过于理论化和艰深。由于篇幅限制,本书对很多内容只做了入门性介绍,并向希望继续深入学习的读者提供了相关图书参考建议。

真诚希望读者能够从本书开始,更多地去阅读软件工程方面的专业图书,因为软件工程师对软件研发的学习和深入理解是永无止境的。

本书的目标读者包括:

(1)软件工程师和管理者。本书中的多个章节已经是百度内部软件工程师的必修课内容。笔者也曾多次以“代码的艺术”为题在多家知名互联网企业做过分享,不仅仅是刚参加工作的软件工程师给出了较好的反馈,很多资深软件工程师也反馈良好。

(2)计算机和软件方向的在校学生。本书介绍的很多方法是笔者在大学时就开始使用的。很多本科生和研究生其实在学校就已经开始参加较复杂的软件研发项目了,他们可以将本书介绍的方法立刻应用在这些项目实践中。更早地具备正确的软件研发意识,将为一个人后续的职业发展打下良好的基础。

本书的内容来源于培训课程材料或演讲材料,在章节编排和内容组织上仍然保持了培训课程和演讲的原貌。每一章都有明确的主题,可以独立阅读,而全书的内容又形成了一个完整体系。

全书组织如下(见图P.1)。

第1章首先说明了什么是软件工程能力,阐述了软件工程能力中的素质要求。

第2~8章分别从代码、文档和项目管理这三个方面讲解了实践方法。

对于代码,第2章“代码的艺术”对其进行了总体说明,第3章重点说明了代码评审,第4章以Mini-spider为例说明了方法如何运用。

对于文档,第5章说明了如何写好项目文档,第6章说明了做研究的基本方法。

对于项目管理,第7章简要说明了如何做好项目管理,第8章重点说明了如何做好项目沟通。


返回顶部