• Feeds

  • Archive for March, 2015


    工程师效率

    很好奇程序员这个群体这些年效率是变低了还高了,在社交媒体中,各种各样的段子会让你笑cry;各个兴趣圈都有一大堆内容帐号,其源源不断产生的内容可让你享受阅读的快感。这些快感会比写代码见效快。

    但是完成一个模块的代码通常要一整天或者好几天时间,中间最好还不能间段,最终只有运行没有问题才会体验到愉悦;几年前也曾经实验过,让工程师在编写代码时候,如果被各种事情打断(比如产品汪来访),就在身边一张空白表格标注一下,结果一天被打断十几次是很正常的情况,而工程师被打断一次,通常需要5-20分钟才能恢复回原来任务正常的状况。

    而社交媒体只需要一些碎片时间就可以达到高潮,等电梯不到一分钟的时间也会让你有机会对着手机傻笑,相较之下高低立判。而据说这种让大脑愉悦的神经元连接方式一旦新连上就非常稳固,最终会欲罢不能。当他在写代码的时候,大脑会下意识的切换任务去刷下微博及朋友圈以便得到放松及愉悦,而coding时被别的事情打断的创伤更是需要一些补偿来抚平。只要不是最后交付关头,这些效率的损耗无从统计,往往连自己也无法得知。

    但在另外一方面,社交媒体促进资讯流动加快,在一定程度上促使行业中优秀软件的复用程度提高。几年前还记得NoSQL遍地开花,每个公司都有一个自己的PHP MVC框架。慢慢的跟社区版本一比较之后,百花齐放的现象就慢慢消停了。最近在看一些技术会议的slides,发现大部分内容已变成各种开源软件的选型技巧了,不知是否矫枉过正了。协作程度的提高,也可以视为软件已经逐渐迈向工业社会,有了真正意义的上下游,形成了分工与合作。从这个角度来讲,工程师只需要在自主研发还是拿来主义之间做个选择题,从整体的角度来说,研发效率就得到了提升,视野的提升弥补了coding下降带来的效率问题。

    但这也带来一个群体智商下降的问题,大前研一在《低智商社会》中提到

    这样导致的结果是,时下流行语中对社会问题所定义的“中低阶层”的范围在不断扩大。所谓的“中低阶层”,就是指身处其中的年轻人对工作和学习都缺乏兴趣,而这种兴趣的缺乏加剧了中产阶级社会的崩溃。

    随着信息化社会的高度发展,人们对手机和互联网的依赖度越来越高。在这种情况下,年轻人的思考能力和交流能力面临日趋下降的危险。甚至有种说法称,当代年轻人只关心自己周围3米以内的事情。

    当然,“智商衰退”并不仅仅发生在孩子和年轻人身上,连大人们也在做着令人难以置信的事情。比如说,电视节目里一说到“纳豆对减肥有帮助”,他们就会不假思索地立刻去买。第二天日本超市的纳豆竟然被抢购一空。继纳豆事件之后又发生了香蕉的抢购潮。

    当前技术圈情况也差不多如此,一种新技术只要得到宣传,就会一拥而上,把使用新技术当做战绩,各种技术会议充斥着各种新技术使用的技巧的分享。而新技术一旦在国外受到了质疑,技术圈马上就会变得茫然,比如“LinkedIn都不用Scala语言了,那我下一步怎么办?”

    影响工程师效率还有一个因素是来自大公司里的流程,由于“全栈工程师”还没得到广泛的理解及接受,因此不同栈之间新开发的模块存在一个联调的过程,如果他们属于不同的部门,则联调的周期会更长。软件开发完成到上线之前,还需要经过测试部门的测试。由于这些因素,加上人为的一些控制稳定性的制度,即使在代码中加个空格,在一些团队有时需要一周的时间才能到线上。

    大型系统中还存在模块耦合的问题,由于多个模块由不同的人员及部门维护,因此给调试及持续集成带来很大的挑战。不少公司中很多代码只能做到单个模块的测试及集成,由于依赖复杂,测试环境很难搭建,最后只有线上才有一个包含所有模块的运行环境,因此一段代码如果要依赖上下游才能验证正确性,则只有等到上线后才能判断是否存在bug。当环境逐渐退化到这样的境地,效率自然就无法保证。

    InfoQ 8周年的一次活动

    不是所有人都注重生日的仪式感,一个人发展顺利时候,庆祝生日固然心情愉快;发展遇到瓶颈,又或者到了而立之年不惑之年,还没有和榜样一样步入人生巅峰,生日的仪式会无形中变成压力,暗示你时间的飞逝。

    InfoQ自进入中国以来,一直在专业领域有良好的口碑,8年在技术传播方面作用不可估量,InfoQ的大会参会人员越来越多,演讲的质量尤其是本土讲师的效果越来越好。上周末InfoQ举办了8周年庆“坚持与梦想”,活动选在中关村创业街,也是挺应景。据说整个2014年,大约有200个团队在这条街上拿到接近10亿人民币的投资,不过那是另外的故事了。

    活动安排是周六下午1点开始,北京正是一个雾霾的沙尘天,提前几分钟到,算是比较早的。接着到来的是守时没吃午饭匆匆赶来的的左耳朵耗子。几年来每次见到耗子都能听到一些惊心动魄的故事,在他还在Amazon的时候,一次过去交流,听他讲述由于某条微博而被网友人肉的故事。几年后在QCon分享,故事则变成了绩效3.25的历程,今天则围观了大牛介绍最近在微博种种吐槽背后的前因后果,火气也是有原因的。

    infoq anniversary

    活动是邀请制的,大部分嘉宾是历年QCon活跃面孔,包括一些平时已经不太露面的社区传奇人物,大约2点才正式开始。开场则是霍泰稳(Kevin)介绍了InfoQ中国8年的历程,并且选了一些行内的创业公司,讲述他们与InfoQ的关系以及一起成长的故事。Kevin去年创建了极客邦科技,将InfoQ中国的业务收购了,因此如果大家最近参加InfoQ各种活动,会留意到背后是极客邦的logo。

    后面是InfoQ社区编辑的分享,自称“技术圈交际花”的@程显峰-Mars,以前参加MongoDB的会议时候经常看到他的身影。MacTalk池建强老师,讲述8年中,从一开始在InfoQ社区翻译文章到成为InfoQ中国的顾问合伙人,Kevin及InfoQ背后有个神秘的顾问群(包括著名的微信三贱客)在一直在出谋划策鼎力支持。另外一位青云创始人兼CEO黄允松(Richard)分享了他创业及在IBM工作时候的一些感悟。Richard虽然也是个技术人,但是脱口秀的能力挺值得学习,不知道是在IBM做专家还是最近做销售练就的口才。在台下时,又听他爆料说青云2014年烧了几千万不过只亏了几百万,这在云平台这种投入非常大的公司已经非常不易了。另外说青云的系统目前重点不是互联网用户,不过未透露原因。

    中国合伙人中佟大为老师扮演者,真格基金和新东方联合创始人王强老师(电影中泡洋妞那位大哥)精彩分享。新东方老师的演讲能力确实一流,只记下了 他谈到分享的真谛,“每一次上台,你都要当做第一堂及最后一堂来讲”,只有这样的心态,演讲才会真正让自己及听众满意。

    压轴的是社区领袖代表传奇人物霍炬,自称”自己做的事情都失败了,帮别人做的事情都成了”,讲了他最近几年做的系统与老外PK的故事,这几年完成的几个系统,包括在国内打不开的纽约时报中文网。离开北京之前,霍炬在圈内也是一个传奇人物,据说当年许多进京的朋友都会去找霍炬拜山头。不知道几年后从加国回来,再次漫步在中关村创业街头,看着周围都是陌生而又年轻的陌生面孔,是一番怎样的体验。几年前在华东某个活动上,曾经碰到霍炬的太太西乔,尽管看过无数期程序员杂志西乔的漫画,被美女问到是不是在哪儿见过时,被我肯定的回复应该不认识,又被霍炬糗事重提了。

    台下也见过一些朋友,有些也是三五年不见的,但由于社交网络让大家保持连接的缘故,感觉也并不陌生。活动结束时,外面的沙尘已经散了,北京又出现了难得的蓝天。

    软件领域的Reinvent

    苹果经常喜欢用“Reinvent”这个词,用在硬件领域确实高大上。但在软件领域Reinvent大多时候是个贬义词,软件领域上下游结合及相互依赖非常紧密,没有哪个团队甚至公司能封闭的完成所有事情。因此重新发明这件事情在软件领域并不吃香,一个新的体系在小的团队通常会自生自灭(尽管途中可以获得一些荣誉),剩下那些硬撑的项目则会让参与人员痛苦不堪。

    比如各厂定制的各种百花齐放的框架,运作几年之后,核心系统越来越臃肿,随着人员的更替能深入了解内部的人也越来越少,改进的动作非常迟钝。但大量的上下游业务服务又需要依赖这些系统,新来的人需要较高的成本熟悉整套系统。问题丛生,但是离开又需要付出极大代价,于是就成了一个鸡肋。如果使用方牵涉到多个部门,更不会有人站起来说将这些定制系统废弃或迁移。

    但这个现象在计算机语言领域则是一个例外。一门新的语言,不喜欢的人可以不用,而且大部分开发团队是随大流,不会选用小众语言,所以新语言领域已经在搭建的哪些不成熟的系统也不会给业界带来麻烦及痛苦。少量情况下,极客会心爱的小众语言搭建的一些系统,但根据观察,这些系统通常会随着极客的离职马上会被用主流语言重写替换。因此在新语言领域,可以用更轻松的心态去重新发明各种组件。

    一门语言出来之后,复用另外一种语言的模块与组件不是最佳方案,理想情况会选择构建自己的函数库,框架,开发工具,测试工具,代码工具,性能调优工具等。在新的语言出来的早期,这些领域一片空白,踏入这片领域的人会有新大陆淘金的感觉,随便写点东西,很快可以找到市场。

    在一个新的语言重写一些别的语言已经完成的项目,尽管这不是什么伟大的发明创造,但参与的人往往更快的取得了成绩并且赢得了尊敬(相对于在“主流”语言拼搏那些人)。我也曾经思考过这个现象。技术人的价值观虽然很多元化,但是有两点却几乎是共通的,一是工程师动手创造带来的成就感,二是感受创造的东西给所在环境以及业界带来使用价值的成就感,不管这些创造是原创的还是山寨。因此在很多领域如搜索、广告以及更基础层面OS、Database、Language总是有乐此不疲工程师重新去建设,因此在语言层面的重新建设就变得容易理解了。

    更深层次的来看,在语言层面的基础上,重新去构建一个生态圈,从社区的角度,不只是重新克隆一个新的版本,工程师会考虑以往的经验及教训,重新设计重要的单元,以带来性能上的提升及使用方式上的改进。比如这几天写一个Go语言的小程序,看到Go的社区在配置文件方面的思考及重新选择。配置管理在Java领域大多是XML一统天下,尽管其可维护性较差,但由于历史原因,工程师很难去另起炉灶。

    当然在新OS领域重新创造的机会就更多,但是这种情况较少发生,一个新的OS生命周期会延续10年或更久。一些大公司的开发平台生态圈也有类似的这样的机会,不过大部分情况下格局会小很多,也会存在更大的不确定性。