《构建之法》阅读

0. 说明

我觉得把书上已经有的东西抄一遍到博客上,对于学习帮助不大。我想了个办法,把每个知识块用一句话加以提炼,每次看到这句话,都把相关的知识在脑中快速再现一遍,作为检验。如果回想不起来,就去重新学习。多次再现成功之后,知识转为长期记忆,就把这些话再作为一个知识块提炼成一句话。如此迭代,书可以越读越薄。
心得与评论的丰富度,除了和书本的知识量有关系之外,我觉得还和我自己已有的“相关知识”的量有关,因为知识只有通过联结才能活起来,心中有底才能说得出话。因此有些章节我没写什么评论,说明我没有新想法,只是在积累知识“学习一个”而已。

1. 概论

知识要点:
航空业和软件业的类比,商业与业余软件的区别,软件工程大致领域,软件复杂性的来源,什么是工程,怎样的软件才算好。

1.1 软件 = 程序 + 软件工程

实际上从产业规律来看,先驱探索应该放在成熟产业之后,毕竟能战斗在一线的都是化用规则于无形的巨佬。
商用软件与业余软件的区别在于,商用软件需要确保符合需求、功能齐备、可以维护、万无一失。但是,企业的能力是有限的,软件bug是无穷的。就算是微软的OS也在一直打补丁不是么?所以其中的取舍,确是一门学问。

1.2 软件工程是什么

软件的复杂度,随代码量指数增长。
软件的复杂度,本质不在技术而在管理。软件工程的工具能够帮助降低便携软件的难度,当一个软件工程师的代码量达到瓶颈后,他就知道应该使用更强力的软件工程工具了。

2. 个人技术和流程

知识要点:单元测试,回归测试,抽样,代码注入,效能分析工具的用法,psp。

2.1 单元测试

单元测试就是一堆的测试函数,是一堆的用例。我直接把这种函数和普通函数放在一起,每次跑程序的时候顺便测试一下。单元测试显然更规范,更灵活了,但是也就那么回事。
回归测试,概念类似“回档”。模块的版本,就像一棵树,应该可以用github管理,但是我现在还不怎么会用,也没遇到过这么复杂的情况。现在我最多只会保留一个备份而已。

2.2 效能分析工具

选个指标,比如说内存吧,分析一下,发现某个函数特别消耗资源,改它,资源消耗量将下来了。这就是用效能分析工具进行优化,理论上特别简单。当然,性能不是一切,不能为了性能牺牲代码的可维护性。

2.3 个人开发流程

是个检核表,好用。现在我对其中各项的理解还不够,所以我准备了一个秒表,做什么事情都计时,最后再看看什么任务属于什么项目,再加进去。当然,这样就很难估算各个项目的耗时了,但是这样做是理解其中各项的最好办法。

3. 软件工程师的成长

知识要点
个人贡献者的工作流程,初级工程师的成长方式,TSP要求简介,三层问题模型与自动化。

3.1 个人能力的衡量与发展

现阶段主要就是积累知识、训练基本能力,其他的太虚了。我也感慨,PSP真的是一个很好的管理工具。

3.2 软件工程师的职业发展

3.3 技能的反面

怎么检测是否真正掌握了某个知识?

  • 脑中有一个知识地图,脉络非常清晰,用知识的时候就想在地图上开车,也清楚地知道自己知识的边界。
  • 化繁为简,能用起来,甚至教会10岁小孩。
    书里面介绍了问题层次的模型。我马上就想到那个很出名的心理学模型:舒适区、过渡区、恐慌区。我在很多领域都见过类似的东西,这个模型真的很重要。比如说习惯培养的最终目的,就是自动化地做事情。
posted @ 2017-09-10 00:53  Metak  阅读(283)  评论(3编辑  收藏  举报