在《甘地自传》里提到一则寓言:从前有一个隐士养了一直猫来抓老鼠,又养了一只牛来喂猫,又雇了一个人来看牛。
甘地在英国留学,想学做绅士也遇到同样的情形:为了做绅士,他买了奢侈的西装、领结,每天照镜整理仪容,梳理头发。有人告诉他还要学会跳舞、法文和演讲。甘地买了小提琴,还交了学费,又请了第三位老师教他演讲,并付了第一期学费,老师推荐他《演说家典范》作为教材,他又开始学习毕特的演说词来...
如此的情形让我感觉很熟悉,在计算机软件的学习领域就存在这样的情形。初入计算机领域的新人们,雄心勃勃,抱着无比的热忱要创造一番事业。他们通常都会有如下类似决定:
一、建立一个伟大的网站(广义:含所有BS应用),可以像Google、淘宝、SNS社区网站之类,使用者众多,很有成就感,也能获取巨大利润。
二、开发一个伟大的游戏,如《魔兽世界》等。
三、编写一个伟大的操作系统,如Linux,Windows,实在不行能搞些底层驱动之类也行。
四、在多媒体、3D图形图像影音制作方面有突出成就。
五、当一名网络黑客,不管哪方面,只要是高手就行。
六、最不济也能像腾讯、迅雷之类的在某些领域浑水摸鱼。
于是他们根据自己的决定,抱起了《XXX21天速成》、《XXXX100例》等书籍。研读完后感觉成绩斐然,就在论坛上发表感想,这时就会有技术大佬们出来当头棒喝,说是必须从底层开始学起,C语言、数据结构、算法之类。
初学者们惶恐着又拿起一本《The C Programming Language》开始研读,感觉C语言艰涩难懂,并且用C来构建自己的终极理想大厦有些遥远。正发表观点时,技术大佬们又跳出来指点,初学者心态太浮躁,要学会C,最好懂一下汇编、编译原理,最好了解一下计算机组成原理、体系结构、80X86指令集等。
初学者们学会了C,大佬们又来指点,还要学会C++,大佬们对C#、Java等高级语音都不带正眼看,认为都是些码奴们使用的工具。学会C++就要看《Thinking in C++》,还有一句名言是:“使用别人洗的内裤,而不要自己洗内裤”,于是还要学习MFC,ATL等“内裤”,MFC这种“内裤”历史悠久,是众多软件大佬们多年造就的成果,要想研习透它真不是一件容易事。
等搞完了C++和内裤,大佬推荐还要学习COM组件、动态装载,另外要学习网络编程,《TCP/IP详解》是必须要读的。初学者诚惶诚恐得买了一本《TCP/IP详解》来研读,发现里面的样例都是在FreeBSD/Linux上的,并且很难具备测试的条件。
等学完这些底层知识,好像凭一己之力还是不能构建自己的理想大厦。大佬们的建议好像只能把你送到此处了,这时候大侠们开始出来建议了:做网站可以用J2EE、ASP.NET、PHP、RoR....,做游戏可以学Lua...,操作系统可以自己研读一下Linux内核源代码...
好吧,那就从J2EE开始,学完JAVA,大侠推荐还要学一些框架Spring、hibernate、Struts2、EXTJS、Json....
学会了框架还要学一些数据库:Sql Server、Oracle、MySql、DB2、Sybase、Redis ...。另外还要掌握一些脚本语言:Javascript、Ruby、Perl、Python、Groovy...还要学一些集成开发工具Eclipse、Ant...还要学一些Web服务器:WAS、Tomcat、Ngix、Lighttpd、Resin... 还要掌握一些测试技术:TestNG、JUnit、JMock、Oraylis BI.Quality、BugZilla....还要学一些版本控制工具:CVS、Visual SourceSafe、SCCS、SVN、Harvest....
等学完这些,发现做一个东东真是一个人搞不定,真是需要团队协作的(而在外人看来,软件都是Free的,去下载、去破解就OK了,掏钱买?卖糕的!)。团队协作就要学习软件工程了:需求分析、概要设计、详细设计、数据库设计、软件开发、软件测试、软件实施、后期支持,实战时,又要学习项目管理了:人员分工、人员的积极性、奖金...
在每一个领域、甚至每一个小的方面都有大量的大部头著作,如果你执意往深处探究,都会发现深不见底,以自己的精力难以企及。比如我们常用的给密码加密用的MD5,如果你自己钻研下去就会发现加密算法是个无底洞:密文、密钥、对称式、非对称式、SSH、RSA、DES、RC2、SSF...
所以每一个知识渊博的人所掌握的只是所有知识中的一点皮毛,当一个大佬跳出来对别人淳淳教诲,大拽一些别人没听说过的词汇时,上帝就在发笑。
大佬们建议别人的学习自下而上(所谓先练根基),自己则能享受在一些领域高高在上的优越感。而我觉得,根本无所谓根基(因为面太广),而我更推荐自上而下的探索式,如果一个方向的洞太深,就不要一头扎进去不出来,永远要记得自己最初的理想,只要你的理想还没有改变,即使不能实现也不要渐行渐远,因为人的精力是有限的。
人可以做十项全能,但当有2的一亿次方项时,你还全能吗?