刘炯(Sharpmark)的博客

v4.0 一个不怎么更新,又舍不得关掉的博客

平台产品的思考

这次聊聊我对平台产品的看法。由于从业经历原因,我并没有什么机会去深入接触和理解一个平台,这里就当整理下我作为旁观者的一些思考。

平台的定义

生产者(厂家,渠道商,作家,开发者,直播主)生产出内容(商品,服务,文章,视频),通过平台提供给消费者(买家,读者),消费者消费(付费,收藏,转发)内容,给予生产者回报。平台的本质是通过提升交易效率,来获取对应的价值。

基于以上定义,百度搜索并不是平台,因为搜索有消费者,没有生产者,而百度竞价排名是广告平台。京东不是平台,他自己就是生产者(渠道),因为他获得了交易的差价回报,淘宝是平台。

平台的特征

过去的集市就是平台,现代的商场也是平台,互联网上更是涌现出了大大小小都号称自己是平台的产品形态。但我认为只有具备以下特征的才能称为平台。

  1. 双边长尾共赢。首先,双边是长尾,双方都需要一个平台来促成交易。建立在一方寡头之上的平台不成立。比如整合几个电商网站的一淘网;接美团,饿了么,百度外卖的外卖导航;接滴滴、易到、神州的地图应用;接58,赶集的生活导航入口。其次,双边要共赢。生产者获得更多成本更低的客流,生产者获得更多的利润(至少不能是更少的利润),消费者获得更便宜更高质量的内容。
  2. 规模和利润的幂效应。在生产者消费者数量少的时候价值比一般产品低,随着生产者消费者的增加,平台价值呈幂指数上升。甚至形成垄断。同时,平台边际成本低,前期投入高,后期投入并不跟规模等比增长,而是呈线性增长。直观的理解是规模利润是 y=x2; 成本是 z=kx。
  3. 具有相对的封闭性。要么流程闭环(淘宝),要么用户封闭(iOS),要么内容独家(Youtube)。并不一定全封闭最好,全封闭容易有规模天花板。所以需要权衡。同时,封闭和开放策略的不同也会影响内容的质量。

平台的责任

作为平台,最重要的是保证平台长期,稳定,高效的运转。让生产者和消费者能安心在平台上满足自己的需求。所以,平台需要承担以下责任: 1. 创造流量。流量对平台来说,就是生产者和消费者的“沟通”数量。越多次的沟通展现,就越能带来消费,产生价值。这就是为什么平台和流量入口总是结对出现,为什么当年淘宝要屏蔽百度。平台需要不断获取新的消费者,购买新的流量,通过新功能新激励来提高消费者活跃等等。 2. 制定交易规则。制定交易规则的前提是平台具有议价权,这也就是为什么寡头平台不成立的原因。最基本的能力是中立的制定流程规则和奖惩策略来保证交易的高效,公正的执行。高阶能力是通过规则来保证平台长期,稳定的发展,去重点扶持那些优质的生产者和消费者并打击劣质的生产者消费者,确保不会出现劣币驱逐良币的情况发生。同时,规则的制定不能太琐碎,过于细碎冗杂或过度奖励的规则会限制生产者和消费者的主观能动性。他们的心态会从更长期的自我激励的状态变为短期就会失效的被动激励。当心态变更后,就会向平台索要更多的奖励,进而扭曲交易行为。 3. 提升效率。理解生产者和消费者的整个交易链条,消灭中间角色,缩短交易时间,提升交易成功率,提升生产者运营效率,降低生产者生产成本,降低生产者获客成本,交易流程标准化,提供担保等各种方式来提升整个交易效率,降低交易成本。这样平台就能获得更多的利润。 4. 服务的心态。摆正心态,理解自己是平台,提供标准化的服务。不能店大欺客,肆意修改规则。让生产者和消费者对平台产生依赖和信赖,而不是抵触和反感,甚至害怕。在对正常流程提供服务的时候,对于争议流程,也要做好公平仲裁,保证生产者和消费者的合理权益。对服务心态的另一层解读是仅服务好该服务的,但不促成和推动交易。平台要认为好的交易自然会发生,不合理的交易推动也没用。 5. 反乌托邦。平台要站在上帝视角思考系统的运作,理解系统中会存在特例,存在漏洞,存在冗余,存在不和谐的东西。制定规则时不要追求完美。而把更多的精力放在提升效率和群体的方向引导上。

平台的演变经验

  1. 一般平台在早期政策都是优先扶持生产者,尤其是优质的生产者(比如邀请制),前期要确保内容的质量和数量,好的内容自然会引来消费者,同时生产者也会帮助平台宣传。但反过来直接吸引消费者来却发现没有好内容时消费者就会迅速离开。等到雪球滚起来之后,平台进入自增长期的时候,就可以将政策倾斜于消费者。用于确保消费者的忠诚和流量的稳定。
  2. 很多平台先在某个垂直领域深耕,然后将模式横向扩展到更多领域。比如淘宝先扶持服饰类目,成功之后扩展到了航旅彩票服务二手等各种类目,靠编程问答起家的 Stackoverflow 现在已经成为 158 个垂直类目的问答网站。
  3. 纵向深耕上下游。当在某个领域占住流量入口。当淘宝做好交易之后,就可以纵向管理物流,做消费金融。Amazon 在电子书模式成功后开始干掉中间出版商,引导读者自出版。
  4. 前期封闭慢慢开放会获得称赞,开放平台慢慢封闭只会招来骂声。

如果你对平台有更多理解或不同意见欢迎反馈讨论。

《硅谷钢铁侠》背后的商业逻辑

“我们想要一辆会飞的汽车,得到的却是 140 个字符。” ——彼得 · 蒂尔 《从 0 到 1》

最近读完了《硅谷钢铁侠——埃隆 · 马斯克的冒险人生》,看完的感觉是“会飞的汽车来了”。

传记就是传记,夸大主人公鲜明性格对事业成功的影响,渲染创业经历的曲折和惨烈,书才更好卖。他的性格特点固然对推动成功有帮助,但我觉得书中多次强调的那些不是他企业成功的主因。更不是只有这种偏执狂才能成功。在我看来,特斯拉的目前的成功还是符合商业基本规律的。而 Elon 作妖的性格,说不定会让公司遇到更多风险。

可行的宏伟愿景

移民火星,清洁能源,电子银行……,哪一件事是都是改变人类科技历史的壮举,都是全人类的愿景。相比“时间机器”,“人类永生”,他的愿景符合物理基本定律,具有可行性。而且他看好的领域都是依靠工程技术革新就能成功的领域,而非依赖时间风险极高的基础科学革新。

伟大的愿景除了能支撑自己如此高强度的工作,支撑投资人的信心和股价外,最重要的一点是能够吸引那些足够疯狂,足够有才华,梦想改变世界的年轻人。愿景能够给予他们无穷无尽的力量。全书我最感动的地方是一帮 SpaceX 的年轻人在夸贾林环礁从砍树灌水泥开始,用 6 个月时间准备好了第一次火箭发射。在那种极端恶劣的环境下能让团队坚持并保持战斗力的,一定不是金钱和股票,而是他们对自己在做的事业的热爱,对成功的渴望,对愿景的执着。Elon 在一封 SpaceX 的公开信中也提到公司短期不会上市,以避免公司短视。

一个切实可行的宏伟愿景代表了正确的方向和目标。有了正确的目标,就能看到希望,即便是在公司危难之际,大家也会因为目标而坚持下来,努力克服困难直到取得胜利。

结合科技和商业

光有理想是没用的,只有把愿景通过技术手段实现,通过商业的方式才能持续。

Elon 在宾夕法尼亚大学拿到了物理学和经济学的双学位,他牛逼之处在于将复杂的物理概念与商业计划相结合的能力,并将科研成果转化为营利性企业的非凡才能。他可以为了成立 SpaceX,他用了几个月的时间研究航天工业、太空知识及其物理原理。同时,他还能完整计算建造、装配和发射一枚火箭所需的成本。

