Subscribe: 乱象,印迹
http://www.luanxiang.org/blog/feed
Added By: Feedage Forager Feedage Grade B rated
Language: Chinese simplified
Tags:
driven 热闹驱动开发  driven  gem  google  unbunlding  举例  到 年、      年、  热闹驱动开发 hackernews  类库 插件  类库 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: 乱象,印迹

乱象,印迹



One more struggle, and I am free



Last Build Date: Sat, 02 Dec 2017 14:33:09 +0000

 



从Excel到微服务

Sat, 17 Jun 2017 14:44:06 +0000

Excel很老,Excel很土,Excel一点也不sexy;微服务新,微服务很潮门,微服务很高大上。那么,Excel和微服务有什么关系? 上个月看了篇文章,The Unbunlding of Excel。作者认为,对于初创公司(尤其是非“纯IT”初创公司)来说,Excel几乎包办各种工作。想要计算?请用Excel。想做轻量级的CRM,可用Excel。建立财务分析模型?还是用Excel。简单的项目管理?当然Excel。数据分析总揽图?仍然是Excel。执行简单的ETL任务?Excel再合适不过了。 Excel真的这么能干吗?从逻辑上说,它是成立的。首先公司里很多业务都是基于数据的,其原型都是对表格的操作,Excel“天生”就是表格。其次,Excel提供了足够弱又足够强的“编程能力”,Excel中的VBA、透视表等等功能对于强大的编程语言来说或许不值一提,但许多对编程语言望而却步的人却能把这些功能运用得无比纯熟,玩出的花样让很多程序员也叹为观止。 更重要的是,初创公司的业务往往是不确定的,业务领域需要探索,业务规则也需要不断修订。Excel虽然没有量身定制的系统那么完善,但成本相当低廉。对初创公司来说,除非自己养着非常厉害的开发团队,系统又做得足够高质量足够灵活,一面猛改一面还保持稳定,否则即便“上系统”,也经常被系统困住手脚,业务反而受到拖累。 如果你觉得这只是“逻辑上”的分析,我还可以给出更现实的例子。 如今很多公司都知道要有CRM(客户关系管理)系统,来处理和汇总与客户之间的问题。业务还没开展,CRM先得买一套或者开发一套,这已经成了流行的思维定势。但是,买来或者开发的CRM,未必能很好满足自己的业务需求,因此踩坑的例子数不胜数。 朋友的一家公司,一开始根本没有上CRM,只要求客服每人每天用Excel把回答的问题记下来,每天晚上指定专人汇总,第二天早上把汇总和更新之后最新的Excel通过邮件下发给所有客服,回答问题的时候就在这张表里用Ctrl + F来寻找关键词。这样的做法虽然看起来很累很烦,却足够简单有效。既不用担心系统死掉大家都干不了活,也不用担心问题分类设定不合理无法录入或者数据格式变化导致的历史数据清洗成本。 等这套流程真正跑顺稳定了,公司业务也足够大了,有时间有资本把已经摸索的客服管理的经验和流程固化到系统里,CRM系统开发顺理成章,上线到投入使用相当自然。 我还见过一家电商公司,因为赶上了风口,业务发展极其迅猛。于是公司也马上遇到了问题,创始人都是做互联网的出身,对实业并没有多么丰富的经验,多地仓库的管理成了老大难,库存经常乱套了。 怎么办?虽然自己有一支小的开发团队,但日常业务已经足够他们忙的了,而且仓储是个专门的领域,即便没做过,专门去看看也知道水很深,何况仓库运营的规则和办法还在不断优化,这时候要做出一套好用的仓储系统,几乎是痴人说梦。然而每次出问题,很多基层员工都会抱怨,要是有系统就好了。 创始团队想到的办法就是Excel,不管仓储规则怎么千变万化,基本的库存管理,无非是入库、出库、盘库等几个动作,数据格式是相对固定的。那么,每个仓库每天干完活,再忙再累再晚,也要把仓储信息按照约定的Excel模版回传到总部,由专人统计合并。这工作说起来简单,做起来可让人叫苦连天,尤其是还有些仓库分布在海外有时差,每天光是统计合并这些数据就得一两天。 既然老大发了话,下面的人有抱怨也不敢发出来,只能老老实实执行。整套流程两三个礼拜,日常的操作基本都不会出问题,要完善操作流程时,也大概知道了该怎么修改表格。就这样边录边改,磨合了大半年,终于把流程基本定下来了。这时候再安排产品经理、项目经理、程序员进场,一看日常用的Excel,数据项、数据项之间的关联清清楚楚,不清楚的地方问问操作人员也立刻可以得到解答。这时候再安排开发仓储管理系统,基本不存在什么领域知识难题,更像是顺水推舟的事情。 仔细观察这两个例子,你会发现,它们的本质是一样的,即在对问题域还不够了解、问题解法还没有彻底明晰之前,需要一种具有一定规范性同时低成本的手段,一方面对现有操作进行约束,另一方面能持续探索问题、完善已有方案。这时候,他们选择了Excel。 本来我看完这篇讲Excel的文章就准备谈点感想,巧合的是,后来又看到一篇“神似”的文章,You are not Google。作者强调的是,别盲目崇拜那些大公司吹得神乎其神的技术,真正重要的是理解你的问题。这个主旨,和上面文章里对Excel的“吹捧“其实是一致的。 你知道GFS和Map/Reduce,但是你知道它们是为了解决什么问题的吗?是为了计算、存储、索引所有的网页(那个时候大概有8000万)。你知道SOA,但是你知道亚马逊什么时候上的SOA吗?那时候亚马逊已经有7800名雇员,年营业额超过30亿美元了。你只知道数据库集群、NoSQL,但是你知道吗?Stack Exchange在2016年,面对2亿的日访问量,只有4台SQLServer…… 好了,现在我要回到题目,说起“微服务”了。 微服务很新,微服务很潮,微服务很高大上。我在面试架构师的时候,很多候选人说到微服务,都可以侃侃而谈,各种新鲜的名词、概念、框架止不住地蹦出来,却没法回答几个问题:为什么微服务会崛起?什么时候应当实行微服务?实行微服务要注意什么?甚至,连微服务与SOA的关系是什么都搞不清楚。 要知道,架构师并不是“框架和解决方案推广落地人员”,他是需要做决策的,软件开发中,架构决策对系统的影响往往是至关重要的,一旦出现问题,后果可能相当严重。所以,合格的架构师对于微服务,不但需要了解现成的方案和概念,更应该真正的问题是什么,决策的依据是什么,然后才能知道,自己的决策是否合理。 在我看来,微服务对SOA既是延续也是更新。在我们谈论SOA的时候,谈得更多的是一种设计理念,它要求脱离软件本身的限制,从抽象的“服务”角度来进行思考和设计。从此,我们可以在更高更抽象的层面上来思考如何用软件解决问题,不再时时处处受到技术的掣肘。然而,SOA谈论了多年,一直没有看到具体的、公认的、合理的落地案例。 许多谈SOA的书里都会讲到一个概念:ESB。希望有一天,软件服务也可以像硬件服务那样,有一条通用的总线,然后各种服务只需要简单接入就可以了。但是这或许只是一个美丽的梦想,真正投入使用的ESB其实相当少。 微服务的兴起,很大程度上对应着我们在探索未知领域、探索未知问题脚步。我们无法全知全能地知道,系统的什么部分、哪个环节,在什么时候会成为障碍或瓶颈,但是,我们又必须迅速地发现这些障碍或瓶颈,解决它们,同时保证整个系统的稳定。把系统拆分为一个个微服务,正是为了解决这样的问题,它让我们可以聚焦在具体部分和环节上,又限制了复杂性,避免了“牵一发而动全身”的尴尬。 仔细思考就会发现,微服务的兴起,也是对ESB思路的颠覆。ESB强调的是“重通讯轻终端”,微服务强调的则是“重终端轻通讯”,数据通讯一般只是通过简单的HTTP进行,终端对于通讯总线并没有特别强的业务依赖。这样确实降低了耦合性,但也对终端提出了更高的要求。 以前大家只习惯于写一点业务逻辑代码,生成几个类库,放到巨大的单体系统里就可以放心了。进行微服务改造之后,你的这点业务逻辑代码只是服务的核心,既然名曰“服务”,就得五脏俱全,既然名曰“微服务”,就得螺蛳壳里做道场。 换句话说,服务必须能独立部署、独立维护、方便扩展。你得在服务的边界清晰和技术限制之间做出权衡,你得搭建完整的监控,你得考虑高可用性,你得选择通讯机制,你得分析负载压力,你还得仔细规划容量…… 身为架构师,一门心思考虑分家,一味鼓吹分家的各种好处,绝对是不称职的:分家过日子当然潇洒,但自己当家却不知道柴米油盐贵,这是绝对要饿死的。 最后讲个有意思的事情,这些年我有好几个技术很好对微服务理解很深刻的朋友,去了创业公司首先做的事情往往都是“技术的倒退”:就这十来个人、七八条枪,还折腾什么微服务?快别扯淡了! 附:原文链接 The Unbunlding of Excel You are not Google



