软件学习的境界 - 看袁峰对金旭亮回复有感
人类社会是一个群体,在这个群体中,往往也遵守"二八定律"。也就是说,100个人里面,20%或更少的人是最优秀的。80%或更多的人是很一般的。因为这是社会的需要。设想一下,商业经济是来钱比较快的,但如果社会上所有人都去经商,那过不了几天所有人都饿死了--因为没有人去生产粮食。
在每一个行业里面,同样存在这样的情况。比如,我们所看到的影视明星,万千风采集一身,风光无限,但总共能有几个明星?恐怕一百个影视从业者也出不了一个吧?
在软件开发行业来说,还是同样的情况。
作为袁峰来说,学习软件,那就要学好,不说业界数一数二,起码也要达到数得上号的境界。正如俗说:不想成为将军的士兵不是好士兵。但问题是,不可能每个士兵都成为将军。因为每个人的资质有区别,努力程度有区别,成不了将军,成为一个营长/团长也可以啊!因为起码有一个工作可以养家糊口,虽然水平不算非常高,但起码也能够带兵打仗,不至于会"将熊熊一窝"。
而更致命的问题是,学软件就一定要达到袁峰所理想的那种境界吗?
软件本身,是社会需要的产物。为什么需要?那是因为我们要使用软件来实现某种功能,实现某种功能,这就是根本的目的。能够达到这个目的的,就可以说是好软件,并非一定需要多么大的系统,多么高超的编程水平。
试想,我们仅仅是需要一个保育员来做做饭,给小孩子擦擦鼻涕,至于需要使用到一个博士生来做这事吗?你可以说,这没有必要,不做了。但保育员做饭和给小孩子擦鼻涕还确实是非常重要的事,你能保证有保育员的耐心和细心吗?
作为一个普通的程序员,只要他能够按照企业的需要,写出符合需求的功能,相对稳定的系统,良好的用户界面,这就够了,不能说他水平有多高是不是世界级的人物,但起码他通过自己的努力为社会做了贡献,同时自己也获得了相应的报酬----这样的要求,需要会么样的人物和水平呢?
也许,仍然有许多地方需要更加高超的技巧,比如说开发一个操作系统,比如写一个图形引擎,甚至搞一个语音识别什么的,确实需要深厚了基础---但,实在的说,一万个程序员里面,究竟有几个人在他的一生中会去碰到这些东西?
比如,我只需要一个电话号码查询,而且作为企业也真的是非常急需这种东西,我们需要请类似于比尔或C#之父级别水平的人来开发吗?如果真的请来了,我敢保证,他们写的东西或许架构非常精妙/扩展性/容错性/性能等等都无可挑剔,但是我觉得他们写出来的东西会不会有人用?因为,我仅仅是需要一个能够简单操作的快速查询的电话号码查询而已。
所以说,存在就是道理,各得其所,物尽其用是自然界普遍的真理。追求上进是人的天性,但人有高低,物有优劣,仅使用自己的标准来套用他人,肯定会出问题。
——