湾区日报文章第74辑

目录

2016/10/17 第731期

10 种 Over-Engineering 的错误

在做产品的过程中,没经验的工程师们(或编程学校刚出来的)往往 Under-Engineering,而有一些经验的半吊子工程师们则往往 Over-Engineering,常常想太多了,把问题复杂化。 这个 GitHub repo 里的 Java 代码很具有代表性,用来讽刺现实世界中的“企业级”代码,咋看之下这些代码符合各种软件工程的最佳实践,具有接近100%的 test coverage,但实际上就是一坨过度复杂的狗屎。

替换 MongoDB 存储引擎的那几个不眠夜

他们将 MongoDB 的存储引擎从 MMAPv1 换成 WiredTiger,当 WiredTiger 缓存用满后,MongoDB 变得无响应;花了几个不眠夜换回 MMAPv1,数据恢复就用了36小时。 这是“边开飞机边换引擎”的失败案例:)抛开吐槽 MongoDB 的种种不是,他们在 production 上对数据库进行这么关键的操作确实准备不充分,灾难恢复也没做好。本文最后他们自己也总结了经验教训,另一篇来自 Parse 前系统工程师的博文针对此次事件也做了很好的评价,也推荐读一下。

永远投资你的教育

这里的教育并非单指在学校里拿学位的那种教育,而是自发地投入时间、投入金钱去大量阅读、终身学习,这能让你做更好的决策、见识到更多的机会,你自己的教育是唯一可以终身投资且终身受益的东西。 有的人读4年很好的大学,毕业后每天、每年都没再进步了;有的人没怎么读过大学,但每天、每年都在进步。10年、20年后来看,读好大学的可能人生的巅峰就发生在读大学的那一刹那,只有在那时才是同龄人中的佼佼者,以后就不是了。人生还很长,必须不断进步啊。 “If a man empties his purse into his head no one can take it away from him. An investment in knowledge always pays the best interest.” — Benjamin Franklin

如何决定该做哪个产品功能

公司里每个人都有各种好的产品 idea,先做哪个好?文中给出了一个方法:用电子表格把各种产品 idea 列出来,从三个方面打分 Demand、Impact、Effort。最优先做的功能应该是需求高、影响力大、工程上容易做的。 这个电子表格给出了这种方法的使用范例。

On Writing Product Specs

公司发展到上百人后,给产品增加新功能以前写好 product specs 是很有必要的,因为上线一个产品功能都要不同部门一堆人协同工作,文档是唯一有效的、scalable的沟通方式。 本文讨论了为什么要写 product specs、以及怎么写,还给出了 product spec 的范例。

2016/10/18 第732期

Google 如何备份整个互联网的

使用磁带存储,在磁带上做 RAID4(4个磁带做XOR放到第5个磁带上)。这个哲学好:备份数据的目的是为了数据恢复,宁可备份操作复杂耗时,也要争取数据恢复时的快速方便。 2011年的时候,一个代码的 bug 让 Gmail 的 0.02% 的用户丢数据,Google 用了几天时间从磁带恢复了这 0.02% 的用户的数据,如果是其他公司的话,故居这些数据早就永远消失、或者需要恢复几个月了。 磁带?对,Oracle 与 IBM 都还在卖磁带存储系统。Amazon 的 Glacier 服务可能也是基于磁带的,但外界都只是猜测。

如何在网上吵架赢别人

互联网那么大,你要吵赢别人靠提高音量、靠飚眼泪都是没用的。网上一半的人智商是低于常人的,你可能也是属于这一半,吵也没用,没人在乎你的观点的。在网上晒娃、晒猫、晒吃的就好了,别吵。

循序渐进地代码重构

项目做得越久,进度越慢,因为 tech debt 多了,自己挖的坑多了,自己都得小心翼翼地绕道走,当然慢了。与其在 backlog 里加一些需要大规模代码重构的 ticket,不如洗心革面边走边填坑,循序渐进地重构,时间久了,就好了。

这是你职业生涯的前十年

讲述了在亚洲的曾经学业优秀“你”毕业进入跨国大公司前的喜悦,然后对现实中办公室政治感到失望;在社交网络上与朋友们暗自攀比出国旅游的数量;跳槽去了“更好”但“更累”的公司,不禁迷茫自己的选择;年龄渐长而意识到时间的重要,有无数创业想法却无时间与勇气。 职场10年,人近中年,在升职加薪与竞争对手公司重金挖人之间,何去何从?文笔很细腻,相信每个人或多或少能从文中找到自己的影子。本文是受了之前推荐过的“这是你在硅谷的生活”的启发而写的。 文中刷 Instagram 与朋友攀比旅游照片的桥段真是惟妙惟肖:“你并非真想在照片上打败他们,你只是想让他们知道自己也混得不错,你不是普通人!或许比不过 Sara,她旅游次数更多,但这贱人的男朋友很有钱,不算;也比不过 Dan,不过他是一家科技公司创始人,不能跟我们在同一系统里衡量,他也不算。”

