0%

Two Heads Are Often Better than One

程序员需要思考,思考需要独处。所以这成了对程序员的刻板印象。

这种“孤狼”的编程方法可以被一种更具合作性的方法取代。我认为这可以提高程序员的质量、生产率、以及工作成就感。这种方法还可以让开发者的工作更接近于其他人以及非技术人员——商业和系统分析师、质量保证专家,以及用户。

阅读全文 »

Thinking in States

现实世界中的人们与状态有种奇怪的关系。那天一早,我在当地一家商店门口停了下来,为新一天将咖啡因转化为代码作准备。由于我喜欢喝点拿铁再干活,但我找不到牛奶,我就问店员。

“抱歉,我们是大骗子,没有牛奶了。”

阅读全文 »

Testing Is the Engineering Rigor of Software Development

当开发者尝试向家人、配偶及非技术人员解释它们是做什么的时,喜欢用象征性比喻。我们经常(将其)诉诸为桥梁建造或者其它“硬核”工程学科。但是,当你试着把它们说得太难时,这些隐喻是经不住考验的。事实证明,软件开发在很多方面并不像那些“硬核”工程学科。

阅读全文 »

似乎每个人都认为货币贬值是一种社会发展的自然规律。也不知道什么时候开始,我们对“钱”产生了认知偏差,混淆了钱与资本的概念,分不清价格与价值。大概也就是从那个时候起,我们手中的钱就开始贬值了。

首先要强调一个众所周知但视而不见的道理,那就是钱仅仅是资本交换时的媒介,一个国家的经济水平应该取决于它资本的总量,而非有多少钱。否则政府干嘛不拼命印钱,每户人家发它一个亿,这不就共同富裕了么?

那么,资本(或者说一件商品)它应该值多少钱呢?主要取决供需关系,估计这连小学生都知道。供需关系的不平衡会导致两种现象:通货膨胀通货紧缩。(由于现在对这两种经济现象还没有统一的认识,我们姑且这么理解:通货膨胀就是指物价上涨;通货紧缩就是指物价下跌)

很多国家政府偏爱通货膨胀,甚至认为这是经济向好的标志。你想,物价为什么上涨?说明供不应求呀,说明老百姓手里有钱了呀,这样企业就得扩大产能,创造更多岗位,大家又能挣更多的钱,良性循环,多好呀!

反之,如果通货紧缩,意味着老百姓买不起东西,需求下降,企业倒闭,失业率增高,经济萎靡。所以政府机构讨厌它,甚至妖魔化它。

可惜这种认识忽略了最根本的一点:有没有促进资本的增长?

  • 价格连年下跌的数码产品,并非人们对此的需求降低,而是行业产能的提升,带动了人们的消费,也促进了互联网及其周边行业的大发展;
  • 房价的连年上涨,并非人们需求较大,其中少不了投机成分,房贷透支了大量社会资本,未来的消费被遏制住,高房价近一步抬高企业成本。
  • 纸媒供应量连年下跌,人们对新闻媒体的需求并不小,却不见报刊杂志涨价,企业纷纷倒闭,结果释放了大量媒体人才(资本),诞生了新媒体行业。

所以通胀和通缩没有绝对的好与坏,我们最好透过现象看本质,看看它是如何发生的,以及这到底是好是坏。

1. 我们贪婪与投机哄抬了物价

住在一线城市的朋友估计都有个感觉,小时候啥啥都便宜,啥啥都方便。如今,连去医院挂个号都要找关系。这是必然的,大城市意味着人口仅流入,地儿就那么大,人是越来越多,以前人均享有的资源配比肯定不如现在——这是真的供不应求。

对此,抱怨两句就可以了,要不是那么多外来人口,哪儿来的美丽城市呀?换句话说,人口增加虽然导致教育、居住、交通、医疗等资源短缺,但却让城市的很多产业得到发展,财富得以积累,人们也享受了更多发展的好处,虽然生活成本增加,但总的来说是好事。

此外,我们对品质的追求也在提升。以前几户村民有个公厕就不错了,现在的人,别说两厅两卫双阳,恨不得给他家狗都配个独立卫生间;以前每人每月二两肉,现在顿顿的少不了;以前一个家庭一部固定电话,现在一个人就两部手机,工作生活两不误!你说,这钱还够花么?

