巨人的肩膀

  cheney

之前一直用相对简单的单片机,写的是裸机程序,同时也是由于是学习阶段,所以固化了一种思想——所有东西都要自己做,所有东西都必须搞搞清除。现在更换到ARM9的平台上工作,工作模式变成了多人协作,维护一个不知道多少人维护了多少年的程序,瞬间就感觉不适应了,大的代码量一下子在都不知到从哪里看起。之前也有学习MFC的编程,层层API的结构和C++面向对象的思想,对编程风格影响深刻。其实不需要每个地方都看的,高度结构化的代码,只需要知道下层提供了什么,上层又需要什么,就可以了。适应新的思想之后,觉得以前需要不断查看寄存器手册来写的代码,简直就是浪费青春。或许我自己写的更高效更简洁,但是大多数时候是没有必要的。我要停止重新发明轮子的过程,更多的思考功能实现

做一个项目,真不简单。

明确到底要做个什么东西

客户需求最重要,大部分时候客户也不知道自己要什么,今天要这个要那个,明天又嫌开发速度慢。可能一下在真的明确不了,但是还是要抓住大方向,并留下扩展空间。过分要求坚决拒绝。

看看别人怎么做的

无非买来拆,他为什么这么做,耗费几何,效果几何。

有什么现成的东西可以借鉴

站在巨人的肩膀上,无疑是一条捷径。这个肩膀包括公司以前的项目,自己以前的项目,别的开源项目。任何已经尝试过的想法,实现了的问性能如何,不能实现的问为什么不能实现,这都是宝贵的积累,能够大大降低技术风险。新想法不一定是好想法,试过才知道。特别是开源项目,在网上已经有先贤做过的功能实现,只需要借鉴一下就能大大减少工作量。挑选项目也有一些原则:

开源

能拿到全部源代码非常重要,即使出了问题,也可以自己查找修补;

人气

尽量使用人气旺的项目,这意味着,可以有更过的交流机会,更多的漏洞修补;

结构

使用先进的结构,使用与项目本身契合更好的结构。比如,一个多进程的项目选择一个通信的模块,TCP就非常好。无论外部设备还是进程之间都用套接字来通信,这个一个程序就很方便的扩展到多台电脑上,扩展到多种操作系统下,变成分布式结构。

多语言

类似于结构的可扩展性,有时候需要跨语言的编程,虽然不是必须的,但是有总比没有好。

目前我已经用过,并感觉好用的巨人们

串行通信经常用到ModBus协议:freemodbus 、modbus master 。

curl :几乎封装了所有传输层的协议。

opencv :图像处理视频处理。

嵌入式操作系统:rt-rtx、rt-thread、都江堰操作系统。

jquery :Javascript框架,多浏览器支持,封装基本操作,简单动画,AJAX 等。

测试每一个功能

独立测试每个模块功能,正常和不正常的输入,都没有错误的输出,都通过之后再组合。

余量

任何一个简单的东西都会出问题,时间和设计都要留余量。

版本管理

随着代码量的增加,多人协作的需要,良好的代码版本管理是必须的。TortoiseSVN真的不错,服务器就用本地。GitHub用来弄开源的。有时候需要保存一些碎片化的代码,只有几条语句或者几个函数。目前没有好的解决方法,就都存在Evernote里了。