这次邀请到两位 Java 大师 Josh 和 Neal 前来*参加 Java 2006 研讨会,我想收获最多的应该是我和我找来帮我壮胆的同事吧 ( 他是新加坡过来的,英文很好 ) !除了增进双方的友谊、训练了一点点的英文、更加了解台北的吃喝玩乐之外,关于技术方面的话题也在开车、吃饭的过程中聊了不少。不过我们聊的内容不是在于技术本身怎么去使用,而是聊一些我们对于这些技术的看法,从他们的见解中,有些跟我心中的想法是一致的,只是现在有大师背书,更加的确认我的想法,这算是英雄所见略同吗?!
在他们两位的眼中,我看到得是对技术的热情与执着,他们两位投入 IT 届已超过 25 年,但从他们身上你找不到那种职业倦怠的感觉,相反的他们乐于分享他们所学,例如演讲、出书等;也不断的研究新的技术,例如 Google Calender 就是 Neal 的宝宝。在*,你很难找到像他们这样的人 ( 我指的是软件方面 ) ,我想也许是大环境的关系吧!*的软件环境比较不重视「资深」的工程师, PM 只在乎项目不 delay ,成本不 over ;而客户只在俗又大碗,该有的功能不缺,可以向上级交差就好。至于扩充性、维护性,那是以后的事情,下次接到案子的又不一定会是我。这样的态度抹杀掉了技术人员向上发展的动力与空间,资深一点的*转行,新鲜人则到处问下一步该怎么走。
话说回来,对于技术的热情,我相信在*还是有不少人热衷于研究的,只要一些新的技术出现,如果市场反应还不错,就会有一堆人投入其中。例如前阵子的 AOP(Aspect Oriented Programming) ,前两年的 JavaTwo 还有不少的场次;这阵子的 SOA(Service Oriented Architecture) ,各家大厂卯起来狂推; AJAX 也是当红炸子鸡,连我都未能免俗地连两年 JavaTwo 的 Session 都跟 AJAX 有关,也许明年继续。在热烈的追求之后,我们是否应该静下来想想,这些真的是我们要的吗?就拿 AOP 来说, AOP 这个概念打从它出生,就有许多人关注和推广。不可否认的,它确实对于对象导向程序设计 ( 以下简称 OOP) 带来了许多好处和影响,可是在实际的程序 / 系统开发上,使用的人并不多。其实这样情况是很自然的, OOP 的概念也不是从 Java 之后才有的,早在 1970 年代的 Smalltalk 就是一套对象导向的程序语言。 OOP 演化了这么久,才借着 Java 大红大紫, WHY ? Java 是个好的程序语言,但它并没有让 OOP 变的多简单,主要是人们心态和逻辑上的「进化」,当传统的结构化程序设计 (Structured Programming) 无法满足时,因为 OOP 所带来的好处,刚好弥补了 SP 的不足,虽然 OOP 的学习曲线颇高,但整个环境的大驱势让大家渐渐的就朝这个方向走了。 Josh 和 Neal 也一致的认为, AOP 是不错,但要发光发热还需要时间。目前底层的程序设计师,对于 OOP 都还不能全然的掌握,要他们再去学个 AOP ,写出来的程序只会更烂,不会更好。
批评之外,要来点建设性的建议,我问他们两位该如何提升自己的功力,他们认为参与 Open Source Community 是个绝佳的练习舞台。参与的方式从单纯的 review code ,到真正的供戏你所写的 code 都算,要参与到什么程序,就看个人的功力啰。在学习书法或画画的时后,刚开始也都是临摹别人 / 前人的作品,有了基础之后,进而发展出自己的风格。学习程序设计也适用这样的方式, review code 就是用个用意!人家的 code 不一定写的好,初学时你可能无法看出不好的地方,或是还没有能力修改的更好。 Community 除了 code 之外,另一个很重要的是 mail list 或是 forum 。经由大家的脑力激荡,你可以在整个讨论的过程序学到很多。除了写程序功力上的帮助之外,你还可以学会什么的 team work 、学会 process 、学会 version control ,而且有了志同道合的学习伙伴,会让你在学习的过程中更愉快、更有信心。对于资深的技术人员来说,在这里你可能可以找到技术的第二春,对于新手来说,这里提供了一个很好磨练的机会。
在 Code Review 的过程序,一般人很容易犯的错就是「 Don’t Copy & Paste 」,因为你觉得人家写的不错,你很直觉的就想直接把它拿来用。 Josh 和 Neal 很强烈的建议不这么做,道理很简单,就算是学书法的临摹,也是你亲自用手描一遍,而不是用复印机。你在 Copy & Paste 的过程中,因为你不了解你所 copy 的东西详细的内容,它往往 90% 都是不必要的 ( 对于你现在写的程序 ) ,而且就经验来看,程序最后出错的可能性非常高!如果有重复性高或可 reuse 的功能,就把它们设计成 library 或 framework 。就算你非 copy 不可,也要确切的知道每一行程序代码在干什么,这样将来出错时,才知道怎么找出 bug 来修改。相信很多 senior 再带 junior 时,一定都遇到只会 copy ,而不懂到底 copy 了什么的 junior ;而最后当然是由 senior 收烂摊子,边收边骂,相信不少 senior 一定经历过这些事。
我好像一直都在唱衰软件业,到底有没有办法从软件中赚到钱呢?就连 Josh 和 Neal 也不知该怎么做,他们说,如果他们知道的话,现在早就是大富翁了。现在全世界能只靠纯软件赚钱的,应该只有微软吧?!其它像是 Sun 、 IBM 、 HP 早就转型做 service ,之前做 IDE 的大厂 Borland ,也早放弃了这块市场,虽然它曾经是个龙头。除了做软件愈来愈难赚钱外,现在最难赚钱的是硬件,比尔盖兹好像在十年前的不知道什么场合说过,硬件将会是免费的。他的预言好像快要实现了,现在在光华商场,不用一万元就可以买到还不错的 PC ,最后真正的决战会是在软件上面。而 Google 现在正在打破软件的观念, Web Application 愈做愈完整,功能也渐渐的取代了传统桌面软件。软件不太可能变成全部免费,但买套软件回来安装的行为,也许在不久的将来就会渐渐的消失。当我们有需求时可以长期租用某项软件服务,或是临时租用某项软件功能,这样一来可以更落实使用者付费的观念,而使用者也不用常常追着新版的软件跑。也许软件本身也许没有什么赚大钱的机会,但换个角度从 Service 的方面来看,现在网络上一堆的 Web Application ,其实它们就是一种 Service ,这样的经营模式也许会是下一波的主流。
我很不习惯人家叫我大师什么的,跟 Josh 和 Neal 两位比较起来,我的成就真的是太小了。我问对他们来说,成功的定义是什么? Josh 说,他觉得他能够写一本好书,让大家从这本书中得到很多的帮助, 对他的意义很大,进而更有动力继续写出更好的书,这就是他认为的成功。我说我有他的影子可能有些人会忍为我是高攀,我要努力和可进步的空间还很大,而且要朝国际化发展。印度级的工程师都已经开始入侵*了,我们真的得认真的思考,我们 ( 软件开发 ) 的定位到底是如何!创造 / 新一直是我们所缺乏的。在硬件方面,*已经开始在转型,软件方面就靠我们啰! Think big, Think different and do our best!