从Uber性骚扰,到IT祛魅

Thu, 23 Feb 2017 05:38:24 +0000

自从滴滴打车和Uber中国合并之后,Uber似乎很久没有进入过我们的视野了。不过就在前几天,它再一次成为了舆论的焦点。 可惜的是,这次Uber成为焦点不是因为正经业务,而是因为性骚扰。按照女当事人Susan J. Fowler在自己博客上的说法,她2015年加入Uber负责SRE的工作,入职第一天她的上司就对她进行明目张胆的性骚扰。当然这还不是最火爆的,最火爆的是,当她选择向更高级领导和HR投诉时,得到的答复是“这个人绩效很棒,惩罚他并不是好的选择”。于是这位当事人面临两个选择:要么去其它团队,要么继续工作,但可能被上司在绩效评定上穿小鞋。 去其它团队显然不是最优选择,因为她是来做SRE工作的,而不仅仅是“加入Uber”。HR说,如果继续呆下去,绩效评定时得分低就不能算“报复”,因为公司已经给过其它选择了。HR并且说,他们也不准备给实施性骚扰的人严厉处分,不能仅仅因为初犯就毁了他的职业生涯。然而后来女当事人发现,这根本不是什么“初犯”,她接触过的很多女性都受到过性骚扰,而且HR每次都表示这是“初犯”。后续的奇葩发现还有很多,比如企业文化活脱脱就是《权利的游戏》…… 最终当事人选择了离开Uber,另寻出路。 当事人在自己博客上贴出文章后引起轩然大波,根据Reddit上的讨论,此类性骚扰在硅谷屡见不鲜。按照《连线》杂志的报道,此类事件都有通用的模式:最早是女员工汇报性骚扰或者歧视,公司无动于衷;然后员工选择上网爆料,媒体跟进;接着公司承诺调查,有人因为丑闻辞职;最终,行业现状并没有改变。《连线》杂志列举了Github, Google, Squarespace之前发生性骚扰的例子,并且指出,这种现象不仅限于创业公司。在这些IT公司,HR往往过分看重“绩效”和“生产力”,既没有意愿也没有能力来约束员工的道德。文章最后问:在硅谷,“好工作”意味着什么呢?光有大笔期权、免费食品、桌上足球,明显是不够的。 我不知道大家看完这些资料是什么感受,我的感受很意外。第一重意外是Uber这样外部看来那么人性化、锐意进取的公司,内部竟然也有这样的问题;第二重意外是当事人向更高级领导和HR汇报之后,公司一面推脱处理,一面为保护员工而撒谎说是“初犯”;第三重意外是原来这样的情况在硅谷并不是孤例,而是有通用的处理模式;第四重意外则来自不少的反应——“是人就有七情六欲”,“有人的地方就有江湖嘛”。 不过,或许这些意外都不应当是意外,就像很多人说的那样,“见怪不怪”。但我还是想说,在我的记忆里,以前IT公司的形象不是这样的。 我自己亲身经历过上世纪八九十年代社会大众对IT(当时主要还是“电脑”)接受和认知的过程。与其它产业相比,IT天然就是带有光环的。就我所见,普通人虽然不懂细节,但大都认为,搞IT是和按规矩办事、尊重能力、“知识改变命运”等等相联系,是与“世界前沿”接轨的,自然而然戴着光环。所以有了高额的回报,大家也认为这是“理所应当”的。如果是做传统生意,哪怕赚的钱更多,形象总是不如搞IT的。 那时候IT从业者也颇有些道德洁癖。在国外,比尔盖茨写的《未来之路》引起了很多反响,大家起码相信他“有资格”谈未来。在国内,刘韧有本著名的作品叫《知识英雄》,大家起码觉得他们配得上称为“英雄”。我记得十多年前刚工作时,有同事跟我说“相比其它行业,IT是最干净的”,大家都相当认同,为之庆幸,也引以为荣。 如今十多年过去了,IT行业已经天翻地覆,但社会大众对于IT的这点美好的期望似乎仍然存在。我去年就魏则西事件批评百度时说过,如果李彦宏整天和煤老板、莆田医院老板厮混,指责百度的人肯定会少很多。然而,大多数人都觉得李彦宏不应该是和煤老板、莆田老板一个层次,起码李彦宏说“重振晋商文明”就比煤老板说“重振晋商”更靠谱,这就是期望的自然表现。 然而,期望是当年的期望,人却不再是当年的人。从最近几年的IT行业的气象来看,它越来越像风波诡谲的江湖,越来越像尔虞我诈的名利场,大家再没有什么理想、文明、道德的色彩。普通人可以理直气壮地喊出“不要拿道德绑架我”、“公司赚钱不由道德评判”、“法院没判就不能说我错”的口号。即便不是专门的公关人员而只是普通的员工,在黑白分明的是非面前,他们也不愿意保持沉默,而是要绞尽脑汁、声嘶力竭去辩护甚至是狡辩,这活脱脱就是“人在江湖漂”的真实写照。 对于技术本身,大家不再把它和知识、文明挂钩,更多把它视作一种单纯的能力。学会驾驭这种能力,把它施展到自己想要的地方,就可以攻城拔寨、所向披靡。于是,绩效和生产力才被看得那么重要,“天下武功唯快不破”、“增长就是合理的证明”,所以对高绩效员工的惩罚自然困难重重。相比之下,道德靠边站就是必然的选择。噢还有,别忘了“技术中立”,这可是豁免批评的不二法门。 别误会,我并不是说IT不好,我也不是说IT比其它行业更差。回顾过去,我想说的只是,现在是时候给IT祛魅了。对现在很多人来说,IT就好像这样的管道:一端是大笔期权、拼命干活、免费食品、各种福利,另一端是更高效、稳定、公平的服务。看起来无懈可击,但现在的一系列事件已经掀起了这层美丽传说的盖头:其它行业有的毛病,IT都有,而且相当多的人觉得应该都有。那么对外人来说,传统遗留下来的美好想象应当抛弃,对“硅谷公司竟然也有性骚扰”不要大惊小怪;对内部人来说,既然大方承认自己和其它行业没什么不同,那么和其它行业一样接受严格的监管和约束,或许是迟早的选择。 只是,这样的IT,真的能把我们引领到美好的明天吗?



古诗文不是看上去那么美好

Thu, 16 Feb 2017 01:17:24 +0000