当然,最绕不开的就是房子了,由于思维习惯,大家总觉得房价肯定会涨,现在不买就亏了!结果一拥而上,造成房源匮乏的假象,进一步抬高房价。每个人似乎都很喜欢这种“钱生钱”的游戏,可本质上并没有积累任何资本财富,所以它不是一件好事。

2. 政府行为稀释了货币

人们非理性哄抢行为是显而易见,我们也习惯于把物价上涨归咎于房地产开发商。但这只是原因之一,还有个原因非常隐性——印钞机!

一个国家是不能随意发行货币的,最理想的情况当然是发行的货币恰好够兑该国的全部家当。如果超发,就意味着市面上流通的钱会贬值。可是!如果我只超发一点点呢?

比如该国实际有100万亿的财富,作为政府的我发行了101万亿的货币,也就超发了1%而已,什么概念呢?你原本100块钱能买到的东西,现在要101块才能买到,你会对此抓狂么?

可对于政府来说,那可是1万亿啊!可以用于支付公务员工资,财政拨款,或者还债。什么都不用做就有钱拿,好爽!

还是那句话,资本和钱不是一回事,这种行为并没有为社会创造实际价值,相反,其代价会转嫁到每个人头上。

每年多印一点点钱,久而久之,感觉就很明显了。

3. 国际金融关系

由于国际关系过于复杂,为了便于理解,我们把这种关系浓缩在“地球村”里,每个国家都是一户村民。不用怀疑,美国就是这个村的村长。主要得益于他爷爷辈的勤劳,创造了很大的家业,在村里树立了极高的威信。所以大家有事没有都会和美国往来,一是增进感情,二是多少想分一杯羹。

地球村很大,每户人家相互之间有生意来往,用米换油,鸡蛋换布料。长此以往也不是办法,村民需要一种统一的货币。显然,美国家大业大最靠谱,在村长的撮合下,大家一致同意以“美券”作为统一结算货币。以后的生意就方便多了。

到了孙子辈的美国并没有传承老一辈的吃苦耐劳精神,他不愿干农活,也不想干工人,又脏又累。好在后来这些脏活累活都被中国给包了,村民的温饱问题得以保障。美国则守着自家的银行和印钞机,想着如何用钱赚更多的钱。

中国倒是勤勤恳恳,田里和工地里来回跑,没日没夜的干,挨家挨户的卖,赚了很多美券。可随着时间推移,他发现美券有些猫腻,以前两张券可以买一桶油,现在要花四张券。其他村民也同样注意到这个问题。

2008年,美国家的屋顶被大风掀开,吹散了一捆又一捆的借条、赊账,还有开足马力印着美券的机器。大家惊恐万分地看着美国,他不在是那个为美国梦而自豪的美国了,现在的他为了贪图享乐,偷奸耍滑,不顾他人死活。

可环顾四周,除了美国貌似别无他选,加之碍于情面,还是继续用美券吧。就这样,美国接着执行他“印券还债”的计划,小日子还算舒坦。但远方的中国不乐意了。

“妈的,老子汗滴禾下土,被你空手套白狼,滚蛋!”

为避免手中的美券一夜成废纸,中国三管齐下,开始采取应对措施:

  1. 与其把你养得白白胖胖,还不如先喂饱我家里十几张嘴,拉动内需!
  2. 都给我出门买买买,在村里见啥买啥,就是不要美券!
  3. 和别家做生意时疯狂推销自家的“人民券”,减少美券结算。

美国见状一脸懵逼,以前的穷小子竞会如此猖狂,还有枉法吗!就这样,双方明争暗斗,你来我往,关系愈演愈烈…

结语

金融系统太复杂了,很感谢《小岛经济学》这本书,钱这玩意儿三两句话根本说不清楚,但本书还是大体讲明白了,受益匪浅!

经济学家总喜欢在自由市场经济和政府在其中的角色争论不休,书中对美国经济的现状以及政府接二连三的昏招是较为悲观的,我不懂这其中的道道。但我想,不论手中的钱是增值还是贬值,不论政府的经济刺激政策有多么高明,它都不应该背离一个原则:勤勤恳恳劳动,实实在在创造价值。

