登陆定居 程序员生涯十二年回眸

admin

管理成员
前言之前言:

这个帖子最迟发表在工作学习版,而且不出所料的“太监”了 (汗).
俺想,多伦多版很多人没有看到,所有在这里重发一遍。并计划一个月内补齐剩下的一半。

无论如何,这对笨笨的耐心是很大的挑战, 谢谢支持和回帖。
 

admin

管理成员
回复: 程序员生涯十二年回眸

前言:

第一次考虑这个帖子,标题是"十年回眸" , 可以想见俺的拖沓程度了(笑).

标题或许应该更噱头些: 比如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, 就只能被淘汰。
 
最后编辑: 2008-12-22

admin

管理成员
回复: 程序员生涯十二年回眸

1999-2002:

C++程序员之夕阳无限好

大学毕业后, 我到了一家电信公司,继续了2年C++程序员生涯。当时CORBA技术,在电信工业得到了广泛的支持。因而我所在的项目组, 广泛的利用开源C++通信和CORBA平台类库(ACE/TAO)建造了client/server的产品平台, 直到后来,整个公司开始逐步转向Java技术。

我首先是一名C++程序员,然后是Java和.Net程序员。 离开C++(大约在2001年),对于我曾经是一个很大的痛苦和挣扎。即使是今日,我依然能够感受到那份茫然,从MFC到ATL, 从STL到ACE/TAO,在C++上我有太多的积累和职业经验, 而这些我几乎了解全部源码的类库就这样随风而去(苦笑)。 需要承认,我过于迟钝, 不但没有商业的脑袋,连眼睛都没有,在亲眼看到后,都无法相信C++会开始衰落。

抛开失落C++的痛苦, 我的程序员水准来到了整个职业生涯的巅峰。技术上, 我继续执迷于STL/ACE/TAO类库的精致,不断使用C++ template的风格来缩减代码的数量。 同时精研“四人帮(Gang of Four,GoF)”里的所有Design Patterns , 并广泛收集学习网络相关的和Java设计里包含的设计模式。

21世纪的最初三年(1999-2002),是互联网泡沫遽然刺破的年代。第一次浏览器大战的后果开始日益清晰,而备受“反垄断”调查困扰的Microsoft, 却刹那间完全不知道如何在市场上竞争了:

Google的崛起,还可以归咎于“谁知道Web的金库原来是搜索引擎呢?“; 但未来developer争夺战, 携浏览器大战胜利之威,倾全力严阵以待来势汹汹Java, Microsoft却居然无所作为或者说犹豫不决,不能不归结于Microsoft的“坠落”(也就是说内部的”官僚化“)。

整整四年啊,青涩的.NET 1.0在2002年1月姗姗来迟。 1998-2002年, Microsoft遭受了前所未有的惨痛失利: 输掉了未来的developer争夺战。

.NET 1.0 ! What? 舍弃了数百万VB和C++程序员, 舍弃了十年的工业积累和心血(COM/ActiveX), 花费了整整四年(如果了解Microsoft的历史,就知道四年有多长,只有后来声名狼藉的IE7和Vista才能超越这次等待)。 在Java阵营用JAVA这个品牌翻版或者扩展原来Microsoft旗下Windows/COM平台的所有技术 (ASP -> JSP, DCOM -> Java RMI , MSMQ -> JMS ,MTS -> EJB Container , TAPI -> JTAPI , ODBC/DAO/RDO/ADO -> JDBC etc...)的这个快乐旅程已经接近完成之后: Microsoft对Java兴起的回应显得如此的无力或者失败。 在大众的眼里,翻版Java 1.0+ JSP的.NET 1.0是Microsoft的投降书。 Microsoft舍弃了自己辉煌的过去,而追随竞争对手的脚步,重复发明自己过去的平台,尽管这种重复是螺旋式的上升。

某种程度上, Microsoft当时的命名策略反映这位巨人的难堪: 完全不同的技术,使用一个类似的名字,以试图用招揽它过去忠实的支持者(如ASP到ASPX,ADO到ADO.NET) ; 而完全相同的东西,反而使用一个不同的名字,以继续销售它已经注定要抛弃的东西(比如到Windows MTS/MSMQ 到.NET Server).

伴随着.net 1.0的黯淡星光, 昔日开发工具之王Visual studio, 2002和2003版( 7.0/7.1 ) 也无法重复Visual studio 6.0(98年版)的荣光。与此同时,IBM多年来不断收购创新公司的努力和积累终于有了回报: 总部Ottawa的OTI公司(1996被IBM收购)开发的一个世界级的IDE开发平台 - Eclipse - 赢得开发人员的关注和尊重,并开始展现出可以替代甚至超越Visual studio的实力。

Developer争夺战, Microsoft看起来几乎是不战而降: 无论当年,Microsoft内部经历了怎样的痛苦和挣扎,有着怎样的策略或雄心。 市场给出了最终答案: Java 统治了主流开发平台.

几乎又过了四年。2005年11月 - .NET 2.0 - Microsoft终于为工业提供了一个严肃的技术候选,这或成为.net技术的转折点。 2006年11月和2007年11月,Microsoft发布.net 3.0和.net 3.5。 Microsoft连续三年发布重要的技术版本,某种程度意味着Microsoft最终理顺统一了内部纷争和将来的技术路线图。 尽管它面临着艰难的爬坡之战,但这一直是Microsoft最熟悉和拿手的。

可以肯定的是: 浏览器大战后的Microsoft,一直在慢慢"坠落"或者“滑落“ ( 输掉developer争夺战,是一个例子; 我们反复谈到的将近6年才推出IE7和Vista,更是这种"坠落"的明证)。
令人惊讶的是,Microsoft居然在这样多年的“坠落”后可以在开发平台和工具领域上卷土重来:

俺在这里引入一个商业上的观点来解释并预测Microsoft在将来 IT工业的竞争力。 将来Microsoft可以击败下面两类型的公司:
1)无法找到成熟商业模式的小公司
2)比Microsoft更”官僚“的大公司

简单的来说,小公司没有它有钱,大公司比它更官僚。

Microsoft应该庆幸,在开发平台和工具领域,面临的是像IBM(比它官僚), Sun(无可以和Microsoft抗衡的商业模式),小公司和开源运动(没钱),这样的竞争对手。如果面临的是,像Google这样的竞争对手, Microsoft绝无蹉跎多年,还能够咸鱼翻身的运气。

OK, 暂时enough for Microsoft 和 .net 了。 下一节会仔细聊俺的Java程序员之旅。


2002-2005: Java程序员之岁月无声

事实上,从这个时候开始,我已经不是严格意义上的程序员了。我所在的项目组,从实现一个所谓电信级的EJB Container开始,然后扩展到实现电信tag library,以及Rebranding类似Hibernate的Object-Relational Mapping等等。这是一场长途爬涉,因为公司的目标是拥有所有技术的自主知识产权,同时也要将平台推销给其它业务部门,并做相关的支持。从Project Manager到Architect, 到最后的P2P research, 俺离coding和实用越来越远。 这或许是为什么俺能够对软件工业能够有一个完整的Picture,甚至能够有CanadaMeet.com的原因之一吧。

从个人的小圈子跳出来, 我们来看看Java世界的群雄并起和波澜壮阔。

待续
 
最后编辑: 2008-12-22

小鼠波波

******
管理成员
回复: 程序员生涯十二年回眸

不远处重来~
 
回复: 程序员生涯十二年回眸

more..................?
 

注册或登录来发表评论

您必须是注册会员才可以发表评论

注册帐号

注册帐号. 太容易了!

登录

已有帐号? 在这里登录.

Similar threads

顶部