很久没有看电视,最近才知道央视的《古诗文大赛》成了热门,结果也引起了不少讨论。古诗文大赛我没看,冠军的情况我也不了解,所以不评价。不过身为一个对古诗文一直有兴趣的票友,我挺愿意讲讲自己对古诗文的看法。 古诗文大赛结束以后,社交媒体上有一种论证“古诗文有用”的论调流行开来,那就是:你看到江山春色,如果你懂得古诗文,你就会背“日出江花红胜火,春来江水绿如蓝”,如果你不懂古诗文,你就只会说“真他妈的漂亮”。类似的场景堆叠起来,就能证明懂古诗文很重要。 这种论调看来相当有道理,因此很多人转发,但它是有问题的。 有什么问题?假设我们自己身临其境,眼前就是那些美景。这时候最重要的是什么?恐怕不是去背诵甚至附会几句古诗文,而是去真切感受和体验这种美,得到身心的愉悦。 “真他妈的漂亮”当然不好,因为它不高雅,煞风景。然而更重要的是,这样的表达太粗疏,缺乏对美的细致、具体的感知,丧失了丰厚和立体的感觉。试想两处美景,一处是“星垂平野阔,月涌大江流”,一处是“日出江花红胜火,春来江水绿如蓝”,看诗句我们当然知道它们都很美,但是截然不一样的美。但如果只会说“真他妈的漂亮”,就分不出来到底有什么差别。 进一步说,“真他妈的漂亮”这种说法看起来简单直接,问题也正是因为这种简单直接。因为简单直接也意味着单调苍白,没有了细致的分寸,只有“越来越强烈”一个方向。这就好像吃多了重口味的菜,反而觉察不出食物的原味了。 所以,要想细致、具体地体会美,要想获得丰厚立体的审美愉悦,就必须脱离简单粗陋的表达。但是,是否就必须依靠古诗文呢?不是的。千百年来人类对于美的描绘,对于审美的记述,对于思绪的表达,是有万千种方式的,不仅限于古诗文。 海明威在《老人与海》里对于老人黎明出海的描述堪称丝丝入扣——黑幕里船桨划破水面的声音,飞鱼从远处飞起在近处落水的声音——读过之后我有几次在水边、在海边想起,这种感觉未必比不上背诵古诗文,甚至可以说这种比较是没有意义的,因为古诗文里没有这样的描写。 还有莫奈的《睡莲》,虽然我之前在各种美术书上看过很多解读,但看到真迹的那一刻,我觉得那种美直接地、赤裸裸的传达过来,瞬间震慑了我,所有的解读都显得苍白无力。以后在晨昏看到类似的美景,常常会想起莫奈的《睡莲》,想起他对于光与影的独特视界。有这种经历,会不会背诵古诗文,丝毫不影响我对于美的体验。 当然,我并不是要否认古诗文的价值,只是不赞同把古诗文的价值“矮化”到看到美景能背诵的程度。我们应当清楚,重要的是让古诗文帮我们丰富对美的感觉和认知,而不是把我们对美的认知装进古诗文的描述里。或者说,不是要“我注六经”,而是要“六经注我”。 可惜的是,单纯的背诵古诗文,必然达不到“六经注我”的目的。我们都知道,唐朝著名诗人贾岛花了很久时间思考“鸟宿池边树,僧敲月下门”还是“僧推月下门”,最终才得到解释。如果你单纯背了一堆古诗文,却答不上来甚至根本不知道、没想过这个问题,那这种背诵基本没什么用,甚至是相当可悲的。 这也是我的现身说法。从小接受的教育里有很多古诗文的背诵,“熟读唐诗三百首,不会作诗也会吟”的说法也相当流行。但是这些古诗文的价值到底在哪里呢?好像就是一些神奇的词句组合,一些感怀。虽然摇头晃脑能“找到点感觉”,但始终也只是“有点感觉”。诗文的高下如何判断,名篇有没有缺点,我们怎样能做得更好?这样的问题,从来也没有人解答过。 后来我读到了陈望道老先生的《修辞学发凡》,看到他对于古人文章的评论,才知道即便是“文起八代之衰”的韩愈,流传的文章其实也是有瑕疵的。后来又看了叶嘉莹先生、顾随先生对于古诗文的讲解,尤其是在古诗文的世界里纵横捭阖的讲解,有豁然开朗的感觉,好像终于看懂一点门道。再后来看到王鼎钧的《古文观止演义》,看到他对于各种名篇的评价,又有新的感觉:我之前竟然没意识苏轼的《后赤壁赋》是层层递进的结构,《岳阳楼记》是通过巧妙对比来引发慨叹亘古不变的道理。这些篇章我之前背诵过,但没有人引导和指点,就很难体验到其中的美。 每次谈到这些前人积累、专业门槛,就必然有人说这样有门槛,掉书袋不自由。但这也是不对的。既然涉及到“美”,这种评价就没有绝对的标准。比如杜甫的《江南逢李龟年》,顾随先生就觉得这首诗写得一般。但是听过梁文道在《一千零一夜》里把杜甫的境遇和诗中的典故细细道来,读这首诗的感觉又有不同,更深体会到沧桑隐忍的味道。这是对美的更丰富细致的体验,同时丝毫不影响我们从顾随先生对古诗文的评价中收获启发。 最后我想说的是,用心读古诗文还可能是有“副作用”的,需要有心理准备。 要知道的是,中国古代的“文”并不是今天我们所说的“文学”。虽然周敦颐才提出“文以载道”对说法,但长期以来,中国的“文”就承载了各种价值和希冀。前面提到了韩愈,我们都知道韩愈、柳宗元倡导了古文运动,影响一致持续到清代。韩愈、柳宗元反感的是魏晋以来单纯追求繁复华丽的文风(这正是今天很多人背诵古诗文所欣赏的);他们所提倡的,不但有自然、平浅、质朴的文风,更有对儒家学统的回归。什么是儒家学统?简单说,就是不只有“为学习而学习”,还有对价值的追求,不只有“学而时习之,不亦悦乎”,还有“吾善养吾浩然之气”的慷慨坚定。 然而在当下的世界里,对学统的追求或许并不是那么受欢迎。不信的话,看看如今那些古诗文讲得头头是道的家伙们,谁身上有一点浩然正气的影子呢?



我和历史系的缘分

Thu, 02 Feb 2017 11:34:31 +0000

