湾区日报文章第76辑

目录

2016/11/07 第751期

The Most Expensive Anti-Pattern

文章描述的这种 anti-pattern 就是通过操作字符串来构建结构化的数据格式,比如 html、SQL 等都是有结构化的,但都可以通过操作字符串来构建,带来 XSS 与 SQL 注入等风险。

如何做高质量的软件

讲到了开发团队的种种实践、以及做这些事情所需的投资大小以及人们的接受程度:态度、各种自动化测试、版本控制、monorepo、production 的监控、code review、文档、避免加班、团队文化等。

提升网页加载速度最佳实践

问题:贵公司将上电视直播,贵公司的网站能否抵挡住电视观众排山倒海般的突然访问、并且网页加载速度足够快?本文从前端渲染速度、网络延迟、后台性能提升三方面讲解,文章后面的那些参考资料都很不错。

Chrome 的安全团队想让网站们都采用 https

Google 在下一盘很大的棋:主要盈利来自网站广告;要更好地做广告,就得拿到更多用户数据;网站安全至关重要,不然用户数据得遭殃。为逼迫网站们都采用https,Chrome浏览器得教育用户哪些是安全网站、哪些是不安全的网站,然后得公开羞辱不安全的网站。 除了通过浏览器对没有用 https 的网站进行批斗外,Google 的搜索结果排序算法也早已将 https 考虑进去,使用 https 的网页排序会比较靠前。

为 LinkedIn 的 Bullshit Metrics 辩护

LinkedIn 的注册用户很多,但活跃用户的比例不大。本文认为,除非你这个社交网站主要收入来源是广告,否则没必要在乎活跃用户数;LinkedIn 收入的大头是来自 recruiter 的付费订阅。 在 LinkedIn 上,只要注册用户足够多,而且他们挂着简历、有个联系方式让 recruiter 们去骚扰,这样就够了;recruiter 们活跃就行了,普通用户活跃不活跃其实无所谓。其实普通用户的数据就是 LinkedIn 的主要产品。

2016/11/08 第752期

UX 是矿井中的金丝雀

判断一家公司产品设计水平可以从两方面看:1,设计师是否开心,这是 leading indicator;2,产品设计的质量,这是 lagging indicator。 有四种情况:开心/质量好;不开心/质量好;开心/质量差;不开心/质量差。本文针对这四种情况分析公司的产品设计水平,并给公司的 CEO 支招。 本文标题中的 Canary in a Coal Mine(矿井中的金丝雀)是指危险将至的标志;矿井中的工人带金丝雀下矿井,金丝雀对危险气体敏感,如果有毒气泄漏,金丝雀比人先死,矿工一见金丝雀死了,就知道该撤出矿井了。 科技圈里使用 canary 作为比喻的还有 "Canary server" 或 "Canary deployment",指的是部署代码时先部署到一台或几台服务器上,如果监控发现问题了,就可以立刻 rollback,就像比喻中的金丝雀一样,吸进毒气(发现代码有问题)先死了。

如何写好代码里的出错消息

尽管产品 UI 的文案精雕细琢,但代码里的出错消息往往都是不经大脑模棱两可的字符串。半夜三点网站挂了,查看 log 时一头雾水,这时才后悔:如果当时出错消息写得清楚一点就好了。 好的出错消息得包含:出了啥问题、是啥触发的、哪行代码(当代编程环境里的 stack trace 一般就够用了)。

远程办公需要 Overcommunication

远程办公时,同事间以异步通讯为主;团队成员最好都得清楚其他人此刻都在做啥工作,可以及时帮忙或避免重复劳动,每个人都有责任找机会重复向团队其他人广播自己在做啥。

Twitter 应该成为一个网络协议

吃瓜群众都很愿意指点江山,人人都是 Twitter 的产品经理:)既然 Twitter 让投资人与用户都操碎了心,不如就变成一个 pub/sub 的网络协议,有程序发布消息,也有程序订阅消息。 例子:新闻,媒体发布 tweets,各种客户端订阅并接受 tweets;电子商务,结账后用 tweet 的形式发布收据(可以是 private 的),各种客户端订阅这些 tweets,可以用来公司报销、消费分析等。

