推荐序六
看到这本书的名字,可能很多读者会联想到这本书主要讲解如何写好代码,帮助大家顺利拿到Offer。对于企业里的软件工程师来说,代码研发不代表全部工作,事实上写代码可能仅仅占20%的时间。完整的软件研发过程涉及需求分析、产品设计、技术预研、软件开发、调试测试和运行维护等多个环节,同时需要多人紧密协作才能完成。
这让我想到了大学时代那门枯燥的软件工程课程。软件工程一直以来都是本科计算机专业的必修课程之一,但是我相信大部分读者可能和我一样,在上学的时候对于这门课程的印象,可能仅仅是记住了一个所谓的基于“瀑布模型”的软件开发流程概念,至于其他内容我相信早已还给老师了。而且在学校大家也很少能得到专业的软件工程训练。大部分人在参加工作参与了生产级软件的研发后,才逐步体会到软件工程的重要性。软件研发是一个群体性活动,需要多工种、多团队紧密协同,而软件工程正是让软件研发得以顺利协同而总结出来的科学的软件研发方法论,是保证大型软件保质保量、按期交付的基础学科。
软件工程和其他计算机课程有着很大的不同,我认为软件工程是介于工科和理科之间的综合性学科,它没有编程语言那样非常具体的技术体系,是基于长时间实践总结出来的最佳实践,是技术和团队组织能力的综合体现。软件工程作为一门源于实践的学科,必须在实践中不断体会和锻炼才能逐步取得进步。
和其他介绍软件工程体系的图书不同,本书没有一味地深入到偏学术性的讲解过程中,而是完全源于作者日常工作的实践积累。章淼老师近几年来一直参与提升公司软件工程师工程能力的培训工作,本书的很多内容都来自公司软件工程的相关培训素材,并且融合了数万名工程师的培训反馈和心得体会。很多来自一线工程师的反馈也深深地体现了广大工程师对软件工程知识的匮乏,以及对掌握软件工程方法的渴望,我想这也正是促使章淼老师写作本书的原动力之一。
章淼老师具有20多年关于企业级大型软件的研发经验,在公司主导了大量的软件工程课程的制作和讲解,在软件工程领域拥有扎实的理论体系和实践经验。作为和章淼老师共同参与公司工程能力建设的同事,非常荣幸能为这样一本源于实践的书写一点文字。希望本书能够为广大致力于软件研发的工作者提供一点帮助,让更多的软件工程师能够按照科学和高效的方法从事软件研发工作,早日摆脱“996”的窘境,为中国的软件行业正常化发展贡献微薄的力量。
郑然
百度基础架构部,杰出研发架构师