在上大学之前,我从没想过自己会与历史有关系,因为对历史根本不感兴趣。在我的认知里,历史是和地理一样,需要死记硬背的学科。而真正重要的是理科。那时候大家都知道一句口号:学好数理化,走遍天下都不怕。 虽然高中阶段分理科分班,但无论文科还是理科,大家都是在混乱和兴奋中度过的,许多经历今天想来仍然觉得不可思议。比如寒暑假一补课就有人举报甚至上电视新闻,比如高三了每天仍然只能安排六到七节课,比如到最后一学期毕业年级的老师为了反对学校的某项安排集体罢课一周…… 高考之前,学校放假让大家回去好好调整,用最好的状态迎接考试。我和几个同学跑去电脑房(当时还没有“网吧”)打Quake3,吹空调到有点感冒,急坏了父母。要考试了,相当多的人还和上学一样,自己骑自行车去了考场,有些家长在学校附近包了宾馆的住房,我们都觉得不可思议。 结果成绩出来,其它科目还算发挥稳定,唯有数学从模拟考试的140多分直降到88分。虽然比重点本科录取线高出接近40分,但第一志愿没有上,我还记得妈妈听到这个消息当即就站不起来了。然后就是心急如焚地地打听消息,等各种安排,尤其是看到其他家长大显神通弄到“机动指标”之后欢天喜地,更是焦急万分。 幸而有天忽然来了消息,211高校东北师范大学在我省没有录满,收服从分配的考生,可以保证专业对口。于是,我就这样跨过长江,跨过黄河,跨出山海关,来到了长春。 专业是我心仪的计算机,学校却是我没想过的师范类。那时候同学通讯还得靠信件,每次收到同学们寄来的印着各种“工业大学”、“理工大学”字样的信封,都觉得羡慕又无奈。加上大一的很多基础课程是为从未接触过计算机的同学开设的,对我来说味同嚼蜡,失落的感觉就愈发明显了。 不过很快,我发现了不一样的地方。比如学校的公告栏里总会有各种讲座的通告,尽管这些讲座并不是理工科的,但题目也相当吸引人。有一天我看到历史系的讲座通告,题目只有四个字:希腊精神。“希腊精神”,希腊能有什么精神呢?我只能想起一些希腊神话,再有就是毛主席在反对党八股时说的:言必称希腊。无论如何,且去听听他们能讲出什么花来吧。 那时候的教室都很传统,长条形,长方凳。黑板上写着四个字:希腊精神。主讲人姓周,三十来岁年纪,当时应该还是讲师。虽然是课余讲座,但信息饱满、激情澎湃。一方面按照希腊的历史展开,另一方面又分文化、政治、军事几条线分别叙述。梭伦、伯里克利、诡辩学派、温泉关等等名词,都是我第一次听说。尤其是把不同的主题串联起来的讲法,让我感到非常新鲜——在讲到希腊人热爱运动的时候他忽然问:为什么镇守温泉关的只有三百勇士?看到下面没有人回答,他才给出答案:因为其他人都去参加奥林匹克运动会了,所以我说希腊人热爱运动嘛。 还有两个片段讲得绘声绘色,让我记忆至今。第一个是讲波斯国王大流士问一个被俘的希腊人:你看我驱使的百万大军,什么时候能踏平希腊?答案是:你永远不可能得逞,因为你的大军只是努力,只要你体验过自由的滋味,就会付出生命的代价去保卫它。第二个是讲到普罗塔哥拉的名言“人是万物的尺度,是存在者存在的尺度,也是不存在者不存在的尺度”,本来已经用若干例证烘托,再加上和“存天理、灭人欲”的对比,印象就更深刻了。 讲座听完不过瘾,还有提问环节,整个提问环节的气氛也相当热烈,哄堂大笑也是免不了的。提问环节之后,还有机会——那个年代私车还不普及,很多老师都是走路上下班。所以讲座结束之后,我追上主讲老师,一边聊一边陪他走出校园。说来奇怪,我们完全不认识,他也不因为我是理科院系的就见外,也不因为不认识我而有戒心,而是一路走一路讲,所以我听到了与《新闻联播》完全不同的关于南联盟和科索沃的故事,他听我说看过威尔·杜兰特的《哲学的故事》,便推荐我去看威尔·杜兰特的《世界文明史》,我记忆至今。 那个晚上过去,整个世界有焕然一新的感觉。后来我便时常留意历史系的讲座,那段时间历史系的讲座开得也确实多,每周都有一到两个晚上安排讲座,所以我一遇到就放弃晚自习去参加,也确实受益匪浅。 有次讲座是一位老教授讲明代史。因为我之前看过了黄仁宇先生的书,所以讲完我举手提了三个问题,他的答复却是:“你的三个问题一个一个说,我的脑子容量有限,一下子记不住三个问题,只能一个个来。”往常我也遇到过这样的场景,也有不少人会想一些“体面”的办法引导提问者一个个提问题,但身为教授,能够在学生面前坦率承认“我能力有限”,我却是第一次遇到。那一刻我忽然发现,坦率承认自己的局限并不会让自己丢脸,反而会获得更多人的尊重。 在回答我的问题时,他问我“1453年发生了什么”,我答不上来,现场也没有人能答上来。老教授于是朗声道:“同学们,大家学习历史,这些年代应当熟记于胸,这样你才能把各种历史事件串起来,你的知识体系才是立体完整的,不是一堆碎片”。之后他如数家珍一般报出一连串事件:1453年东罗马帝国陷落,1492年哥伦布横渡大西洋,1588年英国打败西班牙无敌舰队……并把这一系列时间点串起来,每个时间点又连贯到东西方世界的进展。这时候我才第一次知道,原来记住历史事件年代的意义是这样的,它的重要性与应付考试没有丝毫关系。许多年后我看《停滞的帝国》,作者评论说中国人讲到历史有个奇怪的习惯,用朝代而不是公元纪年,这样很不方便建立横向的对比联系。那一刻我真是心有戚戚。 还有一次讲座是崔丕教授(他的名字很独特,讲座也很独特,所以我记住了)讲的,题目应该是《从NSC解密档案看冷战史》。崔丕的讲座和“正经”的老师都不一样,谈笑风生让人颇有好感,吞云吐雾又凸显离经叛道,奇怪的这两种风格重叠起来,就成了潇洒自如。那次讲座刷新了我关于“冷战”的很多认识,而且早早就知道了NSA(国家安全局)和它的前身NSC(国家安全委员会)的来龙去脉(很多人可能是斯诺登事件爆发之后才知道)。听完讲座我才知道以前那种“人格化”(把国家比作个人,用拟人化逻辑来解释国家决策)的做法是完全站不住脚的,政策的出台总是要经历各方力量的复杂博弈,而且最后未必能起到预期的效果。 在讲座之后的问答环节,有不少学生因为讲座的内容和之前的教育差别太大,所以“出于义愤”提出问题。今天看来那些问题都很小儿科,但崔丕都很耐心地讲解和启发。比如谈到朝鲜战争到底是谁开了第一枪,他不纠缠这些细节,而是启发大家去思考,谁开了第一枪不是问题的关键,战争爆发后哪放大肆攻城掠地证明哪方早已经磨刀霍霍了。再讲到朝鲜战争的细菌战问题,我国的核武器研制计划等等问题,无一不是自信地侃侃道来,而且有根有据,不由得你不信。学问做到这个程度,我们这些愣头青只有羡慕和叹服的份。如果说上大学之前单纯的我们还只知道要“懂得多”的话,听过讲座就明白了光是“懂得多”是不够的,还得懂得深,懂得真。 这次讲座还有一大收获,就是听说了靠解密档案研究历史的“历史个体户”沈志华(沈志华的系列著作确实帮我们理清了很多历史疑难)。实际上每次听讲座都是如此,不但了解一个全新的主题,还可以由此发散出去,得到四面八方的线索,指引后来的阅读。 除此之外,听讲座还会遇到思维方法和学术规范的挑战。那时候我经常看《读书》杂志,有几次尝试拿杂志上的文章去挑战主讲人的观点,但几乎每次都败下阵来——但绝不是被斥责,而是在更丰富的信息、更深刻的思考面前败下阵来。这样的经历多了几次,我慢慢领悟到,对单个事件,往往要了解、比较两三种不同的观点,才有相对客观的认识,研究历史事件,二手材料很可能是靠不住的,一手材料才真正重要。学校图书馆开放阅览以后,我花了一周时间,把57到60年、66到69年、89年的《人民日报》都浏览了一遍,以后再看很多分析文章,感觉果然大有不同。我也因此早早看透了网络上唇枪舌剑的辩论,激情含量高,信息含量低,花精力在这上面着实可惜。 当然这类道理不只限于历史,其实对任何学科、任何知识都适用,或者说这是普遍的学术规范。后来即便是IT相关的知识,我也会本能厌恶不经考证的转载,或者人云亦云的传说,而是更希望找到原始出处再仔细考察,也确实因此避开了很多伪知识、假信息。有意思的是,这种习惯的养成竟然不是来自理科的训练,而是文科的教导。 我回想这段经历,更希望感谢也觉得幸运的是,单纯又好奇,积累却是一张白纸的年轻人——尽管后来对历史发生了兴趣,但终究是三脚猫的票友——没有听到片面偏激的表达而误入岐途,反而因为见识到学术风范而保持了认真平和的态度。我时常庆幸自己赶上那个学风淳朴扎实的年代,老师不像老板,学生也不像下属;讨论问题几无禁忌,大家可以热情、信任、平等的讨论,没有人因为错误被指出而恼羞成怒,也没有人玩深文周纳的把戏。如今再去学校听各种讲座,或许是时代已过,或许是大家都有了戒心,总之再也找不到那种感觉了。正因为如此,那段经历才更加让人怀念。 我经常会想起《音乐之声》里的台词:上帝为你关上一张门,就会为你打开一扇窗。这话虽然有安慰作用,但鸡汤味太重。我想说的是,窗子未必需要上帝去打开,我们自己就可以找到,然后见识到一个新的世界。就像很多年前的傍晚,苦闷的我看到了《希腊精神》的讲座通告。



你为什么需要一台智能路由器?

Thu, 02 Feb 2017 11:28:58 +0000

首先声明,这不是广告。 你为什么需要一台智能路由器?这不是品质生活的加分项,而是形势所迫。如果你承认“我的家里我做主”,你应该有一台智能路由器。 理由如下。 1. 你需要自由地访问网络上的资源 不要误会,“自由”并不完全等于所谓“有害”的信息。姑且不论“有害”真的名副其实,官家自己也承认,目前的技术无法区分“有害”信息,只能把孩子连洗澡水一起倒掉。但是很多时候,孩子对我们来说就是那么重要。 我喜欢有固定的闲暇时间徜徉在YouTube的世界里。为什么风力发电机的叶片都是三片?在雨中走路还是跑步淋雨最少?波音787的设计是什么样子?钢珠是怎么制造出来的?橘子罐头是如何生产的?……这样的问题,YouTube上总是有好玩、科学、精致的讲解视频,而且持续更新。至于国内的视频网站,哎,不说也罢。 或许你要说:这类话题,只有一少部分人有兴趣,对大家意义不大。但我看到的是,本来与“政治”八杆子打不着的人,一旦能自由访问网上的资源,幸福感都会加倍:搞艺术设计的看高水平的视频,专心育儿的给小孩看各种幼教资料…… 总之生活的新鲜感和幸福感都大大提升了。 有人会问:在设备上设置好就好了,与路由器何干?但是就我所见,只要亲身体验过在阳光的午后,随手拿起笔记本电脑、手机、平板都可以自由上网的感觉,人人都会爱上它。 所以,你需要一台智能路由器作为自由上网的灯塔。 2. 你需要有可信的网络基础服务 你以为自己没有中毒,没有被安装流氓软件和插件,网络环境就是可靠的吗?错了。网络上的腥风血雨,远远超过你的想象。 知道各大网站都推行的加密链接(HTTPs)的原因吗?重要原因之一就是防止DNS(域名解析)投毒。因为域名解析服务诞生于互联网的早期,发明者的想法非常简单朴实,根本没有预料到后来会有那么多别有用心的人和机构在域名解析上做文章。用我一个朋友的话说:DNS简直要被彻底玩坏了。你的电脑完全正常,但输入一个网址显示出来的却根本不是你希望访问的网站,或者虽然很像你希望访问的网站,其实是李鬼。一些某些人不希望你能访问的网站,不但会被阻断链接,还会把域名解析到根本不存在的地址(比如著名的阿塞拜疆的某个IP)。 为了“正常”上网,我们需要有可信、可靠的网络基础服务。我们当然可以配置在单独的设备上,但设备多了配置起来麻烦,而且移动设备运行这类服务往往需要付出效率的代价。那么还是配置在路由器上,让这些设备“以为”自己工作在正常的网络环境下好了。 所以,你需要一台智能路由器来正本清源,解除劫持。 3. 你需要戒除不良的信息 时下有一种流行的做法,某些“智能”设备先伪造良好的用户体验,获得入户拳,然后通过后门远程升级,变本加利地推送广告。用户投诉,商家还大言不惭地辩护:觉得不好你就不买嘛(问题是买的时候你们不是这个样子呀),我们已经比友商好多了(比下限更能彰显自己的操守嘛)…… 怎么办?伟大领袖说过:要用革命的两手对付反革命的两手。我们的路由器既然能反劫持某些受欢迎的域名,也就能劫持某些不受欢迎的域名。把那些与讨厌的广告、推送、上报有关的网址找出来,一一录到路由器的黑名单里。不管是什么设备,只要连这个Wi-Fi,都是“此路不通”。 所以,你需要一台智能路由器来劫持这些域名。 4. 你需要隔离家中不怀好意的“智能设备” 现在挂着“智能”名字的设备越来越多了,它们确实很聪明,但聪明未必都用在了正道上。如果你能监测家里的流量,就会发现某些“智能”设备非常喜欢扫描其它的设备,把抓到的一切信息统统上报回去。可能你买到的只是一个“智能摄像头”或者“智能插座”,但它悄无声息就记录了你家里有几台网络设备,你家网络存储上有什么文件……然后一股脑儿都上传回远程的服务器,至于服务器端拿着这些数据会干嘛,目前只有天知道。 对于这种情况,单纯劫持域名是不够的,因为不仔细分析就不知道要劫持哪些域名。可行的做法是为这些有嫌疑的设备单独划一张子网,让它们与可信的设备断开连接,甚至这些设备之间都无法互相访问,每个设备只生存在自己的母体里,其它什么信息都收集不到,只能老老实实地跟自己的远程服务器通讯。 所以,你需要一台智能路由器来把这些不怀好意的设备关进笼子里。 这样的智能路由器哪里有? 很不幸,目前没有这么智能的硬件,只有这么智能的软件。所以你能做的就是,买一台功能相对强大的路由器,然后刷入对应的软件,借尸还魂,曲径通幽。 关键词包括但不限于:网件、华硕、梅林、Tomato、Padavan……