创始人股份被稀释到多少才算合理

创业之初公司价值为零,创始人占公司股份 100%。招聘新员工要给股份、融资也要让出股份给投资人,若干年之后公司上市或被收购了,创始人股份如果还剩 20% 就算不错的了。 Google 上市时,俩创始人分别占 15.6%;Facebook 上市时,小扎占 28.2%;Atlassian 上市时,俩创始人共占 75.4%,他们没怎么融资。

2016/11/09 第753期

The Process Myth

工程师尤其看不惯公司里的各种规章制度、各种条条框框,所谓的 process;工程师们老爱问为什么,为什么会有这样那样的规定。公司里指定规章制度的人又都不给你解释为什么,“历来就如此,别问那么多为什么”。 "It’s a myth, but healthy process is awesome if it not only documents what we care about, but is willing to defend itself. It is required to stand up to scrutiny and when a process fails to do so, it must change."

在 production 使用 docker 的失败史

每次升级 docker 的版本都是那么戏剧性,总有这样那样的不兼容的问题;docker 开发者那帮人总爱重写代码,且不向后兼容;数据库、以及一切需要超级无敌稳定的 service 千万别放在 container 里。

如何做伟大的产品

产品功能归为三类:gamechanger,人们就冲着这个功能买这个产品;showstopper,没这功能人们不会买产品,但加了也对销量帮助不大;distraction,可有可无。 做任何功能前先归类,再考虑做还是不做。distraction 的功能尽量别做,浪费时间浪费资源;showstopper 的功能要有几个,但别太多;gamechanger 的功能也尽量别做太多,你没那么多资源去做,要做就把少数几个做到极致。

电子游戏很无聊

作者是游戏开发者,她的工作、她所在的圈子都是游戏爱好者,就错以为全世界每个人都是游戏爱好者。实际上,大部分人生活都不容易、生活都很忙,游戏里的角色也没啥代入感(如游戏里英雄都是男的,女玩家就偏少)。 本文借着电子游戏,似乎是在讲一个什么道理。今晚美国总统大选基本就这么回事了;下午在公司的会议室里,在场10几个人都说自己认识的所有人都投了希拉里,似乎没有认识的人投川普,看上去似乎希拉里胜券在握的样子。生活中我们都在盲人摸象,都只看到局部,还都以为自己看到了全部。

坚持每天找时间做 Side Projects

每天都做,就算一天只花 15 分钟 也行;每天用的时间不多,期望也不用太高,压力也不会大,养成一种每天的习惯;半年、一年积累下来,side project 就初具规模了。 我的经验是,做 side project 的话,家里的电脑永远不关机,永远开着 IDE、开发用的虚拟机、浏览器的 DevTools、iTerm2 等,每天有时间就做个 1、2 小时,没时间弄个 10 分钟、15 分钟改个字体大小、颜色啥的也行,保持开发环境不变,第二天一有空闲就能接下去写、很快进入状态。

2016/11/10 第754期

忘了无人机和太空船吧,Snapchat 的狗脸滤镜才是未来

摄像头是手机(又名:口袋里的超级计算机)的输入工具,滤镜是 AR、是对现实世界的注释、是一种自我表达的形式、是一种很赚钱的广告形式。谁家滤镜做最棒?谁家滤镜老被抄袭?上市在即的 Snapchat(2017年3月16日注:已上市了)。

避免招到垃圾程序员的面试流程

流程如下:应聘者周五到公司领取编程任务,周末做完,周一到公司面对一群人展示,有点类似论文答辩,不管应聘者有没有被录取,都给他们钱,感谢他们周末的劳动。这样很人性化。

57 条创业经验教训

