关于软件的一些庸人自乐

关于软件的一些庸人自乐

写于2010年(因重新编辑浮起了)

 跟一个同事聊天,说到自己要是有兴趣想写点什么漫无边际的东西吧,比如写个tcpip的server,想写的规范一点,通用一点,兴冲冲的上手,越写越觉得要考虑的太多,比如ip鉴权呀,流量控制呀,连接管理呀,回调机制呀,消息机制呀....累都累死了,对此我的意见是做东西确实只靠兴趣理想的做是很难的,即使没有明确的工程目标,最好也给自己找一个短期的目标,整理出一些有限的需求集合,一一实现再说(虽然不那么完美)。当然,在实现的过程中,规划好层次,尽量多做些可以重用的东西,把结构做的容易扩展一点,以后可以慢慢的往上垒东西,一开始就想做的很完美是不可能的--不过这是兴趣驱动的通病,我也病过。

现在我做东西,如果仅仅是兴趣,就先写点低层的功能模块让结构有点技术实现基础和重用基础,然后结构上实现个大概,错误异常处理一概留空先,差不多了就丢开。如果是有明确工程目标的,当然也不会胡整一通写出一堆能跑的尽快交差,而是尽量做的比工程目标多一点点的通用,可扩展,因为工程本身是扩展的,需求是变更的,要是交差一次,接下来无数的维护和修改整的自己焦头烂额,也是很不合算的。

但如果工程时间超紧张,那有些第二层次的东西(log,异常恢复,监控)没做那也是没办法的事情,但至少结构和接口上是留出来了。

至于在过程里要做什么,留什么,那里可能会出错,那里可能会更改,那些可能会被重用,我现在觉得是感觉上的事情,懒得上升到理论高度总结,总的来说,没有感觉的人是不适合“设计”软件的,最多适合写点代码。

另外,如果觉得自己的想法不是超级全新的(除非超级天才,哪有什么全新的东西出来),不如找点已经实现的东西,不用自己造轮子。去年我写过一篇小破文章,推荐在开发里多使用开源的代码或已经成熟的代码,回到tcp server的问题上,apache和qmail都有很好的代码可以抄袭,如果说qmail的tcpserver稍微简单而且代码风格怪异了点,只抄apache也可以,apache的进程池管理是很成熟也很经典的,现在2.0以上还有线程了。如果有心情,可以把apache的代码抄出来腰斩一下,去掉所有http协议方面的代码,只用其低层的通信server代码,以及请求和进程池化处理的逻辑,应该不是很困难的--这种东西写一个出来我不行,抄和改我还做不到嘛?apache的结构本来就不错,整改整改就是一个超级服务中间件,其实直接拿apache做业务逻辑服务都可以,http协议就http协议,文本+xml,KeepAlive一下就是个长连接。现在不是都在鼓吹webservice嘛,但总感觉要么做的超复杂(有一大堆超集的需求),要么没用好(效率和有限集合层次的通用),对我来说,其实管它什么N层结构,只要apache能帮我把服务进程和接口维护起来就可以了。

上面对需求或者说软件规划使用了所谓的“超集”和“有限集”的字眼,我的概念里超集就是那些花里胡哨说不定八辈子都不会面对的东西,或者是一些既有东西换个名字的包装。至于有限集,我的概念是一件事情可见的未来所要涉及的东西,如果某些东西在这个事情里即使通过符合成本允许的抽象,风险预测,蝴蝶效应....处理都不大可能会发生,就不管之或简单处理之。比如webservice吧,假设你现在不做什么鸟新一代电子商务,不做网格计算之流的高深事情,或者不是为了蒙骗所谓的it经理们,你没有必要去考虑什么uddi之类的东西,只管处理xml+httppost就是了。又比如回到tcpserver的例子上,假设你的连接限制最大是100个而且经常有1/3~2/3的连接在跑,那么直接开100个进程或线程去listen或WaitRequestl好了,干吗要动态分配进程(如果要自己写代码),又不是写军用计算机或航空行业的程序,过度考虑资源和计算压力那都是压迫自己。

另外,还谈到网上有个做接入的哥们,其低层的东西都是封装好的,在上层通过一些专用脚本(语法类似Pascal)就可以很快建立一套业务系统。也许是我理解不透彻吧,总之我的第一感觉是我很钦佩这哥们,能折腾出这么一套东西来,用脚本建立业务系统的哲学也很漂亮,但我不是很欣赏专用脚本这种事情,首先从理论上讲,系统里引入了一些不标准的东西,那么出错的可能性就多了一环(靠,低层环境和接口没问题,但怎么脚本没跑起来呀or怎么脚本的输出怪怪的呀),第二专用的东西总有那么点学习曲线。这里我说的标准概念是指比如所有做it的基本上都懂得点C/C++,java,Perl,Php,python,tcl这些已经N流行的东西,而且关键是靠这些东西什么都做的到,没有必要再搞点专用的,貌似强大方便但说不定很快就显示出局限来的东西--即使要做成可以被高层接口调的,最好也往某种既有的环境上靠,比如做成可以用perl,php,java/basic(Script)...写的,这很好理解。当然,如果通过不懈的努力把他自己的东西推成个事实上的标准,那么是强人,我只有景仰的份。

觉得自己是个俗人,别人都已经功成名就的孜孜有味的做自己的系统,产品,我还在这里打算着怎么偷懒,抄袭,耍嘴花子...呵呵。

猜你喜欢

转载自blog.csdn.net/vcbear/article/details/240825