Test While You Sleep (and over Weekends)

放松。我指的不是离岸开发中心,周末加班或夜班,我是想让你注意我们有多少计算资源。尤其是,有多少本可以让程序员生活更轻松一些的方式,而我们却没有利用起来的。你有没有发现工作日想要有足够的计算资源是很困难的?如果是,那你的测试服务器在平时工作以外的时间又在做什么呢?大多时候,测试服务器在夜间和周末基本是闲置的。其实你可以这么做来获益。

阅读全文 »

你可能听过这样的言论:“别用KPI了,现在大公司都流行OKR”。这主要源于我们太了解KPI以及太不了解OKR了。

  • KPI:关键绩效指标,即你创造了多少价值,就拿多少钱。
  • OKR:Objective(富有挑战的目标)、KeyResult(关键结果),即一种目标管理和推进手段。

说白了,OKR是给团队做目标管理用的,KPI是给团队“分赃”用的,压根不是一回事。

《OKR工作法:谷歌、领英等公司的高绩效秘籍》一书详述了OKR这种目标管理方法。当然,其叙述内容比较特别——是以小说的形式,所以读起来不那么枯燥乏味。

OKR笔记一:如何制定目标

如果按照OKR的标准,“目标”这两字可能很多人都会理解错,我们先来看几个“坏目标”:

  • 公司今年产值过1000万
  • 五年内A股上市
  • 发展10万个新用户

再来看几个“好目标”:

  • 让天下没有难做的生意
  • 连接全世界
  • 为人类社会做贡献
  • 构建万物互联的智能世界

你可能会觉得,好的目标就是那种宏大、遥不可及、含糊其辞的说法。而那些结果明确且具体的说法反而是坏目标。其实不然!不要混淆目标和指标,这是OKR要注意的第一点,否则就真成了KPI了。

上面几个好目标是公司层级的(你也可以把它叫做使命愿景),如果是小团队或部门级的目标,诸如“项目交付让甲方爸爸点赞”、“开发快乐又有意义的游戏”。

目标是面向整个团队的,所以应该是直指人心的,挑逗人的肾上腺素,每个人对它的理解不同,但大方向是一致的。此外,小团队的目标不必太正式,可以根据团队的语言风格确定目标的措辞。

OKR笔记二:什么是关键结果

空有目标是不够的,你还得想办法推进它。这就要靠关键结果指标。但是要注意,和KPI不同的是,这里的指标是用于评价目标推进的情况,以及团队整体的士气,而不是判定个人的业绩好坏。

和项目管理中的“事无巨细”恰好相反,关键结果应该聚焦那些影响目标存亡的部分,一般来说不会超过三条。比如“开发快乐又有意义的游戏”,可以这样制定第一季度关键结果:

  • v1.0版本上线 (7/10)
  • 至少推广10万个新用户 (5/10)
  • 玩家好评率70% (4/10)

注意,每个关键结果后边括号内的分值表示:如果要完成该项指标,团队的把握有几成,我把它叫做“团队信心值”。它可以反向衡量你的这个目标设置是否合理,一般来说,评估结果在50%是最为理想的——有挑战,但加把劲儿也能完成。

OKR笔记三:四象限法

找一张A4纸,把它对折两次(或者直接画个十字),然后分别在1、2、3、4象限内写入OKR目标和关键结果、状态、本周事物、未来一个月的计划。如下图:

四象限法是为了让目标和指标具备可执行性,并像念经一样灌到每个团队成员的脑子里。也就是说,这张纸每周一开例会都要用,都要更新,到周五的时候大家在拿着这张纸复盘一下。如果达成了目标,最好组织个简单庆祝。

OKR最怕的就是:信誓旦旦立个flag,然后,就没有然后了。

OKR笔记四:坑

第一次使用OKR大概率会失败,因为团队会掉入一些常见陷阱:

  • 事无巨细,把目标和结果说得太多太杂,人都会这样,貌似不把一件事情100%还原就是不甘心。结果就是你和你的团队反而分散的注意力。
  • 没有执行,OKR很想是个人冲动下的承诺,往往不会用行动兑现。如果团队不定期复盘跟进,什么宏大目标都毫无意义了。
  • 把所有事情都调至最高优先级,这就等同于没有优先级。一周能完成的事情并不多,每件事都紧急的话,团队就会陷入懵逼状态。
  • 关键结果过高或过低,太简单的事情没有成就感,太困难的事情打击士气。充分评估或让团队整体评价这些指标,50%为宜。

