关于造轮子的问题,褒贬不一,我是赞成造轮子的,很多时候我们没有必要再去造一个已经存在的轮子,这是贬造轮子的重要的看法,我觉得没什么不对的,如果是要立刻用到实际中去,而且时间上很赶的时候造一个轮子出来不是什么好事情。但是造轮子也有很多好处,比如能学到很多东西,可以参见vczh的关于造车轮,虽然没有将所有造车轮的好处统计起来,但是很有参考价值。当然你可以去看看国外的大学教程,他们本科生的任务大多就是造个车轮出来。比如MIT:操作系统课程就是写个操作系统出来,数据库课程就是写个数据库出来,图形学就是写个raytracer(光线跟踪器)出来。当然还有很多,比如Stanford:计算机网络就是用UDP实现TCP的功能,写个路由协议,图形学就是做一个软件openGL,等等,所以造轮子(再造轮子)是很有实践价值的,而且很多一流学校就是这么干的。很多时候如果想创造轮子的话再造轮子所获得的经验和能力的提高是很有价值的。
那如果你肯定了再造轮子的好处那就多帮造轮子的人说点好话,当然也说明再造轮子的的限制,不然误人子弟。但是如果你肯定了再造轮子的好处,你想加入再造轮子的大军那你该怎么办呢?
这点其实我也在想,如果看到这篇文章而又很有欲望表达自己的看法的前辈留下你的建议。在这里我也表达一下我的看法。
建议一:书
如果我们都想造轮子,但是苦于没有经验而且对轮子的构造很不熟悉,很多时候我们只好放弃这种想法。如果有一本书教你怎么去造这个轮子的话说不定你的轮子就造出来了,而且还不差。所以如果想造一个轮子,很常用的方法就是找一些相关的书籍。优点是结构完整而且描述清晰,而且还很系统(国内人写的书大多不好,所以还是先去找找有没有国外人写的书,老外写的书看得还比较爽)。缺点是大多时候书都比较理论实践的东西少,而且对我们造轮子来说书上的那种结构不是很适合造轮子,如果是大部头书的话还很快就把你的意志给削弱了。所以书不是万能的,我看过一定数量的书,但是到头来还是没有太大的提高。
建议二:课程
对于大多书学生来说这条是最好的。其实大多数学生都是很想学习的,苦于没有人指导加上老师无聊,很多时候学生搞到最后都不想学了。如果你是一个学生,如果让你去造一个轮子出来,想想那是世界上最牛的轮子(转得最快),那是让人激动的,学生学起来也很有劲头。所以造轮子最好的方式是去找一些课程,而那门课程是教你怎么造轮子的,按造那个课程的方式先去造一个出来,然后再想想自己的轮子怎么造,然后你的轮子又是另一个最牛的轮子(转得快不说,还省材料)。优点:系统化,理论实际相结合,而且很多时候那些老师已经帮你完成了一些工作,适合菜鸟级别的人物---不如说我。缺点:还没有找到,如果非得说有缺点就是:让你见识了一个最牛的轮子,让你觉得你自己独立造的轮子没有技术含量,让你放弃了想法。
建议三:现成系统
我们讨论的是再造轮子,所以这个轮子必然已经存在了,我们仿这个轮子去造一个不就行了。通过分析和比较,使用别人的轮子的时候想想别人底层是怎么做的,怎么设计的,意淫一番之后总结出经验,然后造自己的轮子。而且造一个比原来更加小强(小而强大)的轮子,功能完整,耗费资源少,使用简单-----那不就是我们想要的吗?缺点就是可能要有些经验。
建议四:论文
如果你是一个骨灰级的轮子玩家这点你应该是清楚的。看论文是一件很痛苦的事情,很多时候我们的理论基础没有论文的作者好,或则论文作者的基础跟你的不一样(比如他是学物理的,而我们是学计算机的),所以看不懂论文,直接结果就是你的轮子造不出来。所以还是要很有经验和理论基础。
建议五:开源软件
开源是一个好东西,首先它是免费的,再者可以看到代码。这点我不用说了,找到了相似的开源代码,读一读,肯定有收获。
总结或者想法:
造轮子肯定不是一件简单的事情,没有恒心就不要造轮子了,而且会花费一些时间。当然如果你很想造轮子而且你确定你有一定的时间(不用太多)你就去造吧。国内的开源软件和基础软件不好,说不定我们这代造了一些轮子之后,国内的基础软件就好了。
很多时候如果你没有头绪,你就写点代码吧,古人写字静心,我们为什么不能写代码静心呢?说不定你写着写着轮子的框架就出来了,再写着写着轮子就造好了。
虽然上面我都说了点,但是很多情况下你找不到你想要的资源,可以尝试问一下别人,说不定他能给你很好的建议---这个建议可能就一句话。