老虎吃人这回事

Thu, 02 Feb 2017 11:27:32 +0000

大年初一,老虎吃人,一起事件,两条生命。无论从哪个角度来看,都是悲剧。 不过随着时间的推移,悲剧越来越展现出成为闹剧的可能,朋友圈里关于此事的文章接连出现,火气一个比一个大。这个结果,或许大家都没想到。 据我观察,逃票违规,翻墙有错,老虎吃人无可厚非,这些问题事实清楚,大家都没有争议。争议的焦点不在于当事人和当事虎,而在于外人如何看待当事人、当事虎,以及如何评价外人的看法,以及如何评价其他人对外人观点的评价…… 那么我也来凑个热闹,谈谈我对“老虎吃人”的看法吧。 首先要谈的是“该死”这个词,这也是关于老虎吃人的讨论中最容易引起争论的说法。常识告诉我们这不是一个好词,用在谁身上都必然激起强烈的情感反应,而强烈的情感反应必然会影响讨论的气氛和理性的发挥。那么我们换个角度问问,“该死”到底是什么意思? 可以肯定的是,逃票一定与“该死”没有关系。逃票进入野生动物园既不合规定也不道德,但逃票入园者可以不侵入老虎的领地,买票入园的人也可以翻隔离墙去与老虎亲密接触。所以“逃票者该死”的说法是站不住脚的。 接下来,翻隔离墙进入老虎领地,就一定“该死”吗?这个“该死”要如何定义呢?判了死罪的人该死,这很好理解,无论是枪毙、注射、电椅,总之是躲不了死。但是面对高危的情况和明确的规则,明知故犯去做危险的事情,就必然要死吗?那么在机动车道违反交通规则也必然要死吗?如果是,就应当派车把人撞死?如果不是,而且违规者侥幸没有死,是不是“该死而不死”呢?既然“该死而不死”,是不是应当把“该”的补上? 具体到本次事件,假设翻隔离墙进入老虎领地却没有被老虎吃掉,那么说“该死”的人,是应该惋惜呢,还是庆幸呢?如果是惋惜,理由是什么呢?老虎没有按大自然的规矩吃人?我不知道。但我知道的是,我会庆幸生命没有丧失,我也支持事后对这个人进行惩罚,这种惩罚一定要有足够力度,但还不到剥夺生命的地步。 再设想一番。假设有四所一模一样的动物园,都发生了游客违规翻墙进入老虎领地的情况,而且老虎也冲出来要吃这个游客,结果分别如下: 动物园甲:老虎吃了人,老虎也被打死了; 动物园乙:老虎还没吃人,就被打死了; 动物园丙:人被老虎吃了,老虎没被打死; 动物园丁:因为及时使用了麻醉枪之类的装备,人虎平安; 这四个结果按照“从好到坏”来排序,大家会怎么排?我不能肯定具体的排序。但我大致能肯定的是,甲的“人虎双亡”应当排在最末,丁的“人虎双活”应当排在最前,乙丙两个选择居中但顺序不定。如果大家都同意,是不是应当朝着公认的正确方向去讨论,去看看我们还缺什么,应该做什么?不要说“麻醉枪起作用太慢”之类的谎言,我认真查了英文维基百科,麻醉枪(tranquillizer gun或者tranquillizer dart)反倒是可能危及大型动物的生命,所以一旦命中就必须迅速跟上检查动物的情况,甚至注射解毒药。 如果细看居中的两个选择,到底是救人还是救虎,就涉及到“人命和虎命谁金贵”的话题。奇怪的是,动物保护主义在我国明明还没有流行,这次的讨论里却出现了不少“众生平等”的论调。如果真的生命平等,我们不妨设想相反的情景:游客都遵章守纪,老虎成了违规者,不知怎么跑了出来,这时候要怎么办?我们看到不少新闻,动物意外出笼之后,园方用各种手段活捉了动物,弄死了动物反而让不少人惋惜。所以,“众生平等”似乎是有两层含义的:一是有规则在,大家的生命都可以被平等地剥夺,一是虽然有规则,但从根本上讲大家的生命还是应当尽量挽救。我们究竟应该选哪种呢? “该死”的问题先谈到这里。我们接着来看“人命和虎命谁金贵”的话题,有人是这么应答“人命高于虎命”的: 很好,去杀10只朱鹮,或者杀5头熊猫试试。希望在法庭上,你的这句话能作为逃避枪毙的辩护词。看看是你的命贵,还是动物的命更贵一些? 我看了觉得很失望,因为这是诡辩,不是讨论。讨论“人命和虎命谁金贵”,是在涉及到具体问题——要救人还是救虎——时展开的。如果要做同类比较,“杀朱鹮或者老虎要被刑”对应的是“老虎吃了人要不要被处死”,“虎口救人要不要开枪”对应的是“只能救一个,救人还是朱鹮?”、“救人还是熊猫?”的场景。再者说,有据可查的判决显示,2010年2月云南有人猎杀一只老虎,被判刑12年,处罚金48万。注意,没有被判死刑。这是不是法庭在告诉大家,老虎命不如人命呢? 同样站不住脚的还有“价值130块的人命”的说法。它的逻辑是这样的:野生动物园的门票是130块,成年人自己选择逃票入园丢了命,所以他自己认定自己的命只值130块,有什么好惋惜的?前面讲过,逃票入园和翻隔离墙进老虎领地是两回事,并没有必然的因果关系。其次,人命的价值到底应该怎么判断,这是一个复杂的问题,不能简单推断。你看他这时候逃了130块的票让自己处于危险的境地,所以他自己觉得自己的命只值这么多。如果有天他生病住院,要动130块的手术才能活命,他不舍得出这么多钱?如果认定这个人的命因为逃票只值130块,那么伤害他最多也只需要赔偿130块钱? 更让人感到莫名其妙的是因此扯上基因和进化论,并由此营造出种群的优越感: 文明的发展和科技的进步,本来应被淘汰的种群个体,被强行留下来,并让他们的基因得以表达,遗传下去。人类之所以能熬到今天,是因为那些敢于徒手逗弄猛兽的蠢货在还没来得及繁殖之前已经被干掉了…… 我读过不少关于基因和进化论的资料,但从没看过哪本正经的作品谈到被淘汰的种群和特性是“蠢”的,也没看到有什么基因会促使人“徒手逗弄猛兽”。如果一定有的话,那大概也是不服从规矩、勇于冒险的基因,但文明的重大进步不正是因为有人不愿意循规蹈矩吗?相反,如果没有文明没有科技,人类只能按照自然的法则来生存和淘汰,或许留下了“不那么蠢”的人,但无数科学家、艺术家同样会被淘汰(想想斯蒂芬·霍金),我们今天又如何能享受文明和科技带来的诸般好处呢? 关于老虎吃人的话题,今天就写这么多。不管你觉得对与不对,都希望对你有参考(如果有启发就更好),和欢迎你留言。大家能在一起理性讨论,这本来就很难得。或许将来事情会简单很多:看某些IT大佬鼓吹计划经济、共产主义的势头,未来再出现人虎对峙的局面,动物园只要简单算算账就可以做决定:人死了要赔多少钱,老虎死了能获赔多少钱,麻醉枪要多少钱……大数据分分钟可以算出来。



【译文】热闹驱动开发

Tue, 31 Jan 2017 13:30:53 +0000

