IT技术博客大学习 共学习 共进步

我对开源的看法

changming的blog 2012-07-27 14:13:22 浏览 4,823 次

    有这么一种观点:程序员要想提高技术水平,多读开源代码、多参与社区讨论与开发就好了。我以前很赞同,现在发现不是这样。

    panpan和xuhui对我的批评是,多看看技术以外的东西。我的理解是这样,很多东西它之所以这么做,不是因为技术上是最优的,而是因为工期、领导的旨意、需求变更留下的历史问题等等。这些原因是无法通过阅读代码而得知的,我只能看到实现细节,却不能知道作者的设计意图。像Qt、leveldb这样的项目,名为开源,但是它并没有采用开放式的开发。只是这个公司将其技术成果共享出来了而已,中间的过程完全不可得知。举个例子,Nokia和Intel说要合伙做一个叫Meego的操作系统。Intel说好啊,我对Linux熟,我来优化底层系统,Nokia你来搞QT及上层软件。结果Intel很郁闷的发现,Nokia的Meego项目组有两套BUG管理系统,一套是对内的,只有Nokia自己的员工可以访问(intel的不行),一套是对外的,放在社区里让任何人都可以去提BUG。然后Intel就怒了,你这让我们怎么合作?Nokia也很委屈,因为对任何一个手机厂商来说,未上市的手机的硬件细节是很重要的商业机密,这些东西很容易通过BUG管理系统中的日志文件和coredump流露出来。所以,大多数软件厂商最终选择的都是Nokia这样的做法。

    很多时候要想清楚自己的目的,是让项目尽快完工,还是追求纯技术?如果是后者,不如老老实实在学校或者研究所呆着。做项目最重要的不是解决一个多么大的技术问题,而是尽可能的把所有技术困难都绕开,然后再解决那些不得不解决的。这时便会引申出一个重要原则:Simple is the best。

    读代码跟读小说不一样。写小说的人心里一定是有读者在的。所以每拿起一本古典小说的时候,就仿佛穿越了时空在跟一个已经死去的人对话。而代码不一样,代码主要还是给机器读的,以及给自己读。举个例子,如果你对C++的模板推导很擅长,你会因为这门技术太晦涩,有人有可能看不懂,而不用吗?所以如果想通过代码猜透作者的设计企图,不管能不能做到,总之为其花费的代价实在是太高。那么有别的方法吗? 有啊! 跳到这个公司去,中午跟作者一起吃个饭,随便套两句,就出来了。

    对我自己来说,很有幸能在一流的互联网公司工作。如果我想去百度、腾迅、阿里中的任何一家,应该都是有机会的。所以,总有比我资深的老员工,如果有幸遇到一个比较开明的,跟着这样的人做项目,会学到很多从开源项目、从书本学不到的东西。

    这些,大概就是我跟1年前之比的转变吧。

建议继续学习

  1. 15个最好的免费开源电子商务平台 (阅读 12,382)
  2. 介绍几个QQ开源项目及协议下载 (阅读 10,081)
  3. 晒晒我们的开源项目 (阅读 5,363)
  4. 如何选择开源许可证? (阅读 4,801)
  5. 谁说开源不能赚钱? (阅读 4,621)
  6. 为什么GPL是更好的开源许可证? (阅读 4,301)
  7. 三款面向 Amazon S3 的开源文件同步工具之对比 (阅读 4,101)
  8. 开源在线编辑器推荐 (阅读 3,740)
  9. 聊聊 Apache 开源协议 (阅读 3,583)
  10. 五大开源许可协议 (阅读 2,720)