“当我需要用到它时我就去学它!”
过去这些年里这句话我听到无数次;对于处在一个像软件开发这样的快速发展变化的行业里,这听起来像是一种十分适用主义的态度。从某些层面上说,它确实十分适用,但从另一个层面来看,我很受这句话困扰。它似乎成了我们这个行业的福音,但却从来没有把这个行业变的更好。问题就在于,这句话表面上借明智的有经验的开发者之言,其实是幌子,实为人们随波逐流的借口。实在是有太多的东西需要我们在工作之中“发现学习”,但对于这种对新知的“发现学习”,你是工作学习齐头并进,还是单纯的遇到了什么问题,就学习处理这问题的知识?这两者之间有很大的区别。
整个行业里到处都是通才、全才,也许向来如此,只是我太闭塞,没有认识到这些,而且我也不愿意看到这种情况。没有人再愿意踏踏实实的深入研究一个东西,包括计算机科学基本原理、你正在使用的最新技术、甚至是你最近几年一直使用的语言。何必自寻烦恼,也许当你学在半途中时就会发现,这些技术知识已经被更新升级,被废弃,被边缘化,被过时、不再流行。我曾和很多人讨论过这个现象,没有一个人认为这是一个问题。“做个实用主义的人吧。”
与此同时,我们大家都在相互模仿克隆。现在需要一个Java程序员,我是一个Java程序员,你也是Java程序员,我邻居也是个Java程序员。我们大家之间有什么区别?——没什么区别!还有,我学会一些jQuery知识。这不错,这样我就知道如何做一个可折叠的菜单了。而且,我可以使用Google在网上搜一下,到处都是,我能搜到最好的代码,剽窃它。而同时,如果你想招募一个Perl专家(也许你想要一个神奇的解释器或将大量数据进行可视化),那你可要准备好足够的干粮和水了,因为你根本找不到。
不错,是有很多地方能看出你我的区别,我有更好的沟通技巧,所以我做的更好。这当然很重要,但是,开发人员通过软实力,而不是开发技术能力来区分——感觉有些扭曲。我们大家的沟通技巧都很好,可写出的代码是一团糟 。该死,我本不该说这些,因为我也算得上是一个通才。当然,我更愿意把自己看作一个既有广度又有深度(T型)的人,但是,如果你愿意说真正的实话,你会说,大部分的人都只有广度,没有深度,更像横线型(破折号型) 。在这些破折号中你就像是个巨大的石钟乳——你是T型的。你看上去就像个专家,即使你从来不是专家,这就是在到处都是通才的时候做为专才的优势。
投资你的未来
我不想传道似的告诉大家我们应该对未来的职业生涯进行投资,因为这是每个人都知道的。大多数人认为自己正在投资,他们努力的工作,写大量的程序,甚至边工作边学习,诚然,这10年下去肯定会成为一个专家,20年下去成为一个资深专家。但是,如果事情果真是这样,那每个年纪大的人都会成为各个方面的专家,事实断然不会是这样。也许原因是人们不知道如何在某个方向去发展他们的特长(这是实际存在的),但我私下里更怀疑是,人们更多的是缺乏热情,而不是缺乏这方面的指点。上面所说的各种问题都基本上可归于这种情况。
我完全说跑题了。“对未来进行投资”只是我们讨论的问题之一,而主要问题是”我需要用到它时就会去学它“这句箴言。这句话给我老爸很合适,而且它也为我所用这么多年。让我们把这句话的思想应用到金融上吧,“当我需要钱时我会去进行投资的”。你会发现有些时候这句话并不是那么适用。
你不知道你缺少哪些知识
我们都经历过这样的时刻:你痛苦被折磨于要解决一个问题,最终是有人过来告诉关于X算法或Y技术,这让所有问题变得又快又简单。你很幸运能碰到这样一个能告诉你“简单”方法的人,否则的话你可能要用去数天、数周去把问题弄明白,而且事情会变的乱糟糟。你不会因为此而受到责备,因为你不可能提前知道你会缺少什么样的知识。我想,这就是“当我需要它时我就会学它”的思想方法失败的地方。你不可能去学你从未听说过的技术知识。Google做出了很大的成就来缓解这个问题,但这不能解决所有问题。在茫茫的未知领域你会遭遇到大量的未知难题,它们会让你撞的头破血流,要多惨有多惨,除非你能明白你所面对的是什么类型的问题(例如,如果你知道一些搜索算法和约束传播问题,你可以去解决数独难题,否则,你就陷入困境了)。你不可能去学习一种你不知道的或不知道用在哪里的算法。你不可能去利用一个你根本不知道能做什么的技术去解决一个问题。不可能一直有人在旁边指点你正确的方向。我敢打赌这世界上有数百万的代码可以被替换成更高效、更整洁、更有效的代码,只是因为写这些代码的人不知道自己欠缺某方面的知识。
我想反向说明一下这个问题,假使能提前知道我们缺少什么知识,那么,诚然,我需要关注大量的知识。粗浅的大范围的尽可能多的涉猎各种知识对我们有很大帮助。当问题发生时,我就能看出问题是什么领域的,然后针对这种知识深入的研究。可是,事情并不会这样发生,浮光掠影的通览各种知识最终并不会在我们的脑海里留下任何痕迹,我们的大脑不是这样工作的。如果我不去强化和深入挖掘某个知识概念,我们的大脑会很快就会把它标记为不重要信息,完全是一种浪费时间(回想一下你为了考试而死记硬背的东西在第二天还能记住多少?)。然而,如果你能集中精力对某一主题进行深入研究——并伴随着兴趣——你会收获颇丰(这将是你不会忘记的)。我爷爷是一个核物理学家,数十年如一日的收集研究这个领域里的知识使他成为了一个专家,但这也同时使他成为了一个出色的数学家,一个不错的化学家,一个非常棒的地质学家,一个合格的生物学家,等等。这只是因为深入研究而获得的广泛的副产品。
你能以足够快的速度学会它们吗
有些东西需要你花很长时间才能学会。我有信心在不皱眉头的情况下学会一个以前从未见过的ORM框架,因为类似的东西我以前见过,它们概念是相同的。但如果你需要做一些把演说转换成文字的东西,这可不会这么简单,你没有足够的背景知识。把希望寄托在Google上,搜出一些东西我们可以去粘贴拷贝。这是一个很坏的做法,只有大学里的研究人员才会去做这种烂事。如果是开发一个网站呢?我们都知道该怎么做,但如果需要能支持每天1千万的用户访问量呢?我需要知道如何去升级,我相信不花一两个月的研究你是不可能把速度提上去的 。是呀,我太蠢了,我应该做的是雇一个专家,然后…哦…慢,等等,我们的干粮和水都不够了。
为什么我在乎这些
跟专家一起工作实在是太爽了。也许你以前有过这样的经历,他们说的那些东西都是那么新颖和有趣,他们的每行代码都能让你受益匪浅,你几乎都能感到你的脑容量在膨胀 。你希望能跟专家学习,可当你找不到这样的专家时,那就太不幸了。因为每个人都是在“需要”的时候才去学习,没有人可以教别人什么东西。而这其中最大的教训是,专家同样也想和专家一起工作,所以,你的问题在于,要能清楚专家是否愿意和你一起工作?如果能做到在需要的时候就去学习,这是个不错的做法,但你不能把它当作一个软件开发者的至理名言。不错,这个行业很宽广,你不可能样样都学,所以要选择一些,学精,如果你很好奇而做了深入研究,你会发现最终你在很多其他知识上都会有一个相当的掌握。而且如果你能做出一份出色的工作,其他精英贤达都会希望和你左右同行,因为他们这样可以从你身上学到知识,而你也能从他们身上学到更多的东西。这对每个人都是再好不过。