已关门了的 RethinkDB 的创始人在 2013 年总结的经验,涵盖了人事、融资、市场、产品、营销、销售、开发、创业者身心健康等方面。总结得不错,但创业也是谋事在人成事在天,运气也很重要。

Manager 有责任确保员工有工作之外自己的时间

两种团队:互相信任、互相尊敬、鼓励独立思考、每周 40 小时工作时间 VS 互相不信任、领导靠制造恐惧统治员工、一言堂、每周 80 小时工作时间。

Freelancing 的秘密

作者是前 Spotify 的设计师,自学成才。他出道时做 freelancer 接私活,客户问他会做网站吗?会。会设计杂志吗?会。其实他当时啥也不会,先把活接下来,边学边做还有钱拿。 Fake it till you make it.

2016/11/11 第755期

八卦,谣言,与谎言

本文描述了公司里不同小团队的小领导们一起开的一种会议,俗称 staff meeting,每周一次,一次一小时。主要干三件事:1,就几个关键指标进行讨论;2,专题讨论;3,讨论八卦、澄清流言。 每个人对待开会的心理都是很矛盾的:参加了无关紧要的会,就觉得浪费时间,就要开骂;但若是开会不邀请你参加的话,你心理也不爽,觉得自己不被重视。

我的 Chrome 插件开始收钱后学到的经验教训

这是作者的一个 side project,2011年开始做,一直免费,一直开源。最近开始收费了。一开始采取免费试用,用爽了再交钱的策略,但发现很多用户试用完后直接删了,大大影响下载排名。经验教训:别采取免费试用。

领导不要做编辑

有些领导自诩是首席编辑,尽管不是控制狂,但也乐于插手员工的具体业务;员工们在一个项目里花了几个月,而领导对该项目只了解了几分钟就要指手画脚了。 我不知道领导爱当编辑的典故是从何而来,文中也没提及;但我记得曾经看过一个视频,这个视频里的领导就自诩是首席编辑,该领导身兼两家公司 CEO,其中一家公司以 140 字而闻名于世,他的名字以 J 开头,剩下的大家自己看吧:)

Dockerizing MySQL at Uber Engineering

看来 Uber 内部已经把 docker 玩得很溜了,在 dockerize 了大量 stateless 的 service 后,他们把 MySQL 集群也 dockerize 了。1500 多台服务器上跑了 2300 个 MySQL 数据库。 Container 里跑 MySQL 进程,而数据则是放在 host os 的文件系统上再 mount 到 container 里。

邮件订阅的商业模式

很多主流新闻媒体仍然经营着邮件订阅这种“古老”的内容分发渠道。本文列举了8种直接或间接利用邮件订阅赚钱的方式,比如直接做广告、付费订阅、引流到自家网站再通过网站上的广告赚钱等。

2016/11/12 第756期

I Don't Know

在面试程序员的时候,不少面试官会试图问到应聘者说“I don’t know”为止,美其名曰试探应聘者的能力极限之所在。作者在本文中自我检讨,非白人、小时候非电脑神童的应聘者往往缺乏自信,这种面试对他们不公平。 比较好的做法应该是在面试中让应聘者知道,他们是有权利说 I don’t know 的,这并不是失败的征兆,要给他们信心。我一直坚信你要求别人做某事的时候,一定要说明白为什么,面试也是如此;一般我面试人的时候问问题,都会解释一番为什么问这个问题、这个问题与现实工作有什么关联、这个问题考察的点是什么,让应聘者放松一些

保护你的日程表

Facebook 的 VP Design 对工作时高效利用时间的很好的建议。在日程表上,Makers 每周必须要有至少6个不间断的3小时时间段,这样才能在不加班的情况下真正做出东西。

AWS:Amazon 产品开发方法论 Working Backwards 的案例

所谓 Working Backwards:开发新产品前先写发布产品的新闻稿,迫使自己想明白值不值得做这个产品。本文以 2006 年上线 AWS 的 S3 新闻稿为例,10年来始终如一。 当年这个新闻稿在交给 Jeff Bezos 审阅前已修改过31个版本。搭配阅读以前推荐过的先写发布产品的新闻稿,再开发产品。

