在计算机领域(包括软件和硬件),我们经常能看到一种论调,那就是“不要重复造轮子”。这种言论一般用来批评在开发过程中没有很好的利用现有技术,而是从头做起。
鄙人一直也认为这种看法没有什么问题,毕竟大家都没有必要浪费时间来重复基础的工作。但是,在知天命的年纪,我对这种看法越来越负面,感觉到这种论调其实是阻碍了中国科技的发展。故提出以下不同看法:
1、不要重复造轮子,首先是基于您会造轮子。对于一个能熟练造轮子的人来说,的确应该关注更高层的事情,以发挥自己更大的能力。但是对于那些对轮子一窍不通,根本不会造轮子,更没法熟练地使用轮子地人来说,学会造轮子是必然的一步。
2、越是底层的东西,其效率和作用越持久。而越是高层的东西,往往持续时间很短。我们从软件来看,那些基于底层的软件,往往具有更加强大的生命力。ngnix和国内自己开发的邮件系统充分说明了这一点。而那些基于高层的软件,却往往被其基于的软件所绑架。比如,我们被CAD绑架,被PS绑架,被SAP绑架,诸如此类,举不胜举。
中国要创新,在自己还不能造轮子的时候。就应该关注于轮子。
我们应该建立自己的编码系统,建立自己的汇编系统,建立自己的编译语言和基本库。而不是因为这些已经都被别人造好了,而不再重复造轮子。
3、我们看看古代的学徒,再想想我们自己的学习过程。是不是必须自己应该掌握基本运算规则,了解透后才应该使用计算器。而不是说,不学1+1,直接用mathLAB计算。曾经有个人朋友做单片机开发,里面用到了幂的运算,但是因为单片机无法导入math库,而卡了很久。所以我们要搞清楚,我们的学习,是要学什么?要怎么学?
这里要区分开:一种学习是学习使用,比如前端和各种处理软件。这种学习就像驾校学习驾驶汽车一样。学完后就会开汽车,拉货挣钱。还有一种学习,是学习如何造汽车。在学习造汽车的学校里面,您就必须学习如何造轮子,最后才能设计出汽车。
当然现在也有一种“偷懒”的制造商,比如现在的一些电动汽车制造商,自己没有任何核心技术,也不屑于学习这些基础知识。用特斯拉开放的技术,就可以分分钟搭建出一辆新的汽车。这种产业犹如建立在浮沙之上。
4、学习需要我们造轮子。我们学习,特别是当我们钻研一个行业时,就必须从根本上了解它,才有可能做出成绩。
我们经常可以看到一些外国新闻,比如一些年轻人自己制作最基础的芯片(居然耗费了几年时间),有些人还要自己大家核聚变,自己来重复那些伟大的试验。这些不都是造轮子吗?
最后:
希望大家记住一句话:
只有会造轮子的工程师,才不需要学习如何制造轮子!