(十二)软件工程学习路径
推荐指数:截止我们的统计日期之前,这个资源被推荐的次数。10代表这个资源被推荐过10次。被赞数和次数无关,被赞100次也只算一次。不同的领域不能横向对比,比如”机器学习学习路径“中的资源的指数和和”HCI学习路径“中的资源指数不能直接比较,因为不同领域的popularity不一样。
顺序 | 资源 | 知识分类/使用方法 | 推荐指数 | 链接和介绍 |
1 | 《代码整洁之道》(Clean Code: A Handbook of Agile Software Craftsmanship) | 【编程技巧】 | 10 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgleiBuwYo0JSbSw.pdf 关于软件工程学习,除了经典书籍外还有其他值得推荐的书籍。如《代码整洁之道》是一本教你如何编写干净、简洁代码的指南,非常适合帮助初学者提升编程技巧。 == 软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。 本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。 本书阅读对象为一切有志于改善代码质量的程序员及技术经理。书中介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。 == 仅仅让软件正常工作可不是让软件工程师的最终目标。 每次软件工程师进行代码审查时,他/她首先想到的问题应该是: 我可以让这段代码更高效吗?我可以让这段代码占用更少的内存吗?代码是否整洁?我可以使用不同的 OOP 技术吗?而 Clean Code 肯定可以帮助您提高重构的技能。 == 《Clean Code》,作者Robert C. Martin,分为三个部分。第一部分介绍原则、模式和编写干净代码的实践方法。第二部分包括若干个复杂度渐进的研究案例。每个案例研究就是一个清洁代码的练习,也是通过解决代码库中的一些问题让代码变得健全、高效的练习。第三部分是决定性的一个部分:每个单独的章节在创建案例研究的时候包含了一系列启发式的教学法。最后得到了描述我们在编写、阅读和清理代码时的思考方式的知识库。 == 《Clean Code: A Handbook of Agile Software Craftsmanship》,即《代码整洁之道》。软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都必须承认。Rober C.Martin,Object Mentor公司总裁,也是面向对象设计、模式、UML、敏捷方法学和极限编程领域的资深顾问。作为编程领域的佼佼者,他给出了一系列行之有效的整洁代码操作实践,并提出一种观念:代码质量与其整洁度成正比。本书阅读对象为一切有志于改善代码质量的程序员及技术经理,内容涵盖从命名到重构的多个编程方面,虽然书中所有的例子都用的Java,但其经验适用于任何编程语言。 “用整理代码的决心替代创造废话的冲动。你会发现自己成为更优秀、更乐观的程序员。”——豆瓣,陈 “本书中提倡写代码犹如写文章,对此观点我印象深刻!如何才能写出整洁代码呢?总的原则无非是KISS(Keep It Simple Stupid)。”——豆瓣,Wuqifu == 描述:即使是糟糕的代码也能正常运行。但如果代码不干净,它可能会让开发组织崩溃。每年,由于编写不当的代码,都会损失无数的时间和大量的资源。 你会从事什么样的工作?你会阅读代码 — 很多代码。你将面临思考该代码的正确之处和错误之处的挑战。更重要的是,你将面临重新评估你的专业价值观和对你的技术承诺的挑战。 读者能够从本书学到: 如何区分好代码和坏代码 如何编写好的代码以及如何将糟糕的代码转化为好的代码 如何创建好的名称、好的函数、好的对象和好的类 如何格式化代码以获得最大的可读性 如何在不混淆代码逻辑的情况下实现完整的错误处理 如何进行单元测试和实践测试驱动开发 本书是任何有兴趣编写更好代码的开发人员、软件工程师、项目经理、团队负责人或系统分析师的必备书籍。 == ""1. 汇聚编程大师40余年编程生涯的心得体会 2. 阐释软件工艺中的原理、技术、工具和实践 3. 助力专业软件开发人员具备令人敬佩的职业素养 成功的程序员在以往的工作和生活中都曾经历过大大小小的不确定性,承受过永无休止的压力。他们之所以能够成功,是因为拥有一个共同点,都深切关注创建软件所需的各项实践。他们将软件开发视为一种需要精雕细琢加以修炼的技艺,他们以专业人士的标准要求自己,他们具有职业素养。 软件开发大师Robert C. Martin在书中介绍了真实软件技艺中的各项原则、技术、工具和实践,展示了怎么以自豪、自尊和自信的心态进行软件开发,怎么取得卓越表现和丰硕成果,怎么做到有效沟通和确切估算,怎么以坦诚的心态面对困难,并引导读者认识到专业程序员肩负的责任重大,阐述了什么才是程序员的职业素养。 书中的具体内容包括: ● 成为真正的软件专业人士需要具备哪些条件,如何应对彼此冲突又紧张的进度表和不近情理的管理人员; ● 如何做到流畅编程,克服阻塞状态; ● 如何应对无休止的工作压力,避免崩溃; ● 如何培养坚持不懈的态度,如何拥抱新的开发范式; ● 如何管理好时间,避免身陷泥潭无法自拔; ● 如何培育有利于程序员和开发团队茁壮成长的环境; ● 什么时候应该说“不”,怎么说; ● 什么时候应该说“是”,承诺意味着什么。 软件强大、优雅而实用,让人惊叹不已,不论是开发者还是用户都乐于使用这样的软件。它们并非是由机器编写出来的,而是出自那些对软件技艺拥有坚定信念的专业软件开发者之手。本书将帮助读者成为专业软件开发者中的一员,并赢得只有他们才能拥有的荣誉感和成就感。 == 软件开发大师Robert C. Martin在书中介绍了真实软件技艺中的各项原则、技术、工具和实践,展示了怎么以自豪、自尊和自信的心态进行软件开发,怎么取得卓越表现和丰硕成果,怎么做到有效沟通和确切估算,怎么以坦诚的心态面对困难,并引导读者认识到专业程序员肩负的责任重大,阐述了什么才是程序员的职业素养。 书中的具体内容包括: ● 成为真正的软件专业人士需要具备哪些条件,如何应对彼此冲突又紧张的进度表和不近情理的管理人员; ● 如何做到流畅编程,克服阻塞状态; ● 如何应对无休止的工作压力,避免崩溃; ● 如何培养坚持不懈的态度,如何拥抱新的开发范式; ● 如何管理好时间,避免身陷泥潭无法自拔; ● 如何培育有利于程序员和开发团队茁壮成长的环境; ● 什么时候应该说“不”,怎么说; ● 什么时候应该说“是”,承诺意味着什么。 软件强大、优雅而实用,让人惊叹不已,不论是开发者还是用户都乐于使用这样的软件。它们并非是由机器编写出来的,而是出自那些对软件技艺拥有坚定信念的专业软件开发者之手。本书将帮助读者成为专业软件开发者中的一员,并赢得只有他们才能拥有的荣誉感和成就感。 == 《The Clean Coder: A Code of Conduct for Professional Programmers》,即《代码整洁之道:程序员的职业素养》,这是本列表中Robert C·Martin的第二本书,建议在上一本书之后阅读。成功的程序员在以往的工作和生活中都曾经历过大大小小的不确定性,承受过永无休止的压力。Robert C. Martin以自己40余年编程生涯的心得体会,介绍了真实软件技艺中的各项原则、技术、工具和实践,展示了怎么以自豪、自尊和自信的心态进行软件开发,怎么取得卓越表现和丰硕成果,怎么做到有效沟通和确切估算,怎么以坦诚的心态面对困难,助力专业软件开发人员具备令人敬佩的职业素养。这本书探讨的主题可能不是你希望的,但一定是你需要的。 |
2 | 《重构:改善既有代码的设计》by Martin Fowler | 【编程技巧】 | 9 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg5OiBuwYoxcWSqQU.pdf Martin Fowler的《重构:改善既有代码的设计》是一本关于软件重构技术的权威指南。这本书系统地介绍了重构的原则、过程和技巧,特别是它提供的重构目录,为软件开发人员优化和改善代码提供了极具操作性的指导。 通过具体的例子和详尽的步骤,书中阐述了如何通过重构来提升代码的质量和系统的设计。无论是对于个人开发者还是团队协作,这本书都是提高软件质量不可或缺的资源。 == 重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是本书原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。本书也因此成为与《设计模式》齐名的经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。 本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。 == 《重构:改善既有代码的设计》(Refactoring: Improving the Design of Existing Code)是Martin Fowler所著,书中系统介绍了如何通过重构来改善代码的设计,提高代码的可读性和可维护性。书中强调了代码重构、测试驱动开发、代码评审等实践。代码重构章节详细讲解了如何识别和消除代码中的坏味道,通过一系列小步的修改来逐步改善代码质量。测试驱动开发部分则介绍了如何通过编写测试来驱动代码的设计和实现,从而提高代码的可靠性。书中还强调了代码评审的重要性,通过同行评审可以发现潜在的问题,从而提高代码质量。 == 本书是经典著作《重构》出版20年后的更新版。书中清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了60多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。本书提出的重构准则将帮助开发人员一次一小步地修改代码,从而减少了开发过程中的风险。 本书适合软件开发人员、项目管理人员等阅读,也可作为高等院校计算机及相关专业师生的参考读物。 == Martin Fowler 的重构是 Clean Code 的替代书籍, 它可能是对前一个的补充,虽然某些部分可能看起来像重复的。 == Martin Fowler 撰写了一本名为“重构:改进现有代码的设计”的书。本书重点关注增强遗留代码的设计,以提高软件的可维护性并使当前代码更易于理解。 本书包含 JavaScript 代码示例和功能示例,说明了无需类的重构。本书帮助读者掌握重构的基本原理。此外,本书还教授了有关提高程序清晰度和适应性的知识。此外,本书还教您如何为重构工作开发强大的测试。 == 新版沿袭了第1 版的结构,依次解释什么是重构,为什么要重构,如何通过“坏味道”识别出需要重构的代码,以及如何在实践中成功实施重构(无论用的是什么编程语言)。 ● 理解重构的过程和重构的基本原则; ● 快速有效地应用各种重构手法,提升程序的表达力和可维护性; ● 识别代码中能指示出需要重构的地方的“坏味道”; ● 深入了解各种重构手法,每个手法都包含解释、动机、做法和范例4 个部分; ● 构建稳固的测试,以支持重构工作的开展; ● 理解重构过程的权衡取舍以及重构存在的挑战等。 本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,书中所蕴涵的思想和精华,值得反复咀嚼,而且往往能够常读常新。 == 《Refactoring》Martin Fowler写的《Refactoring》主要关于改进现有代码的设计。这是一个改变软件系统而不改变代码的外部行为,却能提高它内部结构的过程。通过重构,你甚至可以将一个糟糕的设计重新制作为一个很好的设计。这本书对重构原则进行了深入探讨,包括在哪里发现重构的机会,以及如何建立所需的测试。另外还有一个目录有40多个已经用细节证明的重构,这些细节包括何时以及为什么要使用重构,逐步说明如何实现重构,并举例说明重构是如何工作的。这本书用Java作为其主要语言而写,但其中的思路适用于任何OO语言。 == 《Refactoring: Improving the Design of Existing Code》,即《重构:改善既有代码的设计》。Martin Fowler,世界软件开发大师,在面向对象分析设计、UML、模式、XP和重构等领域都有卓越贡献,现为著名软件开发咨询公司ThoughtWorks的首席科学家。本书揭示了重构的过程,解释重构的原理和最佳实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。其中提出的重构准则将帮助开发者一次一小步地修改代码,从而减少开发过程中的风险。 |
3 | 《人月神话》(The Mythical Man-Month)by 弗雷德里克·布鲁克斯(Brooks,F.P.) | 【软件管理】 | 6 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgs_mBuwYozOKB8QI.pdf Fred Brooks的《人月神话》是软件工程领域的经典之作,它提出了以“人月”为计量单位来安排软件项目的非效率性,以及“增加人手可能导致项目延期”的悖论。书中精辟的观察和深刻的见解,对如何管理大型软件项目提供了极具价值的指导。 《人月神话》通过真实的项目案例,探讨了软件开发过程中的常见问题及其解决方案,特别是对项目管理和团队协作的深入剖析,让管理者能够避免许多常见的陷阱。 == 这本书是软件工程领域的经典之作,虽然内容与软件项目管理有所区别,但对于项目管理者来说具有很大的指导意义。书中阐述了软件开发中的一些基本规律,如布鲁克斯定律和人月效应等,以及如何合理地安排项目资源和时间等方面的内容。 == 《The Mythical Man-Month》本书是一本经典之作,但最近被修改和更正了。令人惊奇的是这本书仍然与软件产品开发密切相关。如果你从事软件的话,这本书是必读的。这本书最有价值的部分,我相信,是“plan to throw out”原型章节。尽管我们的目标通常是做一个更大,更好,更快,不管它是什么的东西,但是我们总会构建出一些不得不被废弃,需要重做的东西。这种情况我亲身经历过很多很多次。因此,关键是要plan to throw out(计划抛弃),这样你才能适应接下来的情况。如果你梦想第一个产品就ok,那么你就会有抛弃它们的风险,因为产品的改进和发展是不可避免的。计划抛弃也有助于通过设置合理的里程碑来达到进度目标。 == 《The Mythical Man-month: Essays on Software Engineering》,即《人月神话:软件项目管理之道》。这本出版于1970年的书被奉为软件行业的《圣经》,即使在现在看来也是字字珠玑。Frederick Brooks是1999年的图灵奖得主,致辞中曾提到,“今天我们所看到的计算机体系结构、软件工程,以及三维计算机图形,均受惠于布鲁克斯的开创性工作,是他改变了这些领域的面貌。”他在软件工程领域的最广为人知的经典著作《人月神话》,让软件工程学真正进入人们的视野。 《人月神话》对软件开发过程的几个重要关键点,提出了独到的见解:提倡外科手术式的团队组织;软件项目的核心概念要由很少的人来完成,以保证概念的完整性;软件开发中最大的风险往往不是技术的缺陷,而是缺少沟通;在开发中,要保持适度的文档;在软件开发的过程中,只有适度改进,没有包治百病的银弹。 “书中记述的前辈们在解决这些窘迫所体现的才智和热情,是永远值得后人借鉴的,也将启迪我们开拓未来之路。”——豆瓣,pythia “Software Development 的圣经。如果只能读一本书,那么是这本书。”——豆瓣,浪人BabyL |
4 | 《代码大全》 | 【编程技巧】 | 6 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgpeqBuwYogOOURg.pdf 《代码大全》自问世以来,影响了一代又一代的软件工程师。书中深入浅出地介绍了构建高质量软件的相关技巧和策略,特别是它对编程实践的深刻见解,让无数软件开发者受益匪浅。从变量命名到复杂系统的构建,Steve McConnell为读者详细解析了编写优秀软件所需要的所有技能。 此书不仅适合刚入行的新手,对于经验丰富的开发者来说,也是一本值得反复阅读的宝典。书中所涉及的原则和实践,如避免过度复杂、重用代码、编码标准等,均对提升软件开发的质量和效率有着显著的帮助。 == 首先,根据自己的学习目标和需求,确定需要学习的软件工程领域。比如,如果你对代码质量感兴趣,可以选择以《代码大全》为代表的相关书籍。 == 《代码大全》(Code Complete)是Steve McConnell所著,被誉为软件开发领域的圣经。书中详细讲解了软件构建的各个方面,包括项目规划、代码编写、代码评审、测试和维护。特别是代码编写部分,作者提供了大量具体的编程技巧和最佳实践,帮助开发者编写出高质量、可维护的代码。书中还强调了代码评审的重要性,通过同行评审可以发现潜在的问题,从而提高代码质量。此外,书中的测试和维护章节介绍了如何通过单元测试、集成测试和系统测试来确保软件的可靠性和稳定性。 == 《Code Complete 2》就是它了!这就是我认为首屈一指值得阅读的书(请恕我妄言),如果你要成为一个优秀的软件工程师的话。它被广泛认为是最好的实用性编程指南之一,Steve McConnell最初的《Code Complete》在过去的10多年时间里,一直在帮助开发人员编写更好的软件。现在,这部经典书籍已全面更新,修改成了前沿的实践方法——以及数以百计的新的代码示例——修订了软件结构的艺术和科学。从研究、学术界和日常商业实践中捕获知识体系,McConnell将最有效的技术和必须知道的原则总结成清晰又务实的指导。无论你的经验水平,开发环境,还有项目规模如何,这本书都可以启迪和激发你的思考,帮助你打造最优质的代码。 == 《Code Complete》,即《代码大全》。真正的一本百科全书——960页的最新修订,让人真切感受到沉甸甸的知识。这是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节:从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。书中所论述的技术不仅填补了初级与高级编程技术之间的空白,也为开发者们提供了一个有关编程技巧的信息来源,大有裨益。" |
5 | 《设计模式:可复用面向对象软件的基础》 | 【设计模式】 | 5 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgqeuBuwYoiLHw8AU.pdf Erich Gamma等人所著的《设计模式:可复用面向对象软件的基础》首次系统化地介绍了设计模式,为软件开发者提供了解决常见软件设计问题的模式语言。这本书的核心价值在于它能帮助开发者通过设计模式来提高软件的可复用性、可维护性和可扩展性。 书中不仅详细介绍了23种设计模式,还通过示例代码为读者展示了如何在实际开发中应用这些模式。对于希望提高软件设计能力的开发人员来说,这是一本不容错过的经典书籍。 == 《设计模式》(Design Patterns)是Erich Gamma等人合著的经典书籍,书中介绍了23种常用的设计模式,包括创建型模式、结构型模式、行为型模式等。创建型模式章节详细讲解了如何通过工厂模式、抽象工厂模式等来创建对象,从而提高代码的灵活性和可维护性。结构型模式部分介绍了适配器模式、装饰器模式等,通过这些模式可以更好地组织和管理代码结构。书中的行为型模式章节则强调了观察者模式、策略模式等,通过这些模式可以提高代码的可扩展性和复用性。 == 面向对象编程可以让软件系统更加灵活、有效,以及拥有更好的代码可读性。经验丰富的软件工程师应该经常使用这些技术。(如果技术栈合适的话……)。Design Patterns 是一本畅销书,它不仅教给我们 OOP,还教给我们很多适用于特定用例的不同设计模式。 == Richard Helm、Erich Gamma、Ralph Johnson、John Vlissides 和 Grady Booch 共同创作了一本名为“设计模式:可重用面向对象软件的元素”的书。在本书中,作者解释了模式的概念及其在设计面向对象软件中的用处。这本强烈推荐的软件工程书籍中描述的每种模式都根据何时适合使用进行了解释。这些模式源自真实系统和现实世界的示例。 == 这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。此书适合大学计算机专业的学生、研究生及相关人员参考。 书中涉及的设计模式并不描述新的或未经证实的设计,只收录了那些在不同系统中多次使用过的成功设计。 |
6 | 《人件》(Peopleware)by Tom DeMarco, Timothy Lister | 【团队管理】 | 4 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg6eyBuwYogNW0twE.pdf 知识型企业的核心是人,而不是技术。 == “管理,不仅仅是技术,更是充满人文精神的艺术。《人件》中的一些很精辟的箴言远远超过了软件管理的范畴。没有大量的数字、精密的论证,也不需要这些。这正是《人件》深入浅出的长处。”——豆瓣,QingRen == 本书专门讨论了软件开发和维护的团队管理问题,并向人们的传统认识提出了挑战。作者在书中推崇人本管理思想,指出知识型企业的核心是人,而不是技术。本书子1987年首次出版后,曾在西方引起了轰动,被誉为“对美国软件业影响最大的一本书”。本书还对大中型组织中的软件开发团队如何运作进行了深入探讨。 《人件》已成为软件图书中的经典之作。它和《人月神话》共同被誉为软件图书中“两朵最鲜艳的奇葩”。人们认为,《人月神话》关注“软件开发”本身,《人件》则关注软件开发中的“人”。因此,在成千上万的书架上,《人件》永远和《人月神话》并列在—起。 本书读者包括软件开发组织中的所有人员。管理者和被管理者都将从书中得到有益的启示。 == 《Peopleware:富有成效的项目和团队》是 Tom DeMarco 撰写的一本书。它揭示了以前被忽视的领导力问题。它为管理软件项目或组织的任何人提供了宝贵的建议。 本书被认为是担任团队领导或项目管理角色的软件工程师的必读之作,提供了宝贵的见解。强烈建议所有监督软件团队的人阅读本书,强调每年重新审视其内容的重要性。 |
7 | 《领域驱动设计》(Domain-Driven Design)by Eric Evans | 【设计模式】 | 4 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg7O2BuwYolrnSNQ.pdf 《领域驱动设计》(Domain-Driven Design)是Eric Evans所著,书中系统介绍了领域驱动设计的方法和实践。领域驱动设计强调领域模型、聚合根、上下文边界等概念。领域模型章节详细讲解了如何通过构建领域模型来捕捉业务需求和规则,从而提高系统的灵活性和可维护性。聚合根部分介绍了如何通过定义聚合根来管理领域对象的生命周期,从而提高系统的一致性和稳定性。书中的上下文边界章节则强调了如何通过定义上下文边界来划分系统的模块,从而提高系统的可扩展性和复用性。 == ""本书全面阐释了领域驱动设计(domain-driven design,DDD)的知识体系,内容覆盖领域驱动设计的主要模式与主流方法,并在此基础上提出“领域驱动设计统一过程”(domain-driven design unified process,DDDUP),将整个软件构建过程划分为全局分析、架构映射和领域建模3个阶段。除给出诸多案例来阐释领域驱动设计统一过程中的方法与模式之外,本书还通过一个真实而完整的案例全面展现了如何进行领域驱动设计统一过程的实施和落地。为了更好地运用领域驱动设计统一过程,本书还开创性地引入了业务服务、菱形对称架构、领域驱动架构、服务驱动设计等方法与模式,总结了领域驱动设计能力评估模型与参考过程模型。本书提出的一整套方法体系已在多个项目中推广和落地。 本书适合希望领会软件架构本质、提高软件架构能力的软件架构师,希望提高领域建模能力、打磨软件设计能力的开发人员,希望掌握业务分析与建模方法的业务分析人员,希望学习领域驱动设计并将其运用到项目中的软件行业从业人员阅读参考。 == Eric Evans 的 Domain Driven Design 是一部经典著作,在出版 20 年后仍然很受欢迎。 领域模型使开发人员可以表达丰富的软件功能需求,由此实现的软件可以满足用户真正的需要,因此被公认为是软件设计的关键所在,其重要性显而易见。 但讲述如何将领域模型用于软件开发过程的杰出的实用资料却不多见。本书正是这一领域声名显赫的作品,受到众多业界大师的赞美和推介,广受读者好评。 |
8 | 《敏捷软件开发:原则、模式与实践》 | 【敏捷开发】 | 3 | https://18636251.s21i.faiusr.com/61/ABUIABA9GAAg1fWjugYo1qf-8gU.pdf 还有一本值得一读的书籍是《敏捷软件开发:原则、模式与实践》。这本书介绍了敏捷开发方法论及其实践技术,对于理解和应用敏捷开发流程的过程非常有帮助。 == 《敏捷软件开发》(Agile Software Development)是Robert C. Martin所著,书中系统阐述了敏捷开发方法的核心理念和实践。敏捷开发强调迭代开发、持续集成、客户反馈等原则。书中详细介绍了如何通过迭代开发来逐步交付可用的软件,提高开发团队的响应速度和适应能力。持续集成章节讲述了如何通过自动化工具和持续集成服务器来提高代码的质量和稳定性。书中还强调了客户反馈的重要性,通过定期与客户沟通,可以及时发现和解决问题,从而提高客户满意度。 == 该书介绍了敏捷软件开发的原则、方法和相关实践,对于软件项目管理者来说,是了解敏捷开发流程和团队协作的重要参考书籍。书中涵盖了敏捷开发的各个方面,包括迭代开发、用户故事、测试驱动开发等,旨在帮助项目管理者更好地实施敏捷开发方法。 |
9 | 《程序员修炼之道》 | 【编程技巧】 | 3 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg-e6BuwYow4TVwwM.pdf 《程序员修炼之道》(The Pragmatic Programmer)是Andrew Hunt和David Thomas所著,书中介绍了一系列实用的编程技巧和最佳实践。书中强调了代码复用、自动化测试、版本控制等原则。代码复用章节详细讲解了如何通过模块化设计和抽象来提高代码的复用性,从而减少代码重复和维护成本。自动化测试部分介绍了如何通过编写自动化测试脚本来提高代码的质量和稳定性。书中的版本控制章节则强调了如何通过使用版本控制工具来管理代码的修改历史,从而提高代码的可追溯性和协作效率。 == 《Pragmatic Programmer》这是我最先阅读的编程书籍之一。是我的一个朋友在我就职第一份专业工作的时候推荐给我的。我很庆幸他这么做了。尽管这本书写于1999年,但是它的概念是我们以一种务实的态度去开发复杂系统的基础。程序员也是工匠,他们被训练使用一组特定的工具(编辑器,对象管理,版本跟踪器)生成某种可在一定环境中(硬件组件上的操作系统)工作的产品(程序)。和任何其他工艺一样,计算机编程也孕育出了智慧,但其中的大多数智慧是不能从大学或认证课程中学到的。大多数程序员只能通过独立的试验,时间一点点的积累,才能掌握这些所谓的技巧。在《Pragmatic Programmer》一书中,Andrew Hunt和David Thomas编纂了很多他们在分别作为软件设计者和代码编写者的职业生涯中发现的真理。 作者的一些实用性建议非常具体,而且显然很易于实施。他们建议读者去学习,例如一个文本编辑器,然后在各种情况下使用它。他们还建议使用版本跟踪软件——即使是对最小型的项目,学习正则表达式语法和文本操作语言。书中还有其他许多也非常有价值的建议。在调试部分,作者指出:“如果你看到蹄印的话,应该考虑马这个范围,而不是斑马。”也就是说,要怀疑一切,然后从最显眼的地方寻找问题。还有关于预估时间和费用,以及将集成测试纳入到开发进程的建议。《Pragmatic Programmer》让人爱不释手的还有两个原因:它会更清晰地梳理你自己积累的智慧,它还会给你介绍你还没考虑到的工作方法。 == 《The Pragmatic Programmer》,即程序员修炼之道。这本书直击编程陈地,适用于所有编程语言,创建用户乐于接受的、可工作和易维护的代码。它不仅会改变你的编程习惯,还会改变你的性格。Andrew Hunt在多个行业工作过,电信、银行、金融服务和公用事业,还有一些外来领域,如医学成像、图形艺术、网络服务。他擅长于将已验证的技术实践和前沿技术相结合,创造新奇而实用的方法。所以,这本书的见解涉及了许多有趣的领域,从个人责任到职业发展,直至保持代码灵活和易于改编重用的架构技术,开发者能够从中学到防止软件变质、消除复制知识的陷阱、编写灵活、动态和易适应的代码、避免出现相同的设计、用契约、断言和异常对代码进行防护等内容。 “程序员入门书、终极书、DRY、KISS···从做人到做程序员,这本书教给了你一切,你所需的只是遵循书上的指导。”——知乎,萧井陌 “程序员技艺具备的古老特点,此书表达的很清楚。此书涉及了软件工程角度,个人技艺如何配合的方方面面。”——豆瓣读书,皂角菌 |
10 | 《软件工程——实践者的研究方法》by罗杰 S.普莱斯曼(Roger S.pressman) | 【教材】【大局观】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg8e_BuwYospPN2gI.pdf 高校软件工程标准教材 == 入门书。这是一本关于软件工程的经典教材,如果你想体系化地学习这个领域,那么这本书一定不要错过。此书中文版翻译一般,建议上英文版。 |
11 | 《修改代码的艺术》(Working Effectively With Legacy Code) | 【编程技巧】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgt-CBuwYoyPO27gU.pdf 世界级计算机专家Michael C. Feathers的经典之作,软件开发大师Robert C. Martin作序倾情推荐,修改遗留代码的权威指南。深入剖析修改遗留代码的各种方法和策略,从理解遗留代码、为其编码测试、重构及增加特性等方面给出大量实用建议,是所有程序开发人员必读之作。 修改代码时,你觉得容易吗?当你修改代码时,能否几乎即时地获得反馈?你理解那些代码吗?如果对于这些问题的答案是否定的,那么你面对的就是遗留代码,它们正在浪费你开发工作的时间和金钱。 在本书中,作者为更有效地处理大规模、缺少测试的遗留代码提供了自始至终的策略。本书内容来自Michael创建的非常知名的Object Mentor公司的研习会,Michael使用那些技术来指导并帮助了成千上万位开发者、技术经理和测试人员,让他们的遗留系统处于可控状态。 本书主要内容: 理解修改软件的机制:添加特性、修正缺陷、改进设计、优化性能 把遗留代码放到测试用具之中 编写测试,防止引入新的问题 包含Java、C++、C和C#的示例,其中介绍的大多数技术适用于其他任何语言或平台 精确地确定要在哪些地方修改代码 处理非面向对象的遗留代码 处理看起来没有任何结构的应用程序 == 《Working Effectively With Legacy Code》,即《修改代码的艺术》。即使是最训练有素的开发团队,也不能保证始终编写出清晰高效的代码。如果不积极地修改、挽救,随着时间流逝,系统的腐化程度会日积月累。Michael Feathers是世界级的面向对象技术专家,以丰富的软件项目开发经验著称。他以独到的洞察力,以及多年开发和指导软件项目所积累的丰富经验和深厚功力,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让开发者能够更有效地应付它们,将遗留代码基改善得具有更高性能、更多功能、更好的可靠性和可控性。本书是一部里程碑式的著作,更是代码修改技术的集大成之作,可以大大提高对代码和软件开发的领悟力。 |
12 | 《测试驱动开发 : 实战与模式解析》 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgkfGBuwYoyvWszAc.pdf 本书是测试驱动开发领域的开山之作,由软件工程领域泰斗、极限编程之父Kent Beck撰写,荣获第14界Jolt大奖,10余年畅销不衰,具有里程碑意义。书中不仅以案例的形式呈现了测试驱动开发的原则和方法,而且详尽地阐述了测试驱动开发(TDD)的模式和最佳实践。 本书共32章,分为三大部分。第一部分(第1~17章)从简单问题入手,介绍了TDD的概念、优势与设计方法,再逐步深入到解决复杂问题的方式;细致讲解了如何在编写程序代码前编写自动化测试,如何先塑造一个设计再通过重构逐渐添加设计上的构思,如何为更复杂的逻辑创建测试等。第二部分(第18~24章)讲解用xUnit创建测试的实例,介绍如何利用xUnit框架创建自己的测试用例,便于高效地进行测试。第三部分(第25~32章)介绍TDD的设计模式,包括部分经典的设计模式以及如何将这些模式与TDD相结合,还介绍了重构的方法,以及TDD中的特殊问题等。本书从始至终贯穿了两个TDD项目,展示了如何轻而易举且卓有成效地编写优质代码的技术。 == 《测试驱动开发》(Test-Driven Development)是Kent Beck所著,书中系统介绍了测试驱动开发的核心理念和实践。测试驱动开发强调编写测试、代码实现、重构等步骤。书中详细讲解了如何通过编写测试来驱动代码的设计和实现,从而提高代码的可靠性和可维护性。代码实现部分介绍了如何通过编写小步的代码来实现功能,同时确保所有测试通过。书中的重构章节则强调了如何通过一系列小步的修改来逐步改善代码质量,从而提高代码的可读性和可维护性。 | |
13 | 《计算机程序的构造和解释》(SICP,Structure and Interpretation of Computer Programs) | 【编程技巧】 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgyvGBuwYogKXZ3wY.pdf 《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs, SICP)是Harold Abelson和Gerald Jay Sussman所著,书中系统介绍了计算机程序设计的核心理念和方法。书中强调了递归、抽象、状态变化等概念。递归章节详细讲解了如何通过递归函数来解决复杂的计算问题,从而提高程序的简洁性和可理解性。抽象部分介绍了如何通过数据抽象和过程抽象来提高程序的模块化和可维护性。书中的状态变化章节则强调了如何通过状态机和闭包来管理程序的状态变化,从而提高程序的可靠性和稳定性。 == 《Structure and Interpretation of Computer Programs》 以一种对解决问题和编程技术分析和严谨的态度,这本书面向于工程。《Structure and Interpretation of Computer Programs》强调通过不同方式来发挥核心作用,以处理计算模型中的时间。其独特的方式使得它非常适合于计算机科学课程,以及编程语言和程序设计的入门。这本书进一步解释了4个最著名的编程语言范式——命令式编程,面向对象编程,基于逻辑编程和应用性编程。 | |
14 | 《架构整洁之道》by Robert C. Martin | 【架构】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg-fGBuwYohNPxtQU.pdf Robert C. Martin 的登峰之作,围绕“架构整洁”这一重要导向,系统地剖析其缘起、内涵及应用场景,涵盖软件研发完整过程及所有核心架构模式。 == 《架构整洁之道》是创造“Clean神话”的Bob大叔在架构领域的登峰之作,围绕“架构整洁”这一重要导向,系统地剖析其缘起、内涵及应用场景,涵盖软件研发完整过程及所有核心架构模式。《架构整洁之道》分为6部分,第1部分纲领性地提出软件架构设计的终极目标,描述软件架构设计的重点与模式;第2~4部分从软件开发中三个基础编程范式的定义和特征出发,进一步描述函数、组件、服务设计与实现的定律,以及它们是如何有效构建软件系统的整体架构的;第5部分从整洁架构的定义开始,详细阐述软件架构设计过程中涉及的方方面面,包括划分内部组件边界、应用常见设计模式、避开错误、降低成本、处理特殊情况等,并以实战案例将内容有机整合起来;第6部分讲述具体实现细节;附录则透过作者数十年的软件从业经历再次印证《架构整洁之道》的观点。 |
15 | 《Google软件工程》 | 【业界】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgtvKBuwYombiR-wU.pdf 实践书。如果想要学习业界领先的软件工程经验,告别中华田园式软件开发,那么这本书绝对不能错过。 == 描述:今天软件工程师不仅需要知道如何有效地编程,还需要知道如何开发适当的工程实践来使他们的代码库可持续和健康。本书强调了普通编程者和软件工程之间的这种区别。 软件工程师如何管理一个动态代码库,该代码库会在其整个生命周期内不断发展并响应不断变化的需求和要求?根据他们在 Google 的经验,软件工程师 Titus Winters 和 Hyrum Wright 以及技术作家 Tom Manshreck 对一些世界领先的从业者如何构建和维护软件提出了坦诚而有见地的看法。本书涵盖了 Google 独特的工程文化、流程和工具,以及这些方面如何提高工程组织的效率。 你将探索软件组织在设计、架构、编写和维护代码时应牢记的三个基本原则: 时间如何影响软件的可持续性以及如何使你的代码随着时间的推移具有弹性 规模如何影响工程组织内软件实践的可行性 典型工程师在评估设计和开发决策时需要做出哪些权衡 |
16 | 《软件工程的事实与谬误》 | 【业界】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg9-KBuwYo6s_hpQM.pdf 进阶书。这本书抽取软件行业中经典的55个基本事实和10个谬误进行分析,建议在有一定的软件工程经验之后再来阅读,相信一定会大有裨益。 == 关于构建软件,我们理应知道许多东西,但是实际上却因为这样或那样的原因不知道,甚至我们想当然的一些看法实际上是显而易见的错误。本书抽取软件行业中经典的55个基本事实和10个谬误进行分析,对于每个观点,作者都提供观点的来源和证据,以及相关的参考文献。除此之外,还介绍业界对这个观点的其他不同的认识和理解。可能并非所有的读者都喜欢书中的这55个事实,其中有些事实与某些所谓的现代方法截然相反,但了解这些事实一定大有裨益。 |
17 | 《软技能: 软件开发人员的生活/软技能:代码之外的生存指南》 | 【其他】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgr-OBuwYogOGOggY.pdf John Manual 撰写了一本重要的书,名为“软技能: 软件开发人员的生活”。它可以作为软件开发专业人员过上充实而平衡的生活的指南。这本书为软件工程师提供了有关职业发展、生产力、个人理财、投资、健身和人际关系等重要主题的建议。 本书分为 71 个简短的章节,为提高您的 编程能力和软件工程技能提供了宝贵的见解。 == 《Soft Skills: The Software Developer’s Life Manual》,即《软技能:代码之外的生存指南》。同样,这不是一本关于编程的,却是每个开发者都应该读的书。John Sonmez是“Simple Programmer”网站的创始人,也是软件开发人员的人生导师,帮助软件工程师、程序员和其他专业技术人员推动事业进步,过上更充实的生活。这本书涉及开发者的生活习惯,又包括思维方式,凸显技术中“人”的因素,全面讲解软件行业从业人员所需知道的所有“软技能”:从揭秘面试的流程到精耕细作出一份杀手级简历,从创建大受欢迎的博客到打造自身,从提高自己工作效率到与如何与“拖延症”做斗争,甚至包括如何投资不动产,如何关注自己的健康。 “一名成功的软件开发人员,不能只编写代码,还要有精彩的人生。”——豆瓣,曲天 |
18 | 《Head First Design Patterns(深入浅出设计模式)》 | 【设计模式】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg4POBuwYowobZ5gU.pdf 《Design Patterns》如果你打算成为一名架构师或系统的设计人员,那么你很有可能会被要求阅读这本书。这是一本被誉为有史以来最伟大的有关于软件开发的书,详细讲述了许多不同的设计模式,这么多年来一直在帮助软件工程师避免和处理行业面临的常见问题。遵照这本书的策略可以助你打造更高品质,灵活和可维护的软件。传说中的“四人帮”就是这本书,因为它是由四个著名的作者共同编写的。 == 你将从这本书中学到什么? 你知道你不想重新发明轮子,所以你看看设计模式:那些遇到过相同软件设计问题的人的经验教训。使用设计模式,你可以利用其他人的最佳实践和经验,这样你就可以将时间花在更具挑战性的事情上以及更有趣的东西。本书向你展示了重要的模式、何时使用它们以及为什么使用它们、如何将它们应用到你自己的设计中,以及它们所基于的面向对象设计原则。加入成千上万通过《深入浅出设计模式》提高了面向对象设计技能的开发人员。 这本书有什么特别之处? 如果你读过《深入浅出设计模式》一书,你就会知道会发生什么:一种视觉丰富的格式,专为你的大脑工作方式而设计。借助 《深入浅出设计模式》你将以一种不会让你入睡的方式学习设计原则和模式,因此你可以走出去解决软件设计问题并与团队中的其他人交流模式语言。 == 《Head First Design Patterns》,即《深入浅出设计模式》。这本书是大多数非技术人员所选择的编程书籍,以诙谐、幽默、图文并茂、打破传统著书的方式,由浅入深地详解了设计模式的精神及重点。这本书涵盖了解决现实问题所需要的主要模式,帮助开发者创建功能性的、优雅的、可重复使用和灵活的软件,明确权衡每个模式的利弊。除去大多数书籍都谈论到的模式实现方法,本书也解释了模式设计缘由。全书以Java程式语言为范例,是程式设计课程的最佳教材,其最新版本包括了Lambda中的Java 8更新。 “读这本书不仅仅是学习知识,而是在学习一种思考的方法,学习一种认知的技巧,学习一种成长的阶梯。总之,用你闲暇的时间来读这本书,并不亚于你专注的工作或学习。”——豆瓣,曹操 |