2016/10/19 第733期

NoSQL Data Modeling Techniques

我来拟一个副标题:“如何用 NoSQL 来模拟 SQL”。文中第一张图概括了一切。除非你真的知道你在做什么,还是别用 NoSQL,老旧不酷的关系数据库足够用了。

报纸行业犯了个大错误吗

本地报纸都争先恐后地做网站,只是读者们都不太去访问他们的网站。本地报纸做的网站充斥着免费的、半个屏幕都是广告的、低质量的内容;读者们既然都上网了,当然有更好的选择了。

技术圈的部落主义

作者是有近20年经验的资深 web 前端工程师。本文对技术领域、尤其是 Javascript 领域山头林立的情况进行讨论,呼吁大家钻研一个技术但不要教条主义。 他以前在雅虎工作,内部使用雅虎自己做的 YUI 来做前端开发;后来他同事离职去一家使用 jQuery 的公司做 tech lead,这个同事就咬牙切齿非得用 YUI 替换 jQuery。刚加入一家公司就想说服公司里的每个人都用他主观喜欢的技术,似乎不是什么好兆头。。。 "Don't get so caught up in the tribe that you can no longer thing in terms outside of the hot technology right now and are actively hostile to anyone who doesn't belong. This isn't what our industry needs. On the contrary, we need more people who are willing to abandon their tribes to fully understand a problem and arriving at the correct solution rather than the popular one."

创业公司早期应该招什么样的人

最早期只有创始人的情况下,是招与创始人技能互补的(如工程师招销售)、还是招与创始人技能相似的(如工程师招工程师)?本文认为应该先招那些技能相似的,这样你才知道怎么面试、怎么识别好员工 然后你就能腾出手来去学其他技能(如工程师学销售),掌握了其他技能后,再去招具有那些技能的人。 "In general, though, consider hiring by cell division — bringing in a next person good at the same things you are good at, and handing her some of your work in that area — so that you can focus on practicing the next skill the company needs."

The Commoditization of Machine Learning

20年前做动态网站用 perl、C++ 写 CGI,需要对网站、服务器等底层如何运作有足够了解;如今类似 Ruby on Rails 之类的编程框架让做网站变得极其容易。机器学习的“Ruby on Rails”时刻即将来临。 以后机器学习就是一些封装很好的黑盒,不用理解具体怎么实现的,很多情况下只要调一下 API 就能神奇地完成某个任务。

2016/10/20 第734期

硅谷如何对待这个川普的支持者:Peter Thiel

硅谷与 Peter Thiel 有生意往来的组织(如 Facebook、Y Combinator)都被逼着要“表态”、“站队”、“划清界限”。 小扎在给 Facebook 员工的内部帖子被员工截图外泄;Ruby on Rails 之父 DHH 与 Y Combinator 之父 Paul Graham 撕逼大战;著名播客、Tumblr 前 CTO 撰文“Shame on Y Combinator”。

如何有效地向开发者们报告 bug

我们使用的大部分软件(包括网站、手机 app 等)都是免费的(不考虑花时间看广告,不考虑时间就是金钱)。如何支持我们喜欢的软件的开发者们、并让软件变得更好?及时向他们报告 bug!

UI 设计里的文案

很多人设计 UI 的时候,都会先随便敲几个字,反正等最后设计完了再回过头来写上比较正式的文案。其实文案本身就是 UI 设计的一部分,要重视。倒是可以先定下文案、画个草图,就能立刻做用户测试了。

摆脱“只是一个小小的程序员”的形象

程序员们工作前以为自己将是“建筑师”,工作后发现自己只是“建筑工人”,别人叫你怎么做你就得怎么做,因为你“只是一个小小的程序员”。文中给的建议适合在还算理智、开明的公司里实践。

Our Need for Purpose and Recognition

想让团队里的成员干活给力,就得让他们知道为什么做(Purpose),做了后他们还能得到认可(Recognition,口头表扬、发奖金等) 对于交给手下的任务,很多领导其实都知道“为什么做”,但就是不告诉手下(可能觉得不值得花时间解释),如果手下问了,还得斥责他们“我叫你做你就做,别问那么多为什么”,这样手下干活怎么能给力? "Employees want to know why they are doing something (how does it connect to the overall vision and mission of the company) and they want to be recognized for doing it (by others inside and outside of the company)."

