不久前,当我试图说服一
位
Web
程序员深入研究
Web2.0
时,失败了。失败的原因在于对方认为
Web2.0
是一个被人为炒起来的虚幻名词。这并非少数人的想法。很多程序员认为,他们需要的是实在的利益和做法,只有具体的技术才能引起足够的兴趣并深入钻研,而像
Web2.0
这样的思想没有必要去深入了解。
不过,吴孙滨却不这样想,这位证券网站的程序员同时和同伴共同在维护名为
“
超越
PHP”
的网站。除了技术之外,他还和经常与合作伙伴一起探讨如何让技术和用户双赢。最近,他们发布的新一期电子杂志中就探讨了
Web2.0
。吴孙滨说:
“Web2.0
有利于让程序员明白很多道理,比如不一定最先进的技术才能带来最大变革。
”
与吴孙滨一样,曾经从事多年硬件和系统开发的霍炬现在也醉心于研究
Web2.0
,他参与开发的
365Kit
(
www.365kit.com
)就是代表。作为一个通讯录网站,
365Kit
除了可以让用户在线更新查询联系人信息外,还提供了与
Outlook
和手机进行同步的软件和功能,而且通过系统后台,联系人之间还可以产生社会性的关联。不久前,
365Kit
还发布了一个新功能,将
365Kit
和
Msn
连接起来的
Msn
机器人
——
小强。
“
利用小强,你根本不需要登录网站,只需要在
Msn
中输入希望查询的人,它会自动帮你把联系人的信息查询到并返回
Msn
信息。
”Donews
创始人刘韧说,
“
我经常会被朋友问一些人的联系方式,一天有几十次,用了小强,可以最快速的查询信息,节省大量时间。
”
事实上,大部分被称为
Web2.0
的应用都是由程序员角色的人员率先开发的。从
RSS
标准的建立到
Del.icio.us
社会书签系统的流行,都证实了这点。
因此,程序员不应无视
Web2.0
这种自己创造的新模式。当然,陷入那些关于
Web2.0
特性的争论中是没有意义的,我们需要的是拨开浮躁的面纱,真正关注
Web2.0
到底如何指导
Web
应用和产品开发,会给程序员的工作和发展带来怎样的变化,程序员又如何更好适应这些变化。
设计理念的变化
对程序员来讲,首先带来了一种设计理念上的改变。以前的
Web
开发,往往由于系统是给少数人使用的,因此开发时会以
Web
集中式管理为中心。著名
blogger
、
Donews
总编辑洪波表示,
“
比如新浪的内容发布系统,因为是给编辑使用的,强调的是功能和对权限的管理。
”
但是,现在的
Web
功能越来越需要开放给普通用户,很多以前认为通过培训可以解决的问题,现在会由于成本太大而行不通了。
这与
Web
数据越来越分散的趋势有关。原来
Web
强调以门户网站为标识,其内容自成一体。但现在由普通用户创造的大量微内容是新的驱动力。
一个小的独立应用和服务提供给用户,每个用户产生的内容可能意义都很小,但这些内容组合起来,就会产生很大的价值。洪波认为,
“
而且随着信息越来越分散,用户也需要一种新的组织方式。他们希望不同网站能够提供不同的微内容输出。
”
正是在这样的大前提下,很多技术萌发了活力。
RSS
技术就是代表,因为这个技术很早就有了,但当时互联网上的使用模式主要是门户模式,
RSS
的分享特性
并不符合这种模式。而现在互联网的方向则是去中心化,所以,突然
RSS
这种技术变得非常有价值了。可以说,使用模式上的变革让一些老技术
“
老树开新花
”
。
这就要求程序员必须要研究一些公共标准,提供符合规范、能够交互、分散聚合的内容。
Web2.0
时代的新应用往往只是一个很小的功能,因此开发者需要考虑如何与其它的
Web
应用进行结合。
而且用户也希望很方便的在自己需要的地方出现需要的内容,而这些内容不一定是自己来做的,很可能是由那些更专业的人士开发。
“
你的
Web
程序不仅要能够很方便的聚合其它的应用,而且也可以输出自己的应用。
”
因此,
Web
程序员需要考虑到接口的开放,以及能不能方便的调用聚合其它应用,这就会给系统设计思想上带来很大的变化。
整个
Web
世界也确实在按照这样的规则来发展。不久前,
Alexa
开放了自己的世界网站排名信息的
API
接口
,而
Google
、
Amazon
、
Ebay
等网站也很早便开放了
API
接口
,一些书评网站就是直接调用的
Amazon
的
API
接口
。
“
不能开放接口的,也会通过输出
RSS
等方式
让其他的网站很容易聚合内容。
”
洪波说。
以用户为中心
有过网上购物经历的人都知道,当我们选中购买一个产品时,都会弹出新的窗口,列出刚才选择的物品,然后请你确认数量,接下来再选择购买或者结账。实际上,看起来用户都已经被动的接受了这种模式。
然而,当你看到
Loopo
购物网站时
,你会对其它网站的购物流程有新的认识。
Loopo
的界面看起来与其他网站一般无二,使用的也同样是
PHP
和脚本,但在使用习惯上有了变化。用户看中某个物品后,可以直接拖动物品放到购物车中,系统会自动记录你要购买的物品名称。看起来很小的一个变化,却让这个网站吸引了很多人的目光,因为这更接近日常生活的使用习惯。可以说,当程序员认为弹出新页面天经地义的时候,他们其实已经漠视了用户的使用习惯。除了这个功能,
Loopo
还做了很多符合用户习惯的改进,也因此,
Loopo
被一些用户称为
2005
年最酷的购物网站。
Web2.0
改变了一些产品特性的优先级。原来做产品,可用性的优先级会往后放,而把功能放在首要位置。现在则由于要给普通用户使用,必须要以用户为中心,肯定要从易用的角度出发了。可以说,
Ajax
技术的流行
,首先解决的也是一个观念问题。虽然这时
Pageview
无法获得增长了,但是它却可以给用户带来更为便利的网络访问。霍炬说,
“365Kit
提供的功能让用户在手机上看到的只是一个简单同步按钮,这就大大降低了用户的使用门槛。
”
洪波就非常推崇著名的图片分享网站
Flickr
,这也是
Web2.0
的代表性网站。
“
我在使用
Flickr
的时候,任何我希望修改的部分,我随时可以修改。而以前需要弹出新的页面,再修改。可以说,技术变化带来了一种面向用户的新体验。
”
现在的网站开发不是为了追求
Pageview
了,而是为用户提供需要的功能,满足他们的需求。现在很流行书籍音乐电影的评论网站豆瓣也是一个代表。创始人杨勃在物理学博士毕业后,曾在
IBM
公司工作,
2000
年回国后曾担任一家物流管理软件公司的
CTO
。不过,热爱编程的他看到了人们在书籍、音乐和影视作品分享方面的空缺,从
2004
年开始设计豆瓣网。杨勃表示,对大部分人来说,书籍、音乐、电影的选择特别多,这就带来一个方向,也就是需要发现和分享。每个人的口味都不一样,大家共享之后就会产生口碑传递。
“
所以,一开始就豆瓣不是为了做一个网站,而是满足人们的一个需求,如果对用户没用,只是新鲜是远远不够的。
”
然而,国内很多程序员在观念上还没有转到
Web2.0
的路径上,仍然持有一些比较老的观念。洪波说,
“
我也接触了很多开发者,这个观念他们不是特别容易改变。程序员往往喜欢按照自己的思路,有一种比较固执的想法。但当他们的想法遇到没有任何培训的用户时,就会碰壁,因为用户根本不会像他们那样去理解。
”
技术高低影响不是特别明显,但领悟
Web2.0
的真谛后一下就可以明白很多差距。吴孙滨表示,原来公司的同事之间的讨论可能仅仅限于了解对方有什么需求,考虑一下功能如何实现。现在,公司的程序员在学习了
Web2.0
后,出现了新的变化,大家会考虑几种完成的方式,相互之间有什么不同。大家会经常问这样的问题:这样做会不会更用户带来更多的方便?用户的感受是怎样的?如何做的更好?
简单的前台与复杂的后台
符合用户的习惯,简单的前台界面不代表系统的简单。事实上,正相反,在
Web2.0
的系统中,后台需要做更多的工作。一些表面看起来很简单的功能背后可能需要大量的程序和计算的支撑。
豆瓣网就是最具代表性的例子。与大多数网站不同的是,最早开发的部分是一套推荐引擎,这是基于数学统计的计算模型。在用户点击过看过的东西以后,这套模型可以自动分析出
“
与其口味最像的人
”
,并主动地推荐用户最有可能喜欢的书籍、音乐或者电影。比如,豆瓣网是
100%
动态网站,没有一个静态的页面。我们完全可以将其看做一个个人管理书籍、音乐、影碟的工具,只是将工具放在网上了。现在,很多人抄袭了豆瓣网的模式和资源,但杨勃表示,仅仅抄袭一个网站的表面是没有价值的。
“Google
的界面更简单,但系统核心不在这里。豆瓣比
Tag
这些表面的东西多做了一步,采用了统计模型和一些程序算法,事实上,这才是豆瓣网的核心。
”
霍炬从传统程序员转向
Web
开发,就是因为他认为
Web
开发足够复杂之后才行动的。
“
现在的
Web
程序员比过去要求高多了。最初的
Web
程序员会一些
Asp
,
Php
的脚本,稍微懂一点交互就可以。
Web2.0
出现之后,很明显系统复杂了。现在
Web
程序员需要掌握的技术很多。
”
现在在
Web
上,从服务器到脚本,技术体系和思想发展也很快,技术架构也迅速发展。甚至
2005
年一年的变化可能比之前所有的都大。
Web2.0
出现后,我认为网站的复杂度与软件相差无几了。
”
霍炬说,
“
在我做
365kit
这个项目的时候能够深刻体会到这点。
365kit
前台展现就是一个通讯录,但后台不仅要把这些数据放在一起分析,要发现联系人之间的关系,建立连接,同时还需要针对这样大的一个数据量如何方便的存储和查询。同时,很多辅助的工具,如客户端、手机上的同步工具,
Msn
的机器人都需要相当的技术实力。
”
Web
越来越像一个计算平台。
通过各种
Web
应用将计算机连接起来,比如需要相册时可以使用
Flickr
,需要地图时调用
Google Map
的
Api
。随着很多服务商逐渐将自己的服务开放出来,每个网站都可以看做一个软件服务提供商,相互之间的联系让系统越来越复杂。
现在看来,很有可能
Web2.0
将加速推动传统程序员向
Web
开发转移的潮流。这从
Web2.0
网站的数量增长速度之快也可以看出端倪。
霍炬看科幻大片《黑客帝国》时,,剧中有一个机器人将人类称为电池,用于作为能源供应的场景给他很深的触动。
“
其实大家都写
blog
,这就是共享自己的能力,最后形成社会化的知识体系,我就突然感觉这个东西肯定会有很大的发展,能够通过某种方式出来。我周围和我一样的一批老程序员,有很多都转向
Web
方面的项目了,过去做客户端的,也转向
Web
服务的方式。而且原来大家只是用
Web
技术来写脚本、做网站,现在逐渐开始
Web
方式来写应用级软件了
。
”
快速开发
一个令人难以置信的事实是,豆瓣网拥有十多万的注册用户,
Alexa
的流量排名在一千左右,过去却一直只有一台八千块钱攒起来的服务器,一两个人的开发团队。
为了适应这种规模,开发模式也需要进行改变。这在很多
Web2.0
的网站中都有所体现,有人称之为简单哲学。
“Web2.0
不像企业级应用有那么多的流程和模块。
”
霍炬说,
“
在
365Kit
这个项目中,我们放弃了重量级的那种开发方式,所以现在代码量也就是中等水平,再加上服务器端程序的维护成本很低,几个人的小团队就可以做到。
”
为了快速开发,系统设计也需要进行简化。杨勃说,
“
豆瓣网中间也做过一些变动,最初还是受原来做企业系统的影响,结构设计的太复杂,甚至还分了很多层。后来就简化了,因为太复杂之后就难以做快速开发。
”
豆瓣网站采用了敏捷开发的模式,这是一个快速开发、快速变化的体系。平均每两天就有新的功能出现。
豆瓣网站采用了敏捷开发的模式,这是一个快速开发、快速变化的体系。平均每两天就有新的功能出现。
“Web2.0
网站是快速变化的,并不是把所有的功能都在开始阶段完全实现。
”
杨勃说,
“
这就要求系统构架的可扩展性要做的很好。而且必须考虑将来规模可能带来的问题。豆瓣网一开始的架构设计就可以支撑上百万用户。
”
同时,基于
Web
的开发省去了客户端分发、维护的成本,因此可以做到
“
永远的
BETA”
,随时更新和升级服务。洪波表示,据说
Flickr
的升级是以小时为单位的。
Web2.0
与用户的交互也是让网站快速完善的动力。网站运行之后,听取用户的反馈,指导下一步的应用开发。
“
豆瓣网有一个站务论坛,很多人经常发言提出自己的需求。
”
比如豆瓣刚开张时,由于每个人都可以自由创建小组或者参加小组,于是用户可能会同时参加几十个小组。但由于很多小组人数比较少,可能很长时间才会有人发言,于是大家就要求有一个功能,把所有小组的最新发言聚合在一起。杨勃很快实现了这个功能,事实也证明非常受欢迎。
杨勃认为,由于是小团队,工作模式就不能是一个经理带一帮人,而是大家都需要参与编程。而且,对综合学习能力的要求比较高。
“
因为技术变化很快,现在对任何技术再熟悉,经验再多,过几个月可能又出现了新的技术,因此最重要的是要能够跟踪最新的知识。而且由于最新的
Web2.0
模式和思想都是从国外发起的,所以程序员要具有在英文环境中直接沟通的能力,能够直接参与到国外的开源项目中,而不是看已经翻译为中文的文档。
”
杨勃表示,自己学习
Python
也是随豆瓣网开始的。
“Python
很适合敏捷开发
,最初的时候曾经尝试过使用
Ruby
,后来由于豆瓣网需要很多后台的程序,
Python
更适合编写一些后台模型程序
,最终前台也统一为一种语言。
”
杨勃之前对
MySQL
了解很少,但在做豆瓣网的过程中,很快将知识弥补上来。
“
现在我们有几个数据库都可以做同步,有些内容我们还向开源社区进行了回馈。
”
豆瓣网选用了很多开源产品,杨勃认为
:“
用好开源产品是非常关键的。豆瓣的平台是基于
Linux
,数据库用的是
MySQL
,除了数据挖掘和搜索,其它都是在开源产品之上开发的。
因为现在有很多非常成熟的产品和模块,没有必要从头做,只要有能力了解获得这方面的知识,都能够很快在别人的基础上开发自己的系统。
”
web2.0
的盈利模式
可能很多程序员都会对一个问题表示出疑问。
Web2.0
的商业模式和盈利模式在哪里呢?事实上,
Web2.0
的出现并不是为了解决商业和盈利的问题,它是一种做好
Web
应用的新模式。至于商业模式,那是企业家更擅长的事情。就像
Google
的两位创始人创造出了一个更好用的搜索引擎,但最初他们也不知道如何用这个来挣钱,但当商业人士负责公司的运营后,帮公司找到了销售关键词盈利的商业模式。现在的
Web2.0
主要是为了解决前面的问题。后面的问题自然会有人找到更为适合的盈利模式。
Napster
的创始人仅仅是为了方便自己和朋友共享音乐而开发了
P2P
技术,却没有想到
P2P
被媒体树立成为整个网络去中心化、平等的一种标识,
并且指导着人们考虑如何充分的利用
P2P
技术来进行创业。随着
Skype
以
40
亿美金的价格被
Ebay
收购,一项从技术上升为思想,而从思想又指导的产品获得了商业的最大成功。
Web2.0
与
P2P
又有着异曲同工之妙。
事实上,由于
Web2.0
的很多项目都使用开源产品,实施成本很低。同时投资比较小,一两台服务器,两三个人,只要生活问题能够解决,就算一个基本的成功了。
而且,虽然
Web2.0
网站的服务项目比较少,但因为是分众的概念,可以很明确的知道网站上是什么样的用户群,能够更细致的分出价值,比如豆瓣就很清楚了解什么人看什么书籍,针对的是哪些客户。
未来,针对不同的用户群,网站服务的模式也会有所不同。因为不是一种模式就可以覆盖所有产品的。比如豆瓣网主要做的是书、电影和音乐,那它为什么不去做房地产和手机的评论呢?杨勃认为,
“
用户的习惯是决定因素,一方面手机和房地产的选择不够多,而且购买这些产品时,用户一般会倾向于看半专业或者专业的评论,比如买份杂志可能就基本了解了。而不像书籍和音乐,它们的范围非常大,很多都是需要发现,如果读者听说了一本正好适合自己的书籍,就会非常有价值。可以说,使用模式决定了网络的运营模式。
”
web2.0
带给程序员的机遇和挑战
Web
的发展对程序员要求也在不断提高。最初招聘
Web
程序员只需要懂一些
Html
和一些脚本语言,程序员只需要知道如何做就可以,而不需要对系统的理解。但随着
Web
开发的深入,程序员需要从根本上理解为什么
Web
这样,要如何做,而且学习的范围更广。而且,好的算法基础也越来越重要。霍炬说:
“
服务器上不像客户端那样没有并发的压力,运算资源还是很紧张的,如果服务器上由于程序效率低,占用资源多,就很难支撑起更好的服务。就像网络游戏一样,盈利靠的就是一台服务器能够支撑起多少用户。
”
如果是一个脚踏实地的程序员,其实
Web2.0
的技术应该都是他能够掌握的。需要改变的仅仅是使用的方式,就像敏捷开发改变人们的思想一样。不过,很多程序员还是喜欢根据技术难度来评判价值,这是他们面临的最大心理障碍。
而且,
Web2.0
的很多应用难度可能不是在某个程序上面,而是在整体的系统上。很多操作系统、数据库等方面的技术会综合在一起。也就是说,难度从程序本身上转移到了整个系统中。对于程序员来说,技术难度不仅仅只是程序和代码,而是包括了硬件、软件、操作系统,
“
豆瓣的程序不存在移植性问题,
Linux
的操作系统和
MySQL
数据库其实就是程序的一部分,整个
Web
应用和环境就是一个软件。
”
不过,
Web
开发复杂度的提高也带来了一些好处。
Web 2.0
其实给了程序员一个更大的空间。一般来说,技术人员的思维比较发散,爱好非常多,而且特别喜欢思考。这样,只要站在用户的角度,可以给程序员很多想像的空间,对系统进行改造,而这恰好是在自己的工作范围内,老板也会非常欢迎这种做法。
而且,
Web
程序员的职业发展方向会更加明确。早期的
Web
程序员虽然工资也很高,但核心的竞争力其实自己也不清楚,因为那些技术任何人想学都很容易学会。正因如此,很多
Web
程序员会处在一种不稳定的心理状态。而现在会逐渐稳定,因为系统越来越庞大复杂,就会类似传统软件行业,可以走系统设计或者管理的路线,做技术也可以很深入。
对很多程序员而言,
Web2.0
也是一个创业的好机会,因为现在硬件成本带宽成本等门槛低了,前期投入不需要太多钱,有一个好的创意就可以很容易实践。
当然,这个门槛其实对所有人都降低,成功的机率还是一样的,但对于程序员来说仍然有机会发挥自己的特长。
因此,短时间内国内也出现了大量
Web2.0
网站。正是因为有了思考,才能诞生出很多创新的应用。吴孙滨说:
“
我的领导利用业余时间做了一个
EmailRss
的网站,可以利用
email
来订阅
Rss
。这是因为
Email
是每个人最常使用的网络功能,可以很方便的自动归档,而现在的
Rss
订阅器一般都需要人工的备份信息。看起来这是一个
1.0+2.0
的产品,但可以带给用户一种的创新应用模式。
”
洪波认为
“
板儿砖网
”
也很有特色,
“
当你对某个事件有看法时,只要引用链接,在版砖网上发表评论,这个能够聚合很多上网者对事情的看法,如果看法比较相近,就会形成观念相近的小圈子,另外还能够把有争议和有意思的话题重新聚合起来。
”
可以说,
Web2.0
时代的来临,让
Web
程序员从来没有像现在这样重要过,摆在
Web
程序员面前的诱惑和机会也从来没有这么多过,不过,
Web
程序员要学的知识也从来没有这么多过。面对这些,您准备好了吗?
http://tb.blog.csdn.net/TrackBack.aspx?PostId=679227