程序员创建折衷书架的指南

转到Collin Rusk的个人资料 Collin Rusk BlockedUnblockFollow关注3月24日
这张照片由德国Poo-Carmano拍摄

每个开发人员都应该有一个书架。他内阁中可能的文本集是无数的,但并非每个集合都为程序员提供了各种工具。使用不拘一格的武器,开发人员可以从多个角度攻击问题。通过多样化的书架,这种混合方法成为可能。下面列出的作品提供各种衣柜。

概观

本节的书籍提供了开发人员标准工具包中技术的鸟瞰图。

代码完成

Steve McConnell的Code Complete概述了程序员的基本工具箱。该工作台包括规划,设计,编码和QA。 McConnell给出了这些主题和其他主题。他的草图为许多科目提供了最佳实践。 Code Complete中的建议和概要构成了开发人员的标准工具包。

软件工程的事实与谬误

Robert Glass的" 软件工程事实和谬误"是针对常见工作台的案例集合。每个洞察都提供描述,任何争议的特征和咨询的来源。这些元素介绍了许多软件工程主题。这些区域对于基本工具箱至关重要。 Glass的事实扩展了标准工具集。他的书"软件工程的事实和谬误"对于任何开发人员来说都是必读的。 哪个更有前途:数据科学还是软件工程? - 数据驱动的投资者
大约一个月前,当我坐在咖啡馆并为客户开发网站时,我找到了这个女人...... www.datadriveninvestor.com

神话人月

弗雷德里克布鲁克斯的"神话人月"为基线工具包增添了基础洞察力。这种智慧的格言多于格言。布鲁克斯的数据可能不正确,尽管他的直觉是。布鲁克斯的直觉使他断言,为他人编写的软件需要比为开发人员编写的程序更多的努力。他的预感与大多数程序员的经验相匹配。一位软件工程师可能会对布鲁克斯引用的幅度差异进行狡辩,但他仍然承认差距是非常重要的。关于这种差异以及其他方面的观点是"神话人月"增加基本开发工具带的见解。

理解决策,想法和思想

该领域的主题扩展了基本工作台,提供了洞察人类顶空的方法。

知识与决策

Thomas Sowell的知识和决策以人类知识和决策的草图扩展了标准的技巧。专业知识分发。制定决策所需的专业知识是分散的。做出每一个选择的能力不是由一个人,甚至是少数人持有。需要许多人才能做出有效的决策,Sowell通过许多章节将这一点带回家。他的着作" 知识与决定"提供了人类直觉和判断的基本肖像。

理性乐观主义者

Matt Ridley的理性乐观主义者用基本的人际交流知识图片来增强基本工具包。专业知识交易使每个人都有过剩的技能。事实上,当知识结合在一起时,可以设计出新的能力。如果人类没有参与交换各自的见解,那么发明人可能无法获得某些专业知识。了解这些事务是开发人员的有用工具。程序员可以通过阅读Rational Optimist将这种技术添加到他们的工具箱中。

计算机程序设计心理学

Gerald Weinberg的"计算机程序设计心理学"扩展了标准工作台,其中包含程序员顶层空间,环境和任务的图像。例如,软件工程师可能受到工作挑战而不是金钱的激励。任务本身有一些意想不到的困难元素,如规范。编程和程序员的方面可能违反直觉。然而,管理层次结构等工程环境的某些部分在传统上更具挑战性。软件开发的世界有自己的肖像。该图片在工具带中非常有用。要将该草图添加到工作台,请阅读"计算机程序设计心理学"

一般问题解决

这些卷通过一般性攻击问题或广泛发展问题的方式来支持现有的武器库。

一般系统思维导论

