晨跑尝试

回想大学前两年是要求晨跑的,不过是看作一项折磨,每天眼睛没彻底睁开就骑车到晨跑的地点昏昏沉沉跑两圈刷卡走人,痛不欲生,此时回去睡的回笼觉是最舒服 的。不过一天的精神也就毁了。大家对晨跑都颇有微词,例如晨跑是给食堂早餐创收的阴谋论,晨跑毁一天的科学证据都在那时尚不是空城的人人网疯转。也有一宿 舍每天派出一人晨跑刷六张卡的田忌赛马策略。

最近晚上没时间跑步,精神状态不佳。于是尝试了两天晨跑,的确对当天的精神状态有帮助。

前天是第一次跑,早期有些头疼,空气里有些霾,迎着头皮跑到家附近的运动场,绕着外圈跑了两圈后回家。昨天再次尝试,状态好了不少。跑完的感觉是白天干活不犯困,注意力比较容易集中,对咖啡的念想不是特别厉害,工作效率也听高的。

今天早晨看了空气质量较差,懒病发作没有跑。现在做了半个小时PPT有些犯困,开始翻手机闲逛,渴望中午的咖啡。明天打算继续跑。

研究者与开发者的代码

计算机学科研究者和软件开发人员都会编写大量的代码,但这是非常不同的。从目的来讲,前者通常是面向计算结果的,服务对象就是自己;而后者大多是面向使用者的,虽然使用者可能是外部用户,也有可能是公司内部人员(所谓in-house programmer)。

如前所述,作为研究人员,一段代码的存在意义是计算结果,并且通常情况下只需要那一批结果。所以首要目标是快速写出代码,所以各种快速编程语言在研究者中非常流行,如Matlab, python等。

另外一点不同是研究人员并没有自己的产品经理(PI也许算,但是不太会给予具体实验层面上的指示),并且每个小时都会有新的需求。造成研究人员写了大量代码,其中大部分自己也不记得是用来干什么的。删除怕以后要用,不删碍眼占地方。

这种状况的一个结果是代码质量相对较低,当然这并不是绝对的。研究人员的代码并不像他们的文章那样经过同行评审,而大多数开发人员的代码都会经过同时的code review。所以平均来讲,研究者的代码无论在正确性、可读性、执行效率方面都会逊于公司开发的代码。这也一直被人诟病的一点。

有效缓解这种问题的方法之一就是公开代码。优秀工作公开代码必然会被千百人复用。对于研究者来说,这是检验自己代码、证明自己工程能力的好机会;对于使用者来说,这可以降低增量工作难度;但是公开代码也有可能面临被人发现问题、未来工作被人抢先一步等等问题。

服务扁平化与主成分分析

最近试用了一下七牛的云储服务,甚至没有登陆服务器的概念,通过一些网络请求,就完成了存储和访问的功能。说是试用,其实只是了解一下,我个人并没有什么需要用到云存储的项目。

不得不承认,这对开发者来说是一个很方便的服务,它把一个典型应用中非常重要的一部分抽离出来,作为一个使用简单的黑箱工具,并提供了非常稳定的服务质量。以往开发者可能需要根据应用本身的需求,搭建磁盘阵列、寻找合适的管理软件、部署到各ISP的机房等等。而一旦服务被抽离出来,开发者只要通过API接入,不必担心具体的实现、性能,因为这些都有专门的保障。这是此类服务的第一个好处,简单。

第二个好处在于成本的降低,用多少资源支付多少钱。这在自己负责一切的场景下也是不可能的。这样的服务收费将开发入门门槛降得很低。

事实上现在有很多这样针对企业级的开发服务,包括存储、加速、图片内容鉴别等等。这些服务的共性在于抽取了市面上很多应用必须完成的功能,提供简单、可靠、廉价的替代品。以统计学习中的主成分分析来看,就是寻找应用中最大的共性(当然也是最大的开发痛点,反正都是痛点),提供简单可靠的替代品。例如大家都要部署服务器,那就干脆买下很多高性能服务器,作为VPS对外提供,用户可以选择虚拟的硬件配置,点击确定之后连系统都安装好了,只管登陆就是了;然后需要第二大的共性。例如提供简单的存储服务等等;更加精细化的服务可以是针对内容的图像识别、文本鉴别等等。