2016/10/21 第735期

Each necessary, but only jointly sufficient

Etsy 现在的 CTO 前几年写的文章。production 出故障了,人们经常一厢情愿地想找出有且仅有一个 root cause,这样才好向上面交差。复杂的系统出故障了往往不止一个 root cause,有天灾当然也有人祸。 "... failures in complex systems require multiple contributing causes, each necessary but only jointly sufficient." "Finding the root cause of a failure is like finding a root cause of a success."

不同等级的管理岗位

作者总结了她这几年在不同等级的管理岗位的工作心得、工作职责、新技能培养、遇到的困难等。从管工程师、到管一半工程师一半小经理、再到手下都是经理。

如何避免经常重写你的 Javascript 代码

网站前端编程就是写 UI。本文认为应向经得起时间考验的老旧 UI 编程套路学习,如用 Windows API 以及 SDL API 写的代码:main 函数与 event loop。

AI 技术的声音选择

标榜人工智能小秘书的各种产品的声音都是听起来像是年轻、受过教育的白人女性,如 Siri、Alexa、Cortana;而那种要刻意突显出是机器人的情况,声音往往是男的。 连黑人开的公司做的 app 也要刻意弄成白人女性的声音,迎合市场:)

没有合伙人而且又结巴的创业者

Commando.io 的创始人的文章。完全通过互联网与人沟通、通过互联网做生意,讲话结巴问题不大。但到了要融资、要与投资人讲电话、开会的时候,就麻烦了。 当年这篇文章在 Hacker News 上的讨论,底下评论大家帮他出谋划策。

2016/10/22 第736期

Spotify 这家公司是如何做产品设计的

作者一行人拜访了 Spotify 在纽约的 office,看上去 Spotify 的工作环境不错啊。本文采访了他们的设计师,截取了若干工作场景,与其他工种的协同配合。文中有不少他们工作时(估计是摆拍)的照片。 本文可以搭配以前推荐过的介绍 Spotify 工程文化的视频来看。

Trello 这家公司是如何使用 Trello 这个产品的

Trello 这家公司有 100 个员工,在公司的 Trello 里共用 150 个 boards(不包括个人使用的 boards),各个部门都灵活使用他们自己的产品安排任务、沟通、高效工作。 公司里重度使用自家产品的例子还有:Slack 这家公司如何使用 Slack 这个产品、Quip 这家公司是如何使用 Quip 这个产品的。

Design Due Diligence

可以作为“风投进城防骗指南”的一部分来看:)风投在考虑投资早期创业公司前,对该公司的设计方面该做怎样的考察?要向业界专家咨询,要采访该公司的设计师以及现有用户 我一个朋友是大学教授,a16z 每次要考察他那个领域相关的创业公司的时候,都会叫他过来一起把关。现在创业公司骗投资人的情况太多了,风投们要学会怎么防骗啊。

写给年轻程序员的建议

关于编程、与同事相处、工作效率、个人成长等方面的一系列不错的建议。我想加一条:开始工作后要学会花钱买时间(如买工具),花钱买个人成长(如培训、开会),花钱买软件(对同行的劳动表示尊重)。

多人团队就是一个分布式系统

一个人的想法都不可能在不同时间保持一致,更别说多人的了。分布系统之所以难,是因为节点间要分享资源、要通信;多人团队也一样,所以分布式系统的 CAP theorem 对团队管理也适用。 管人的领导们多读一下 Leslie Lamport 的那些分布式系统理论的论文是很有好处的:)

2016/10/23 第737期

一人一首成名曲

你能创造什么内容(音乐、视频、文章、设计等)来改变你的人生轨迹?就像当年 12 岁的 Justin Bieber 那段 YouTube 视频让他被星探发掘。发掘自己的强项,选择合适的平台去创造内容。 你需要的是那么一个好的个人作品来打开局面。你的代表作是?

计算机科学里最难的事

就是 naming things。文章举了各种代码中命名不当的而给开发带来难处的例子,如命名函数、函数参数、变量、类名等。代码之外的例子也很多:项目名称、服务器名、域名、命令行命令等。 其实原话是:“There are only two hard things in Computer Science: cache invalidation and naming things.” Cache invalidation 也是日常工作中让人头疼的一件事。 谈到给项目命名,现在不都在搞 microservice 吗,一堆的 microservice,该怎么称呼?有同事是 Game of Thrones 爱好者,经他手的几个 microservice 都是剧中人物的绰号,有同事是走日系卡通路线的,还有同事搞圣经这块的,五花八门。导致新人入职后都要用一上午熟悉各种专有名词。。。

