小米的抱负

原文地址(original source):http://stratechery.com/2015/xiaomis-ambition/

中国智能手机公司小米,上个月完成了11亿美元融资,总估值达到450亿美元,小米不仅仅卖智能手机:Mi.com拥有超过1000件商品,它是中国第三大电子商务站点。尽管如此,有一种商品它没有卖,那就是AA电池【注1】充电器。只有苹果有卖:

苹果的电池充电器

我清楚地记得这个相当古怪的产品出现时的情景,不是因为它非常有魔力或革命性,而是因为一个同事恰好在第二天就拿着它。他向我们夸耀其充电效率和“待机自耗电(vampire draw)”,令人好奇的是,他没有提及他为什么真正地需要这款电池充电器。他买是因为它由苹果制造,这就足够了。

小米是什么?

在写到小米的时候,会有一些陈词滥调。作者声称小米以“中国的苹果”而知名,但实际上,正如作者解释的,它们有着很大的不同:更像亚马逊、或使用小米CEO雷军的话,有点儿像Google。它们以成本价或接近成本价卖智能手机,通过服务来赚钱。

围绕小米的大量评论的问题,在于准确地定位那些“服务”是什么。简单的假设就是传统的互联网服务,比如Google提供的服务,包括app商店、在线门户,等等。这样的话,难以符合450亿美元的估值,尤其是中国的移动服务的大部分收入正在被腾讯的主打应用微信、还有百度(搜索)、阿里巴巴(电子商务)、苹果(应用商店)瓜分了,各种中国的app商店分占了剩余的份额(小米有自己的app商店,但是它仅仅处于前5名最受欢迎之列)。

...

黑客是真正的10倍效率的工程师

原文地址(original source):http://coffeecoder.net/blog/Hackers-are-the-real-10x-engineers/

10x(10倍效率)程序员的概念首次被佛瑞德·菲利普斯·布鲁克斯二世(布鲁克斯法则的名气)【注1】在其文章《没有银弹》中提出,‘在普通设计师(程序员)和优秀设计师(程序员)之间,有着10倍多的差异’。这个想法得到了广泛讨论,有时候还被驳斥,多数情况是得到了支持,这种现象不会让人吃惊,因为不可能精确地衡量一名程序员的生产力。

令人悲哀的是,10x程序员经常被视作粘到屏幕上的瘾君子,在键盘上一刻不停地移动手指。这种画面在科幻电影里或许受欢迎,但是它很难等同于现实。

在我之前的公司,我们需要一个系统,在现有网站为富文本文章集成增删改查(CRUD)系统,这意味着要创建很多表单,还有耗时费力的编码过程;总之是个悲催的工作。我们已经有一个WordPress博客了,因此我建议可以使用带有某个插件的WordPress,该插件支持JSON格式输出文章以及自定义标签来定位文章显示的地方。只需两天就能完成所有工作。

我不敢说这一定是格外优秀的想法,但是它为公司节约了一周多的时间。我不是说我自己就是10x的家伙,但是我相信这种想法就是10x所定义的。

构思想法

在认知层面,几乎不可能描述数十亿神经细胞的复杂交互是怎样导致诸如“想法”之类的东东。让我们尝试一种更为简单的抽象。

  1. 我想,WordPress已经有了完成我们全部需求的功能,我们只是需要一种将其集成到网站的方法。

  2. 我意识到,由于WordPress插件的无所不包,所以也一定有个支持JSON API的插件。

  3. ...

到了2015年,为什么我们仍然在写不安全的软件?(节译)

原文地址(original source):http://www.jerf.org/iri/post/2942

我已经看了大量编程方面的博客,如果你在看本文,那么你可能也看了很多博客。让我预先告诉你,这不是你通常的、归结为“再加把劲儿!”的安全论调。让我们讨论一下聪明的、有经验的程序员,他们正在尽量编写安全的代码,即使他们本身不是安全方面的“专家”。这是重要的一群人,因为世界上要写的安全相关的软件,比能够被安全专家编写的软件要多得多。

在一个理想的世界,假定为目标群体将结束本文。你的浏览器滚动条出现在全屏视图里,本文还要继续一段时间。唉,数十年的经验和被训练过的相当高的智商,对于在当前编码环境里去编写安全的软件,仍然是不充分的。

这也是最高量的资历,可能承受任意合理的规模,那么,实际上这等同于说,在当前编码环境编写安全的软件是不可能的。

让我们讨论下为什么这么难。我的观点很简单:

我编写不安全的软件,因为我们的编码环境造成的,它使得编写不安全的软件比编写安全的软件更加容易。

不过搞清楚它的真正涵义,会把你带到一些让人惊奇的地方。当我尽量向你展示为什么这不是一般地真实的时候,请跟着我,不过实际上,这是彻头彻尾地真实。我们不是偶尔使用不安全的工具,比如被破坏的加密程序、或滥用web框架;我们是在不安全的海洋里游动的鱼儿,我们侵泡得有多深就很明显了。

首先,我必须确认……

编写安全的程序是有难度的

我们在工作中都有有限的感知预算。我们多么想拥有摇滚歌星或武士的神秘力量,可惜我们都不是。不管我们变得多么有经验,用3个token而不是100个,以花费较少的感知预算。想少些努力而尽可能完成一个任务,这不是“懒惰”,而是认识到资源总是有限的事实。

他们需要多少感知上的努力来编写代码,对此去检查一下编码环境,这是合理的事情。用这种方式彼此比较环境,是合理的。与工具无关、唯一相关的是程序员的技能,这种想法的论调要抛弃掉,这是合理的。

(花絮:在编程界,因为某种原因,大家对于格言“笨拙的工匠才会责怪他的工具”有着通常的误解,他们认为责怪其工具的人恰恰被证明为笨拙的工人。这句话的真正意思是,把糟糕工具放在首位的工匠才是笨拙的。技能娴熟的工匠不会毫无怨言地使用钝锯子。他们会毫无怨言地找到或做一把好锯子。使用笨拙工具而没有抱怨的工匠,甚至比只是抱怨的工匠还要糟糕!)

这里我们遇到一个问题,客观地测量一种语言所引起的认知成本,变得困难了,但是我认为,在实践中,“token数”足够接近,在某种程度上这不是真实的,随着时间的发展,它越来越真实。(不幸的是,证明这一点将在另一篇文章介绍。超短版本:按照佛瑞德·布鲁克斯【注1】的观点,在使用的常用语言,正在挤出它们偶尔的复杂性。因此让我再次强调:足够接近,而非完美。)因此大体上,正如我下面要讨论的“轻松”和“工作”,你能够想象得到我正在讨论的“token数”。

毕竟它是小型的、世界范围内可写的变量

让我们温习一个没有争议的例子吧,认知上昂贵的正确事情,是如何导致开发人员去做简单的错误事情:全局变量。