The commoditisation of the coder

软件开发可以在外包工厂里流水线作业?程序员已经是无差异商品?本文主要是写给什么都不缺就缺程序员的“管理者”看的。一分钱一分货,靠增加人手来赶进度是不可行的。 软件不是像做看得见摸得着的东西(如啤酒、雨伞)那样,有“做完”、“完工”的时候。“交货”的那一刻,只是软件生命周期的开始,以后的维护成本才是大头。贪便宜省开发成本的结果往往是极其高昂的后续维护成本。

Hamburger menu 的替代方案

手机屏幕小,导航菜单没法都显示出来;几年前一度流行的 Hamburger menu 现在被广泛弃用了,因为隐藏太深,用户不知道后面还有按钮。本文列出了几种常见替代方案。 可以搭配以前推荐过的 The Hamburger Menu Doesn't Work 来阅读。

2016/11/13 第757期

为何我整个十月份都没自愿贡献开源代码

作者是 Python 的核心开发人员,从2002年开始,十四年来自愿用业余时间为 Python 语言添砖加瓦。但这种活雷锋行为并没有得到开发者们的理解,很多人甚至用命令的口吻要求活雷锋们再苦再累也得免费为自己劳动。 很多人会命令开源项目维护者赶紧修复这个或那个 bug、逼迫维护者们要满足自己不合理的功能请求、稍有不顺就要对开源项目维护者们进行人身攻击。要求别人为自己免费劳动,就是在剥夺别人的时间,就是谋财害命啊。作者休息一个月,在本文中思考了开源社区人与人的协作关系、基本礼貌等问题。 在经营湾区日报这两年多来:要android app、要支持kindle、要支持黑莓、要翻译全文、别分享那些我打不开的链接、是中国人就得看中文别整崇洋媚外的东西、开源整个网站、app不要收费、别放广告、网速慢、手机慢、没钱、不懂英文。。让我很长见识也很锻炼心理素质~

风投们该如何收拾送餐类创业的残局

人们愿意花 $30 叫 Uber,但很少人愿意花 $30 叫外卖。文中提到的送餐公司为了赚$12,得先花$32。Webvan 是上一轮互联网泡沫失败的典型,它的三个投资人也是送餐准独角兽DoorDash的投资人。

分析 400 万个 Facebook 上关于川普与希拉里的帖子

本文做的这个分析,过去三个月里关于川普的新闻报道是希拉里的2倍,川普的页面里的帖子的平均评论数比希拉里的多57%。与娱乐圈里的人一样,没新闻比坏新闻更糟糕。 社交媒体的算法会把你喜欢看的东西推给你;支持希拉里的人会看到更多关于希拉里的正面报道,所以很容易产生希拉里胜券在握的假象。

破窗效应在产品设计与开发中的应用

每次项目进展不顺利的时候,或者整个团队对项目很不爽的时候,拿出一两天时间清理一些看似无关紧要的小事,如重构代码、美化代码,让开发环境更整洁,大家的斗志可能就会回来了。 以前有介绍过破窗效应:环境中的不良现象如果被放任存在(如社区中某些建筑的窗户破了而没被修复),就会诱使人们仿效(人们就认为破窗户是正常的,就会破坏更多窗户),甚至变本加厉。修复破窗、让环境变好,人们就会减少模仿不良行为。

不舒服的 1 on 1 的艺术

领导跟下属进行每周一次的关起门来的会议,俗称 1 on 1。好的 1 on 1 是要让双方都感到不舒服的:1,公开场合能讲的话没必要在 1 on 1 讲;2,每次 1 on 1 至少要讲一件不太舒服的事,如批评与自我批评。

2016/11/14 第758期

一小时内加密你的数字生活

