回复: 程序员生涯十二年回眸
前言:
第一次考虑这个帖子,标题是"十年回眸" , 可以想见俺的拖沓程度了(笑).
标题或许应该更噱头些: 比如IT从业者的内心告白,告诉您一个真实的程序员人生之类的。俺这个人很有”历史感“, 尽管力有不逮, 却总希望描述一个完整的画卷: 我们从哪里来,我们身在何方,我们向何处去。
所以俺会借回眸程序员生涯, 讨论这十二年来,软件工业的变迁,各种技术的兴衰; 然后聚焦于加拿大的IT Consulting行业, 简单介绍加拿大的IT业: 工作范围,最常使用的技术,工具,技能和大致的业界水准;最后俺会概述一下程序员应该拥有的基本"技术哲学"或者"技术价值观", 以及如何运用它们,评估新兴的技术。
尽管这个帖子有很大“太监”的可能, 但无论如何, 过去四年,从家园网得到了太多东西,能够写多少就写多少吧!
1996-1999:
兼职程序员之黄金三年:
俺依然清楚的记得, 1996年的那个夏天, 当俺第一次坐在21英寸巨型显示器前的那份不真实感。 很多年以后,只有在“中环广场”拿到移民签证时才重温了这种感觉。
就在一个小时前,刚刚渡过大学的第一个年头, 终日奔忙于图书馆,课堂,机房,把“纸上谈兵”写好的程序输入到Borland C++ 3.1里面 的小毛孩, 得到了人生中的第一个工作offer: 兼职程序员,月薪400RMB。
俺的技术生涯开始于Visual C++ 4.0和MFC类库, 参与的第一个项目是矢量图形编辑器(类似于Microsoft Visio,用于电力监控系统)。 那是俺人生的一段黄金岁月,最新的技术平台, 成功的商业产品,宽松的学习环境,最重要的是,和几位名校computer science硕士高才生,中国最早一批windows的程序员之一, 在一个产品工作三年的经历。 俺后来的经历再也没有重复这种简单的幸福。
OK, 太多个人的东西了(汗)。 毕竟这是写给程序员看的, 所以下文的重点将 回到那个时期热点的软件技术上来。
俺先列出一些关键字: 公司(Microsoft,Netscape,Sun,IBM) ; 语言(C++,Java); 组件技术( COM/DCOM/COM+/MTS, CORBA) ; 工业事件(Browser War, Open Source); 互联网,数据库和群件(database, lotus notes, web)。稍后,逐一(或简单或详细)讨论这些关键字.
今日的Microsoft经常被人嘲讽成为M$, 新的IBM。 然而,如果时光倒流10年,Microsoft正身处其全盛巅峰时期, 是任何软件/IT公司最恐怖的竞争对手,真正的“全能冠军”和“常胜将军".
20世纪末的最后四年(1995-1999),众所周知的互联网狂热和泡沫,加上很多当时看起来不起眼,或者不太被看好的事件及其后果,最终决定了后面10年(甚至更长远)的IT工业格局和技术兴衰。
大事#1: 第一次浏览器大战
第一次Browser Wars是商业历史上最激动人心的竞赛: 1995-1998年 , Microsoft 对决 Netscape ,最终以Netscape在1998年那个寒冷的春天,惨烈宣布开源结束。
从纯产品开发和推出的技术角度来看, 第一次浏览器大战是软件工业30年的梦幻巅峰。相比后来IE长达6年的无所作为(后面会谈到这种无所作为,客观上带来的一种意想不到的成果), 浏览器大战拥有激励软件工业的所有元素: 所有目光汇聚的焦点,成千上万用户的翘首以待, 天才的程序员,无穷的创意,总是优先于 开发新特性而不是修复bug,新版本推出以月计算而不是年计算…
从商业和IT工业的角度来看, 第一次浏览器大战是Microsoft 无法输掉的一场竞赛。 Microsoft 压上几乎所有筹码: 从windows操作系统到MSN在线门户;从visual studio开发工具到浏览器免费... Microsoft 最终得偿所愿。然而这些筹码,以及浏览器大战的直接和间接后果, 决定整个工业的走向, 并给下面将要谈到的很多大事带来了决定性的影响。 这种影响, 在下文的每件大事中详细谈到。
浏览器大战之后,备受“反垄断”调查困扰的Microsoft, 开始直线“坠落”。后面我会仔细讨论Microsoft的坠落和重装上阵过程,它当前在各个战场上面临的挑战, 以及这些战场的结果预测。
大事#2: Yahoo/Google的兴起
后面的帖子里,俺对将来会有不少无责任预测(笑).
俺的第一个预测是: 当前IT工业价值最被低估的公司 ------------- Yahoo 。2008年10月,全球经济风雨飘摇,金融危机引发了自大萧条以来最大的衰退恐慌。上周5,Yahoo 收盘在12.90. 周四甚至来到了11.37的低点。这里俺谈的价值最被低估,不是股市里技术分析的结果(因为从技术分析的角度来看,Yahoo的跌势可能还没有任何看到底部的迹象),而只是业内人士,对web工业的杰出先驱和领导者之一,发自内心的尊重。
1995年,软件已经是一个成熟并已经经过证明的工业, 而Web才刚刚开始. 当所有人的焦点集中在浏览器大战上的时候,Yahoo悄无声息的来到了台前。微软的MSN门户也是web工业最早的关键玩家之一, 但为了在浏览器大战中赢得美国在线的结盟支持,MSN成为了微软的棋子和牺牲品。
这或许是Microsoft历史上最不可承受之痛, 因为Yahoo, 以及后来强大得多的Google, Microsoft历史上第一次, 已经“注定”,无力在商业竞争中击溃它们。
将来: Microsoft或许能够轻车熟路的再次击倒IBM , 摘取lotus notes这颗企业应用的明珠; 或许能够重演历史,再一次赢得程序员之战,扭转.net面对java长达数年的颓势;或许能够依赖重新部署的免费策略: windows 2008 web os+IIS7+MS SQL Express+ .NET + Visual studio Express 2008 和当前web平台/工具的统治者LAMP( Linux,Apahce,Mysql,PHP ) 一较长短 ; 或可能在很多年,在炙手可热的Virtualization技术市场,对vmware后来居上;甚或还可以对苹果的IPhone的市场,怀有一丝幻想。
但对于Google, 还有Yahoo,Microsoft 的unable已经如此明显。 大约在2年前,在Youtube上,曾看到鲍尔默接任比尔盖茨后在微软内部的一个开发员大会上的疯狂蹦跳和叫喊鼓励developer士气的一段视频。相信很多人心里浮现的是那种“美人迟暮”和“廉颇老矣”的感觉。
关于Web工业, 有很多高谈阔论或者疯狂预测(比如 10年后,今日每年上万亿美元产值的软件工业,与Web工业相比是如何的微不足道)。但这场革命的最重要玩家和赢家注定依然是美国公司(Google, Yahoo,Microsoft , etc … ) 。 当然俺也希望,也相信,会有中国的Baidu/ 163/163 们的 (笑)。
Google的故事,是最新版美国梦,也是IT工业,其实还尚处幼年的一个例证。当你觉得拥有Microsoft版的美国梦,已经登临绝顶的时候。一个从所未见的商业和技术传奇,却轻轻松松闪亮登场。某种程度上 Yahoo/Google 早年的关系,隐约是当年IBM/Microsoft的翻版。 Yahoo专注于自己的门户和内容为王策略, 而把搜索引擎外包给刚刚起步的Google。 当市场证明, 搜索引擎市场是一个要成功得多的商业模式时, 对于Yahoo, 一切都为时以晚。
大事#3: Java诞生和C++由盛而衰
Java最早在1996年初正式发布在Internet上, 1.0是一个很慢很弱的版本,充斥着useless的applet。 俺相信很多C++程序员会有俺下面相同的体验:下载下来,编写一些Hello world的小程,然后很快失去了兴趣(汗)。
到了1998年的,Java 1.2成为一个很重要的转折点: Hotspot编译提升速度, dump掉玩具一样的AWT和applets。 更重要和决定性的是,Java找到了它的根 --- 服务器端 --- 成为最早landing到服务器端开发平台的主流语言。JSP和EJB , Java 成为IT工业迎接Web时代的第一选择。
对于Java的兴起和C++的衰落的根源, 马后炮分析有很多。 很多人的说辞集中在语言本身上面: Java 的语言特性方面的优势;write once and run everywhere的特性等等。 我不否定这些特点的作用,但也轻而易举的可以举出比Java设计得更精致的语言例子,也可以用 write once and debug everywhere来嘲笑Java的跨平台特性。
但why, why, why! C++过去可以一次次击溃其它更好的语言, 而这一次却败下阵来?俺在这里的马后炮分析是:
Web。 C++最终败于Web之手。 到最后,所有的恐龙技术,所有非为web而生的技术,最终都会败在web手里,而消亡。 就像电信业,最终IP为王一样,IT业,最终web为王。
在整个工业, 坚定的将所有的客户端和UI变成了browser-based的时候,只有服务器端才是传统语言的容身之所。可惜, C++不是TCP/IP通信协议,可以30年不变而被万众欢呼。 工业不能够接受C++对Web拙劣的CGI或者ISAPI形式的支持。 而当Microsoft埋首于浏览器大战,并三心而意的或用ASP应付Web,或试探着修改/扩展C++ 标准时, 一切都倒向不利于C++的方向。
当IBM这样的大公司以及整个开源工业坚定的支持Java,一切都似乎早已注定。
2001年后,我正式成为Java程序员,后面俺会细细讨论Java技术的今生和来世。
大事#4: 传统组件技术开始消亡
从今日的视角来看,当年COM/CORBA 已经恐龙一样的技术了, 而恐龙似乎是注定要消亡的。
COM从来没有脱离Microsoft的版图,生活在windows和C++的双层羽翼之下。 COM是组件技术工业级的先行者,它的OLE和ActiveX控件早在windows95年代就已经奠定了今日组件技术的基础。
当年Netscape开源浏览器时, 浏览器源码里面的XPCOM就是缩微版的Netscape COM。某种程度上,我把XPCOM的命名认为是工业界对COM技术的致敬。
而CORBA再一次重蹈Unix的覆辙。 尽管除Microsoft以外几乎的所有大公司都宣称支持它,但它真正的动力却来自小公司或者开源运动,大公司都在热衷于发展自己基于Java的技术。 CORBA号称支持跨语言binding, 但它天然的盟友却从来只有C++。 因为, Java很快从语言进化成为平台,并且开始包容万象,推出了Java RMI/EJB 这样更轻型的组件模型,给予CORBA温柔一剑。 当C++衰落的时候,CORBA不可避免的被边缘化。
详细比较COM(包括COM+和MTS) / CORBA,以及后来的EJB/Spring,甚或后来的所谓IOC containers之战,远超出这个帖子的范围。简单来说,简单战胜了复杂; 轻型化(light)战胜了重量级(heavy);健壮性(robustness)战胜了精致和完美。 将工业级质量和水准的COM/CORBA比拟成ISO网络华而不实的7层模型,对它们有失公平。但结局却是相同: 工业需要的solution,不必完美,但必须简单。
在所有的技术里,Web的技术模型最简单: 文本,无状态,超级健壮和容错。 如果只有技术模型能够存活,Web一定会笑到最后。而最恐龙的COM/CORBA,无可避免的随着历史上最杰出的语言之一, C++,而红颜老去。
大事#5: 开源运动的兴起
open source或许是软件历史上最重要的拐点。也或是除Web以外,最具深远意义和影响的事件。比尔盖茨的微软, 把软件变成了日进斗金的工业,使Microsoft成为名副其实的M$。 当利益的驱动,使各大公司趋之若鹜效仿,一步步把软件变成大公司专有的禁脔时, 开源运动慢慢兴起。 从Linux十年独行,到Netscape浏览器开源为转折点, 到如今"满城皆开源" (笑):
几乎所有的重要技术都以某种形式开源: 从操作系统 到 数据库; 从Web 服务器到数据库; 从Sun 的Java 到Microsoft 的NET 。同时开源运动通过Web工业里一个著名名词: LAMP( Linux,Apahce,Mysql,PHP ) , 形成了一种新的商业模式。后面会详细讨论LAMP和它代表的商业模式...
大事#6: 群件(lotus notes)的兴起
1999年前我对Lotus Notes一无所知。 在这里主要是提一下它的重要性, 并顺便埋一下另外一个伏笔,稍后会详细讨论当前企业市场正在上演的IBM Lotus Notes和Microsoft SharePoint 对决.
俺的第二个预测是: Web革命的最新一个牺牲品 - IBM Lotus Notes .
我依然记得, 当大学毕业后加入一家电信领域公司, 看到整个公司的运作完全被Lotus Notes 驱动的惊艳。 无数的工作流(电子流),文档数据库, 甚至论坛/二手信息市场... 但无论Lotus Notes 和Domino这种复杂,成功,创新的软件具有多悠久而辉煌的历史. 当你不能拥抱web, 就只能被淘汰。