杰拉尔德·温伯格(Gerald Weinberg)的"一般系统概论"(General Systems)思考通过一般的谜题方法扩大了现有的工具包。这些方法源于一般系统哲学。这个学说寻找多个学科的潜在相似之处。这些跨专业的平行线提供了许多有用的攻击。例如,抽象和分解提供了诸如物理学等主体固有的复杂性的攻击。计算机编程的主题肯定会受益于一般系统哲学的技术。要将这些方法添加到库中,请阅读"通用系统思维简介"

务实的程序员

安德鲁·亨特和戴夫·托马斯的"实用程序员 " 通过一系列针对常见问题的实用方法,提升了当前的工具箱。例如,可以通过跟踪子弹来解决解决方案与其目标之间的距离问题。如果解决方案,子弹甚至目标都是一个问题,那么团队可以使用原型或一组原型来回答该查询。这些机制只是The Pragmatic Programmer提供的分类中的一小部分。

有用的非软件学科

该地区的文本通过非软件学科的方法增强了现有的工具带。

一课中的经济学

Henry Hazlitt的One Lesson经济学通过经济学的基本概念增强了开发人员的工作台。 令人沮丧的科学是一个充满方程式,图形和图表的研究领域。这些元素在黑兹利特的书中并不突出。他更喜欢通过概念而不是数字来解释经济学。主要的想法是"看到和看不见的"。观察到的是第一顺序成本和/或收益。未观察到的是更高阶的支出和/或收益。检测到的影响是直接结果,而未检测到的影响是二阶,三阶和四阶结果。这些事件及其感知将在本书的各章中讨论。 兹利特在"一课"中经济学经济学的概念添加到程序员的武器库中。

如何直接思考心理学

Keith Stanovich的" 如何直接思考心理学 "通过各种科学技术扩展了开发人员的工具包。科学不是斯坦诺维奇书中的标题。然而,他的书实际上是科学工具的入门读物。作者将它们应用于心理学,但他可以很容易地将它们应用于任何其他领域。软件开发可以很容易地使用随机抽样,盲法,实验控制等方法的入门。要详细了解这些方法,请阅读如何直接思考心理学

数学盲

John Allen Paulos的Innumeracy为程序员提供了基本的统计工具。开发人员可以做基础数学。然而,数字技能并不仅仅是保罗斯的书所试图提供的。 Innumeracy试图让读者具有数学推理的能力,这是人类心理学难以实现的能力。人们的直觉阻碍了思考数字的能力,这是保罗斯解释的一种现象。 Innumeracy展示了一个人的直觉和统计数据如何揭示不同的答案。结果的这种差异是保罗斯试图开车回家的原因。他希望为读者提供防范自己直觉错误的工具。程序员的直觉并不比非程序员的本能更好。软件工程师需要Innumeracy提供的技能,就像其他人一样。

发展进程

本节中的书籍增加了与软件开发过程相关的当前工具箱技术。

增量承诺螺旋模型

Barry Boehm,Jo Ann Lane,Supannika Koolmanojwong和Richard Turner的The Incremental Commitment Spiral Model为开发人员提供了程序方法。这些方法包括一个过程和几个原则。该系统不如原则适用。规则可用于增强现有策略,而该方案需要从头开始实施,这是一项艰巨的任务。使用某些想法扩展程序员流程的工作比实施流程更容易。要使用这些原则更新系统,请阅读增量承诺螺旋 模型

平衡敏捷和纪律

Barry Boehm和Richard Turner的平衡敏捷性和纪律为开发人员提供了避免各种以流程为中心的陷阱的能力。例如,敏捷程序有时会陷入未能记住产品概述的陷阱。通过保留软件的更新摘要可以避免这种风险。为敏捷过程添加草图是一种能够避免此类方案常见危险的能力。避免基于过程的困难的工具是Balancing Agility和Discipline为程序员提供的工具。

产品设计

这些专栏扩大了当前的工作台,提供了有助于软件设计的机制。

大规模C ++软件设计