总结

如果你个人、团队、公司不知所措的时候,OKR可能会适用。它的作用是目标管理,组织中的每个人都知道:我们想做什么,我们将做什么,我们正在做什么。让进度可见,让参与者获得成就感。

OKR的初衷是确立目标并逐步推进,如果把它沦为单纯的考核工具,那就太不值了。


PS:以下内容纯属娱乐

看完了OKR,内心汹涌澎湃,想要实操一把…

我本来想假设自己是一个传销头目,为团队制定OKR,连愿景我都想好了,叫人人皆下线。后面感觉容易进小黑屋就放弃了。

我又把自己假想成一个负责熟人社交网络的产品经理,表演开始:

目标:朋友,不止于点赞(干翻微信)

关键结果1: 用户好评率70%(6/10)
关键结果2: 线下聚会订单数超过5000(4/10)
关键结果3:城市日活用户10w+ (5/10)

本周工作:
P1:雇佣1000号水军制造舆论
P1:调研90、00后线下聚会习惯
P1:准备内测朋友圈“好物交换”功能
P2:拿下“XXX桌游吧”合作渠道
P2:与“XXX电竞宿舍”老板洽谈

本月计划:
成功炮制微信聊天要收费谣言
培养用户线上租借闲置物品给朋友的习惯
完成1000笔线上预约线下聚会的订单

😂😂😂😂

Test for Required Behavior, not Incidental Behavior

测试的一个常见陷阱就是假设你所测试的恰好都是实现的。第一眼看上去,这种观点像是一种美德而非陷阱。然而,换一种说法后,问题就凸显出来了:测试的一种常见陷阱就是将测试硬性地结合到实现的具体细节上,这些细节是附带条件的,与功能预期无关。

阅读全文 »

Step Back and Automate, Automate, Automate

我和某一群程序员工作过,当被要求给出一个模块的代码行数时,就是将文件粘贴到word编辑器里并利用它的“行数统计”功能。他们下一周也是这么干的。再下一周还是这样。真是太糟糕了。

还有一次我参与到一个部署流程繁琐的项目,需要将代码签名并将结果移交到一台服务器中,需要点击很多次鼠标。有的人就把这个过程自动化了,该脚本被执行了上百次,一直经受着考验,效果远超预期。真是太棒了。

所以,为什么有的人愿意一遍又一遍做着重复的事,而不会退一步花点时间把它自动化呢。

常见误区#1:自动化只适合测试用

当然,自动化测试事伟大的,但就止于此了?重复的任务会存在于任何项目中:版本控制、编译、构建JAR文件、文档生成、部署、以及报告。对于这些任务,脚本要比鼠标强大多了好么。执行起单调乏味的任务也更快更可靠。

常见误区#2:我有一个IDE,所以我不需要自动化

你有没有和你队友发生过类似“你在我电脑上(签出、构建、测试)过它么?”的争论呢?现代IDE有数以千计的潜在配置,本质上是不可能保证团队中所有人都采用了完全相同配置。诸如Ant或Autotools的构建自动化系统可以为你提供可控性与重复性。

常见误区#3:为了自动化我还得学习新语言

纯正的shell语言(如bash或powershell)都能助你一臂之力来构建自动化系统。如果你需要通过网页交互,可以采用像是iMacros或Selenium等工具。

常见误区#4:我不能自动化这些任务,因为我无法处理这些文件格式

如果你必须处理word文档、表格或图片部分,对自动化来说确实是挑战。但这真的有必要吗?你可以用纯文本吗?逗号分隔符?XML?一个可以在文本文件里生成绘画的工具?通常,略微调整这份处理就能产生好的结果,并极大地减少枯燥乏味。

常见误区#5:我没空去想办法

你无需学会所有的bash或Ant才能上手。边走边学。当你认为某个任务可以也应该被自动化时,只需要把工具学到足够它能工作即可。在项目中越是早点这么干,就越容易发现这一点。一旦你成功了,你(和你的老板)就能看到对自动化投资的意义。