1. 软件不可抗拒的几个特点
#1 人都会犯错,所以软件必须充分测试。往往没有测试到的地方,软件出去基本上就是问题所在,你不妨想想,有多少次你做特性开发,一把就能写过的,都是测试后然后不断修正问题从而保证结果正确。例如技术不充分的时候也要通过测试来弥补。
#2 人无法看一个大的东西,所以要分而治之的处理功能。所以迭代特性开发,每次只走一小段,不断试错,开发人员能体会到完成之后的成就感。
#3 软件需求会经常性变化,所以要有适应变化的能力。迭代开发,不断出版本,客户可体验,不断修正。
2. 交互界面
#1 鼠标和键盘输入:单击,双击,输入文字
#2 手势输入:单击,长按,双击,多指输入,拖动,语言输入
3. 产品的定制性(可扩展性):
低级别定制:代码定制,编译定制,例如新引入一块芯片你只需要修改对应的适配器接口重新编译版本即可。
中级别定制:配置文件定制,例如针对不同的用户,我们只需要修改不同的配置文件。
高级别定制:用户自己选择。或则第三方对你的软件扩展,例如浏览器插件。
一般定制级别越高,花费的成本就会越低,质量会越高。
4. BUG的源头
#1编程技能:例如linux架构不熟悉,使用这个架构做就可能出问题。
#2业务能力;不懂业务很多场景考虑不周;特别是异常条件,而往往这个地方又不是那么容易测试到,很容易流入到客户。这个地方就需要开发人员和设计人员,
业务熟悉人员多加讨论,评审。
#3测试能力;单元测试要覆盖问题点和可能影响到的其他地方也需要测试。这个其实是前面两个步骤的保证措施。
错误一般也是28原则,我认为,对于20%可能出现问题的地方,我们需要花80%的时间去控制风险,降低风险发生的概率和问题出现后的补救措施。
5. 嵌入式系统交互界面
#1 命令行:串口命令行,telnet命令行。串口命令行用来打印调试信息。一般开发人员使用。
#2 GUI:显示屏,WEB。一般用户使用。
#3 硬件调试模式:JTAG 下固件或则硬件调试。一般开发人员使用。
6. 模块化
复用性,可扩展,分而治之协作开发,降低软件开发复杂度,增加可调测性代码阅读性好。
7. 关于学习一门新的技术
具体的技术(框架,库,具体的编程语言);编程技能;项目管理,产品管理技能。其实第二,第三个是心法,第一个具体的招数可以现学现用。
学具体的技术:先通看这技术的书有个全面的认识,然后做一个小的项目把这些技术串联起来。以后碰到具体的项目然后在完成项目的过程当中去解决问题。