John Lakos的大规模C ++软件设计通过构建大型软件的方法支持现有工具箱。大产品需要不同于小商品的技术。大规模系统需要特别注意测试和组织。这些领域的不足会产生在实质性软件中具有重要意义的成本,但在微不足道的计划中却是微不足道的。由于验证和设计的不足,大量产品需要技术来避免支出。这些费用由Lakos的书中提供的方法绕过。一种推荐的方法是具有非循环依赖图的体系结构,其元素根据级别系统进行标记。分层方案和非循环图允许独立且有序的测试,从而降低验证和验证的成本。这些用于降低成本的技术以及与大型软件相关的其他问题由大规模C ++软件设计提供

不要让我思考

Steve Krug的" 不要让我思考"扩展了当前的工具带,提供了设计不那么痛苦的用户体验的技能。一个人与软件的接触可能充满困难。一个常见的障碍是确定实现目标的手段。这些机制不需要太多考虑,但他们经常这样做。思考会让用户体验痛苦。减少不必要的反射可以减轻这种不适。克鲁格的" 不要让我思考"提供了减少不快的工具。这些方法可以拓宽任何程序员的工作台。

代码设计

本节的内容增加了现有的武器库,提供了有助于代码排列的方法。

敏捷软件开发,原则,模式和实践

罗伯特·马丁的敏捷软件开发,原理,模式和实践扩大了目前的军械库,具有针对面向对象设计的能力。这些技能由首字母缩略词: SOLID描述。这个短语是面向对象设计的几个原则的标题。这些学说试图使基于对象的软件具有灵活性和可维护性。可锻和可持续的产品是共同的目标。为此, 敏捷软件开发,原理,模式和实践应该增强许多软件开发人员的工具包。

设计模式:可重用面向对象软件的元素

Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides的" 设计模式 "通过攻击常见的,与代码相关的敌人扩展了现有的武器库。例如,一些与建筑相关的对手可以通过各种建造者和工厂模式来打败。其他设备可用于击败结构和行为敌人。许多与代码相邻的拮抗剂可以通过可重复使用的图案进行砍伐。要找到其中一些安排,请阅读设计模式

安全

此类中的主题支持当前使用各种方法来处理安全问题的工具集。

威胁建模

Adam Shostack的威胁模型通过一个用于接近软件安全的系统来支持当前阵列。该方案称为威胁建模。它努力构建威胁模型。该蓝图用于列举与安全相关的危险。每种风险都得到缓解,接受或转移。每种缓解,接受或转移方式都经过测试。威胁建模提供了一种系统的安全方法。要了解有关该方法的更多信息,请阅读Shostack的威胁建模

24软件安全致命罪

Michael Howard,David LeBlanc和John Viega的24个软件安全致命罪案扩展了程序员的工作台,其中包含常见安全问题的技巧。本书解决了一些典型问题,如缓冲区溢出,跨站点脚本和SQL注入。这些复杂性非常普遍,任何开发人员都需要一种方法来处理它们。其中一些路径由24个软件安全致命罪提供。

编码

这些文本通过专门针对编码的方法扩大了当前的技术集合。

清洁代码

罗伯特马丁的清洁代码提供了一套编写卫生方法和课程的实践。马丁的程序有助于洗掉一些代码的污垢和污垢。 Filth有一种进入软件的方法。有些方法变得太长。有些课程会产生太多纠缠。随着时间的推移,这些代码会累积掉。要清除那块垃圾或防止堆积,请按照清洁代码中的例程进行操作。

包起来

需要许多攻击来处理很好地开发软件的复杂问题。软件工程需要大量不拘一格的武器库。建造那个军械库需要时间。阅读此处列出的每个部分中每本书所需的日期和时间都很长。学习每一本书需要花费更多的时间和数年。时间是递增的。每天预留几小时和几分钟,以了解这里描述的一大块区域。这些类别并不意味着在一年内掌握,更不用说一个月,一天或一小时了。

查看英文原文

查看更多文章

公众号:银河系1号

联系邮箱:public@space-explore.com

(未经同意,请勿转载)