关于搞软体行业,到底要不要念大学,念硕士,念博士这件事,主观来说当然每个人都有他独特的经验可以分享。但是,仔细分析起来,这些不同经验,其实也没有衝突。我的看法是先搞清楚技术知识的类型与本质,接下来是想清楚自己到底想要过什麽样的人生,达成什麽样的目标。
这两个问题想清楚后,就会知道自己需要什麽类型的知识,此时再来讨论自己应该要用什麽样的途径来取得这些知识,才不会落入鸡同鸭讲的困境
对我而言,与技术有关的知识,起码可以分为三种不同的层级,也来自产业的三个阶段,取得方式也有三个途径
阶段一是进行旧概念的颠覆与新概念的探索,我把这个阶段所发展出来的知识,称为思维革命型的知识
阶段二是修正并完备理论的各种细节,我把这个阶段所发展出来的知识,称为典范建立型的知识
阶段三是特定典范下的实作方法,我把这个阶段所发展出来的知识,称为实务应用型的知识
以 Pattern Oriented Software Design 这个领域的发展当例子。
Design Pattern 其实原本是建筑领域的用语与概念。这个字眼与概念,首次被用到computer science 的领域,应该是在 1987 年的 OOPSLA 中的一篇论文。但是 Design Pattern 真正开始在 CS 的领域受到重视与普及化,多半是因为 1994 年那本由 Booch 写序的经典巨作的影响:Design Patterns: Elements of Reusable Object-Oriented Software 。所以,我把1987 到 1994 这段期间,与Design Pattern 有关的知识,归类于我说的阶段一。
1994 之后,这个领域的发展,进入了我所谓的第二阶段。陆续几本重要著作的出版,让这个主题的理论更加完备,包括 Pattern-Oriented Software Architecture, Volume 1 &2 ,以及2002年出版的那本 Patterns of Enterprise Application Architecture. 在2004 之后,这个领域的发展,进入了第三个阶段,大量在阶段二的书籍所探讨的概念与Pattern 被实作出来,广泛的应用在各种类型的软体开发实务上,其中包括最近很红的 RoR。
取得这三种知识的方式与场所,其实也都不太一样。
一般来说,会喜欢从事阶段一的工作的,多半都属于全球顶尖前50名的大学研究所,他们的角色在颠覆既有思维,在拓展人类知识的终极边界。会从事阶段二的知识发展的,多半属于各个国家的研究型大学,或者大型研究机构,他们的角色在丰富新知识的内涵,也让知识变得可以被传授。至于阶段三的知识,多数的学校都不会教,教授们反而也都不会,它们本来就是属于企业的。
你可以不难想像,如果你在 1987 年的时候,不念研究所,甚至不念大学,就直接去从事软体开发相关的工作,你会学会RoR, Java 这类目前最热门的软体开发技术吗?绝对不会。你比较大的机会会从事与资料库及ERP 有关的工作,然后一直在那个领域精益求精到今天。相反的,如果你在2010年之后,才进入软体职场,你能够不使用某种 Pattern 与 framework 来工作吗?也绝对不会。但是,相同的道理,你怎麽知道20年后,你现在自豪的某套方法如 RoR,即使不断的进步,也已经不会有太多人在意。举例来说,现在顶尖大学的CS 科系可能都在研究与训练未来可以从事大量平行运算有关的程式设计,这种完全不同计算模式的程式思考,对于惯用目前线性的Design Pattern 的专家,未来肯定死也转不过去。
最后,这三种知识其实没有重要性与高低之分,对人类文明与生活的发展,他们是一样的重要。连带的,取得知识的途径与方法,也就没有高低之分。重点是你对你自己的认识有多少,对自己的期待是什麽,希望自己的生活方式是什麽。当这些问题有了答案之后,你自然可以选择洽当的途径去取得需要的知识。