按:今天在网上看到阮一峰推荐的《Hype Driven Development》,忍俊不禁,联想到工作中的很多经历又百感交集。趁春节假期翻译出来(练练手),与大家共享。 软件开发团队所做的软件架构或技术栈的决策,很多并没有经过踏实的研究和对目标成果的认真思考,而是不准确的意见、社交媒体的信息,或者就些是“热闹”的玩意。我称这种作派为“热闹驱动开发(Hype Driven Development,HDD)”,眼见它的危害,我赞成更专业的做法,就是“脚踏实地的软件工程”。下面我们一起看看HDD的来龙去脉,想想能如何改进。 新技术带来新希望 开发团队把最新最热的技术应用到项目里,这样的情景你见过吗?有人是因为读到了相关的博客,有人是看到了Twitter上的潮流,还有人是刚刚在技术大会上听到了关于某门技术的精彩演讲。不久,开发团队就开始采用这种时髦的新技术(或者软件架构设计范式),结果他们却没法更快(就像之前说的那样)开发出更优秀的产品,反而身陷囹圄。开发的速度降下来了,信心受挫了,后续版本的交付也出问题了。有些团队甚至干脆专心修bug,停止开发新功能。他们“只需要多花几天”就能把事情搞定。 热闹驱动开发 热闹驱动开发有很多流派,也有很多渠道介入大家的项目: Reddit驱动开发——在选择技术、架构、设计方案时,团队和个人的决策依据是知名博主的文章,或者reddit, hackernews, blogs, twitter, facebook, Github以及其它社交媒体上的热门信息。 技术会议驱动开发——仔细观察观察,参会回来的家伙们有什么表现。他们听了演讲兴致高涨。然而这是双刃剑。他们没有做足够的研究,就开始使用最新最热的类库、框架、架构范式,于是可能踏上通往地狱的高速公路。 嗓门驱动开发——有人整天谈论新框架/类库/技术,他自己其实没有实际经验,但是反复念经终于让团队决定采纳他的意见。 Gem/类库/插件驱动开发——在RoR社区里特别流行这种情况,有时候我会发现一个gemfile太长,唯一比它更长的只有程序启动时的装载时间。这种流派源自下面的观念:Rails里的每个问题都应当有个gem来解决。有时候分明只要自己动手写几行代码就能解决,但是我们还是一个劲地添加类库/插件/gem/框架。 我还希望提到热闹驱动开发的一个常见流派,StackOverflow 驱动开发——开发人员从StackOverflow(总之就是互联网上)拷贝代码,而没有真正弄懂这些代码。 HDD就是开发团队自掘坟墓 凑热闹的问题是:它很容易导致错误决策。无论是糟糕的架构决策,还是糟糕的技术栈决策,对团队的影响都常常持续数月甚至数年。最坏的结果是造成极其严重的软件工程问题,只能推倒重来。但推倒重来而成功的案例几乎没有。 一切罪恶的根源似乎都是社交媒体——新观点传播得太快,都还没来得及经过检验。大家还来不及细想有哪些利弊,这些观点就已经传播开了。 凑热闹的起承转合 大多数凑热闹的过程是相同的,像下面这样: 第一阶段:真实问题和解决方案 热闹的来源是,某些公司真的遇到了问题。这些公司里的开发团队认为,现成的技术栈、流程、架构并不能解决这个问题,必须自己动手。所以他们研发了新的框架、类库、范式,问题迅速解决了。 第二阶段:宣示、推广、包装关键词 团队热衷于向他人展示自己的成果。很快他们就发布了博客文章,也去技术会议上演讲。这些问题通常是有难度的,所以解决方案是有分量的,结果也是很可观的,开发团队对此很自豪。其它人也开始对这项新技术有了兴致。唯一的问题是,并非所有兴致勃勃的人都能彻底理解问题本身和解决方案的细节。毕竟,问题有难度,解决方案也有分量,所以不是一条推文、一次碎碎念、甚至是一篇博客就能讲清楚的。利用博客文章、技术大会的主题演讲之类的社交工具,原始信息就很容易走样。 第三阶段:狂热现身 HDD阴影下的开发人员都会阅读博客、参加技术会议。然后,世界各地的开发团队都开始使用新技术了。因为信息已经走样了,所以有些人会在框架问题上做草率的决定。哪怕新框架没有解决任何具体问题,开发团队仍然期望新的框架会带来帮助。 第四阶段:心灰意冷 新鲜劲头过去了,新技术并没有给团队带来期望的改进,反而增加了很多额外的工作。大家得重写很多代码,花不少时间专门学习。工作的速度慢下来,管理者也没耐心了。大家都感觉被骗了。 第五阶段:反省领悟 最终团队做了复盘,认清了追逐这项新技术的代价,也认清了新技术适合解决的问题。大家都变聪明了,直到再次凑热闹为止。 HDD举例 来看看几个热闹驱动开发的例子,看看它是怎么发生的。 举例 1:React Facebook遇到了一个问题,Facebook自己的复杂单页面应用里会出现各种状态改变的事件,必须追踪到发生了什么,并且保持状态的连贯一致。 Facebook用几个时髦的词包装新范式:函数式、虚拟DOM,组件。 追逐热闹的人说:Facebook创造了未来的前端框架。我们现在就把一切用react重写吧。 等等!要做的工作很多,但这项投资看不到什么短期回报。 React非常适用于包含很多实时通知的复杂单页面应用程序,但是对简单应用来说,它不见得合适。 举例 2:TDD被DHH杀死了 David Heinemeier Hansson(DHH,Ruby on Rails框架的创造者)意识到,Rails的框架里没有对OOP支持很好的架构,所以很难做测试驱动开发。于是他做了个现实的选择:不要提前写测试代码。 DHH的博客和会议演讲引发了热潮。关键词是:TDD is DEAD。 […]



努力,让世界更美好一点

Mon, 02 Jan 2017 12:34:13 +0000

2016年末,有很多人开始回顾这一年,整理自己的收获。大家的回顾常常让我感到羡慕,我从12月初开始回想自己的2016年,更多的似乎是经历和感受,收获似乎是谈不上的。 然而生活总是会有出乎意料之处。12月下旬,我忽然在微信公众号后台收到一条询问孟老师的消息。2015年7月孟老师不幸逝世,2016年4月我联系上孟老师的家人和学生之后,在公众号里写了一篇《怀念孟老师》,本来只是表达自己的纪念。不料发布以来,竟然成了全国各地孟老师学生寻找他踪迹的线索,每个月我都可以在后台接到这样的留言:跟孟老师断了联系很久了,才知道他不幸逝世,请告诉我他安息的地址,以后我去南京祭拜…… 如果2016年真的需要有什么收获,这就是最大的收获。 大学毕业已经十多年了,见过了各种各样的人和事,也有各种各样的失望和无奈,和孟老师也成了亦师亦友的关系,甚至“友”的成分更重一些。但微信后台后台接连不断的留言,让我开始思考:在这个复杂的世界里,孟老师这样的人,给不出也给不了学生具体现实的利益,那么究竟是什么,能让那么多人在那么长的时间里珍视和怀念呢? 我想来想去,答案只有一个:努力,让这个世界更美好一点。他不只是照本宣科的讲完课就了事,也不是空洞地教给我们善恶,他还告诉我们怎样分辨善恶,以及应该用怎样的手段去惩恶扬善,并把自己的知识、头脑、道德感熔铸在对青年学生点点滴滴的关怀里,让大家备受感染和启发,让大家相信世界上还有值得肯定和追求的价值。自然的结果就是,无论天南海北,也无论是否认识,只要说“我是孟老师的学生”,就基本知道这个人是正直可信的。 经历多了才懂得,朴素的乐观未必可靠,单纯的信息和知识,并不能让这个世界更美好。打量我们身边的一切就会发现,用知识伪装起来的胡说八道并不罕见,甚至越来越多:或者理勇信息不对称混淆黑白展开诡辩,或者用道德虚无主义消解是非逃避责任,或者干脆自降身价用动物本能解释自己的无耻欲念…… 也只有经历多了才懂得,在这个世界上,绝对的善恶是很好区分,也不那么容易否认的。但是在善恶两极以外,存在着广阔的中间地带,其中大量地区甚至没有明确的法条约束,但这并不意味着我们可以恣意妄为,然后堂而皇之地用“法无禁止”来开脱。具体到很多事情,我们是有选择权的,到底是向善多一点还是向恶多一点,还是刻意模糊视若不见,我们心里是清楚的,至少是可以想清楚的。这一系列看似零碎的选择与硬性的法条无关,但正是它们在很大程度上定义了我们,也定义了我们生活的环境,因为支配它们的是我们内心深处的根本信念——你希望让世界更美好一点,还是更不美好一点,还是无所谓? 不要因为感觉自己卑微而悲哀,而因此放弃。十多年前,中文计算机图书市场堪称一塌糊涂,各种粗制滥造的书籍横行,翻译版本更是不忍卒读。一旦有读者批评,就会出现经典的反驳论调:写书译书本来就赚不了什么钱,有看就不错了,你有本事你看英文版去…… 这样堂而皇之的论调,一时还真不好反驳。然而我亲眼看到一批有信念有意愿的图书出版人,选好书选好译者认真出版,终于打破了“劣币驱逐良币”的神话,颠倒了泥沙俱下的局面。亲眼见过,亲身经历过这个过程,让我深信,我们微漠的努力与世界的美好之间,其实是有联系的。 如果你也希望让世界更美好一点,我这里有几条现身说法的建议,不妨听听。 首先是多反思,让世界“更美好”,就意味着不能原地踏步甘于现状,所以要常常想想自己之前有什么事情做的不对,如何能做得更好,也不要轻易放弃了对错怪和伤害过的人的歉疚,因为它会持续警醒我们。知易行难,很多事情即便意识到了,未必能马上改正,这不要紧,只要相信自己愿意改正,并且持续去改正,就可以。 其次是从内心里尊重他人。我见过很多人都认同“尊重他人”,但其实他们认同的只是“尊重(认为应该尊重的)他人”,所以对于自己“看不上”的人,吆五喝六、恣意发号施令,都是相当自然的举动。我以前也觉得这种做法无可厚非,一次为他人服务被无理刁难的经历彻底改变了我的想法,也颠覆了我对“客户就是上帝”的认识。就像我之前说的,“尊重他人”可以被当成一种根本假设,哪怕是对自己“看不上”的人,一开始的态度也应该是尊重。持之以恒,这也会让你自己变得豁达、快乐。 再次是多看多听多学,增长见识。见识不够的时候,即便你有一腔热血去改变世界,让世界更美好,恐怕只会适得其反,因为世界总是比你想象的更大更复杂,只有有足够多的见识,才能够确保自己做的事情大抵是对的。当然,见识多了,想法也可能改变,很多人会逐渐放弃之前的理想和信念,不再有坚持。所以我曾说,在对待这个世界的时候,我们需要有一些根本假设(设定),因为它是假设(设定),所以不能被现实否定。 最后,多表达多交流。要让这个世界更美好,就不能“躲进小楼成一统”,而需要积极表达自己的看法,努力去影响——但不是强迫——更多的人,同时在交流中不断锤炼、修正、完善自己的看法和作为。这也没有什么值得顾虑的,我完全不能接受那种“又要自由又要豁免批评”的态度,让别人说几句怎么了,连这点都承受不了的“自由”,其实不是真正的自由。美好应该是一种圆融的动态平衡,而不是一种单调的静态僵化。 2017年,让我们继续努力。