我在互联网上保护个人隐私的策略

互联网上声称是“免费”的东西大多都不是真的免费,你不花钱,但你得花时间去看广告,同时你得在不知不觉的情况下贡献出个人隐私数据给那些互联网公司们、让他们更好地向你投递广告。 当然,大多数人并不会意识到时间和个人隐私数据是什么重要的东西,所以也无所谓。但有些人会觉得,干脆我交钱得了,每个月交一些“保护费”给互联网公司,别给我展示广告、也别收集我的隐私数据。遗憾的是,你想交钱也交不了,没这途径。作者就找了一些常用线上服务的更尊重用户隐私的替代品。 今年的 Startup School,YC 的 partners 与小创业公司创始人互动,模拟 office hour 时给的建议。其中有个创业公司做的事情是“买卖用户隐私数据”:他们掏钱跟网民们买(更详细的)隐私数据,然后再转手将数据卖给其他公司。会有网民愿意卖自己的隐私数据吗?会的,反正所有网民都已在不知不觉的情况下将个人隐私数据贡献给了那些互联网公司,现在我明确掏钱跟你买,你还不乐意?

NBA 球员到硅谷的科技公司实习

运动员退役后该靠什么技能维持生计?NBA 搞了个项目帮球员们开拓球场之外的职业道路,他们与硅谷科技公司合作(如 Google、Facebook),让球员们无薪水去实习、见见世面。 2K 是制作 NBA 游戏的公司,去这家公司实习的 NBA 球员应该普遍对自己在游戏中的技能分数挺不满的:)去实习的多是职业生涯中不温不火的球员(其实大部分球员是这种类型的),在游戏中的技能点一般都不高;技能点高的都是天皇巨星,不用去搞这种无薪实习的。

最好的代码是没有代码

每多写一坨代码,就多了一些产生 bug 的可能,就增加了未来维护代码的时间、也增加了未来读代码理解代码的时间。为了做到同样的功能,有没有可能不写代码、或少写代码?

2016/10/24 第738期

HotelTonight 所使用的技术:从 MVP 到即将上市

现在他们有40个工程师,很标准的当代创业公司技术栈:后台主要用 Ruby on Rails,数据库是 MySQL,使用 ElasticSearch,task queue 用的是 IronMQ,用 datadog 做监控,用 Terraform 标准化服务器配置。

成功科技产品的三个支柱

简称 GEM 框架:Growth、Engagement、Monetization。团队在做产品额时候应根据这三个方面合理分配各种资源(人力、金钱、时间)。

20年后重写俄罗斯方块

1996年,作者用 QBasic 在 DOS 上写了个俄罗斯方块游戏。2016年,在开完 PyCon UK 后,她用 Python 开发,用上了两块 BBC micro:bit 电路板来控制。20年的间隔,编程体验有何不同?

你每天醒着的时候有 100 个 10 分钟

一个人每天醒着的时间有大概 1000 分钟,也就是有 100 个 10 分钟。拿出一张纸花 10x10 的网格,每个格子是 10 分钟,这张纸就是你的一天。在这张纸上标注一天的活动,或许能敦促你更好地花时间。 以前推荐过另一篇 Wait but why 的文章 The Tail End:在一张 A4 纸上画网格表示你的余生,每个格子代表你的一周,如果你每周都会做同样一件事(比如看一本书、看一场球、回家见一次父母),那你这辈子能做这件事的次数其实不是很多了,在这 A4 纸上都能数出来了。 有一个 Chrome 插件叫 "The Last Sunday",能让你每打开一个空白 Chrome tab 的时候看到自己还能经历几个星期日,可能也就2500到3500个星期日吧。

2001 年的 iPod 发布会与 20 张正版 CD

15 年前的今天是 Apple 发布 iPod 的日子。发布会上250个观众,多是记者,每人拿到一台 iPod,以及20张正版CD;那台 iPod 里就是装了这20张CD的内容。当时没有 iTunes,没地方下载正版歌曲,所以拷贝了几次,就相当于买几张相同CD。 作者就是当年从日本去参加这次发布会的记者。15年前的今天,911刚过去没多久,很少人敢坐飞机去这个发布会,作者竟然从日本飞过太平洋赶过去了。他今年找出了这20张由 Steve Jobs 以及 iPod 团队挑选的 CD,CD 的封面贴在本文最后。当年发布会的场景在 YouTube 上能看到。 当年 iPod 的宣传口号是:1000 Songs in Your Pocket -- 相比之下,当时其他 MP3 播放器厂家宣传都是“好几GB 超大存储空间、还能显示歌词、电池容量超大” 等。

2016/10/25 第739期

