(转载)答复:我不会OOO,仍然可以XXX

出处:http://blog.csdn.net/absurd

按照《审死官》里的读法,标题可以读着:答复:我不会圈圈圈,仍然可以叉叉叉。圈圈叉叉并不特指某个东西,而是一个通配符。代表诸如:我不懂 COM 原理,仍然调用 COM 组件。我不懂数据结构,仍然可以写程序。我记不得常用 API ,仍然照样用 IDE 。如此等等。

 

我 是个爱好和平的人,不喜欢和别人口诛笔伐,几乎从来没有写过主动攻击别人的文章。亚里斯多德说,我爱更老师,更爱真理。让我套用为,我爱和平,更爱真理。 若只是为了一已之私利,我不会写这篇文章的。这里阐明一些个人认为正确的观点,想和所有有兴趣的朋友讨论一下。但就事论事,不要进行人身攻击,没有必要引 发一场口水战。

 

那 些朋友说的也是事实,这不懂某些知识,确实仍然可以做相关的工作。这让我想起一个小故事:记得上大二时,认识了一位开家电维修店的教授,我想跟他学电器维 修。他同意了,条件是要我坚持看两年时间的电路图。我找了一本长虹电视机的电路图,看了几天,发现太难了,两周过去了,一个也没看明白。

 

我 找到那位教授,说,为什么要看电路图,小学生连欧姆都不知道是什么,更别说看懂电路图了,他们为什么也可以修家电?你不想教我就算了,干嘛要让我看两年时 间的电路图。教授回答说,小学生能和教授相比吗?对小学生来说,书上有的案例,他可以修,与案例有一点差别,他就摸不着头脑了。而教授,对电器里面电路清 清楚楚,不管是哪里坏了,什么现象,把几个关键点的电压电流一量,就找到问题的根源了。

 

Window 当然不需要了解操作系统原理,用浏览器当然不需要明白文档对象模型,把 excel 嵌入到 word 里也不需要知道 OLE ,用 PhotoShop 的人不需要熟悉图形学,用 VS 2005 的人不需要精通编译原理。这没有错,对用户而言,他们不需要知道他们不必知道的东西,这是用户友好性,值得提倡。而作为一个软件工程师,你应该明白操作系统原理,应该了解编译原理,应该熟悉相关的东西。

 

我不想说别人浮躁,我自己也很浮躁,说别人浮躁只是五十步笑百步而已,这个年头谁不浮躁呢 ? 但从实用的观点来说,不知道某些知识,并不值得引以自豪。理论有没有用,要不要弄清楚某个原理,要不要记住最常用的 API 。这都是仁者见仁,智者见智的问题。后面列举一些的个人经验,合则取之。

 

从 毕业后到现在,我一直带在身边的书,只有一本数据结构。前前后后,为了学习的目的,我把里面大部分数据结构和算法写过三遍,这还不包括工作中零零散散写过 的。开始是只是为了熟悉其原理,后来开始想怎么把代码写得更优雅一点,组织得更合理一些。这反反复复耗了我大量业余时间,事实证明这些时间没有白费。后来 的经验告诉我,差不多所有程序,都是由这些基本算法和数据结构组合起来的。对这些基本算法和数据结构掌握得比较扎实,不但自己写程序可以更快,阅读别人的 程序也更容易。如果你还坚持说,不懂数据结构仍然可以写程序。我会说,你永远没有别人写得快,没有别人写得好,程序没有别人的快,没有别人的稳定。

 

后 来我又花了不少时间去学习设计模式。设计模式不是时髦,而是实用的东西,绝不止几个概念而已。我不但认真的读完了那本书,为了实践,总是找机会去用它们, 那怕只是自己写个小程序,也不忘与设计模式挂钩。现在再看那些程序,或许有些丑陋,但正是那些练习让我熟练的掌握了设计模式。如今我再也不会动则就用设计 模式了,因为我知道了什么地方该用,什么地方不该用。回想起来,设计模式在很多地方它帮我的大忙。如果你还在说,不懂设计模式,仍然可以写程序了。我只能 替你感到惋惜,这么好的东西,你却固执的视而不见。

 

