软件开发中总结
ma100 2013-02-02 02:29:13
本人从事嵌入式c++方面的开发.
自己写的软件常常被抱怨bug多, 开发慢, 用户使用不方便, 不可团队开发.
这四大问题一直困扰着我.造成这些问题的原因我思考了一下, 罗列出来, 望高手指教
1. 思维顺序应该是 客户体验--->程序框架--->代码
在开发一项功能时, 我经常是大概了解了一下客户需求或者说业务逻辑, 再参考一下别家产品的
模样(做嵌入式仪器的,主要通过说明书), 就在脑子里构建架构, 然后写代码.
了解需求的时间大概1分钟~1天, 脑子里构建架构大概1分钟~1小时, 代码1天~1个月
这样做出来的软件,最多没有bug, 架构一定不好, 后期维护麻烦, 多人协作也不适宜.
最关键的是用程序员的思维写出的程序客户不方便, 所谓程序员的思维就是计算机的思维,
比如春晚小品, 把大象放冰箱里要几步? 答 1开门, 2放, 3关门. 在程序员的脑子里
程序就是这么写的, 一般人就会认为是个笑话.
正确的思路是围绕着用户体验, 用户不管你软件是怎么实现的, 方便就行.
满足体验了后最关键的是架构, 不能跟我一样先写代码后想架构
这条做到了可以解决用户使用不方便, 目前这条自己做的很不好, 打0分吧
2. 架构一定要好
多花时间在构想架构上比什么都重要, 我觉得好的架构要有几个原则
1) 文档视图强制分离, 用2个线程. 视图可以调用文档, 反之不行. 这样可以将一个功能划分成2块
减轻程序负担, 但要保证线程同步
2) 合理运用c++. 需要的时候用,不需要或不会的时候千万别用.
刚做c++程序时, 我会为了封装类而封装类, 现在看是事倍功半
c++提供的比c多的特性必须十分了解再用, 比如virtual函数, 我觉得只有在抽象工厂模式下
才能发挥应有的效果. 其实<设计模式>换个角度看是教你c++的语法特性的实际用法,
如果只学c++语法后就滥用真的有说不完的问题
3) 高度抽象. 对业务逻辑透彻了解后,进行高度抽象, 能确保今后的代码可维护行强.
未经抽象的c++代码和c是没区别的.
架构好可以做到维护方便, 团队开发方便, 这条给自己打60分
3. 设计之初就考虑代码复用
尽量把小功能写成二进制库, 并写接口文档
每个人都写的话整个团队就少了很多重复工作, 开发周期缩短.但若都是源码的形势分散在
某个工程里的画, 在公司服务内谈代码复用就是空谈. 就是本人代码复用也不一定行,
因为没有强制的写成独立模块.
这方面我的工作从来没做过, 0分, 公司也鲜有听说, 偶尔有源码级的而已
4. 写测试用例,
这个本人几乎没写过, 测试基本交给第三方黑盒, 结果就是bug满天飞.所以这一项是0分
5. 开发工具
开发工具的选择对于提高开发效率至关重要.
1) 如果可以选择的话用java替换c++. c++实在是太复杂了, 我认为掌握c++需要三个阶段
a)语法, 找本好的c++
b)语法的实际用途, 需要看设计模式,才知道那些语法的有意义的用途, 而不是c++语法书上说的
c)了解c++的陷阱, <effective c++>的, 我看不如叫<c++陷阱与缺陷>
java相对c++来说优点主要有强制写法,减少出错, 如去掉默认参数, 去掉全局函数
把复杂的事情让计算机做, 如内存管理
2) 用已有的软件库. 现在我的程序自己实现了一套UI, Linux下的, 好处很多
比如绘图块, 简单等. 但现在发现坏处更多: bug比通用多, 加复杂功能时
时间耗费多, 为了开发对话框及上面的控件, 用了2个月的时间