Google 创始人拉里佩奇评价 Elon:你总是需要从一个问题的首要原则开始着手。它的物理本质是什么?需要花多少时间?需要花多少钱?我要做的话可以便宜多少?需要一定程度的工程学和物理学知识来判断什么是可能、有趣的。埃隆的不同寻常之处就在于他知道这一点,并且他还了解商业、组织、领导力和政府问题。作者则评价 Elon 逻辑清晰,对科技概念和知识的了解,以及将科技商业化的敏锐知觉。

因此,Elon 能够有效地将科技发展和商业变革结合起来,用科技革新的方式杀入一个传统行业获得成功。他能发觉恰好成熟的技术(如电池技术的发展)进行整合,把握商业需求的发展(如私人火箭发射的需求增长),用新的技术满足新的市场,最终实现目标。

用科技打败落后

第一次创业的 Zip2 是帮助传统行业信息化,第二次创业的 X.com 是颠覆因循守旧、躺在丰厚的利润上不思进取的传统银行业,书最后对 Elon 的采访更能看出 Elon 对 Paypal 的伟大愿景。他很早就提出了互联网金融,目标就是颠覆传统而保守的实体金融,而不是现在单纯的在线支付工具这么简单。纯电动汽车更是颠覆了这帮传统的汽车制造商,他们因为油耗汽车的巨大成功和市场,让这些传统汽车制造商无法全力投入到纯电动汽车的研发中,最终被 Tesla 弯道超车,成功卡位。

书中多次描述到航天业更是传统、垄断、多年没有进步的重资产行业,因为缺乏竞争,行业内的公司依靠复杂的供应链来制造火箭。由于航天特殊的要求,很多设备停留在几个时代之前从未进步而且成本昂贵。SpaceX 从开始就打算自己造轮子,虽然导致风险上升(尤其对创业公司是致命的),但一旦成功,就会建造巨大的技术壁垒和成本优势。

Elon 还通过技术手段还有效地提升了工作效率,比如通过发明火箭阀门自动检查装置,让原来五个小时的工作,变为几分钟就能检查完毕,并可以按照需求自动调节阀门松紧。比如 Tesla 会通过计算机模拟碰撞试验来节约经费和研发时间。除了技术革新,Elon 在组织结构上也做了很多革新,包括扁平的组织结构,让各职能人员在一起办公以提高沟通效率。

性价比才是商业之道

除去奢侈品的玄学外,大部分商业公司的成功往往是因为提供了价廉物美的商品。

火箭是寡头竞争的行业,大家会不再狂热追求技术革命,而是更多追求利润率,建立成本壁垒。Elon 使用了很多新的生产技术和模式来降低成本。低成本高科技这个高“性价比”套路造就了 SpaceX 的成功。ULA 为每次发生收取 3.8 亿美元,相比之下 SpaceX 只收取 9000 万美元(实际 SpaceX 标准发射价格更低到 6000 万美元)。颠覆行业的性价比,让 SpaceX 真正革了航天业的命。

Tesla 的电动汽车,因为电力驱动比内燃机对能量的使用率更高(3~6倍),所以每公里行驶成本很低;又由于结构简单,所以在汽车保养维护方面惊人的节省。

SolarCity 是另一种策略。太阳能产业的技术并没有革命性提升,当时的瓶颈在于太阳能板的安装销售模式复杂,用户很难方便的安装。因此 SolarCity 核心解决了商业模式的问题,帮助客户分析,并提供租赁模式,很短时间就变成全美最大的太阳能板的安装公司。

现在很多跨国公司剥离高风险重资产的部分,避免重复造轮子,通过成熟的供应商提供性价比高的元器件,自己组装整合,最终提供给用户产品。而 Elon 的几个公司都是相反,都是自己在美国本土从头设计、研发和生产制造,降低对供应商的依赖,确保自己控制从设计到生产端的全流程成本。这在航天这种供应商少竞争不激烈的市场中,自行研发是更好的降低成本的方式。

结语

Elon 几个公司现阶段的成功还有其他一些值得说道的点,比如让三家公司相互帮助,技术共享,建立生态;Elon 自身过硬的专业背景和能力;Elon 的冒险精神,成功的欲望,决心和努力;认为自己要改变世界的责任感等等。很多有趣而特有的优势,让 Elon 和他的公司与众不同。但作为一个商业公司,伟大愿景,技术壁垒,商业模式,三者都是根基和成败的根本。

为什么 MIUI 做广告是错的

(所有讨论跟我所在公司无关)

为什么 MIUI 想赢利只能做广告?

小米公司从开始的策略就是“硬件不挣钱,靠软件盈利”的所谓互联网盈利模式。之前雷军接受外媒采访时说小米不像苹果,更像是 Amazon 卖 Kindle,硬件不赚钱,而通过硬件贩售内容赚钱。所以,小米手机当年依靠砍掉硬件利润来换取市场规模和用户规模后,公司的估值和盈利的重任则必须压宝在 MIUI 上。

软件的盈利模式无非以下几种(或他们的组合): * 广告推广,常见于工具类和社交类应用,应用本身一般是免费的,靠展示广告/推广下载来赚钱。如猎豹的 CM 和新浪微博; * 买断收费,比如很多单机游戏,生产力工具。国内很难产生规模。如 Sketch,Windows 7; * 增值收费,有按项收费,有按月支付,这是买断收费的一种进化。早期的网游,生产力工具和一些服务。如 Wow,Office365,迅雷会员; * 交易分成,提供某领域的服务,并从交易中赚钱,电商,O2O,手游联运平台可以属于这类。如老虎股票,猫眼电影,各类外卖。

这四种模式的特点适用场景以后再展开说,先把 MIUI 往这四种模式上套,可能的盈利方式包括: * 广告推广:应用开屏,时间流广告,个性化推荐(推荐应用或新闻),应用商店付费推广等等; * 买断收费:MIUI 的用户特征(甚至国内整个环境)注定无法在软件端提供买断收费服务,而且买断收费不具有持续性,不容易给投资人讲故事; * 增值收费:功能体验类不可能收费,因为竞争太激烈,你收费的功能友商下一版就免费了。空间服务类功能,跟“买断收费”一个问题,用户群没有付费习惯; * 交易分成:MIUI 是在这个模式上探索过的,小米黄页,小米生活,两者都失败了。问题在于没有提供足够好的服务,且用户没有习惯。唯一在“交易分成”模式下说得过去的是游戏联运。但要注意的是,游戏联运本质上是跟出货量正相关的,系统本身的体验并不会太影响最终的收益。换句话说,华为,Vivo只要出货量跟小米一样,那么在游戏联运上挣的钱一定是同一数量级。

再看下 Amazon 的 Kindle 和 Sony 的 PSP ,这类产品相当于是硬件不赚钱的基础上靠“交易分成”来产生持续的盈利。这个模式有两个特点:

  1. 用户购买硬件就是为了消费内容,甚至说没有这些内容,硬件就不值钱了;
  2. 平台相对封闭,且内容是高质量的;

用 Kindle/PSP 对比小米手机,在小米手机上跑的 MIUI ,根本无法提供具备上述特点的封闭环境和高质量独家内容。唯一可能能走出这条路的,是拥有独家影视资源且有能力烧钱的乐视手机。iPhone 则是更 imba,硬件赚肿了以后,还可以依靠交易分成赚的盆满钵满。

所以分析之后就能明白,小米靠手机硬件性价比来扩大的市场规模,就必须靠证明 MIUI 的盈利能力来证明公司价值。MIUI 盈利模式根据上述分析下来,就只有一条路:广告推广。

为什么手机操作系统做广告是错的?

广告推广的模式一般套路是免费+广告。就是我免费给你提供服务,但毕竟我要生存啊,所以我需要展示广告来活下去。或者,你处于垄断地位,又收钱又放广告。这两种,用户都能理解,能忍。而且要注意的是,用户是能忍,而不是喜欢。

