讨论:如何提高开发效率?
一个人开发整个项目,从设计到编码到调式都是自己搞,随着项目一步步复杂起来,逐渐觉得越来越力不从心,思绪紊乱,注意力难以集中,开发效率严重低下,怎么办?
主要有下面几方面的困扰:
1。项目同时涉及多个工程,并且多个工程相互影响,需要齐头并进,所以思绪总在几个工程之间跳来跳去,感觉大脑的“切换”开销比较大,十分影响效率和心情,怎么办?
2。经常为类或者变量的取名头疼,英文水平自认为还可以,不过要为众多的类和变量取一个恰如其分并且风格统一英文名称,确实让人了绞尽脑汁,也十分影响效率和心情,怎么办?
3。一直坚持为诸如内存分配失败、文件打开失败等小概率错误写了判断和报错代码,造成程序中大量存在各种错误判断和报错代码段,往往仔细检查代码之后,又发现还有一些“可能”出现错误的地方还没有判断,但是如果再加上判断和报错——我已经无法想象最终代码的样子了!也令人头疼。不知道各位的错误判断和处理机制是怎样的?
4。由于是个人的项目,几乎没有写设计文档,没有画流程图,设计都是在脑中形成的,并且是设计一部分,实现一部分,然后再设计下一部分,实现下一部分,以此类推。但是现在感觉与来越吃力,脑子里面混混沌沌的,估计是程序逻辑与来越繁杂了的缘故,怎么办?我需要补上以前没写的文档和流程图,然后养成写文档和画流程图的习惯吗?对于一个人开发整个项目的情况而言,文档要详细到什么程度?流程图要细化到什么程度?不知道各位是如何处理写文档画流程图与直接编码的冲动之间的平衡的?
5。本人有点完美主义,希望设计和代码尽善尽美,这导致我在设计某项数据结构的时候,不自觉地会超前思考有关这个数据结构相关的可能存在的问题,以及可扩展性等,往往会耗费大量时间而无法确定下来,同时令人很沮丧,造成效率低下,怎么办?而且经常好不容易敲定的设计,后来还是要回头来修改甚至推翻——还是完美主义在作祟,怎么办?
希望大家来讨论讨论,帮顶一下。达人来给点建议,直条明路,谢谢!
问题点数:100、回复次数:58Top
1 楼gentlelotus(朗月)回复于 2005-05-11 14:04:52 得分 10
呵呵,同感。觉得应该一开始就养成好习惯写文档作注释。在整体的把握上可能使用visual modeler等工具帮忙比较好,也在探索中,关注!(在命名和错误判断上的确很难办,命名我多参考已有的库和api,但是效率改善很小,错误判断上我通常是分模块测试完毕再组装,这样不至于一堆报告)Top
2 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 14:17:15 得分 0
to gentlelotus(朗月):
你说“觉得应该一开始就养成好习惯写文档作注释”,这个我也觉得,但是每次一写文档,就不知道该写多详细的文档,而且写文档的时候,心里总是会惦记着该部分如何用代码实现,实现难度和性能如何等等,有时候感觉不是文档在指导代码实现,而是代码实现反过来指导文档了,天啊,怎么办啊?
Top
3 楼qrlvls( 空 气 )回复于 2005-05-11 14:18:12 得分 10
1.多做好时间安排,尽可能做好日程表和进度表的记录,习惯有计划地去进行工作,对于临时变化的日程进行记录,同时调整你的日程表
2.首先为自己制定一个命名规则,对成员变量习惯用m_,对全局变量习惯用g_,对话框类使用CXXXDlg,硬件类使用CHWxxxx
另外一个大的项目划分为多个小的项目模块来完成,避免在一个项目中实现所有功能
3.尽可能做好你的版本变更记录,调试代码并非越多越好,把各个模块尽可能按照一定规律独立
4.即使是个人项目,也需要做好文档记录和版本备份,可以借助 Source Safe 来完成这个工作,为自己的机器配置好一个WEB环境,通过一些WEB页面来简化自己的工作
5.这是一个好习惯,但是往往又很难坚持,仍然为自己制定一个较完整的计划,为自己的每一步工作规定一个deadline,避免超时完成Top
4 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 14:19:22 得分 0
而且写文档的时候,同样会为文档格式,用词造句,美观程度等等问题发愁,不知道各位有没有类似的感觉?
Top
5 楼handwolf(青松崖)回复于 2005-05-11 14:30:27 得分 10
先把软件的大体框架写下来,然后针对各个子工程写。
我一般是写功能说明书,然后写结构说明,
流程图一般还是要话的,特别是流程复杂的时候Top
6 楼lcstudio(铁板牛牛)回复于 2005-05-11 14:34:38 得分 10
出错机制最好还是用统一出口的try catch吧.类似的部分可以考虑用宏替换.
没有文档,多写一些注释也差不多啦.代码编辑器的书签功能一定要充分运用起来.既方便查找又方便记录Top
7 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 14:42:57 得分 0
to qrlvls(≌AIR⌒LIKE ≤空气≥) :
1。您似乎误解了我的问题,或许是我还没表述清楚我的问题。我的困扰是:我把项目分成了多个工程,例如是A、B、C、D四个工程,通常A工程进展了一部分,B、C、D等工程也需要进行配套的进展后,A工程才能测试本次进展的效果,而且他们之间还要共享一个公共的数据结构,但他们各自的功能又不同,导致我的大脑会像 CPU 时间片一样,轮流开发A、B、C、D四个工程。不过我问这个问题似乎没有什么意义,好像不存在所谓的解决方案 :(
2。您提到的那种基本的命名规则并不难遵循,我已经遵循并且养成了习惯了,但困扰我的是,在遵循了那些规则之后,要给 CXXXDlg 中的 XXX 命名才是我头疼的地方,在类和变量数目越来越多的情况下,要使命名不重复,而且风格统一(例如:词性风格统一,以前用动词风格,就要坚持动词风格),选词很令人头疼。
3。版本变更记录跟判断和报错代码段有什么联系呀?我原意指的是判断和报错代码段数量爆炸的困扰。
4。我已经使用 WinCVS 来做版本控制,虽然我这是个人项目 :) 不过我的困扰不是版本混乱,而是面对设计复杂度伴随着项目的进展而逐步攀升的时候,我该采取什么样的方法或者工具来控制住设计,以免设计走向迷失或者畸形,同时还要力图保持项目进展的速度。
5。我不认为完美主义是个好习惯,我觉得他是项目进展的绊脚石。我希望高人能够指点一下:在开发项目时在某些方面要做出妥协时的原则依据。
Top
8 楼PeterWong(王老虎)回复于 2005-05-11 14:44:00 得分 10
追求完美是一个人的缺点,我认为.Top
9 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 14:46:33 得分 0
to handwolf(青松崖):
请教一下:您画流程图的时候,每个判断和每个分支都要画上吗?如果不是,哪些判断和分支可以不画?做出此决定的依据是什么?您是用手工绘制流程图还是使用工具?若是使用工具,您是使用什么工具?Word? Visio? SmartDraw?
Top
10 楼PeterWong(王老虎)回复于 2005-05-11 14:48:41 得分 0
追求完美的代码---结果至今还没有写出一个可以运行的程序.
追求完美的人生---结果至今一事无成.
追求完美的女友---结果至今还是单身.
...Top
11 楼qrlvls( 空 气 )回复于 2005-05-11 14:51:13 得分 0
图表有很多种,通常的草图我习惯采用MindManager来完成,可以提醒我很多容易被遗忘的细节;而设备图方面还是习惯用VisioTop
12 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 14:52:06 得分 0
to lcstudio(铁板牛牛) :
请教一下:您觉得 try catch 应该放到哪一个层次上?是最外层吗?例如:对于单线程控制台程序,在 main() 函数已开始加 try 块,末尾加 catch 块,然后不管 main() 中的流程和模块有多庞大有多复杂,出错时尽管抛出异常,在 catch 块中报错然后退出,这样合适吗?
Top
13 楼qrlvls( 空 气 )回复于 2005-05-11 14:52:28 得分 0
修正:设备图->设计图Top
14 楼handwolf(青松崖)回复于 2005-05-11 14:56:17 得分 0
你可以画多层流程图呀,多分几级!
一般只标出重要的分支!
我用过visio,还有自己写的一个小软件。Top
15 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 14:56:44 得分 0
to PeterWong(...) :
严重同意你的观点,我这不是在想办法改吗?但妥协总要有个原则吧,虽然一个合理的原则可以通过不断的尝试摸索出来,但是我更希望缩短该历程,至少在编程开发方面的合理妥协原则方面,希望能够得到达人们的指点呀!
Top
16 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 15:13:48 得分 0
各位在做开发的时候真的都要写文档画图的吗?都能够写完画完实施到底的吗?不知道是不是就只有我一个人做不到...
Top
17 楼PeterWong(王老虎)回复于 2005-05-11 15:14:37 得分 0
如果项目是你一个人开发,只需要写简单的(框架级的)文档就可以了,详细的设计文档可以在第一个版本出来后再一点点补啊.补这个文档的过程也是再一次检查程序逻辑漏洞的机会啊.Top
18 楼xift_2008(☆冲浪者☆)回复于 2005-05-11 15:19:09 得分 10
一开始设计文档不用太详细,大概就行~
但设计思路必须明确,设计流程图必须画得很清晰,根据楼主情况好像每个工程都要做个详细流程图~
根据各个工程得难易度安排工作时间~
根据流程图编写程序~
等代码写得差不多了再将设计文档完善~Top
19 楼handwolf(青松崖)回复于 2005-05-11 15:19:24 得分 0
我也没有做到先写文档再写代码
很多时候是后来补的Top
20 楼handwolf(青松崖)回复于 2005-05-11 15:21:01 得分 0
文档很多时候是后来补的,特别是自己一个人开发的时候!Top
21 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-11 15:22:59 得分 10
具体妥协的原则,可能需要根据实际开发经验,实际情况等来结合考虑了,这就是经验方面的东西了
Top
22 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-11 15:23:29 得分 0
总觉得一个人开发,有点力不从心Top
23 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-11 15:24:01 得分 0
一个人开发,肯定会力不从心Top
24 楼PeterWong(王老虎)回复于 2005-05-11 15:30:17 得分 10
1。项目同时涉及多个工程,并且多个工程相互影响,需要齐头并进,所以思绪总在几个工程之间跳来跳去,感觉大脑的“切换”开销比较大,十分影响效率和心情,怎么办?
---在几个工程之间跳来跳去很累的,很容易出问题的,就不能做完一个再做下一个吗?如果非得几个工程同时做,只能祝福你每天头脑清醒(因为没有详细的文档,很容易张冠李戴的),精神饱满.
2。经常为类或者变量的取名头疼,英文水平自认为还可以,不过要为众多的类和变量取一个恰如其分并且风格统一英文名称,确实让人了绞尽脑汁,也十分影响效率和心情,怎么办?
---不要追求完美,不要指望你一看到每个变量名都知道它是干什么的!写注释啊(用你自认为还可以的英文水平写注释还可以啊).没有详细文档+代码不写注释,嘿嘿...
3。一直坚持为诸如内存分配失败、文件打开失败等小概率错误写了判断和报错代码,造成程序中大量存在各种错误判断和报错代码段,往往仔细检查代码之后,又发现还有一些“可能”出现错误的地方还没有判断,但是如果再加上判断和报错——我已经无法想象最终代码的样子了!也令人头疼。不知道各位的错误判断和处理机制是怎样的?
--有一个错误会导致系统崩溃,可是这个错误出现的概率是1万年/次.我不理它(当然前提是截获这个错误很麻烦,谁不想写出健壮的代码呢?!)
4。由于是个人的项目,几乎没有写设计文档,没有画流程图,设计都是在脑中形成的,并且是设计一部分,实现一部分,然后再设计下一部分,实现下一部分,以此类推。但是现在感觉与来越吃力,脑子里面混混沌沌的,估计是程序逻辑与来越繁杂了的缘故,怎么办?我需要补上以前没写的文档和流程图,然后养成写文档和画流程图的习惯吗?对于一个人开发整个项目的情况而言,文档要详细到什么程度?流程图要细化到什么程度?不知道各位是如何处理写文档画流程图与直接编码的冲动之间的平衡的?
---带注释的代码往往是我后来补写详细设计文档的依据.
5。本人有点完美主义,希望设计和代码尽善尽美,这导致我在设计某项数据结构的时候,不自觉地会超前思考有关这个数据结构相关的可能存在的问题,以及可扩展性等,往往会耗费大量时间而无法确定下来,同时令人很沮丧,造成效率低下,怎么办?而且经常好不容易敲定的设计,后来还是要回头来修改甚至推翻——还是完美主义在作祟,怎么办?
---追求完美还是个度的问题,追求完美并没有错,但不能影响工程进度.我的建议是:先做出一个能跑的测试版,下一步再优化.Top
25 楼qrlvls( 空 气 )回复于 2005-05-11 15:31:51 得分 0
我也经常会手里同时有多个项目,也有几个项目突然时间提前或延后的情况发生,我觉得将所有要完成的工作列成一个条理清晰的表可以帮助缓解这种情况,因为造成轮流开发时的无所适从是因为停留在前一项目的思考中而变得条理不清晰
绘制图表是有必要的,虽然有的时候回想起来图表对你似乎并未有多大帮助,但事实上在你设计时正是图表让你将项目的各环节更好的联系起来Top
26 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 15:35:08 得分 0
声明一下,我并没有说我的代码没有注释,我的代码是有注释的,只是没有独立完整的文档而已。
Top
27 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-05-11 15:35:30 得分 0
我也很困惑,开发过程中,客户需求又不是太明确,害的设计老是改来改去的,留下一堆bug,简直就是豆腐渣工程。
每次都该改一点点,一点点,最后面目全非了.Top
28 楼mli0080(leslie)回复于 2005-05-11 15:43:08 得分 10
首先需要确定你的几个工程分解得是不是合理,你分解的几个小工程之间是怎么进行通信和互相调用的。把每个小工程之间的关联方式搞清楚,为个每小工程定义一个唯一标志命名,每个小工程里面的变量或其它命名时都 加上这个小工程的名称,来区别不同和变量前缀是不同的工程。
另外你还必需 清楚每个工程之间的关联有那些,有没有在不同工程里都 会用到的函数或方法,如果有就把区别出来作为一个公共的函数或方法,这样可以减少重复劳动。都会到用到的部分先写,一时不能完成的可以 先把它当成已经完成的,一个个的写比较好一些。
写文档的目的也就是要搞清楚这些工程之间是怎么进行联系和通信的,使你在开发时有一个比较清醒的头脑来做事。
Top
29 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 15:54:15 得分 0
量化一点儿来讨论吧:
“写文档和画流程图”与“Coding”与“F5”的时间比例大致是多少比较合理?
Top
30 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 16:40:34 得分 0
有时候觉得一口气编一大堆码后再调试,比编一点调试一点效率会高不少。不知道各位是否有同感?
Top
31 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2005-05-11 17:25:41 得分 0
封装
尽量地把相同的功能封装
封装好了这次可以用 下次做开发的时候一样可以用
现在我们已经有一套自己的封装库了
从界面到数据库 网络 打印都有
用起来又快又爽
因为都是自己写的 所以用起来比较熟悉Top
32 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 17:35:19 得分 0
封装是肯定的。对于一些逻辑比较清晰,功能界限比较明显的部分,是比较容易封装的。但是在面对一个全新的系统的时候,光理顺逻辑,划分功能模块就已经令人头疼了,这时候如何封装,以及封装好的部分如何相互作用、耦合,才是伤脑筋的事情呀。
Top
33 楼42252343(大跃进的猪)回复于 2005-05-11 19:43:11 得分 0
哎 楼主我也有这个感觉啊
搬个小板凳 双手托着下巴 来听大家说Top
34 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2005-05-11 19:57:40 得分 0
这个贴是精华,俺还没有很多实际的项目开发经验。只能多听听。
(另外:我也有同感,自己要求太过于高了,总是追求完美,结果浪费了很多时间)Top
35 楼ahzhuo(好好编程,天天向上)回复于 2005-05-11 20:41:23 得分 0
不知道我问得是不是太过泛了,似乎很难求得什么“答案”。不过我想大家都来说两句,我相信能从字里行间找到些启发和共鸣的,欢迎来讨论!
Top
36 楼gentlelotus(朗月)回复于 2005-05-11 22:23:37 得分 0
这个问题好像不是个别哦,我总算可以原谅自己一下了,哈哈。不知道有没有会用CASE工具的,我刚刚开始学习Rational Rose,觉得用这个控制整个项目不失为一个好办法。可是现在用的实在不熟,反而减缓了速度。不过在理清逻辑等方面这个感觉很棒,另外,觉得积累自己的可重用代码库是一个不错的长远之计(忘记了是楼上的哪位大虾的意见了:p),而且现在要想一个人写出完整的好程序来似乎有些勉强自己,还是重视团队合作来得快些。Top
37 楼tudou614(魔蟹座的SATAN)回复于 2005-05-12 08:32:32 得分 0
我来听课Top
38 楼ahzhuo(好好编程,天天向上)回复于 2005-05-12 10:22:28 得分 0
团队合作的优势当然很明显,但是在受条件制约的情况下,有些时候不得不自己操刀绝大部分事情呀。Top
39 楼ahzhuo(好好编程,天天向上)回复于 2005-05-12 12:44:09 得分 0
吸取达人经验,准备培养画流程图的习惯,一幅图胜过千言万语嘛。尝试了一下 Visio 2003,很好用,比它以往的版本好用了许多,对它的印象大为改观,荐!
Top
40 楼coolsnow_(CoolSnow)回复于 2005-05-12 13:15:48 得分 0
首先设计软件的框架,就是大体流程,
然后根据框架去设计模块,
接着根据模块功能去设计成员函数,
最后由成员函数来写出错代码。
用try……catch来抛出异常。
变量名用注释。
Top
41 楼lcstudio(铁板牛牛)回复于 2005-05-12 16:35:04 得分 0
天哪,try catch放到最外层...我无语.
类结构层次的包容层不做一些预处理,怪不得累了!Top
42 楼ypos(叶开)回复于 2005-05-12 17:11:29 得分 0
如果时间不够的话,就没有办法,否则,多找些东西看看吧,比较多,还得自己慢慢悟,大家也不见得在这方面比你强Top
43 楼ahzhuo(好好编程,天天向上)回复于 2005-05-12 17:22:59 得分 0
to lcstudio(铁板牛牛):
我并不是这样做的,我只是提出一种设想而已,我只是想知道若是把 try catch 放到最外层,是否就可以从检测错误和报告错误的迷宫中走出来了?
PS:这里说的错误,均指致命错误,也就是说,一旦出错,程序将无法继续正常运行,例如:内存分配失败等。
Top
44 楼lezi1022(doyouknowdk)回复于 2005-05-12 17:43:45 得分 0
所以说改变习惯是很痛苦的,我们要养成良好的编程习惯和生活习惯。
Top
45 楼ahzhuo(好好编程,天天向上)回复于 2005-05-12 20:11:01 得分 0
必须要不断地否定自己才能成长!
Top
46 楼tan_jianhui(剑晖)回复于 2005-05-12 21:05:56 得分 0
study!Top
47 楼changxu21(dlss)回复于 2005-05-12 22:22:04 得分 0
怎么就有人跟我的想法一摸一样呢!!!!!楼主的所有问题我都碰到了!我也在寻求答案!希望跟楼主交流。changxu21◎sohu.comTop
48 楼wangjianddy(~~~~>_<~~~~)回复于 2005-05-12 22:40:32 得分 0
写多了,特别软件设计那块搞熟了,我想困难就减少了很多Top
49 楼ahzhuo(好好编程,天天向上)回复于 2005-05-13 07:24:21 得分 0
to changxu21(dlss):
怎么能说是“想法”一模一样捏?应该说是遭遇一模一样吧 :)
Top
50 楼leechiyang(逮老鼠的狗算不算好猫?)回复于 2005-05-13 08:23:12 得分 0
借屈原老先生的一句话:
路漫漫其修远兮,吾将上下而求索.Top
51 楼hushuangyan74()回复于 2005-05-13 08:41:02 得分 0
我没有进过大的软件公司,现在在一个小的软件公司里面,一个软件都是自己来做,由于没有什么经验,我也很困惑,对软件也没有划分模块,就是很随意的想当然把每一个功能分成好多的类,有时程序里面有20-30个类,过一段时间自己也搞不清了,看了楼主的这个贴,感觉有好多收获,谢谢各位!Top
52 楼cheeralen(嵌入式)回复于 2005-05-13 08:59:55 得分 0
现在也迷惑中,有些时候真的很沮丧。
每次写完文档,编码时就发现有些根本就在写文档时没有考虑到的,又的回头改文档。总觉得一个人开发有些力不从心。而且追求完美的确也不是一个好的习惯。应该遵循越简单越好的原则。Top
53 楼ringphone(临风)回复于 2005-05-13 09:35:35 得分 10
楼主说的这些问题原来也困扰过我,不过现在我是采用这样一个原则:先把最简单的东西做出来。
超前考虑的东西,复杂的部分先记下来放一边,一个设计无论你考虑的多复杂,编码的时候先把系统简单化,即先把最简单的功能做出来,暂时先不考虑容错等等,把一个能测试的东西做出来,然后根据你最初的构想逐步完善,这时候要坚持一个原则:不把已经做出来的系统里的BUG清除掉,不继续下面的工作,不加入新的功能。
这就好比是建房子,不把下面的东西建稳定了,就不往上垒更多的东西。整个系统也就这样能从无到有慢慢扩展完善,每当加入新的功能,因为前面的BUG已经解决,因此很容易排错,不会牵一发而动全身。
当然说起来容易,实际实施过程中还是会有很多问题的。比如因为要追求完美,完全推翻以前的设计,但是其实前面已完成的部分一定已积累了不少功能实现类等代码,很多是可重用的,比什么都不做光在那里考虑设计好多了吧?
Top
54 楼ahzhuo(好好编程,天天向上)回复于 2005-05-13 10:32:23 得分 0
一直不明白一个问题:看了一些老外的源代码,其中不乏经典作品的源代码,感觉一个字:那个乱啊!注释也并不是很多,真不知道他们是如何理清那些复杂的逻辑、流程的,甚至是一些面向过程的设计,竟然也可以复杂到令人瞠目结舌的地步,但最终的产品仍然跑得很好,很少错误,功能、效率也不错。老外们是如何做到如此清醒清晰的思路的?我怎么就做不到呢?
Top
55 楼changxu21(dlss)回复于 2005-05-13 12:35:18 得分 0
楼主纠正的对。楼主有这种思考的意识,迟早会得到答案的。我认为你所遇到的问题是编程水平提高过程中必须经历的一个阶段,随着自己的经验不断积累,同时不断总结,达到一定层次,就知道:文档该写的多详细?哪些出错事件需要捕捉?各个模块工程进度如何协调等等。Top
56 楼subtlebalance(微妙的平衡)回复于 2005-05-13 13:04:11 得分 0
收藏,学习ing............Top
57 楼nooning(nooning)回复于 2005-05-13 13:27:54 得分 0
我好象有楼主一样的困惑
不过一类对注释倒不是很那个什么,一般注释到函数级,除非特殊才会去写注释,不象现在的公司要求5行就要有注释
另外追求完美真的不是什么好事,个人觉得,我也是写代码的时候经常去追求更好的实现,结果浪费太多的时间和精力
追求开发效率而非运行效率(但追求完美的人很难做的,我也做不到)Top
58 楼ahzhuo(好好编程,天天向上)回复于 2005-05-13 14:53:37 得分 0
困惑大家有,大家谈解惑!
Top




