[转]不是全面的专家(译)
对于软件开发,干的时间越长,就越感觉自己懂的知识少,似乎要学习的知识还有很多很多。最近恰在DZone上看到一篇小文,作者谈到是否有必要成为全面的专家。道理其实很浅显,大家也都懂,我只是随手翻译一下罢了。
编程不仅仅是写代码–而是要处理一大堆抽象。从0和1开始,到处理器,内存地址,底层的网络协议,数据结构,再上升到网络服务,组件框架和用户界面。这一过程,就是从乏味的底层抽象,到更有趣的可用且可维护的抽象。
我们被归为”高级开发者”。对于某些人来说,这就意味着我们在所有的抽象层面都是专家。如果不是这样,那么我们就不够好。我不倾向于赞同这种观点,而这并不只是为了证明我并不是在所有抽象层面上都是专家。
这基本上就是一种折衷–要么你专注于某些层面,然后变得对它们十分精通,要么,你这也学学,那也干干,然后对哪一样也不精通。接下来你会争辩到,在多数领域的某些方面你应该达到专家级。但随着时间的推移,这些专业知识将会变得冗余。如果我今天把应用设计与框架方面的知识丢到一边,而去钻研算法或TCP编程,那么由于技术更新,三年后我可能就不再精通之前的那些领域了。
存在抽象的原因之一就是防止你陷入底层细节的深渊。如果没有这些抽象,我们就不可能写出合格的软件。而我们可能需要做的就是专注于更高层,因为低层已经被处理好了。将底层编程当作某种深奥艺术可能只是为了显摆,但事实上它并非什么深奥艺术,只是有对底层编程的需求罢了。
当然,这就不是说通过学习JQuery,Rails和Spring就能使你变成最好,而不需要知道其它东西了。你要尽可能地熟悉你所专长层面之下和之上层面的工作原理。一般地,因为所有抽象都会”泄露”,所以你不能忽略应用程序所消耗的内存,当需要快速访问时,你最好使用Hashtable,TCP连接可能被防火墙阻隔,尽管你不需要编写析构函数,不需要实现Hashtable,或者了解TCP。但了解其它层面的工作原理并不会使你成为那方面的专家,其实你也不必成为那种专家。
为什么我要写这些呢?因为很多公司(包括大公司)中的人们倾向于认为专家就应该在所有层面上都达到专家级,尤其是在底层方面。在面试时会问你很多底层的细节问题,好像你一生都在从事数据结构和网络编程方面的工作,你当然不是那样,但这并不意味着你不是一名专家。
不做全方位的专家是一件很好的事情,只需要在若干层上达到专家级就行了。但你必须了解更低层和更高层领域的工作原理,这样当有需要时,你也可以成为那一层的专家。
harde:想说点什么,又觉得什么都说不出。刚入行的新人们,希望你们能理解吧。
本文转载自:
《不是全面的专家(译)》
http://www.blogjava.net/jiangshachina/archive/2013/06/30/401088.html原始文章:
《You’re Not an Expert in All Levels of Abstraction》
http://architects.dzone.com/articles/youre-not-expert-all-levels