但手机操作系统是手机的一部分。厂家将手机卖给消费者,是打包了手机的电子组件,外观材质,软件系统等等和配套售后服务,以打包的价格出售。所以用户认为自己是为系统付过费的。

这里有个本质的用户心理问题,免费的服务好比逛大街,在街上(别人的地盘)上看到别人的广告自然能接受。付费的服务会有更强的所有权,像是我已经把这个房子买下来了,突然发现卧室镜子被物业换成人流广告,很难接受。当然,有人说我卧室被人贴广告也能接受,觉得无所谓,那是你被艹习惯了无所谓,不代表别人能接受,更不能代表这么做是对的。

那是不是就无法再手机系统中做广告了呢?可以。比如 Kindle 提供了有广告版,比无广告版便宜,而且广告版也提供了付费升级到无广告版的权利。而且,我认为最重要最核心的是购买前的用户知晓权,最好还能有选择权。每个买 Kindle 有广告版的用户,都是在购买前就知道而且可选。这就是很多 MIUI 老用户标识,希望能推出的付费去广告功能。

Amazon Kindle

所以,如果小米手机要在系统中放广告,那就要在购买主流程(而不是某个四级页面的脚注)中告知用户 MIUI 有广告。

为什么 MIUI 的吃相这么差?

小米某员工所谓“好的广告是用户喜欢的”这种奇怪的论调,姑且不讨论是不是对的,这句连洗地的作用也没起到。他提到的果粉/谷粉喜欢苹果/Android的广告。呵呵,不会有人真心喜欢广告的,他们只是不反感而已。比如,iPhone 最大的广告应该是 AppStore 的应用广告了吧,用户之所以不反感,是因为用户来 AppStore 的核心需求之一就是“发现”,应用广告是顺应用户行为的展现,看起来不像是广告,所以用户不反感。

因此,只有把广告做的像是推荐,而且是用户当前需求路径相匹配的推荐,用户才不会反感。在音乐应用中,推荐下理财应用是作死,推荐新专辑可行;在浏览器中推游戏下载是作死,做网址导航可行;短信里推购物是作死,推充值可行。那为什么 MIUI 没有这么做呢?我不觉得是 MIUI 团队没有想到,问题在于好的广告是场景有限,赚不到快钱的。

如果 MIUI 背负着公司主要盈利模式,背负着投资人的期望,那么游戏联运和“好的广告”就无法带来满足预期的收入。如果上层给出无法达成的盈利目标,基层就无法顾及吃相,只能短平快的暴力上硬广。自己的 KPI 一定比用户重要。为什么苹果能有这么好的吃相,是因为他硬件赚钱啊,软件广告收入可有可无,平衡之后一定是用户体验重要。

小米策略错误的锅,MIUI 背了

Kindle/PSP 低价销售硬件的本质是先有内容,再有平台。硬件不赚钱,软件是撑不住的,可持续盈利的独家内容才可以。小米没有可以持续盈利的独家内容,但小米一开始为了成功先自断一臂,然后把所有宝都压在另一臂 MIUI 上。MIUI 做广告本质上是错的,不是错在MIUI 产品团队能力差,而是错在 MIUI 背了一个自己不应该背负的责任,而被迫卖身。

下一篇,我会再聊聊,为什么 MIUI 做广告是悲哀的

女儿的约稿

今天找女儿约稿,下面是她写下的第一篇公众账号内容:

                            u  v  nxcccvrfythynufgttttttttthnbbbbbbbbbbbbbbbbbbjnnnnnnnnk

想当全才的自我反省

我青春期时最爱看的美剧是伪装者,讲述了一个天才能够快速学习并扮演多种职业,运用他的知识和能力发现事实真相。大学还读过一本数学史教程,里面写满了数学领域里面天才的天才们如何“随手”就在某个领域里写下不朽。这类的故事和传记对我产生了深刻的影响,我开始希望自己如这个天才一般无所不知,能比别人更快更好的学习和解决问题。即便是工作之后,意识到自己在智商和能力上就是个普通人之后,仍贪婪的希望自己能掌握比别人更多的技能。

回顾自己的学生生涯,从 QBasic/Pascal 开始入坑,接触过 VB,C/C++,算法/ACM,.Net,嵌入式,图形学,前端,Python/Django……看似接触过很多,但能达到“精通”水平的寥寥无几,最多就是帮我打开眼界,让我在做产品经理的时候少走些弯路,即便是现在仍会在闲暇时候关注一些新的技术,骨子里生怕跟技术脱节。在入行做产品经理后,兴趣又发散到交互、设计、商业、运营、营销、管理等领域,每个领域都足够我学习数年。尤其是随着经验和阅历的提升,见得越多,觉得自己不足就越多,想学的就越多,学不完带来的负罪感就越深。

就像有人给自己设定目标要学英语学乐器学编程学设计学会计学书法学厨艺,希望自己技多不压身但最终一事无成一样。我骨子里也希望自己做个“样样精通”的“全才”,然而事实上自己把时间更多的花在收集信息和焦虑上,反而没有将时间用在真正的技能学习上,最终却是“样样稀松”。这就如很多游戏中稀缺的技能点一样,玩家永远加不满所有的技能树,如何有策略的使用有限的技能点来解决对应的问题成了每个玩家必修的课程。

之前看了一篇讲 Sky 的文章:GQ报道 | “失败者”李晓峰 看完感受最深的一点是他的专注。SKY 破釜沉舟的把未来赌在电子竞技上,没有退路,将环境、出身的压力都转化成动力,长期高强度训练,最终一将成名万骨枯。文章中同时期的人,大多是没有坚持,他们摇摆反悔浅尝辄止时间白白浪费;而其他坚持的人又没有他刻苦,把电子竞技当做疲劳的重复工作而不是梦想和未来。日复一日之后,勤不仅能补拙,更能超越。

全文有三段 SKY 说的话让我感叹,分别如下:

“一定要有上进心,每天都要去寻找比自己强的对手。去求着他,去跪拜着他,最后再哄着他,骗着他,来和你练习。” “百分之百的执行力是不够的,我要把执行力做到200%。” “有些人打游戏的目的,可能是为了成名,但是我对自己的要求是不断赢。有人追求花哨,但在我看来只有赢才行。我从小被灌输的概念就是,你必须出人头地别人才会佩服你。”

这个道理不仅仅适用在电子竞技领域,适用在任何领域。在你最擅长的领域上里,有无数的人同样以此为生,他们中有些起步比自己早,有些比自己更努力,有些比自己更聪明,更有些人又聪明又努力入行又早,在一个领域中不够努力都可能被无情淘汰,又如何在多个领域同时取得成绩呢?相比东一榔头西一棒槌的自己,那些在一个领域长期坚持的人才有更大的价值。

即便到写文章的今天,我仍多少存在“全才”的幻想,并因此带给自己压力和疲惫。我已经意识到这个问题(并觉得“全才”是完美主义的一个具象),并开始自我反省和阅读这方面的书。这篇算是用来给自己反省,或许之后还会有进一步的剖析。

16 年 04~05 月已读书单

(没有守望的日子,好寂寞……)

这两个月给自己休了些天的假,趁机读了几本书。以扩展横向技能为主。

版面设计的原理

版面设计的原理

产品经理可以看这本书来入门版式设计。里面的例子虽然都是平面设计的(而且个人觉得很多例子过时且不美观),但原理是相通的。

书的第一章讲了排版的基本流程: * 理解:受众,设计的目的,如何达到效果。 * 提取:根据信息的重要程度排序,思考每个元素如何展现能更有效果 * 布置:将提取出的要素进行布置,突出重点

这个道理在产品设计也是相通的。首先理解产品的用户,产品的目的(商业目标和用户痛点);其次为产品功能排序,提取主要场景;最后:根据功能和场景设计产品交互。