以前公司一个产品是基于 Apache 的,我只是负责维护 mod_proxy 模块。我的任务是修改它,让它支持 HTTPS 。不去研究 apache 的架构,不去阅读其它部分的代码,我仍然可以完成的这个任务。但我利用大量业余时间去研究 apache 的架构,去阅读 HTTP 协议,我明白了它的并发模式,明白了它的配置机制,明白了它的模块加载机制,明白了它的 LOG 机制,明白了作为一个服务器的基本架构。这对于完成自己的任务是有帮助的,更重要的是从中学到的知识,对后来的工作也有帮助。刚到深圳时,在新一家公司,我的第一个任务是开发一个自动编译服务器,整个过程都是自动化的,还是支持多用户排队编译。与 apache 相比,这自然是小菜了,包括需求分析、设计编码和用户手册,不到十天时间就搞掂了。

 

有段时间我维护 html tidy ,那本是 w3 开发的一个小工具,功能是用来修复 HTML 网页中的错误,并输出到一个 XHTML 文件。它相当于一个 HTML 语言解析器,用到编译原理的知识。而我对编译原理了解不多,如果凑合着修改 BUG , 问题也不大。我还是选择了学习编译原理,至少花了半年业余时间学习相关理论,自己又写了几个微型语言的解释器,感觉自己成半个编译原理专家。我发现这些知 识非常有用,特别是状态机,对于字符串处理非常方便。又利用编译原理写过一些代码产生器,用它们来产生那些类似而又不同的代码,为我节省了大量的时间。如 果当初我固执的认为理论没有用,一定错过了这样一件强大的武器,那是多么可惜的事情啊。

 

我维护过一个 XMLTransformer ,它的功能是调用 xerces 的函数把 XML XSLT 文件解析成 DOMTree ,然后调用 xalan 的函数把这两颗 DOMTree 转换成一个 HTML 文件。其实只要知道 xerces 的接口,不明白 xerces 的内部工作机制,完全可以胜任自己的工作。我还是花了不少时间去研究 xerces 的代码,此时我还没有看过《设计模式》,看了 SAX 解析器的代码,我明白了 Builder 模式,后来屡试不爽,用这种方式,我写一个解析 apache 配置文件的模块,一个解析 INI 配置文件的模块,一个解析 XML 配置文件的模块,还有一个 LRC 歌词解析器。你看,时间没有白费吗。

 

有段时间老大让我去写 microwindow 的控件测试程序,我花了不少时间去研究 microwindow 的实现,明白了它消息机制,明白了各个控件的实现机制,记住了各个控件的风格、消息、通知,总结出它们的规律,写了一个通用的测试程序。不但提前完成了那个任务,这对于后来我用 win32 SDK 写程序帮助也很大。因为熟悉常用的控件和 API ,编程速度大为提高,出错几率也大为降低。

 

我也曾去研究过 Wine 的代码,主要是想知道 COM 的实现原理,这完全是为了满足我的好奇心。看似无关紧要的知识,也后来竟然派上了大用场。为了简化进程间通信机制,我们在一个嵌入式系统中,实现一套进程间通信机制,大大简化了进程间的过程调用,成为那个平台的基本架构之一。同样是因为兴趣,我研究了 gdb ptrace 的实现,学习到的知识也在后来的工作中派上了用场。

 

还有很多这样的例子,说这些无意炫耀自己,我只想说明这样一个事实:书到用时方恨少。很多知识,知道比不知道好,知道了至少就多一种选择,甚至可能在你意想不到的时候派上用场。

 

作为程序员,固执的不去学习,或者因为门户之见而把自己限于一个小范围,个人认为不是明智之举。一句话,知道它们,我们可能做得更好,不知道它们,决不可能做得更好!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值