JavaScript ES6 核心功能一览

普及一下 ES6 的新语法,最新版主流浏览器多已支持了,可以当场打开浏览器的 Developer Console 敲一下练练手。

创业公司的5种竞争优势

产品(技术先进,用户体验超好)、价格(规模化,超低价)、定位(针对高端用户,还是低端用户)、分发渠道(有办法让大量潜在用户看到并用上)、执行力(团队超牛逼,经验丰富)。

社交网络的祖先:BBS

80年代的时候,美国这里的BBS比较火;而中国是在90年代后活跃起来:较早的惠多网上有马化腾、求伯君、丁磊等老网民;90年代中期以后各高校BBS陆续出现,怀恋那个telnet灌水的年代啊。 很早以前比较常去的有母校的BBS、水木、紫霞、一塌糊涂、ptt(我常去架空历史板和八卦板)。我在 iOS app 更新里有一则关于 BBS 的段子。

为什么 Tim Cook 是新时代的 Steve Ballmer

产品型、有远见的CEO离开公司后都传位给曾经执行力强但不懂做产品的下属,公司靠着前任CEO定下的牛逼的商业模式,再加上现任强执行力的CEO,盈利还能增长几年,只是不创新了 Bill Gates 和 Steve Jobs 都是这种产品型、有远见的 CEO,他们都传位给了执行力牛逼的下属,Steve Ballmer(销售)以及 Tim Cook(供应链)。俩公司盈利似乎依然蒸蒸日上,都已难有前CEO在的时候带给用户的惊喜了。Steve Jobs 在世时都亲自 demo 产品的,但这五年来的唯一新产品 Watch 是谁 demo 的?

First Mover or Fast Follower

是做创新者、早起的鸟儿有虫吃(如Amazon电子书、AWS)?还是后来者居上、快速跟进、螳螂捕蝉黄雀在后(Google已是第N个搜索引擎、Facebook已是第N个社交网络)? 先跑还是后跑都不重要,先过终点线才是最重要的。文中引用了俩数字:1)创新者(first mover)一般最终市场占有率只有 7%;2)产品的市场占有率 60% 是最理想的,既占了大头、又能依靠剩下的小竞争对手们争相做广告教育潜在用户、进而将市场做大。

2016/10/26 第740期

每天坚持五分钟日记:据说有助个人成长

每天花5分钟在纸做的笔记本上回答几个问题。起床时:我感激啥?今天怎么做才会过得好?再确认一下我是谁?晚上睡觉:今天发生了啥好事?如再来一次,今天怎么过好? 这样的笔记本网上有卖。。。而且还有 app 。。。

从学术圈到数据科学

Airbnb 的三个数据科学家写的文章,指出了高学历、从象牙塔中走出来的人的坏毛病,以及怎么改变才能适应工业界这种需要真正的团队协作、快速发展的环境,写得很到位。 现实中接触过的很多刚毕业进入工业界的 PhD 都普遍存在眼高手低的情况,不屑于去做没技术含量的准备工作,只想做“有意思”的工作,而且善于钻牛角尖。文章里讲他们希望 PhD毕业生要有 Beginner’s Mindset,你在学术圈的成功(发了顶级论文)并不能直接转化成工业界的成功(做出好产品、管理好团队等)。

一个风投自己的创业想法清单

很多风投自己有很多创业 idea,然后创业者来 pitch 的时候碰巧撞大运与自己曾经的想法不谋而合,缘分啊,于是就投资了:)本文列出的这些创业 idea 都是解决他个人遇到的问题的。

无趣的技术栈是快乐的源泉

使用酷炫新技术(各种JS框架、NoSQL),满满是坑,周末不能好好玩,都在加班加点修 bug。还是使用无趣的十分不酷的技术比较好(如C#、SQL Server),超稳定,省下的时间多陪陪家人,多好。 本文在 Hacker News 上引起了很大共鸣,评论第一条来自 Stack Overflow 工程师,Stack Overflow 就是这种使用无趣技术的(ASP.net、IIS、SQL Server)。Stack Overflow 还专门有一个精美页面展示他们的服务器种类、数量、性能。

Slack 桌面版是用什么写的

最新版的 Slack 桌面程序是基于 GitHub 开源的 Electron 写的,而 Electron 是基于 Chromium 浏览器。Slack 桌面版的每个 team 就是一个 Chromium 的进程。 现代跨平台桌面程序越来越多地都是基于这种“本地服务器 + 浏览器 + web 前端 + 远程服务器通信”,Spotify 也是如此。

© Licensed under CC BY-NC-SA 4.0

640K对每一个人来说都已足够 —— 比尔盖茨

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

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