我们的数字生活其实是半公开的;政府告诉我们,如果你没做错事,那就没啥可担心的;但还有其他人觊觎着我们的数据。本文讲了一些网络安全小技能,(自以为)懂电脑的和不太懂电脑的都应该看看。 最新的 iPhone 的用户普遍都用指纹解锁;如果你被捕了、被控制了,你的手指是可以用来解锁的(现实与电影都出现过的桥段);本文建议:在被捕那一刹那,尽快把手机关机;再开机的话指纹是解锁不了的,需要输入密码。或者干脆就别用指纹解锁。

算法时代的媒体

本次美国大选出现这样的结果,很多人都在谴责 Facebook 上假消息满天飞。如今人们接受什么消息都是算法决定的,Newsfeed 排序算法、搜索结果排序算法。从信息真实可靠性来说,谷歌做得比较好。 这句话说得好:“The essence of algorithm design is not to eliminate all error, but to make results robust in the face of error.” 本文结尾附上了 Google 的前 head of spam 的话,很有道理:Facebook 的目标是让用户尽量留在平台上,所谓的 engagement,所以他们做得一切事情就是投用户所好,即使是不实消息,但用户爱看,那就给他们看呗。Google 长期以来与虚假消息、垃圾网站做斗争,当年弄出了 Panda 排序算法大大改进了搜索结果的质量,尽管这让广告收入大打折扣,看上去相当伟光正啊

尖叫的架构

这是 Uncle Bob 很经典的一篇文章。好的架构是按 use case 来组织代码的,扫一眼代码目录结构,就知道它“尖叫”着告诉你“我是博客网站、或者我是视频播放器”,而非实现细节的“我是Rails程序、我是Django程序”。 例子:按产品功能组织代码,顶级目录名则是诸如 playlist、player 等,一眼就知道有哪些功能,“尖叫”着产品功能的名字;若按具体实现的技术组织代码,则 views、models、controllers 等是顶级目录,“尖叫”着具体实现的技术的名字,既不好测试相应产品功能以后又不容易替换掉这些技术(framework)。

Build a product that fits your runway

创业早期在做第一个产品时要尽量砍需求,毕竟资源有限;从现有复杂的产品里抽取一个功能来做,做到极致;尽管很多投资人或业内名人都会不屑地说:你只做功能,而不是产品,没前(钱)途。 Steve Jobs 也曾经说过 Dropbox 只是一个功能、不配做一个产品这样的话。 从哪里去找产品(功能)的 idea?操作系统上自带的程序是一个创业 idea、Unix 命令很容易成为 SaaS 创业 idea、Craigslist 上的每个子论坛也都是 Uber for X 的 idea。 Runway 这个词真是绝了,原意是飞机跑道的意思。创业圈总喜欢说 runway,指银行里的钱还能撑多长时间;就像飞机跑道一样,飞机得在触及跑道尽头以前起飞;创业公司也得在 runway 完了前起飞:)

设计更好的按钮

软件(网站、app、桌面程序)UI 里的按钮设计的最佳实践。要把按钮做得像按钮,文字说明要说人话,重要的按钮放在显眼的位置,符合各平台的设计规范等。

2016/11/15 第759期

让我感到羞耻的代码

作者年轻时为一药厂做了个网站,误导网站访问者去买药厂的药;结果有少女吃了后抑郁而自杀,他妹妹也吃了后来被他及时制止。这么多年过去了,他很愧疚。代码越来越强大,便利了生活,但也可能危害生命;程序员往往是不道德的商业行为的最后一道屏障(代码实现者),要对得起良心。 Google 的关于搜索结果质量的评分的官方指南里特别提到一类网页 You Money or Your Life(简称 YMYL),这类 YMYL 网页在搜索质量上的把关要非常严格,因为弄不好是谋财害命的(比如卖假药、虚假医疗广告、盗刷信用卡骗钱等)。

辞职一年之后

