Python 杂谈“男耕女织”还是“搭积木”? - Windows Live

Python 杂谈 “男耕女织”还是“搭积木”?

这些年来,在开发软件的过程中,我留意到两种明显对立的倾向,一种是:尽可能的xx使用自己的代码实现全部的功能,除非别无选择,否则不要使用第3方开发的软件包。我曾经嘲讽这种风格为:男耕女织——吃穿用度,什么都自己制造,把买东西看成一种浪费。

另外一种倾向,则xx相反,尽可以能的利用可以找到的开源或者商业软件包,实现基础功能,自己仅仅去实现业务逻辑。这种风格,我称之为:搭积木。

我个人很喜欢后一种风格。我长期认为,如果一个功能有通用性,那么{bfb}一定有人已经实现了这项功能,自己再实现一次简直就是再发明轮子一次,自己给自己找麻烦。我甚至特别特别看不惯“发明框架”。一个东西称之为框架,那么必然就需要实现从数据结构到操作系统抽象等等各种各样的功能,{zh1}的结果就是这个框架膨胀到不可控制的地步。

所以“男耕女织”型的开发者,我认为要么是故步自封脱离时代,要么就是狂妄自大以为自己什么的都能做好。我坚定的支持搭积木,也是我选择Python的主要原因之一。用Python你几乎无数的多的开源软件包,而且都有Python风格类似的接口。

不过两年的实际经验告诉我:“积木”并不xx,“男耕女织”也有可取之处。

“搭积木”最常见的问题,就是你不能保证“积木”的质量。即使是历史悠久,大名鼎鼎的“积木”,也不能保证没有问题。Python这方面还好一点,在C上遇到这个问题更明显。这两年我还同时负责提供我们在Windows上的SDK开发,我选择了GTK+的低层GLIB和GOBJECT来做。因为KDE的流行,GLIB在Linux的世界还是比较流行的。GLIB功能完备,提供OS抽象、各种基础数据结构、软件常用功能比如日志。它的文档也是我见过写的{zh0}的开源软件文档之一。GObject提供的xx基于C的OO实现和引用计数功能也是我所需要。更重要是GLiB/GObject都是跨平台的——我以前遇到过需要跨平台,软件必须xx重的问题。

But it's too good to be true.? GLib在Windows上基本运行是没有问题,但是有的时候会出一些诡异的问题,比如在写日志的时候会莫名其妙挂住。文件操作的API,也有一些一问题。我上Glib的IRC去问,有个叫tim的哥们问我用的什么版本,我说windows,他就表示爱莫能助了。我跟他抱怨说我本来以为Glib在Windows下工作的会和在Linux上一样好,他充满同情的说:唉,咱以前也是这么想的,无情的现实击碎了这个梦想啊。

“搭积木”另外一个重要的问题,就是积木不一定会互相兼容。熟悉Python的人,应该听过Twisted和SqlAlchemy这两个名词。前者是一个xxPython网络程序框架,后者可能是Python{zh0}的数据库抽像层。问题在于,Twisted是一个xx异步的框架,要求所有的操作是无阻塞的,SqlAlchemy却是一个传统的库,它的数据库访问操作都是同步。我在Twisted的Mail List问他们该怎么弄,大部份人建议我:再开一个进程,专门去跑SqlAlchemy,隔离Twisted和SqlAlchemy!这个问题我后来也算解决了,终究还是花了不少功夫的。

我这个人比较喜欢“以己推人”,所以“搭积木”还有一问题我差点没有意识到。还是我一个同事一句话点醒了我:我要学什么东西,先看有没有中文的文档,没有的话我就干脆不用它了。我的英文不好,但是阅读和技术交流还是没有什么问题,所以从没觉得英文是技术上的一个障碍。但他这句话告诉了我,英文对相当多的工程师来讲,几乎是个不可克服的障碍。如果公司不是外企,没有使用英文的习惯,那么很可能他的程序员们大多数不知道abstraction是什么意思的。当然,可以看翻译的资料。但是开源,至少是说起支持的开源软件,往往采用“集市”的开发出策略,通过不断快速发布版本,提供新的功能,修订老的bug。所以国内志愿者翻译的中文文档,是很难跟的上的英文文档的速度的。

总的来说,由于“积木”质量不可控制,“积木”的兼容问题,英语造成的学习成本高昂,所以“搭积木”的效果,并没有我最初认识的那么好。也有人提醒过我,License也是要考虑的因素。就我对License的粗浅了解,目前我们的产品没有这方面的问题。

“男耕女织”固然没有这些困难,但开发维护成本这块是逃不掉的。同时,自己做的东西,难免功能上不够丰富。比如我们同事用C自己写的INI文件解析,就要求这种格式

??? config=AAA

如果写做:

??? config = AAA? #有空格

就不能正常工作了。所以我用Pyhon的ConfigParser写了这个配置文件之后,我还得再把这个文件打开,把=前后的空格过滤掉。

我现在认为:

“男耕女织”这种风格,更适合有充足的资源,愿意在软件上做长远,对法律风险敏感的投资的大型企业。

而一个需要尽快出产品,成本敏感,人员素质(至少英文能力)高一点的小企业,拥抱“搭积木”会有更好的效果。

郑重声明:资讯 【Python 杂谈“男耕女织”还是“搭积木”? - Windows Live】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——