之后的几章则讲述了版式设计的基本规则,原理以及如何合理的突破这些规则,强调出你要表达的东西来。

色彩设计的原理

色彩设计的原理

接上,是这套书的第三本,色彩设计的入门读物,产品经理可读。有色彩选择和搭配的“思路”在书里。缺点是讲的大部分是以平面海报打印品为主,没讲 GUI 的配色。

网络设计的原理

网络设计的原理

不值得读。第四本《网络设计的原理》作者跟前三本的伊達千代不是同一个作者,怀疑是出版社夹杂多骗钱,内容一看,果然是骗钱的。首先,它不是讲网页设计的,它是讲(过时的) HTML 和 CSS 的。内容特别基础,不建议任何人阅读。这套书的第二本文字设计的原理我没看(目前技能树还没连过去)。

术与道 移动应用 UI 设计必修课

术与道 移动应用 UI 设计必修课

不值得读。内容太……基础……了……。很多篇幅是凑数的。作为产品经理从业余角度来看,讲的内容也太基础了。或许适合 0 基础且完全没有产品设计基础的人读。

破译网格设计

破译网格设计

还破译呢,简直就是破玩意。全是案例,完全没有破译网格设计。一百条是凑的,而且很多都不是在讲网格系统。可能这些案例对平面设计有点点用吧。产品经理们就千万不要读了。

JavaScript 高级程序设计(第三版)

JavaScript 高级程序设计

​这本作为我 JavaScript 语法入门还是很坑的,即便封面画个小孩看望远镜显得内容轻松简单,实际也还是坑!不建议没有编程基础的同学阅读。读的过程中数次想弃,有一定 JavaScript 实战经验之后,再拿来巩固基础,或当作语法工具参考书还可以。另外,它是基于 ECMAScript 5 的,没有讲 ES6 新特性。

Objective-C 基础教程(第二版)

Objective-C 基础教程

同样作为语法书,这本写的就清晰很多。深浅适中,逻辑清晰。适合当做有编程基础的同学的 OC 入门读物。

多吐槽一句,为什么程序员的缺口这么大?编程入门教程烂肯定是原因之一。上来就讲一百多页的各种语法,正常人能有几个不崩溃的?就算不崩溃,也一定是看了后面忘了前面。当他们咬着牙看完整整一本之后,发现自己还是只会在控制台上打印几个字符串,连个界面都不会搭,能不弃么?初期的曲线太陡,成就感太低是很多人放弃的原因。

还有几本在读,读完写评语。希望大家能看我一篇文,省出几本书和几小时。

守望先锋的四天上手感受

这周在“守望先锋”上烧了不少时间。总体上来讲,这是一款暴雪爹爹诚意之作。非常值得体验。

守望先锋秉承了“暴雪出品,必属精品”和”易于上手,难于精通”的两大传统。首先,守望的画面很赞,音乐音效激动人心,人物设定极具特色,看得出花费了很多心思。其次,游戏性,竞技性拿捏的很好,只要玩过射击类游戏上手都非常容易,每局的时间节奏,变数和规则,团队配合都设计的非常出色。当然游戏早起,平衡性还略差(说你呢,堡垒),地图类型有限(守点和护送),但整个游戏的完成度极高,相信一定可以大火。

这款游戏也有不同于暴雪之前作品的几个特点。第一,阳光,低龄化。画风,人设都很年轻,跟暴雪的老三样(星际、魔兽、暗黑)的黑暗史诗风格形成了鲜明对比。第二, 国际化。暴雪老三样对应了科幻(星际)、魔幻(魔兽)、历史(暗黑),而守望则代表了现在的世界。地图选自世界各地,人设也覆盖了各个人种和国家,为守望的全球发展打下基础。所以,我觉得守望是暴雪这个上世纪的巨无霸的华丽转身和蜕变。

下面是正题,关于守望先锋的四天试玩体验。由于我不喜欢玩辅助,所以治疗类的一个没玩,主要在玩突击类英雄,也试过个别防御类和重装类。下面就逐个说说我的试玩经验。介绍顺序是我上手顺序。

士兵:76

推荐作为你的上手英雄。200 血,左键步枪(25 发),右键飞弹。两个都是准确击杀的技能,玩过任何射击游戏,左右键就能帮你干掉第一个敌人。

Shift 是疾跑也很有用,能抢时间,躲追杀,复活后快速回到战场。E 键是范围治疗,没事蹲墙角回复,不用到处找加血。

总体上,是个能打,能跑,能加的全方位选手。我的第一个全场最佳就是靠他获得的。他的问题是全面平庸(包括大技能),没有特别出彩的能力。

死神

一个很酷的角色。近程散弹枪(8 发)。E 是定点瞬移。Shift 是快速移动 + 无敌。打死敌人能获得加血球。所以是个综合实力不错的输出。他适合利用瞬移和无敌移动来突破敌人防线,近距离打击狙击手。

死神的大技能可以配合瞬移使用,移动到敌人后方后开技能,将获得不错的效果。

拉锯战中,死神通过 8 秒一次的无敌来打打,跑跑,牵扯敌人火力,赢得时间。但我自己测试发现死神在无敌阶段不能帮助己方占领目标点。

刚开始玩的时候,死神选的人很多(估计是因为酷),后来就不容易见到了,而且基本没见过死神拿全场最佳。

源氏

用的不多。主要用他来克制堡垒(下面说到堡垒的时候细讲)。用起来是个软绵绵的英雄。源氏的闪只能反弹子弹,法老之鹰的火箭,莱因哈特的大锤等等都无法反弹,所以还是比较鸡肋的。大技能同样有龙,但跟半藏的咋就差距那么大呢?

法老之鹰

第三天开始的主力英雄。这个晒的黑黑的女汉子一开始我是没兴趣的。但两局之后发现还是很好用的!

左键火箭弹(6 发)。防守时可以很好的压制对方。近战时容易打不中,所以可以低点朝地开炮,靠范围伤害干掉对手。Shift 可以上天,或者被近身缠斗时,迅速逃跑,D.Va 的自爆也能躲开,上天时注意环境,容易拿人头,也容易被枪打出头鸟。防守时,用 E 技能击退敌人也能有效的阻止对方的占领攻势。

在敌人后面或上方,上天后朝下对着敌群放大技能,可以直接让对方全灭。在大技能引导阶段,无法移动,很容易被当成靶子,不要问我是怎么知道的……。

法老之鹰在战斗结束的时候,专门有个命中率的牌子,直接命中大约在 20% 以上都能上榜,这得多不准啊。

猎空

大技能脉冲炸弹和闪回组合用。扔了炸弹就闪回,这样炸掉对方,保全自己。由于每次闪回之前的位置时,我都是蒙逼的,加上小手枪(50 发)威力太差,两局就弃了。

麦克雷

第四天试玩的,上手并不容易。左键类似 CS 沙鹰的手枪(6 发),右键能一次打光所有子弹。右键开枪时会飘,所以一般用于近战肉搏。用右键时,要主动压鼠标,才能有更好的命中效果。Shift 弥补了手枪子弹少,右键技能还费子弹的问题,通过侧翻 + 装子弹可以迅速干掉眼前的敌人。

大技能实用场景不多,瞄准需要时间,自己不被打死就不错了,能不能秒到对方全看脸。

堡垒

堡垒太 IMBA 了。4 天的游戏体验中,大约有将近一半的全场最佳都是堡垒。正常的侦查模式是普通机枪(20 发),毫无看点。

但是,一旦切换到炮台模式,简直人挡杀人佛挡杀佛。200 发高射速机枪,基本上扫到就死。只要够猥琐,藏在角落,或者有个大锤保护,那直接秒天秒地秒空气。你以为这样就完了?堡垒有 300 的血,而且 E 技能居然还是治疗,被打残了自己焊两下就又是个新喷子。唯一缺点是炮台模式不能移动。

