软件工程在变化。电脑程序变得很大。手机应用很多。人们用软件工作。人们用软件生活。软件需要做好。软件需要安全。近五年的书和文章说了很多。这些资料很重要。我们来谈谈这些内容。
以前写软件是一个人做。现在是一群人做。一群人一起写代码。代码要合在一起。代码不能出错。有一本书叫《持续交付》。这本书说了怎么让代码更快交给用户。机器自动检查代码。机器自动把程序装好。这样人就能省时间。问题能早点发现。用户能早点用上新功能。这个方法现在很多人用。
软件做出来要有人用。用户喜欢才好。有一篇文章讲怎么知道用户喜欢。文章名是《用户故事地图》。做软件的人先想用户做什么。用户想买东西。用户想和朋友聊天。把这些事情画成图。做软件的时候看着图。做的东西要对用户有用。不能只顾写代码。要看用户真的需要什么。这个想法现在很流行。
现在的软件经常改。今天一个样子。明天另一个样子。软件要在网上跑。很多人在网上用。软件不能停。停了大家就用不了。有一本书叫《网站可靠性工程》。书里说怎么让软件一直能工作。很多机器一起跑软件。一台机器坏了别的机器接着干。要看着软件的健康。量一下软件跑得多快。量一下多少人用。数字不对就要赶紧修。这个工作叫运维。写代码的人和运维的人一起做事。这样软件才稳定。
软件不安全会出大事。坏人会偷资料。坏人会让软件瘫痪。近五年大家很担心安全。很多文章写这个。有一篇叫《敏捷安全开发》。文章说安全不能最后才想。安全要从开头就想。写每一行代码都要想安全。检查代码的时候要查安全。测试的时候要试坏人会不会攻进来。做软件像盖房子。安全是房子的地基。地基要打牢。
现在软件经常连在一起。一个软件用另一个软件的能力。这叫做服务。很多小服务组成大应用。有一本书叫《领域驱动设计》。书里说先把业务想清楚。业务就是软件要帮人做的事。比如银行软件要处理钱。电商软件要卖货。把业务分成一块一块。每一块做成一个服务。服务之间说好怎么谈话。这样软件容易做大。一块坏了别的块还能用。这个想法对复杂软件很有帮助。
人工智能越来越热。人工智能也是软件。人工智能怎么做好。有一篇文章叫《机器学习系统的隐秘技术债》。文章说人工智能系统不只是模型。还有很多别的代码。这些代码收集数据。这些代码清洗数据。这些代码把模型放到实际中用。这些代码容易乱。乱了就难改。文章说要做整洁。要测试。要文档。像做普通软件一样认真。不能只管模型好不好。
很多人一起写代码。代码怎么管。有一个工具叫Git。大家用Git管代码版本。近五年有本书叫《ProGit》。书是免费的。网上能看到。书里讲Git怎么用。一个人改了代码。另一个人也改了代码。两个人的修改要合起来。Git帮人做这个。有历史记录。能回到旧版本。这个工具非常重要。不会用Git就很难和大家一起工作。
软件做得好不好要知道。要测量。有一本书叫《加速》。书里说哪些事最重要。代码多久能交给用户。第一次做要不要很久。改了一次以后再做要不要很久。软件坏了多久能修好。量这些时间。时间短就是好。书里用了很多公司的真实数字。这些数字帮别的公司改进自己。
软件团队要合作。人怎么工作很重要。有一本书叫《团队拓扑》。书里说团队怎么组织。有的团队专门做用户界面。有的团队专门管数据。团队之间怎么沟通。沟通要清楚。责任要明确。这样团队不会互相挡路。软件做得快。
测试软件是老话题。近五年测试方法也在变。有一篇文章讲《测试金字塔》。文章说要多写自动检查的代码。这种代码叫单元测试。单元测试检查一小块对不对。单元测试要写得最多。中间一层是检查几个块合起来对不对。最顶上是让机器假装人点软件。这种测试要写得少。因为这种测试慢。这种测试容易坏。按照金字塔的形状做。测试才又省时间又好。
软件工程的世界一直动。这些书和文章是路上的灯。它们照出近五年大家关心的事。软件要快做。软件要对用户有用。软件要一直能工作。软件要安全。软件要容易长大。人工智能软件要认真做。大家要会用工具。要会量自己的速度。团队要组织好。测试要讲方法。这些东西不神奇。就是很多人工作的经验。经验写下来。别人看了就能学会。学了就能做得更好。