写工作日志。
我一直有大量写笔记的习惯。编程的时候,也经常遇到一些麻烦的问题,思路转瞬即逝,于是把所有这些思路记录下来,会在以后的搜索中成为重要的灵感来源。
我的工作日志里通常以项目为单位,包含四个重要的章节:
- 简介
- 设计
- 项目
- 日志
简介
记录一个项目的概要性信息,举几个例子:
- 项目的负责人是谁?关联方都有哪些人?以便我遇到问题时可以迅速找到对应的人,尤其是大厂经常有跨部门合作,不认识的关联方很多,不记录一下是很难的
- 服务器连接信息,比如测试服务器的地址,访问URL,数据库,MQ,各种常见的调试用入口都是值得记录一下的
- 技术文档入口,比如公司的wiki里跟项目相关的wiki的URL
设计
用来记录各种设计思路。包括把项目的各个部分进行拆解后的大模块,模块之间的接口,架构设计等等。
多个小节里记录各个部分的设计思路。尤其是经常有多种设计,可以再分一级目录来记录。每种设计都会有自己的特点,还可以开个表格做对比。比如某个方案的实现速度快,另一个方案可以利用成熟的设施,还一个方案的风险很小,一个方案很炫酷适合以后做分享等等。
这些设计的细节,使得以后寻求代码以外的思路时可以迅速的找到当初的思路。毕竟,很多技术细节,并不是仅仅依靠代码就能看懂的。
项目
项目进度管理用的,我会做个树形图,把每个工作都分拆的足够细致。并用颜色记录每个工作的完成程度。白色标识未开始,黄色是进行中,绿色完成,红色失败。有些带有一定技术风险的项目,同一个功能模块可能有几个技术方案备选,其中一些方案失败也是常态。
尤其是我用SVG图来整理整个树形图,每个节点都是可点击,通过HTML铆点到页面内工作项的具体卡片,来看这个工作项的具体描述。比如更详细的设计思路,实现过程,调研结论等等。
用树形图的方法,也就是项目管理领域常见的WBS方法。
经常是一个项目部署后还会有各个阶段的开发目标。比如功能修改。那么就可以每次子项目开一个小节,记录一下此次的需求方,需求内容等等。这样到年底要整理一年做过的事情时,就会非常有条理。
日志
记录每一天的工作内容。每天一个小节,以日期为标题。
有时候做实验较多,就会在一天中开多个卡片,每个卡片对应一次实验的过程。前面是控制变量,中间是实验结果,后面是对实验结果的简单分析,以便下次实验改进。
格式与搜索
熟悉我的朋友知道,我的笔记格式是reStructuredText,编译工具是一个只有2MB的docutils。生成HTML页面,而源码通过git管理。这样整个笔记库都可以通过grep来进行高效率的搜索。这可比那些源文件是专有格式的方便太多了。
一个例子
以一个基于WiFi的室内定位项目为例子。
目录结构就是如上所说的:
设计一章也包含了对WiFi定位原理的记录。
项目管理部分是树形图,记录项目分解和进度。
具体工作项卡片:
工作日志则是可以随意记录,不求规整,但求以后提供一点低价值线索:
软件工程
进入软件工程师的工作后,这些不是编程,却对编程有着重要意义的技能也是很多的。如上的工作日志技巧大半是我慢慢摸索出来的,少数是学PMP时学到的。
学习的过程就是把前人的经验为自己所用,而非自己再趟一遍所有的坑,所以我的学习过程中也会按一定计划来学习这些知识。《编程卓越之道3:软件工程化》这本书里就讨论了很多软件工程方面的技术,使得驾驭更大的项目时,也有更多成熟工具可供选择。有兴趣的朋友去看看。
编程卓越之道(卷3):软件工程化京东¥127.80去购买
尤其,这本书里还有我写的推荐语 😃
编程中的那些技巧
编程中也有很多技巧,与语言无关,但对提升整个项目的水平有着巨大的帮助。代码质量的重要性不言而喻,随时随地可用的软件才是好的软件。
而要做到随时随地可用,就要处理很多异常情况,比如用精巧的逻辑来防御。关于这些技巧,非常推荐一本书《代码大全2纪念版》。我也在读这本书,后续会分享一些阅读体验。