• Feeds

  • Archive for the ‘Google’ Category


    有感Google的混合研究方法

    对于一个长期在研发领域的人来说,经常需要思考研发的意义、工程与研究的关系、产品型的公司应当做何种程度的研究等问题。理想情况下,我们期望每一项研发工作都能得到组织、同事以及社区的高度认可。因此不管你处于工程领域还是研究领域,工程与研究的关系会让你不断思考甚至困扰。最近看到的Google’s hybrid Approach to research (English 中文) 一文或许会让你豁然开朗。

    研究领域的现状

    • 根据技术领域的差异,大部分产品开发可以依赖已有成熟的工程技术完成,进一步通过研究来提升产品能力的空间并不大(比如提升空间在10%以下)。
    • 互联网企业偏重产品开发能力,关注点主要在开发效率、研发流程等交付能力上。偏实用主义驱动方式,很难对相关领域的工程技术进行升华。因此研究的驱动力、研究的空间及取得成果的可能性较低。
    • 没有专门研究人员或者兼职研究人员的组织也很常见;
    • 具有研究能力的组织中,研究对产品改进及商业化应用的能力不足。
    • 具有研究能力的组织中,研究对产品改进及商业化应用的能力不足。
    • 如果研究的方向并不能立即得到商业化的应用,通常较难得到支持。比如阿里云OS项目,即使与Android之间不存在纠葛关系,其研究方向也较难得到广泛的认可。

    最近身边一个Team做了一次内部调研,有关研究的部分数据如下

    在调研中发现,71%的研究需求来自业务,而45%的研究成果会最终应用到业务中。调研的全文参见 http://e.weibo.com/2758197137/yCuvs4tjd 需要补充的是,这个调研并没有严格区分“研究”与“工程”的界限,一些非直接应用于业务的工程可能会被调研人员定义成研究。

    Google的研究模式

    1、在一个以产品为重点的团队中的先进项目,凭借其创意和新鲜感,变革前沿技术,产生新的研究成果。
    2、研究组中的项目,结果产生新的产品或服务。
    3、研究组中的项目创造出新的概念和技术,然后应用到已有的产品或服务中。
    4、工程团队和研究组之间的联合研究项目,由工程团队使用其成果。
    5、由工程团队的研究项目,转移到研究组(并最终成为上述的2、3或4)。

    成功研究的定义

    在我们看来,如果一个研究项目有学术或商业的影响(impact),更理想情况是两者兼备,那么项目是成功的。具有商业影响的研究项目显而易见是容易得到支持的,但是靠学术影响力的项目在不同的公司,或许道路就会更坎坷一些。

    Google研究的方法

    Google’s approach to research is iterative and usually involves writing production, or near-production code from day one.

    为什么优秀开发者进入Google后就不参与开源了

    很多优秀的开发者在进入Google之前都是非常活跃的开源贡献者,但是进入Google之后往往就销声匿迹了,包括嘲笑了此现象的Memcached 作者Brad在进入Google之后也无法逃脱此规律。Brad在最近一篇文章Contributing to Open Source projects谈到相关原因

    • 许多优秀开发者都很喜欢编程,他们喜欢研究有趣有挑战的问题,并不特别在意这些项目是否开源。
    • 大家都太忙,Google似乎用尽了每个人的空余时间。并不是说Google强迫大家一天到晚都在干活,而是由于Google里面太多有趣的东西做了,Brad经常挂在口头一句话就是“现在手头有7个属于20%空余时间的项目”。
    • Google的开发环境太好了,源代码控制,build系统,code review工具,debugger调试工具,profiler调优工具,submit queues, continuous builds, test bots, 文档以及所有相关的自动化工具及流程非常完善。因此很容易hack任何项目,在任何地方,或者给任何人提交patch,并且值得一提的是,很容易找到对应的人或者list去提交patch。通常说来,提交patch是参与特性讨论,表达诚意的最好方式,即使你的patch是有问题的。

    从上面尤其是第3点来看,Google确实是技术人员的理想环境。

    从技术角度看Google Wave

    由于Google Wave还未上线,目前了解Google Wave最佳方式是观看youtube上的演示视频或者官方Lars Rasmussen写的Went Walkabout. Brought back Google Wave。本文重点从技术角度谈下对Wave体会。(注意此文部分链接由于GFW原因国内不能访问,并非写错地址。)

    一、总体概述

    Google Wave它并不仅是一个前端的产品,它的整个技术可以概括为3P组成

    Product

    http://wave.google.com/ Product可以理解成Wave前端,基于HTML 5构建,从演示看可以运行在 Google Chrome, Firefox, Safari上。

    Platform

    http://code.google.com/apis/wave/ Google Wave的开发平台,目前可以进行以下类别的开发

    • Extensions: 构建扩展,Google也称它为robot,比如在视频演示中的拼写检查、Google search集成、Twitter Wave扩展等。可以将各种互联网应用导入以wave document方式呈现及交互。
    • Embed: 嵌入,可以将wave嵌入到web应用,嵌入的Wave具备wave的基本特性,比如显示实时更改。视频中演示了将wave嵌入到blogger.com中作为一篇文章。

    Protocol

    http://www.waveprotocol.org/ 目前的Wave协议为基于XMPP core的一个扩展,但是它也只是一个扩展而已,并没要求双方服务器完全支持XMPP特性,就是Wave服务器并不需要支持XMPP的presence, message协议。(XMPP与Wave相关介绍可参看我的另外一篇文章Google Wave与XMPP)

    总的说来,Google Wave整个体系将会是开源的,就是说每个公司都可以架构自己的服务器及前端,如果拿邮件系统来比喻的话,Product等同邮件前端webmail, Platform就是webmail各种插件,protocol就是SMTP/POP3/IMAP协议。

    二、HTML 5 及 Google Web Toolkit

    html5

    上节介绍Product即前端是基于Google Web Toolkit来实现,印象深刻的有几点

    • Google Web Toolkit是用Java代码来直接写前端,并不需要直接编写JavaScript,可能会影响以后前端的开发方式。有点类似n年前当VB/Delphi出来之后, 程序员基本就放弃了使用Windows SDK去写普通界面
    • 一次编写,跨浏览器,可运行在Chrome, Firefox, Safari上
    • 特性丰富,在浏览器里面完成了很多一般认为是不可能在浏览器完成的任务,再看完演示之后,你可能不敢相信它是通过浏览器完成的。图片可以直接从桌面拉进conversation, 由于需要网络传输,对方会看到逐渐加载新拉进的图片,但也几乎是实时的。(由于HTML 5暂不支持drag and drop,暂时通过Google Gears完成。)
    • Google Web Toolkit同时支持iPhone, Android两种Mobile终端。据Lars Rasmussen介绍的经验,使用GWT增加Mobile支持只需要增加5%的开发工作量。
    • 因此Tim觉得browser based也是手机应用的一个方向,而不是写无法跨平台的各种终端本地native应用。一个证明就是Google latitude for iPhone 已经不考虑native实现了,而是采用支持HTML 5版本的Safari。同时Android平台也在尽量让浏览器支持这一特性,TechCrunch这篇文章介绍如下

    Thanks to HTML 5, Safari will be able to access a user’s location information and Latitude will be able to access that as well (provided the user gives permission). This will put it on par with what Google is doing in its browser for Android. (原文)

    • 那大部分Mobile应用,比如SNS平台,SNS扩展应用,电子商务应用(如淘宝)也完全可以基于浏览器去实现。

    三、Wave是一个Realtime应用平台

    由于传统场景比如多人实时编辑相关介绍已经较多,这里介绍些不同的思路,先看两个图片

    国际象棋

    Google_Wave_inbox_chess

    数独游戏

    sudoku

    这是一个运行在Wave中的Gadgets,需要说明的有

    • 只是2个普通的Gadgets, 但是Wave让它具备了多人参与及realtime显示的特性。
    • Gadget本身不需要考虑为Wave作任何改造

    因此个人认为这种技术可以更扩展应用在SNS扩展平台,Web Game等领域,软件的实时通讯功能由平台来提供,软件开发将会更简单,更容易实现大规模的部署及运营。