那怎么克他呢?除了几个人的大招,比如半藏的 “竜”,D.Va 的 “” 机甲:自毁” 等等之外,最有效的克制方式是源氏的“闪”。闪可以挡开任何飞来的子弹并将其反弹给攻击者,由于堡垒攻速高(意味着伤害高)还不能移动,所以源氏会把伤害全部反弹,自食其果。所以在堡垒必登场的早起,狙击手或者源氏也是必备的英雄。

堡垒的大技能坦克模式基本上是一炮一个,不过我坦克模式急于多开炮,所以经常跟人同归于尽。

堡垒对堡垒时,一定是先开枪的赢。所以当你是侦查状态的堡垒时,看到对面已经是炮台了,千万不要当着他面切换,赶快躲吧。

堡垒有几个地点值得一试。

  1. 沃斯卡娅工业区,A 点防守的时候,挨着 A 点有加血点的房间,蹲一个托比昂(造小炮台的),一个莱因哈特(大锤)一个堡垒,一个治疗,龟缩在里面可以争取很长时间。
  2. 还是沃斯卡娅工业区,B 点进攻时,外围二层有移动栈板,坐在上面变炮台进去能在后方杀对方个措手不及,移动栈板还解决了堡垒不能移动的巨大短板使你不容易被命中;当栈板转出战斗区,你还能给自己补血,简直是居家旅行必备。
  3. 阿努比斯神殿。B 点防守。蹲在神像面向的右前方那个无死角的角落。仍是托比昂,莱因哈特,堡垒,治疗的龟缩组合。
  4. 车上。所有护送任务都可以考虑上车。带着莱因哈特和一个治疗上车,在车上尽情的输出。如果能有两个莱因哈特,基本就必胜了。

堡垒蹲在角落攻击敌人时,敌方掉血过程看着还是很爽的。目前版本堡垒太强,防守的时候,两个堡垒就很难攻进去了。堡垒不砍,天理难容。

莱茵哈特

虽然什么游戏我都爱远程,爱 DPS。但不得不说,莱茵哈特一上场就太有责任感和力量感了。扛着大锤顶着大盾,吸引着敌方的火力,肩负着保护全队的责任,特别带感。莱因哈特基本上是每局必备,攻防都需要的肉盾。

最爱的是用莱因哈特守阿努比斯神殿的 B 点。对方从正面攻入时,用 Shift 冲锋,一次跑好远,咣咣带走几个,晕完一顿砸,再用大技能放倒敌人,再一顿砸,灭光了自己屁颠屁颠跑回去休息,特别来劲。

莱因哈特的盾在不受伤害一段时间后会自动恢复,盾被彻底干掉之后也会自动恢复,恢复到 1000 点的时候就能重新召唤了。要时刻注意盾的血量,在血量不多的时候就往边上撤,别盾没了还当靶子让人打。

冲锋时,会解除防御盾,所以冲锋堡垒的时候要算距离,距离远了还没冲过去就会被干掉。另外冲锋堡垒命中后,会让堡垒直接解除炮台模式。冲锋一般会冲到敌人堆里,所以抱着必死的决心冲吧!

莱因哈特登场的时候会喊自己的名字 “莱因哈特”,但我听起来就像方言 “来一哈(下)”,高大的哥特骑士顺便就变成种田老汉的感觉了。另外,开局就冲锋能更快抵达目的地,哈哈。

其他英雄

其他英雄试玩不多,简单做个评价,方便你判断玩哪个合适。

重装类:

  • D.Va:韩国机甲娘。冲锋陷阵的好手。“机甲:自毁” 玩不好经常把自己也带走。出场率较高。
  • 路霸:改版屠夫。能抗能加血,铁钩子拉一个怪近身。出场率中等。
  • 温斯顿:近战大猩猩。前两天没见过出场,这两天见过一些,适合在人群中边蹦边电……

防御类:

  • 美:中国眼镜娘。出场率奇低。虽然有暴雪爹爹的 “暴风雪” 技能加成,但因为技能鸡肋也一直在座冷板凳。
  • 狂鼠:一个变态猥琐的疯子。主技能是抛物线的榴弹,适合攻击躲在门后面的狙击手,大技能 “炸弹轮胎” 冲到敌群中可以瞬间全灭。要注意的是狂鼠的大技能 “炸弹轮胎” 是有血量的,所以看到对方的轮胎要第一时间点掉。出场率不错。
  • 查莉雅:俄国女汉子。出场率很低。无感。
  • 黑百合:黑寡妇狙击手。大技能 “红外侦测” 能看到敌人的位置,是个非常重要的辅助技能。黑百合也是出场率较高,价值较大的英雄。如果你之前玩 CS 时喜欢狙,那黑百合你用起来一定很顺手。黑百合的狙击弹道会显示出来,所以对方可以根据弹道判断你的位置,不要一直在一个地方藏着。
  • 托比昂:魔兽出逃的矮人。自动炮台可以帮助防守死角,我方身后,有不俗的攻击力。大技能是类似山丘之王的天神下凡,能有一轮不错的爆发。
  • 半藏:日本武士,一个跟黑百合类似的狙击手。大技能无视地形前方大面积 AOE ,被贯穿必死。躲避方法是看龙头方向往两侧跑,能只伤不死。出场率也不错。而且拿到本场最佳之后的镜头感十足,帅到爆。

支援类:

  • 卢西奥:非洲音乐滑板少年。全团加速技能非常好用。在争夺站中建议首发必配卢西奥,全团加速技能可以让全团第一时间占领目标点。
  • 秩序之光:无感……,出场率一般。
  • 天使:魔兽出逃的牧师。能群活(前提是自己不死……),支援类中强力推荐的英雄。支援类中有较高的出场率。
  • 禅雅塔:僧人。出场率非常低。

其他

每局游戏大约 10 分钟,长短适中,游戏过程中可以随意切换英雄(但必须在出生点),增大了游戏的变化。

血少攻强容易死,所以更加讲究配合和团队意识,进攻要有节奏感(我之前聊过的),单冲就是送人头。

英雄技能设计的差异性足够明显,百玩不厌,每个英雄想要玩好都要花心思琢磨。

暴雪把 WOW 里很多 PVP 的经验移植到守望里,又借助动视”使命的召唤”的基础,让这个游戏变得如此好玩。

游戏中只能看到自己的击杀情况,看不到队友的。游戏结束后会有本场最佳和4个最佳表现展示,还可供点赞。这些都是正向激励。避免出现队友互喷,增加玩家自己的成就感。避免了 LoL 类的强弱悬殊给弱者带来的压力,让大家都能找到游戏的乐趣。

一次付费就可以玩到所有英雄,价钱很良心。值得拥有。

总之,守望先锋也还凑合,我也就不吃不喝的玩了四天。

产品的节奏感:如何设定?

之前聊了产品的节奏感,有人问如何为自己的产品设定节奏呢?这样取决于你的产品形态,市场阶段和用户需求。

对于手机厂商来说,硬件研发生产周期长,用户换机一般是 15~18 个月左右,这样的约束条件下,一年一款旗舰机是一个合适的节奏。版本迭代缩短,会导致研发时间不够,更会让用户觉得手中的机器贬值过快。但一个公司一年只出一次响肯定是不行的,所以很多厂商会设计面向不同用户群的多个子品牌/多品类产品,让它们交错发布,也能让用户感觉总有新品出现,比如苹果公司上半年发 iPad,下半年发 iPhone 就是这个道理。比如魅族这样发布会开的很频繁,那每次的效果就会被冲淡,进而导致单个产品的声明周期自然就会被缩短;但由于总开发布会,总有新品,每个时段想买新品的用户总能发现有新款魅族在等他,魅族总的品牌影响力和总的销量也就一定会上升(这种模式能否长久我存疑)。

对于一般的手机应用(如淘宝彩票)来说,我之前的规划是 2 个月一个大版本,1 个月一个小版本(个人经验)。大版本会上重要彩种、合买等重要功能,小版本则增加一些小彩种、新玩法和交互优化。版本发布后,一个简化的活跃用户曲线是这样的:

迭代和用户数的关系

数据提升高度取决于内容的重要程度,之后数据会自然衰减,直到发布前的水平,甚至更低。要想产生持续的用户增长,就要在用户有所衰减的时候发布新版刺激用户。但又不能发布的太频繁,太频繁意味着内容不足,拉升的高度有限。所以根据自己产品的后台数据,摸索和调整节奏。

MIUI 做为操作系统,每周一迭代乍一看违反常理,频繁升级会给人不稳定的感觉。但分析 MIUI 的用户群就能理解。早期 MIUI 用户群是喜欢折腾的,天天泡在论坛里的,手机 ROM 发烧友,他们的特征就是不怕折腾,不怕不稳定,希望快速得到响应。

Chrome 是个版本奇葩我就不说啥了,08年发布到现在,已经发布到第 49 版。Firefox 也被带到沟里疯狂涨版本,导致天真的 IE 团队不再送蛋糕给 Firefox 之类的老段子就不再提了。我只能说,Chrome 的核心竞争力太强,以及浏览器是个桌面端超高频应用,不需要用这种常规的“术”来提升自己。我等弱鸡还是老老实实做好产品节奏吧。

节奏感不是不做长期规划的借口,看不到市场终局也不是不做产品规划的理由。产品经理还是要有阶段性的产品规划,想清楚主要的产品场景,基于场景构建出产品的架构。架构稳定有助于迭代的节奏。如果架构没想清楚,引入新功能就推翻架构,会拖延迭代的效果。架构太超前,则会浪费资源空悲切。

产品的节奏感

之前聊了皇室战争的节奏感,文末提到了节奏感在产品方向也有价值,这次就聊聊产品的节奏感。

产品是实现商业目标的载体,商业目标需要较长时间才能实现,而产品也要逐步迭代和进化,没有人能在早期就能推算出产业终局,更没有产品经理能在第一版就设计出完美的产品。公司的发展和产品的迭代,往往是冲着一个大致的方向,不断的小规模试错,在试错过程中,了解市场和用户需求,找到痛点和解决痛点,最终实现商业目标。

产品初期,像你我这样平凡的产品经理只知道市场大的趋势方向,但不知道怎么做才能满足真正的市场需求。所以要在眼前能看清的范围内找到最可能的方向和产品形式,快速做一版试试。发布出去听用户的反馈,用户会告诉你,他们在乎什么,不在乎什么。根据反馈来再调整方向,再做一版,再发出去听反馈,调整方向。这样一次次的发布和迭代,产品就有可能找到正确的方向。这个过程就是迭代,也就是今天要聊的节奏感。

通过迭代实现目标

皇室战争的节奏感是:在合适的时机,最大化利用资源进攻,多次迭代后实现目标。产品的节奏感则是:通过规律性的产品进化实现商业目标。掌握好的节奏,就能更快,成本更小的实现目标。下面我谈谈我认为节奏感的几个要素。

一、以固定的频率发布

以固定的频率发布产品,有如下好处:

  • 给用户期待。每年的 9/10 月的 iPhone 发布也给人以期待,这种期待引发的讨论和猜测能抵得上一大笔的广告投入。
  • 快速响应。MIUI 每周一次发版,用户上周提的需求这周就实现了,上周提的 bug 这周就修复了,这种巨大的“参与感”赢得了早期 ROM 发烧用户的簇拥。快速响应的另一个好处是让用户能容忍问题。一个拥有稳定用户群的产品,在某个版本出现问题后,用户会反馈给团队,并期待修复,而不会一走了之,及时修复更会赢得用户的喜爱。
  • 刷存在感。如果长期不更新,用户可能就会把你忘记。在用户忘记前,反复出现刷遍存在感。坚持数次迭代之后,产品才能真正刻入用户的脑中。
  • 提高团队效率。举个简化的例子,一个 4 周的迭代会是:产品设计一周,开发两周,测试一周,然后发布上线。如果每个版本都按此执行,团队各角色会适应这种节奏,就更容易进入状态并全力以赴。更快的拿到结果也可以更好的激励团队。市场和运营团队则可以提前准备配套的宣传推广。
  • 更快调整方向。发现市场变化/竞争对手淘气了,你可以评估后快速放弃手中正在做的版本并重新规划,如果按照一个月的迭代算,你可能只浪费了一两周的人力。反之,如果版本计划开发 6 个月,目前进度完成一半时,发现市场变了,如果你放弃现有版本就是 3 个月的资源浪费和研发工程师的怨念;不放弃硬着头皮继续做,则可能还要再浪费 3 个月的资源和时间窗口,眼睁睁看着对手弯道超车,哭晕在厕所。

二、发布重要的内容

神曾说产品是演化出来的,不是规划出来的。我等普通产品经理还是要摆正心态,做一些基本的中短期规划。基本方法是分解长期目标,拆解出接下来这个阶段最重要的功能,做为下个版本的核心功能来做。

根据目标甄选功能是个看似简单,实际很考验产品功力的事情。而短的迭代周期,必须发布的时间节点,能让团队“被迫”取舍,集中在关键功能研发上,不会因为周期长,加些有的没的功能,让产品变得臃肿。

(题外话,有些工程师特别没有安全感,觉得作为衣食父母的产品经理如果不规划出一年的功能列表,他就很可能无事可做面临转岗/裁员。这时产品经理要更多的站在远景目标,可能的拓展方向上给工程师画饼,不要纠结在细碎的功能列表上。)

虽然时间有限,但一定要注意每次都是“最小可行性产品”(《精益创业》有详细阐述)。比如之前我做彩票时,第一版只上了双色球/大乐透两个彩种的部分玩法,但把购买,订单,开奖等基础功能全都做完。用户可以在客户端体验购彩的完整流程。流程体验顺畅之后,用户才会要求并期待更多的彩种和玩法上线。

很多产品,比如游戏,玩久了会疲劳,定期推出新的玩法,新的地图,新的副本,哪怕像暴雪爸爸那样炒炒冷饭,也能很好的提升用户活跃度。如果每次迭代,都是无关痛痒的 bug 修复,很难提起用户的升级兴趣。而像连载的小说或者漫画,更需要在结尾来个“且听下回分解”,吊足用户胃口,延长产品生命周期。

跟着迭代节奏发布功能,也能避免攒一堆功能,一次甩给用户,却因为信息量太大,让用户惊慌失措,不知道打开应用该干嘛。有序的逐个版本进化,一次最多一个新场景,能有效的提高用户留存。更避免了一次用力过猛后续无招可出。

三、大小版本的交替

不要只出大版本,把功能堆积在一个版本会拖慢迭代频率,加大发布风险,降低产品质量。不要只出小版本,用户会慢慢没有升级的动力和兴趣。用户很善变和挑剔,让他们定期眼前一亮很重要。所以一个大的场景出一个大版本,然后围绕这个核心场景再发几个小版本优化和深挖这个场景。如同音乐里的节奏“强-弱-次强-弱”,对应软件版本就是“1.0,1.1~1.4,1.5,1.6~1.9”。硬件产品你可以理解为大版本是新一代的硬件发布,小版本是发布后定期的市场营销,比如去年 8 月坚果手机发布是个大版本,后续围绕新品的 9 月的线下、天猫销售;10 月的文青版发布;11 月的双十一大促;12 月双十二和圣诞节;1 月全网通版等等都可以理解为围绕“坚果”这个大版本定期推出的小版本,这些小版本能不断在用户中制造话题和营销活动,延长产品热度和生命周期。

版本规划时,要让用户感受到有条“主线”,感受到产品在一段时间一直在强化核心场景。反例是豆瓣,根本不是 1.0, 2.0 的套路,而是“豆瓣之豆列强化版”“豆瓣之小事强化版”,以后可能是“豆瓣之广播强化版”,每次新版打开后总是感叹“我擦这是什么鬼?妈蛋豆邮呢?为毛还找不到广播?”