作者原来在 Yelp 上班,日益感到为别人打工之无趣;去年28岁,辞职;这一年来在家写博客、画画、编程、写游戏,各种收入总和(包括网友每月累计捐款近$800)比上班时要少,但更快乐了。 他辞职时的经济条件其实还行,在 Yelp 拿的股票让他买了房(要还房贷就是了),另一半有点收入。

为何 30 岁后朋友们开始消失了

每年失去的朋友比交到的朋友要多。以前亲密的好友们现在多存在于虚拟世界里,靠社交网络维持联系,感情日益淡了;结婚、生子,人生角色转换后,交的朋友再也没以前的那么亲密了。

Yammer 的 iOS app 代码升级到 Swift 3 的经验

2个工程师结对编程,用了两星期,靠肉眼与做笔记、纯手工将 180 个 Swift 2.3 代码文件升级到 3.0。要不赶紧升级,Swift 4.0 出来后就更难办了!

互联网产品营销与管理的五个指标:AARRR

Acquisition(用户从何而来)、Activation(会一见钟情吗)、Retention(有人再回来用)、Referral(会推荐朋友用吗)、Revenue(可从哪些用户行为上赚钱),缩写为 AARRR。

2016/11/16 第760期

Stack Overflow 是如何赚钱的

来自 Stack Overflow 的工程师言辞恳切的博文。赚钱的途径有品牌展示广告、招聘广告、SO Enterprise等。文章最后讲述他们发邮件给用户的道德准则,真是一家良心公司啊。 文章开头回答了“为什么 Stack Overflow 需要赚钱”的问题:赚钱不仅是为了公司可持续发展地运营下去,也是为了做更好的产品来帮助开发者们,赚钱越多,帮助到的人就越多、为开发者社区创造的价值就越大。 我想起也曾经有读者发信过来问:“为什么你需要赚钱、为什么你不能无私奉献靠情怀与毅力做一辈子湾区日报”,hmm,我当然也希望我不需要钱就能很好地生活在这个世界上啊,但现实是我得养家糊口啊,抱歉啊~

关于建立个人品牌的建议

所谓的 personal branding:热衷于在社交网络上装逼、修图、晒这个晒那个,在网上造成一种自己名声在外的假象。这些都没用,真正有用的只有 Do great work. Treat people well.

ICQ 二十周年

20年前的今天(1996年),四个以色列高中生上线了 ICQ 的第一个版本。1998年 ICQ 以 $4 亿卖给 AOL。本文描述了 20 年来 ICQ 各个版本的功能演化;现代 ICQ 与其他聊天软件没啥区别了,能视频直播,也有酷炫深度学习的滤镜。 顺便提一句,1999年,遥远的东方也出现了一个神奇的聊天工具,叫 OICQ。。。

通过A/B 测试延长婴儿的睡眠时间

作者在 Amazon 旗下的有声书公司 Audible 上班。他将互联网公司擅长使用的 A/B 测试思想用在了自己10周大的双胞胎身上,要改进的关键指标是睡眠时间,变量包括睡前喂食量、醒着的时间等。 也得生到双胞胎才能这么 A/B 测试啊。。。

Oncall 的时候接到警报该怎么应对

文章分享了他们 oncall 时候接到警报后的三个动作:Communicate,及时分享警报的情况给团队,发邮件或在群聊工具上发出;Learn,搜集尽可能多得信息,log、metrics、各种有助于诊断与恢复系统的蛛丝马迹;Act,行动起来解决问题,如有必要,安排相关人员开会讨论如何在未来避免这种事故。 互联网公司里的工程师一般都要轮班 oncall,24小时任何时候系统出故障了都得第一时间处理。公开、透明、诚实地沟通是很关键的;如果是人为犯错了,要对事不对人,不然以后出故障了,大家都不敢承认自己犯的错误,遮遮掩掩的,反而耽误了修复故障的时机。

© Licensed under CC BY-NC-SA 4.0

想象力比知识更重要! 因为知识是有限的, 而想象力概括着世界的一切, 推动着进步, 并且是知识进化的源泉。——爱因斯坦

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!