记得刚开发linux驱动的时候,我对linux驱动为何物都不甚了解,操作系统的基础也一般,就有很多人对我鸡歪:不要什么东西都一开始自己做,把别人的东西拿过来,改改能用就好,程序员不是发明家,要考虑效率问题,而且举了半打儿例子,当时俺还觉得有道理,毕竟飞机一个人不可能造出来。
现在想想纯忽悠刚入门的程序员的,如果自己已经是大牛了,类似的程序搞了很多,当然没必要每次都自己搞,问题是刚入门连二叉树遍历,快速查找都没实现过的程序员就让他们借用别人的代码,那我们的软件开发又有什么前途,况且国内对软件产业根本不重视,像样儿的培训几乎没有,社会上的也都是骗钱为主,如果自己再不写代码锻炼,靠porting过一辈子吗?如果哪天人家不给你porting怎么办?
前几天一个iphone破解黑客撂挑子了,搞得深圳华强北一阵骚乱,为啥啊?几千人的work全base在他的工作上面呢!他不干了,这些人都傻眼了,这就是盲目porting别人成果的下场。相信以后这类事情会越来越多。
而且移植别人的代码很容易出bug,具体情况的变化不是十分清楚,原来代码设计的原理也不是十分明白,出现问题调试起来那叫一个累啊!最关键的是这些bug由于惯性思维很难查出来,一出问题就要人命!
最经典的是1996年6月4号—501航天飞机爆炸事件,对于Ariane 4火箭的工作代码在Ariane 5中被重新使用,但是Ariane 5更高速的运算引擎在火箭航天计算机中的算法程序中触发了一个bug。该错误存在于将64位浮点数转换为16位带符号整数的程序中。更快的运算引擎导致了 Ariane 5中的64位数据要比Ariane 4中更长,直接诱发了溢出条件,最终导致了航天计算机的崩溃。首先501航天飞机的备份计算机崩溃,然后0.05秒之后,主计算机也崩溃了。这些计算机崩溃直接导致了火箭的主要处理器使火箭的运算引擎过载,同时导致火箭在发射40秒后解体破碎。
还有一个:1982年—苏联的石油管道事件,根据CIA(美国中央情报局)的陈述,为其工作的间谍们在苏联购买的用来控制跨西伯利亚石油管道的加拿大计算机系统中种下了一个bug。当时是苏联通过祕密购买或者偷窃美国的敏感技术来获取到了该系统。据说CIA发现了这个存在bug的程序,决定对可以通过苏联人检查的设备做一个让苏联人事与愿违的破坏,使得该设备一旦运行起来将会失败。该事件的结果据说在历史上造成了最大的非原子破坏。 这两个软件问题都在史上十大软件bug之列!http://www.techcn.com.cn/index.php?doc-view-132285.html
所以我的建议是:无论是什么水平的程序员,可以参考别人的代码,尽量自己设计与实现,特别是刚入门的程序员,不管简单还是复杂的东西自己动手,别养成懒惰的习惯,懒惰是程序员的大敌啊!还是那句老话:自立更生,艰苦奋斗, 有了足够代码量的积累就可以有自己对软件开发的理解,提高自己设计开发的能力,早晚有一天会成为大牛的!