大小版本交替的另一个作用是拯救产品经理。小版本交互改动一般不大,所以给产品经理留出更多的时间架构和打磨下一个大版本的场景和功能。像 iPhone 这样的硬件,也是一年大版本,一年小改款的思路。一方面不频繁修改外观能够有效复用结构件,降低生产成本,另一方面也给设计研发部门留出足够的时间创新和优化。

最后,成功并不是这么简单,不是说你的产品有了节奏就一定能创业成功。比如市场方向是错的;市场规模太小了;资金链断了;竞争对手比你速度快;市场需求分散,一个产品无法满足需求都会导致创业失败……。总之,创业很难,要谨慎。

拳打南山敬老院,脚踢北海幼儿园的 JavaScript

起因是我近日对 Atom 编辑器的架构好奇,就去读了 Atom 和 Electron 的诞生历程。然后顺藤摸瓜的撸了 Node.js 等一些新的技术介绍,发觉 JavaScript 已经不是 20 年前的毛头小伙了……。它的触角已经伸展到几乎所有的编程领域,成了名副其实的万金油。本文就简单梳理一下我这几天看的无所不能的 JavaScript。

一、为表单验证而诞生的 JavaScript

1995 年 Erendan Eich 为网景(Netscape)设计了第一版 JavaScript,主要用于表单校验并获成功。爱搞自己一套的微软(Microsoft)随后也发布了自己的 JavaScript 方言 JScript。在其后几年微软和网景互坑互助,最终联合推动了 JavaScript 的标准化版本—— ECMAScript 的确立。

2000 年左右随着网站的高速发展, JavaScript 的价值越来越大,跟 Dreamweaver/Fireworks (大雾)HTML 和 CSS 并称网页三剑客。HTML 负责结构,CSS 负责样式,JavaScript 负责行为。JavaScript 成为网页必不可少的组成部分。

由于当时的机能限制,JavaScript 的使用场景有限,惊艳的动效都是由 Flash 负责。

二、前端制霸的 Ajax

1999 年,爱搞自己一套的微软又在 IE 里做了个 XMLHttpRequest 的对象,却没有太重视,直到 2005 年,Jesse James Garrett 基于当时的一些 XMLHttpRequest 的应用,提出了 Ajax (Asynchronous JavaScript and XML) 的概念。之前,网页向服务器提交数据(如发帖)就需要刷新页面来显示操作的结果,Ajax 通过异步交互实现无刷新的网页更新方式,使得网站的交互操作更接近原生应用。还记得我在大学机房第一次用 Google Maps 的时候,感受它丝滑流畅的拖动和放大缩小,直接跪了,这才是黑科技!

这个时期,随着 HTML/CSS 标准化,使得 JavaScript 具有了更重要的作用,比如操作 DOM 树;机能提升使得 JavaScript 可以实现比肩 Flash 的动画效果,而且更加轻量。所以涌现出以 jQuery 为代表的无数前端库,极大的提升用网站的交互体验和视觉效果。JavaScript 借着 Ajax 和 Web2.0 的浪潮,成为真正意义上的前端王者。

再之后则涌现出 MVC 架构的 Angular.js,专注于表现层的 React.js 等框架,则是在“网页即是应用”的路上持续进化。

三、魔爪伸向服务端的 Node.js

2008年,Lars Bak 在他的丹麦农场为谷歌(Google)的 Chrome 写了性能超群的 JavaScript 引擎 V8,V8 做为 Chrome 杀手级的亮点功能之一(沙盒和多进程是我认为的另外两大杀手功能),对 Chrome 的成功功不可没。

2009年,Ryan Dahl 借助 V8 的卓越性能和 JavaScript 天生的单线程特(缺)性(陷),脑洞大开的发布了 Node.js 项目。Node.js 是具有事件驱动,异步 I/O 特性的高性能,高并发,轻量级 Web 服务框架。江湖中也不时传来某公司用 Node.js 后少用了多少服务器的故事。

需要说明的是,Node.js 本身是基于 V8 引擎,也就是说它本身并不是用 JavaScript 编写的,而是用 C++。Node.js 服务上面跑的脚本语言是 JavaScript 而已。Node.js + JavaScript 的组合就像 Nginx + Lua,一个是底层服务,一个是上层脚本。

后来,Node.js 变成了一个通用的 JavaScript 运行时,可应用的领域不仅限于服务器。如果说 Ajax 是第一个引爆点,帮助 JavaScript 奠定了前端老大的地位,那 Node.js 就是第二个引爆点。随着 Node.js 的快速发展,JavaScript 真正变成了一种通用的脚本语言,在下面的各种领域大放异彩。

四、 CLI 应用的军火库 NPM

如果说 Node.js 是厨房,NPM(Node Package Manager) 则提供了丰富的各式食材,并在很短的时间成为了开发界最大的包管理平台。 在 NPM 上涌现出涵盖网络服务,数学,文档处理,数据库,开发工具等几乎涵盖所有领域的各类应用。可以访问 Awesome Node.js 了解其强大之处。

五、奋战在移动端的 Hybird App

随着 iOS 和 Android 的崛起,只会 JavaScript 的前端工程师开始眼红收入超越自己的 iOS 和 Android 工程师,于是他们联合起来提出了 PhoneGap,一个将 HTML5 和 JavaScript 封装成移动应用的平台。希望借此实现开发一份代码,适配两个平台,赚三份工资的伟大理想。然而事与愿违, PhoneGap 生成的跨平台应用(Hybird App)由于性能、兼容性、对 native 功能支持不理想等问题,并没有被特别广泛的使用,也没有实现前端工程师的涨薪梦想。

基于网页的 Hybrid App 也有一些独特优势,比如可以远程推送更新,无需像原生程序一样需要编译和发布新版本,这个特性尤其适合电商或内容为主的应用。而且毕竟开发容易,可用于早期试错和产品方向验证。真正要追求性能和品质,还是要用原生代码(native code)来改写。所以很多应用采用了原生和网页混合模式,交互操作多,有性能要求,内容相对固定的部分用原生实现;重内容重排版需要经常更新的部分用网页实现,最大化两者的优势。

六、桌面端即是网页的 Electron

2014年,Atom 项目启动。随着 Atom 的演化,团队独立出用于支撑 Atom 跨平台的底层架构 Atom Shell,后更名为 Electron。包括著名的 Slack,Visual Studio Code 的客户端都是基于 Electron 构建的。

Electron 底层是基于 Chromium 和 Node.js。Electron 做了几件事:

  1. 创建主进程(main process),主进程将为每个界面创建单独的渲染进程(renderer process)。
  2. 每个界面本质上就是一个网页,渲染进程将网页代码在 Chromium 中渲染成网页显示出来。
  3. Electron 实现了各平台的特殊功能(比如菜单,Dock),并为这些网页界面提供原生功能的调用接口,使得应用可以实现原生应用才能做的很多功能,并可以使用 Node.js 的全部模块(Module)。

如果你需要实现一些 Electron 或 Node.js 不支持的功能,可以自己用 C++ 写 Module 来实现。

由于 Electron 内建了特定版本的 Chromium,所以优势是网页设计时不用考虑兼容性(谢天谢地),劣势是会导致 Electron 什么也不做的情况下,应用体积也在 100 MB 左右,打包压缩后大约 30-50 MB。Electron 也继承了 Chromium 的特点,启动慢,利用资源(内存占用)换性能(流畅度)。

NW.js 也是类似的框架,他采用了 Node.js + Webkit 组合。两者各有优劣NW.js 跟 Electron 的完整功能对比。国内钉钉客户端是基于 NW.js 做的。网易自己造了两个轮子貌似已经停更的 HexNEJ,网易云音乐客户端是基于 NEJ 的。

