Two Heads Are Often Better than One
程序员需要思考,思考需要独处。所以这成了对程序员的刻板印象。
这种“孤狼”的编程方法可以被一种更具合作性的方法取代。我认为这可以提高程序员的质量、生产率、以及工作成就感。这种方法还可以让开发者的工作更接近于其他人以及非技术人员——商业和系统分析师、质量保证专家,以及用户。
Two Heads Are Often Better than One
程序员需要思考,思考需要独处。所以这成了对程序员的刻板印象。
这种“孤狼”的编程方法可以被一种更具合作性的方法取代。我认为这可以提高程序员的质量、生产率、以及工作成就感。这种方法还可以让开发者的工作更接近于其他人以及非技术人员——商业和系统分析师、质量保证专家,以及用户。
现实世界中的人们与状态有种奇怪的关系。那天一早,我在当地一家商店门口停了下来,为新一天将咖啡因转化为代码作准备。由于我喜欢喝点拿铁再干活,但我找不到牛奶,我就问店员。
“抱歉,我们是大骗子,没有牛奶了。”
Testing Is the Engineering Rigor of Software Development
当开发者尝试向家人、配偶及非技术人员解释它们是做什么的时,喜欢用象征性比喻。我们经常(将其)诉诸为桥梁建造或者其它“硬核”工程学科。但是,当你试着把它们说得太难时,这些隐喻是经不住考验的。事实证明,软件开发在很多方面并不像那些“硬核”工程学科。
似乎每个人都认为货币贬值是一种社会发展的自然规律。也不知道什么时候开始,我们对“钱”产生了认知偏差,混淆了钱与资本的概念,分不清价格与价值。大概也就是从那个时候起,我们手中的钱就开始贬值了。
首先要强调一个众所周知但视而不见的道理,那就是钱仅仅是资本交换时的媒介,一个国家的经济水平应该取决于它资本的总量,而非有多少钱。否则政府干嘛不拼命印钱,每户人家发它一个亿,这不就共同富裕了么?
那么,资本(或者说一件商品)它应该值多少钱呢?主要取决供需关系,估计这连小学生都知道。供需关系的不平衡会导致两种现象:通货膨胀和通货紧缩。(由于现在对这两种经济现象还没有统一的认识,我们姑且这么理解:通货膨胀就是指物价上涨;通货紧缩就是指物价下跌)
很多国家政府偏爱通货膨胀,甚至认为这是经济向好的标志。你想,物价为什么上涨?说明供不应求呀,说明老百姓手里有钱了呀,这样企业就得扩大产能,创造更多岗位,大家又能挣更多的钱,良性循环,多好呀!
反之,如果通货紧缩,意味着老百姓买不起东西,需求下降,企业倒闭,失业率增高,经济萎靡。所以政府机构讨厌它,甚至妖魔化它。
可惜这种认识忽略了最根本的一点:有没有促进资本的增长?
所以通胀和通缩没有绝对的好与坏,我们最好透过现象看本质,看看它是如何发生的,以及这到底是好是坏。
1. 我们贪婪与投机哄抬了物价
住在一线城市的朋友估计都有个感觉,小时候啥啥都便宜,啥啥都方便。如今,连去医院挂个号都要找关系。这是必然的,大城市意味着人口仅流入,地儿就那么大,人是越来越多,以前人均享有的资源配比肯定不如现在——这是真的供不应求。
对此,抱怨两句就可以了,要不是那么多外来人口,哪儿来的美丽城市呀?换句话说,人口增加虽然导致教育、居住、交通、医疗等资源短缺,但却让城市的很多产业得到发展,财富得以积累,人们也享受了更多发展的好处,虽然生活成本增加,但总的来说是好事。
此外,我们对品质的追求也在提升。以前几户村民有个公厕就不错了,现在的人,别说两厅两卫双阳,恨不得给他家狗都配个独立卫生间;以前每人每月二两肉,现在顿顿的少不了;以前一个家庭一部固定电话,现在一个人就两部手机,工作生活两不误!你说,这钱还够花么?
当然,最绕不开的就是房子了,由于思维习惯,大家总觉得房价肯定会涨,现在不买就亏了!结果一拥而上,造成房源匮乏的假象,进一步抬高房价。每个人似乎都很喜欢这种“钱生钱”的游戏,可本质上并没有积累任何资本财富,所以它不是一件好事。
2. 政府行为稀释了货币
人们非理性哄抢行为是显而易见,我们也习惯于把物价上涨归咎于房地产开发商。但这只是原因之一,还有个原因非常隐性——印钞机!
一个国家是不能随意发行货币的,最理想的情况当然是发行的货币恰好够兑该国的全部家当。如果超发,就意味着市面上流通的钱会贬值。可是!如果我只超发一点点呢?
比如该国实际有100万亿的财富,作为政府的我发行了101万亿的货币,也就超发了1%而已,什么概念呢?你原本100块钱能买到的东西,现在要101块才能买到,你会对此抓狂么?
可对于政府来说,那可是1万亿啊!可以用于支付公务员工资,财政拨款,或者还债。什么都不用做就有钱拿,好爽!
还是那句话,资本和钱不是一回事,这种行为并没有为社会创造实际价值,相反,其代价会转嫁到每个人头上。
每年多印一点点钱,久而久之,感觉就很明显了。
3. 国际金融关系
由于国际关系过于复杂,为了便于理解,我们把这种关系浓缩在“地球村”里,每个国家都是一户村民。不用怀疑,美国就是这个村的村长。主要得益于他爷爷辈的勤劳,创造了很大的家业,在村里树立了极高的威信。所以大家有事没有都会和美国往来,一是增进感情,二是多少想分一杯羹。
地球村很大,每户人家相互之间有生意来往,用米换油,鸡蛋换布料。长此以往也不是办法,村民需要一种统一的货币。显然,美国家大业大最靠谱,在村长的撮合下,大家一致同意以“美券”作为统一结算货币。以后的生意就方便多了。
到了孙子辈的美国并没有传承老一辈的吃苦耐劳精神,他不愿干农活,也不想干工人,又脏又累。好在后来这些脏活累活都被中国给包了,村民的温饱问题得以保障。美国则守着自家的银行和印钞机,想着如何用钱赚更多的钱。
中国倒是勤勤恳恳,田里和工地里来回跑,没日没夜的干,挨家挨户的卖,赚了很多美券。可随着时间推移,他发现美券有些猫腻,以前两张券可以买一桶油,现在要花四张券。其他村民也同样注意到这个问题。
2008年,美国家的屋顶被大风掀开,吹散了一捆又一捆的借条、赊账,还有开足马力印着美券的机器。大家惊恐万分地看着美国,他不在是那个为美国梦而自豪的美国了,现在的他为了贪图享乐,偷奸耍滑,不顾他人死活。
可环顾四周,除了美国貌似别无他选,加之碍于情面,还是继续用美券吧。就这样,美国接着执行他“印券还债”的计划,小日子还算舒坦。但远方的中国不乐意了。
“妈的,老子汗滴禾下土,被你空手套白狼,滚蛋!”
为避免手中的美券一夜成废纸,中国三管齐下,开始采取应对措施:
美国见状一脸懵逼,以前的穷小子竞会如此猖狂,还有枉法吗!就这样,双方明争暗斗,你来我往,关系愈演愈烈…
结语
金融系统太复杂了,很感谢《小岛经济学》这本书,钱这玩意儿三两句话根本说不清楚,但本书还是大体讲明白了,受益匪浅!
经济学家总喜欢在自由市场经济和政府在其中的角色争论不休,书中对美国经济的现状以及政府接二连三的昏招是较为悲观的,我不懂这其中的道道。但我想,不论手中的钱是增值还是贬值,不论政府的经济刺激政策有多么高明,它都不应该背离一个原则:勤勤恳恳劳动,实实在在创造价值。
Test While You Sleep (and over Weekends)
放松。我指的不是离岸开发中心,周末加班或夜班,我是想让你注意我们有多少计算资源。尤其是,有多少本可以让程序员生活更轻松一些的方式,而我们却没有利用起来的。你有没有发现工作日想要有足够的计算资源是很困难的?如果是,那你的测试服务器在平时工作以外的时间又在做什么呢?大多时候,测试服务器在夜间和周末基本是闲置的。其实你可以这么做来获益。
你可能听过这样的言论:“别用KPI了,现在大公司都流行OKR”。这主要源于我们太了解KPI以及太不了解OKR了。
说白了,OKR是给团队做目标管理用的,KPI是给团队“分赃”用的,压根不是一回事。
《OKR工作法:谷歌、领英等公司的高绩效秘籍》一书详述了OKR这种目标管理方法。当然,其叙述内容比较特别——是以小说的形式,所以读起来不那么枯燥乏味。
OKR笔记一:如何制定目标
如果按照OKR的标准,“目标”这两字可能很多人都会理解错,我们先来看几个“坏目标”:
再来看几个“好目标”:
你可能会觉得,好的目标就是那种宏大、遥不可及、含糊其辞的说法。而那些结果明确且具体的说法反而是坏目标。其实不然!不要混淆目标和指标,这是OKR要注意的第一点,否则就真成了KPI了。
上面几个好目标是公司层级的(你也可以把它叫做使命愿景),如果是小团队或部门级的目标,诸如“项目交付让甲方爸爸点赞”、“开发快乐又有意义的游戏”。
目标是面向整个团队的,所以应该是直指人心的,挑逗人的肾上腺素,每个人对它的理解不同,但大方向是一致的。此外,小团队的目标不必太正式,可以根据团队的语言风格确定目标的措辞。
OKR笔记二:什么是关键结果
空有目标是不够的,你还得想办法推进它。这就要靠关键结果指标。但是要注意,和KPI不同的是,这里的指标是用于评价目标推进的情况,以及团队整体的士气,而不是判定个人的业绩好坏。
和项目管理中的“事无巨细”恰好相反,关键结果应该聚焦那些影响目标存亡的部分,一般来说不会超过三条。比如“开发快乐又有意义的游戏”,可以这样制定第一季度关键结果:
注意,每个关键结果后边括号内的分值表示:如果要完成该项指标,团队的把握有几成,我把它叫做“团队信心值”。它可以反向衡量你的这个目标设置是否合理,一般来说,评估结果在50%是最为理想的——有挑战,但加把劲儿也能完成。
OKR笔记三:四象限法
找一张A4纸,把它对折两次(或者直接画个十字),然后分别在1、2、3、4象限内写入OKR目标和关键结果、状态、本周事物、未来一个月的计划。如下图:
四象限法是为了让目标和指标具备可执行性,并像念经一样灌到每个团队成员的脑子里。也就是说,这张纸每周一开例会都要用,都要更新,到周五的时候大家在拿着这张纸复盘一下。如果达成了目标,最好组织个简单庆祝。
OKR最怕的就是:信誓旦旦立个flag,然后,就没有然后了。
OKR笔记四:坑
第一次使用OKR大概率会失败,因为团队会掉入一些常见陷阱:
总结
如果你个人、团队、公司不知所措的时候,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
测试的一个常见陷阱就是假设你所测试的恰好都是实现的。第一眼看上去,这种观点像是一种美德而非陷阱。然而,换一种说法后,问题就凸显出来了:测试的一种常见陷阱就是将测试硬性地结合到实现的具体细节上,这些细节是附带条件的,与功能预期无关。
Take Advantage of Code Analysis Tools
测试的价值时从软件开发者职业生涯的早期就被灌注的。近些年,单元测试、测试驱动开发(TDD)、以及敏捷方法的兴起证明,在开发周期的所有阶段充分利用测试的兴趣正在激增。然而,测试仅仅是你改善代码质量所采用的众多工具之一。
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才能上手。边走边学。当你认为某个任务可以也应该被自动化时,只需要把工具学到足够它能工作即可。在项目中越是早点这么干,就越容易发现这一点。一旦你成功了,你(和你的老板)就能看到对自动化投资的意义。