和Google专家亲身相处的四天

时间:2022-02-01 09:06:31


这次邀请到两位 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!