Electron 类的网页封装成客户端另一个问题是源代码很难被保护。由于 JavaScript 是解释型语言,无法通过编译来保护代码,自身也没有很好的代码混淆方式,所以并不适用于需要版权保护或者纯靠客户端功能收费的应用。Electron 上曾有 issus 讨论源代码保护的话题,但官方的态度是 wontfix 。如果需要写一些需要保密的代码,可以考虑用 C++ 写 Node module 来解决。

结语、Learn once, write everywhere

这几天查资料时而感觉 JavaScript 威力无穷,时而又觉得它在哪个平台都是点到为止,像玩具和试验,距离工程性还有距离。JavaScript 有种鸠摩智用吐蕃内功练少林七十二绝学的意味。

或许照这个发展势头,以后世上只有两种工程师, JavaScript 工程师和其他工程师……

这几天调研有些仓促,如果写的不对的地方也请斧正。

皇室战争的通用法则:节奏感

昨天,作为非洲玩家我是把皇室战争删了。但不得不说皇室战争是个好游戏,今天我想借着这个游戏聊聊关于节奏感的事情。

皇室战争的基本规则很简单,资源随时间自动增长,使用资源造兵/放技能来进攻或防守。低阶竞技场很多玩家的打法是有资源够出牌就会马上出,让兵连绵不绝的压向对手,我称之为连绵流。打到4阶以上,大家就习惯攒到资源上限,然后一次用光,我称之为一波流。

皇室战争-资源消耗对比

我们用上图做个对比,同样消耗55点资源的情况下,蓝色是连绵流,基本是像月光族一样有资源就用掉。橙色是一波流,共组织了四次明显的进攻,虽然进攻次数少但是每次进攻的规模大,组团进攻的过程中,出现了兵种配合,比如胖法一波,胖子做为肉盾吸引火力,保护脆弱的法师在后面尽情的搓火球,并让其无伤的走到塔前,而法师则在路上干掉对手进攻胖子的兵种,避免胖子受到持续伤害。两者的配合有效的最大化了资源利用率。

皇室战争-资源剩余对比

我们再看这张图,除了进攻的优势外,一波流在很多时候手里的可用资源是超过连绵流的。手里有余牌,进可攻退可守。不会出现资源都用光了,任由对手宰割。

一波流的打法就是很多类似竞技游戏的通用法则:掌握节奏。节奏在音乐领域是指节拍强弱,一首歌只有一个调没人会听,分出“强-弱-次强-弱”之后歌曲就变得动听起来。节奏后来被广泛运用在很多领域,比如游戏、体育、电影、小说等等。本文聊的节奏可以定义为在合适的时机,最大化利用资源进攻,多次迭代后实现目标。比如对于皇冠战争来说:

  • 合适的时机:化解对手的攻击后,自己满资源而对手缺资源的时候;
  • 最大化利用资源进攻:自己用全部资源推一波有效攻击,对对手建筑造成可观的伤害;
  • 多次迭代:等待下一次满资源时再发动攻击,最终赢得奖杯。

当掌握了节奏感,就不会着急慌乱,不会有资源就乱用了。脑子里想着的不是慌乱的“进攻还是防守或者出什么兵”,而是“组织一波有效的进攻”,游戏胜率自然也会明显提升。

我再详细聊聊节奏感的三个要素。

合适的时机

三个要素中,合适的时机是最重要的。需要能看清形势把握时机,更要能主动制造时机。

拿魔兽世界竞技场举例。最开始恩师殴恋带我打 2v2 时,我很紧张,基本上敌我双方见面我就大技能全开希望全力输出,但总会被对手限制行动,或者对手自己无敌偏斜强隐绕柱子化解我的攻击,消耗掉我的爆发期,再回头带走我,打得我一点脾气没有。

后来师傅慢慢教育我一些基本原则:在对手爆发的时候自己要会躲会交章会无敌,让对手的一波进攻无效;对手攻击同伴的时候,自己要控要奶要辅助,扰乱对手的进攻节奏,不能让对手舒服的输出;自己爆发要尽量在对手没有保命技能时;爆发时要有集火意识,争取一波带走,不给对手恢复的机会;两人的控制技能要有顺序,对手解了再接控制,让己方输出时间最大化。不是把技能无脑都用了就最厉害,什么时间该进攻,什么时间该防守,什么时间该爆发输出,这些把握好了,才能提高胜率。这些原则归纳起来就是基于对场上形势的判断,做出最适合的行动,制造或抓住合适的时机进攻。

合适的时机并不一定能等来,很多时候场面混乱,或者被对手掌握节奏,你把握不了时机。你要制造合适的时机。如果短时间无法产生有效的进攻节奏,就索性全力防守,用更少的资源抵消对手更多的资源。比如你用3点资源的万箭灭了对手5点资源的骷髅军团,你就赚了2点,如果你顺便还扫掉了对手的苍蝇军团或者哥布林那就更赚了,几回合下来你就可以组织进攻了。再比如篮球当对手打出15:0的小高潮时,你要做的不是组织全力进攻迅速扳回比分,而可以先全力防守,让对手的进攻无效,等拿到球后再稳扎稳打攻过去,漂亮的进一球,浇灭对手连连进球的高昂士气,让对手难受,实现节奏的逆转。

总的来说,敌人最脆弱(资源最少,没有防御)的时候,我们最强(满资源,技能全无冷却)的时候,我们能拳拳到肉的打到对手身上时,就是合适的时机。

最大化利用资源

在把握到合适的时机时,如何才能“最大化”利用资源?

首先是套路。围棋里叫定式,游戏里叫兵种搭配,火影里叫忍小队。套路是一套完整的战术,常见套路的资源利用率往往是最高的。套路可以是高玩推荐的,也可以是自己摸索的。比如胖猪王,比如房子流,比如上文提到的胖法,都是基本套路。套路自己一定要熟悉多次演练,不要在时机到的时候才临时去想怎么打。(我们部落的口号是:让我们少一些套路,多一些真诚)

其次是势能。当你的资源越多,对手资源越少,两者落差越大,你进攻的势能就越大。而且,这个势能不是线性增长,而是指数增长。要在对手脆弱毫无防备的时候,用尽全力给出会心一击。如果能制造出一种碾压的效果则更佳。当攻击成功时,对手除了结果上的失利之外,内心也会受到很大冲击。

在组织一波进攻的过程中,资源也在逐渐恢复。你要关注战况来决定继续使用资源加强攻势,还是见好就收,等待下一个时机。如果战况不如预期,要学会尽早止损。

多次迭代

“一波流”不一定真的只有“一波”。除了力量悬殊时,组织一波碾压直接获胜之外,绝大部分情况都需要通过组织“一波”又“一波”的攻击,逐步建立优势,拉开跟对手的差距,最终赢得胜利。

迭代进攻的过程中要注意对手有什么牌有多少资源,每波都可以针对性的做一些“优化”或者“调整”,避免对手熟悉你的套路后进行克制。尤其是在双方长期不相上下时,优化和调整往往会打开局面,帮助自己建立优势。如果持续焦灼,要有耐心去等待机会,不要自己乱了阵脚。记住,耐心和纪律是必不可少的。

把握好进攻波次的间隔,会让迭代会产生叠加效应,更进一步扩大进攻势能,更早的赢得胜利。

一局游戏,一场比赛只会有一方掌控节奏,所以你掌控了节奏,就意味着对手放弃了自己的打发,来应付你的节奏。当你的进攻一波波攻过去,用迭代巩固自己的进攻套路,对手就只能疲于防守,无力反击,最终必然是掌控节奏的人将赢得胜利。

节奏在生活中的运用

比如长期加班就是没有节奏,会导致身心俱疲,就是没有节奏的表现,上班思考工作下班仍思考工作就容易效率低下,这时候需要换换脑子,玩玩游戏,比如皇室战争。而比如课间休息,建立仪式,规律生活都是节奏感的表现。节奏感在做产品时也非常重要,这个我们下次再聊。