冰果

技术群:26678700     
交流QQ: 704839634
合作: 1) 可兼职远程办公开发; 2) 有一套Go+Python开发的行业短信云平台可合作;3)目前正在开发物联网、大数据平台。

编程思考(三)

                              两条路
       新开发一个系统,和维护一个比较大的老系统,那个比较舒服?
       不工作就拿钱是最舒服的,我不讲这个不现实的;在一个老系统上做二次开发,常常更痛苦,所以常见一些人推翻重来。
       推翻重来的理由是,所花时间更少;但这些人从来都不考虑风险,如果你理解错老的业务流程,带来的可能是新的大问题。
       推翻重来,体现出一个程序员的重构水平,他没法控制别人的代码了,也可能体现这个人跟人交流问题。
       我常常反对推翻重来,除非万不得已,因为凡事都有例外。
       所以,当往一个比较大的老系统,添加一些新功能时,出现两条路,出现两类程序员。

       那么,如果堵住推翻重来这条路,逼迫我们面对老系统,情况又怎么样?
       5年以上的系统,多多少少总形成基本工具库和业务工具库,如果公司不逼迫新来同事去学习去使用的话,又形成两条路。
       一类人是只管写自己的新代码,要一个工具类或函数,书上或系统api(如c标准库\stl\boost\ java jdk等等)不能满足他的话,他就要重新造轮子了,他绝对不看已有代码里是否已经实现或类似实现。他对comm\util\commutil等等从名字都可以看出的目录或包,视而不见。
       另一类人,他们很勤奋,常常看看周围是否有可利用的资源,能利用则利用,他们去读周围的代码,了解已有业务流程,一年半载后,对系统越来越熟悉。
       一年半载后,谁速度快,谁更轻松,谁理解业务更深刻,谁重构更快更好?
       结果不言自明。
       有因必有果,有果必有因。

posted on 2010-10-29 13:03 冰果 阅读(1921) 评论(8)  编辑 收藏 引用 所属分类: 其它

评论

# re: 编程思考(三) 2010-10-29 14:33 溪流

如果涉及到的新功能已经触及到老系统的根基了,何不趁机重来呢?如果每次都能适时地实行重构,不过多老的系统,看上去都可以很清爽。

不过lz后半段里的第一类人倒是很常见,呵呵,没办法。不过这算什么轮子?请别玷污轮子一词~~~这只是无聊的重复而已。不过另一类人也不见得多么明智。如果是对于充满“轮子”的5年以上的老系统,熟悉了又如何?浪费生命而已。这种情况下还不如第一类人。  回复  更多评论   

# re: 编程思考(三) 2010-10-29 14:36 溪流

LZ的(一)(二)都很泛泛而谈,说实在的没啥意思。这篇终于涉及到对于实际情况的讨论了。  回复  更多评论   

# re: 编程思考(三) 2010-10-29 15:56 天下

要看程序员們等其他人的意见.

维护及重构都不是一个人的事.
  回复  更多评论   

# re: 编程思考(三) 2010-10-29 19:52 nomagic

有时候情况可能更糟糕,我碰到过的情况是:要维护的老系统异常庞大,它是公司盈利的核心产品,但是设计水平和代码水平都很糟糕,充满bug,非常脆弱。为了保证系统大多数时候可用,到处使用sleep(1)这样的代码来保证线程之间上下文逻辑的正确性,甚至加入了定时重启服务程序的逻辑。另外,经常招一些实习生来继续堆砌代码。开发新的功能总是匆匆忙忙,做过最简单的测试就认为功能可用了,除非用户提出,否则根本不考虑性能、安全性、易用性等等问题。文档与代码中的实际逻辑相差较大。因为系统庞大,且勉强可用,所以公司领导不考虑重写。。。。这种系统让人绝望,只能跳槽!  回复  更多评论   

# re: 编程思考(三) 2010-10-29 19:56 nomagic

继续补充:开发人员经常出差带现场改代码。水平好一点的实习生私底下也说这程序水平太烂。但是老板说,这个程序是公司创业初期几个元老没日没夜赶出来的,正因为有了它,公司才能活到现在。。。  回复  更多评论   

# re: 编程思考(三) 2010-10-30 18:56 kula

推倒重来是好是坏,从来都不是一个简单的问题.

老系统归根接底, 存在了太多的技术欠债.我曾经维护过的一个系统,30万行c源代码.代码之间交叉引用的关系错综复杂.有将近6年的历史.随着公司老员工的离去.没有人能够理解代码表达什么含义.每每遇到一个bug.大家都要集体开会.讨论这个代码应该如何改.怎样对一个代码做出修改而不至于引发更多的bug.整个开发过程类似于抽积木的游戏.大家都在费尽心力的抽积木. 想增加新功能变成了一件遥不可及的事情.业务部门天天抱怨.认为技术部门只是故意找借口推脱. 士气陷入低落. 产品在市场上也缺乏竞争力. 我最后也离开了这家公司.

当时我的选择也有两种,第一,是苦心读源码,花个一年半载的时间理解业务问题.第二种是推到重来.

但我的考虑是..人生多么宝贵..干嘛要花时间在一件不能给我带来太多收益的事情上? 有这一年半载的时间做什么不成.于是我向领导提出了建议.推倒重来,按照我的理解重构系统. 结果也毫不犹豫的被否决了. 于是我做出了第三种选择. 离职走人. 找到了一家更适合我的.能学到更多东西的公司.

人生苦短.何必和自己过不去. 让自己陷入老项目的泥潭中去呢.

  回复  更多评论   

# re: 编程思考(三) 2010-10-30 20:45 溪流

@kula
老系统的出现,就是因为之前该推倒且代价不大的时候没推倒  回复  更多评论   

# re: 编程思考(三)[未登录] 2010-11-26 16:20 123

该重构就要重构,这个不好一概而论对错。那么多重构书,不是教人无聊找事的。
关键是,你们上面提到那些案例,老板都掺和进来了,只能用【震惊】来形容,当然,老板本身懂的除外。
不了解现有代码的基础上,不是重构而是重做,心态问题  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理