给你“想要”的,未必会让你更幸福

Mon, 02 Jan 2017 12:33:10 +0000

前些天《财经》杂志发了篇对今日头条创始人张一鸣的访谈,当时我只是觉得这篇访谈挺怪异,但也没多想。结果不久,这篇稿就四处被删了。再过不多久,知乎上又出现了“如何看待张一鸣的《财经》杂志采访?”的问题,并引出了不少回答。看来,这个问题确实可以多讨论讨论。 这篇访谈讲了什么?我尝试归纳如下: 今日头条是技术公司而不是媒体公司,不承担“价值观”的拷问; 如果非要问价值观,那么头条的价值观是“提高分发效率,满足用户信息需求”; 用户需求,可以通过分析用户点击、阅读、分享、收藏等行为来发现; 知识精英传统上总是希望强迫大众提高品味,这是不对的; 这篇访谈让我第一时间感到奇怪,是因为在这份素来追求质量的严肃杂志上,访谈给人的印象是:提问的记者反复纠缠“价值观”的话题,甚至恼羞成怒,每次都被访谈对象“轻松”化解,很多时候完全是被碾压。在下面这轮问答上体现的最明显: 《财经》:你赞赏哪种力量?反对哪种力量? 张一鸣:四种基本作用力——万有引力、电磁引力、弱相互作用力、强相互作用力,简单来说,就是大自然的力量。反对YY的力量。 更离奇的是,双方争论不休的“价值观”的冲突到底从哪里来,有什么具体表现形式,我始终看不清楚,自始至终是空对空。我从来没看过这样妖娆的访谈,我也不相信某些答案里“微言大义”的神秘说法。我只能认为,这更像一次表演。如果考虑到后来的删帖,这似乎更像是一次事故。 不管是不是事故,关于价值观的争论总是焦点。尽管这个问题在访谈中没有具体的表现,但这并不妨碍他人表达自己的价值观——既然秉承价值中立原则,既然言之凿凿地反对YY,理应可以面对来自不同价值观的评判。 今日头条很早我装过,用了不久就删了,不是因为容量问题,而是因为内容——我不知道其中的推荐算法到底有多牛,但推给我的都是我毫无兴趣甚至反感的内容。因为用了几次完全找不到感兴趣的内容,只能不点击。不点击,就继续推荐不感兴趣的内容。如此恶性循环,只能敬而远之。 不止于此,我还会积极在父母和其他长辈的手机上删除今日头条。不难现象,不熟悉标题党又没有太多分辨能力的长辈,打开这个应用会看到什么,继而陷入怎样的盘丝洞。盘丝洞不是生物,不生产蛛丝,但误入盘丝洞的后果很严重。同样,头条虽然不是媒体平台,不生产内容,但我可以肯定,放任亲人去阅读去接受推荐,只会造成两代人之间越来越多的隔阂,而不是融洽大家的沟通。我不知道今日头条怎么解决这种问题,是否有特供版给员工的亲属,但我能确定的是,我家的幸福我当然有话语权——己所不欲,勿施于人。 “己所不欲,勿施于人”,听起来掷地有声,但它终究只一种道德选择,一种价值取向,在“价值中立”面前多少显得苍白。但如果我们承认人有自由意志,就应当承认人有价值取向。如果我们承认人要讲理性和逻辑,就会发现“己所不欲,勿施于人”的价值取向和今日头条的实际做法是冲突的。 访谈中重点谈到“延迟满足感”,可以很好地证明这一点 如果一件事情你觉得很好,你不妨再往后delay一下,这会让你提高标准,同时留了buffer。很多人人生中一半的问题都是这个原因造成的——没有延迟满足感。延迟满足感本质是克服人性弱点,而克服弱点,是为了更多的自由。 但如果你仔细思考,就会发现访谈中大肆推崇的“效率”是和“延迟满足感”相悖的。按照“延迟满足感”的逻辑,如果你心念一动看了篇所谓“低俗”的文章,你不妨再往后delay一下,这会让你提高标准,同时留了buffer,继而,你会克服了人性弱点,争取更多自由。不过今日头条恐怕不会给你delay和提高标准的机会,对效率的极致追求会让更多所谓“低俗”的文章呼啸而至…… 从数据上看,你的点击确实更多、阅读时间确实更长、收藏也更频繁;但从逻辑上看,你的弱点被放大了,争取到的自由更少了,这样看来,离幸福也越来越远了。不过在在逻辑上也说得通,既然“赞赏的力量”只有“四种基本作用力——万有引力、电磁引力、弱相互作用力、强相互作用力,简单来说,就是大自然的力量”,那么尽管自制力对幸福很重要,但它更合适被忽略,或者是被归入了“YY的力量”。 所以,如果访谈里说的“价值中立”是真的,我们至少可以把它更加具体化:自己觉得好的做法,颠倒过来推给用户,这是“价值中立”的表现。那么在我看来,前面恐怕应该加上“错乱”两个字更合适。 这种“错乱”会带来什么后果呢?我在Google搜索探讨今日头条推荐质量问题的文章,本来结果相当自然,一旦加上site:toutiao.com,指定在头条的文章里搜索,结果就迥然不同。对追求价值中立、相信算法力量的头条来说,到底是几千万用户对这类话题完全没有需求,还是机器和算法认为用户没有需求,我不知道。 我还看到有人赞赏这篇访谈里折射的态度是“秉承自然真理,用理工科思维做事”。我不知道这么说的人看了多少被推荐的内容,估计数量不少,否则不会说出“自然真理”、“理工科思维”这样的大词,但是我更希望他能被推荐看到王俊煜答案里引用的,DeepMind(这家公司被Google收购后开发的AlphaGo在围棋大战中击败了李世石)创始人Demis Hassabis接受《卫报》采访时说的话: As these systems become more sophisticated, we need to think about how and what they optimise. The technology itself is neutral, but it’s a learning system, so inevitably, they’ll bear some imprint of […]



微服务与架构师

Fri, 11 Nov 2016 09:47:37 +0000

因为工作的关系,最近面试了很多软件架构师,遗憾的是真正能录用的很少。很多候选人有多年的工作经验,常见的框架也玩得很溜。然而最擅长的是“用既定的技术方案去解决特定的问题”,如果遇到的问题没有严格对应的现成框架,就比较吃力。这样的技能水平或许适合某些行业,但很遗憾不符合我们的要求。 软件架构师到底应该做什么,又为什么这么难做好,这都是近来的热门问题,我也一直在和朋友们讨论。正巧,最近我看完了新鲜出炉的《微服务设计》,所以大概可以谈谈自己的看法了。因为这类问题比较抽象,也没有统一答案,我努力尝试把思路整理清楚,把表达变得流畅。最终有没有讲清楚,说的对不对,欢迎大家给我留言。 今天看来,传统的软件开发(尤其是应用型软件开发)其实是相对简单的。软件运行在基本可靠的单机环境下:CPU提供计算能力,内存提供动态存储,总线提供数据传输,硬盘提供永久存储。这些概念稳定而直观,程序员要完成的,就是调用和组装编程语言提供的各种功能,来满足现实的需求。相比应用程序员良莠不齐的开发水平,无论是操作系统还是硬件环境,都是来自大公司的工业级别的产品,是值得信赖的。 如果把程序要完成的功能比作个人,软件运行的环境比作房屋,那么房屋虽小,却是值得信赖的。对个人来说,只要进去了房屋里,就有相对稳定的环境,相比野外生存就是巨大的进步。当然,如果遇到意外情况,在野外可能生存机会大一点,在房屋里只能与房子“一损俱损”了。不过,通常来看这不要紧。 随着计算机要解决问题日趋复杂,出现了可复用的类库。它们把重复的功能包装起来,只要直接拿来就可以使用。回到房子的比喻,这些东西就好像标准化制作的家用电器,你搬回去、看懂说明书、用起来,就可以大大提升自己的效率。 上面说的是软件内部的进化,软件外部运行模型仍然相对简单——无论要解决什么任务,各种逻辑和资源都是处在同一个运行时(runtime),或者能够方便可靠访问的运行时当中。如果需要提升性能,除去软件本身的优化,就是升级硬件。如果我们需要更快的计算速度,就必须升级CPU;如果我们需要更多的动态存储,就必须升级内存…… 虽然升级需要停机,但是升级之后,性能提高了,运行环境的稳定可靠却不受影响。回到房屋的比喻,在这种思路下,房子还是原来的房子,只是建造得越来越高级,越来越稳定。 即便业界提出了N层模型,整体的复杂度提升也有限。这种划分往往并不是严格按照业务责任,还考虑了实现特性,而且层与层之间的接口仍然能依赖外部环境保持稳定可靠。比如常见的三层模型,表现层-业务逻辑层-数据库层,表现层与业务逻辑层之间往往是函数调用,业务层与数据库层之间的通常是通过安全稳定的内网连接,数据库则是配置很好的机器保证高可用性。回到房屋的比喻,这种思路很像花重金建造几栋紧密相连的专用房屋,各自对应不同的用途。如果外界环境变化不大,这种设计确实很稳定,但也很不灵活。 随着互联网的飞速发展,程序要解决的问题的复杂度也在飞速,原有的思维和范式,既要考虑业务,又要考虑实现,应对起来已经非常吃力了。所以,SOA(面向服务的架构)的概念应运而生。SOA基本脱离了技术实现的细节,引导开发人员从业务和抽象的“服务”角度来看待系统。与传统复用只考虑静态的代码和类库不同,SOA复用的则是动态的运行着的服务。 以上两点,都是SOA相对传统软件开发思想的巨大进步。可惜的是,大多数SOA的学说更倾向于理论和概念的层面,服务的“粒度”究竟定在哪个层级,服务如何落地保证可用性…… 这些问题始终没有取得广泛的共识和规范,对于软件所依赖的环境,SOA也很少涉及,但软件的运行是离不开外部环境的。所以SOA的学说虽然热门,但真正做到了、做好了的例子非常有限。 回到房屋的比喻,SOA不太关心每栋房子到底干什么,只是从逻辑上做个大致的区分:这片房子分给商人,那片房子分给农民,另一个片区的房子分给工人…… 但是SOA并不会具体地规定每个区域里应当安排多少房子,这些房子应当如何建造,如何组合,所以区域里很可能有混乱。 技术继续发展,尤其是移动互联网的兴起,极大地增加了软件所要解决问题的复杂度。从内部来说,性能的增长已经改变了方向,无论CPU还是内存,性能的增长都不再来源于单纯部件的提高,而更多来自多个普通部件的协同工作。如果说传统的性能提高是从纵向上考虑,现在则是从横向上考虑,承载计算能力的不再是“一颗高运算速度的CPU”,保存动态数据的也不再是“一片大容量内存”。玩法变了,程序的思维和编写范式也需要随之进行调整。 从外部来说,性能提升而运行环境仍然稳定的好事不复存在,运行环境日益复杂,可靠性也随之下降,已经没有哪家软件和硬件厂商能为系统提供足够可靠的运行环境。这种外部的挑战很难和以前一样依靠外部供应商来解决:廉价服务节点莫名崩溃很可能是家常便饭,如果网络完全要求节点自身质量过硬以提供高可用性,不但代价高昂,而且违背了网络设计“容忍故障”的初衷;大量程序调用现在通过网络而不是本地进行时进行,几乎无处不在的超时限制会逼迫大家采用异步调用,传输速度和稳定性也会受到极大限制——分布式系统设计中的重大谬误之一就是认为“网络是可靠的”。 更糟糕的是,SOA未能解决的粒度问题变得要紧起来。传统的软件系统大致都有规格说明书,在设计时就要考虑每个子系统的承载能力,而且这些能力大致是彼此协调彼此关联的,系统运行时应当保证压力不超过设计规格。但是现在,业务的飞速发展很可能把段时间内就压力集中到单个服务甚至其中的少数功能上,跨服务的功能很可能又需要迅速组合成新的服务,而这种变化是事先根本无法预料的,很容易暴露出服务定义的粒度问题。再者,从整体上考虑,每个服务既要保证自己的稳定,又要相对隔离以限制故障的影响,同时还要适度容忍其它服务的不稳定,最终才能从总体上保证系统的稳定。这,也是对传统开发思维的一大挑战。 在这种局面下,“微服务”应运而生了。承接SOA的概念,它把系统按照业务责任划分为彼此独立的多个服务,既保证了概念的清晰和自洽,又保证了系统的灵活性、伸缩性。面对杂乱不可靠的现实,它又从实现上注重每个服务的自治性,也就是能独立部署,具备自动化、可观察、故障隔离、自动恢复等特性,由此提供高可用保障。同时,微服务又抛弃了SOA中的很多概念,比如难以落地的ESB、UDDI等等。 在SOA尚且没有完整落地的时候,对它有继承有更新有颠覆的“微服务”,极大增加了开发人员的挑战。首先,服务要拆的足够小,又不至于太小,这样才能保证伸缩性并隔离故障;其次,不能因为服务“小”就降低保障级别,维护一堆“小服务”的保障级别,这是极其麻烦的事情;再次,要做到上面这一切,无论是从理论学说上还是从可依赖的软硬件系统上,都没有现成的低成本的解决方案;最后,因为维护的是动态的“服务”,传统静态的“代码所有权”和“机器所有权”的划分不再有效,它们已经融合为统一的“服务所有权”,它属于开发人员、运维人员以及所有相关人员的共同体,这又会带来团队配合与分工的挑战。 回到房屋的比喻,其实这个比喻此时已经完全不合适了。现在的系统更像高度复杂的城市,而不是单独的房屋,所以架构师也不像建筑设计师,而更像城市规划师,他的职责是对城市进行规划,确定每个区域应该做的事情,这些区域应当达到统一的规范要求,又具有随时扩张或缩减的灵活性;同时,他还应当保证这种划分适合对应的专业人员在对应区域工作。 明白了这一点,就可以明白版本管理、持续集成、自动化测试、自动化发布、服务治理、详尽监控等等“磨刀工夫”的价值——没有这些工作,就谈不上微服务的质量和保障级别,也就无法驾驭微服务的体系。 由此,也很容易明白架构师在这个时代要面对的挑战。一方面,他没有现成的足够强大的集成工具,只能靠一堆“稀松平常”的工具组装出整体可靠的系统;另一方面,他又要深入理解业务,把业务拆散成边界清晰的概念,以高内聚低耦合的服务分而治之,还必须考虑到实现的限制——“高内聚低耦合”的原则人人都知道,如果没有可靠的分布式事务管理机制,就不得不把并非“高内聚”的模块聚合起来,但你又要担心业务边界模糊的风险;RESTful固然优雅,但有时候又不得不使用RPC通讯,所以你又要提防RPC带来的强绑定、客户端服务器端同步更新等很多问题…… 这一切设计、权衡、决策,并没有成型的理论和学说可以依靠,通常只能完全依赖架构师的经验、理解、思考。所以困难很大,风险也很大,如果做得好,收益也是非凡的。而这,恰恰是架构师的价值所在。