PoW,PoS,DPoS 综述

本文禁止任何形式的全文粘贴式转载,本文来自 代码家 的博客
阅读本文需要部分区块链基础,建议通过 《区块链理论学习指南》开始学习。

工作量证明(Proof of work)和 股权证明(Proof of stake)是区块链理论研究中重要的两个概念,也是区块链最核心的一部分。本文将对这两个理念进行详细介绍。

区块链本身就是一个分布式账本,既然是分布式账本,那么必然存在以下两个问题:

  • 如何在去中心化的网络中建立时间序列的概念
  • 当有多个节点完成记录交易的时候,应该采用谁的记录方案作为共识账本中

目前,PoW,PoS 以及 PoS 优化方案成为了解决这两个问题的一些主流方案。

PoW

PoW 通过让每个节点,在准备提交下一个区块 $ B $ 之前,强制规定在区块 $ B $ 中插入一个数 $ nonce $,使得:

$$ H(B) \leq m $$

上述公式中,$H $ 是某个哈希函数,$ m $ 是某个极小的实数,由哈希函数的性质决定,想要找到符合条件的 $ nonce $ ,就必须通过穷举 $nonce$ 的方法来实现。通过调整 $H$ ,$m$ ,就能控制网络中节点,对于每个区块提交的时间窗口的期望。

在 PoW 机制下,由于找到符合要求的 $nonce$ 期望时间是可以调整的,因而构建了去中心化的时间序列机制。同时,也解决了无中心多节点的结果决策问题,即,整个网络采用最早找到合法 $nonce$ 的节点提交的数据。

PoS

在 PoW 机制中,由于想要找到符合条件的 $nonce$ 往往需要花费大量的电力和时间成本,因此,为了使每个 Block 更快被生成,PoS 机制去掉了穷举 $ nonce $ 这一过程,继而采用以下更快速的算法:

$$ H(H(B_{prev}), A, t) \leq balance(A) m $$

  • $H$ 依然为某个哈希函数
  • $t$ 为 UTC 时间戳
  • $B_{prev}$ 指的是上一个区块
  • $balance(A)$ 代表账户 $A$ 的账户的余额
  • $m$ 依然代表某个认为定义的数

等式左边,唯一可以不断调整的参数是 $t$,等式右边 $ m $ 是某个固定的实数,因此,当 $balance(A)$ 越大,找到合理 $t$ 的概率越大。网络中,普遍对于 $t$ 的范围有所限制,如可以尝试的时间戳不能超过标准时间戳 1 小时,也就说,一个节点可以尝试 7200 次,来找到一个符合条件的 $t$,如果找不到即可放弃。因此,在 PoS 中,一个账户的余额越多,在同等算力下,就越容易发现下一个区块

DPoS

Delegated Proof of Stake(委托股权证明) 是 PoS 的进化方案,在常规 PoW 和 PoS 中,一大影响效率之处在于任何一个新加入的 Block,都需要被整个网络所有节点做确认。DPoS 优化方案在于:通过不同的策略,不定时的选中一小群节点,这一小群节点做新区块的创建,验证,签名和相互监督,这样就大幅度的减少了区块创建和确认所需要消耗的时间和算力成本。

PoS 潜在攻击方法

账本分叉问题 ( Nothing at Stake Problem )

在 PoW 机制中,当账本出现分叉时,对 PoW 这种算力敏感的算法,矿工必须选择一个方向进行挖矿。而在 PoS 这种算力不敏感的时候,PoS 矿工往往会两个方向都挖,以争取实现利益最大化。当多数矿工都在两条链上一起挖矿的时候,就会很容易出现双重支付攻击。

冷启动问题 ( Initial Distribution Problem )

PoS 机制中,由于持币量会对挖矿难度产生影响。因此,当一个基于 PoS 体系代币系统启动时,就会面临早期获得代币的持有者,没有动力去花费或者转移代币给第三方。同时,持有越多的币,越容易挖到矿,这样就产生了代币初始流通性问题。

解决方案:早起几个版本,通过 PoW 机制来创建货币,而非 PoS。由于 PoW 本身的性质,矿工在挖矿过程中往往需要资金来升级硬件,所以会让矿工手中的币流通起来。

长距离攻击 ( Long-Range Attack )

PoS 中,产生每个 Block 的速度相对 PoW 快了很多。因此,少数不怀好意的节点会想着把整个区块链共识账本全部重写。这在 PoW 中是经典的 51% 问题,即:当某一个节点控制了 51% 及以上算力,就有能力篡改账本,但达到 51% 算力是件极其困难的事情。而在 PoS 中缺乏对算力的约束,那么就存在潜在可能篡改账本。

解决方案:同步时,限制最大能接受的分叉节点数量。

贿赂攻击(Bribe Attack)

贿赂攻击流程如下:

  1. 攻击者购买某个商品或服务
  2. 商户开始等待网络确认这笔交易
  3. 此时,攻击者开始在网络中首次宣称,对目前相对最长的不包含这次交易的主链进行奖励
  4. 当主链足够长时,攻击者开始放出更大的奖励,奖励那些在包含此次交易的链条中挖矿的矿工。
  5. 六次确认达成后,放弃奖励。
  6. 货物到手,同时放弃攻击者选中的链条。

因此,只要此次贿赂攻击的成本小于货物或者服务费用,此次攻击就是成功的。相比之下,PoW 机制中贿赂攻击就需要贿赂大多数矿工,因此成本极高,难以实现。

币龄加和攻击 ( Coin Age Accumulation Attack )

在最早的 Peercoin 版本中,挖矿难度不仅与当前账户余额有关,也与每个币的持币时间挂钩。

$ H(H(B_{prev}), A, t) \leq balance(A) m Age(coins) $

这就导致,部分节点在等待足够长时间后,就有能力利用 Age 的增加来控制整个网络,产生非常显著的影响。

解决方案:限制 CoinAge 的最大值。

预计算攻击 ( Precomputing Attack)

当 PoS 中的某一节点占有了一定量的算力后,PoS 中占有特定算力的节点,就有能力通过控制 $ H_{prev} $ 来使自己所在算力范围有能力去计算 $H_{next}$。

$$ H(H(B_{prev}), A, t) \leq balance(A) m $$

PoW 和 PoS 对比

攻击方法 PoW PoS DPoS
短距离攻击(如贿赂攻击) +
长距离攻击 + +
币龄累计攻击 + +
预计算攻击 +
DDos 可能
女巫攻击(Sybil Attack) + + +

总结

从功能和趋势来看,比特币如果被当做数字黄金的话,PoW 在比特币未来的发展中依旧起着至关重要作用,同时由于历史问题,比特币的 PoW 机制很难被切换到 PoS 中去。

但对于其他以实用功能取胜的区块链项目而言,从经济效益,共识速度而言,PoS 或者 PoW/PoS 混合模式将会是未来的主流共识方案。

如果感觉写的对你有帮助的话:
通过 Bitcoin 打赏: 1QD9entYzxbJKUL97S9ip4YqqJeQvQa8Ej
通过 Ethereum 打赏:0xdbd92588811c76a7a0CD22f45217Df1926B0709D

从投资角度看待区块链

ICO 火爆的背后充斥着鱼龙混杂的区块链项目,在峰瑞内部,我们也做了很多区块链相关的研究、分享和讨论。内部讨论和思考最多的是:1)区块链解决了什么问题 2)区块链技术更适合哪些场景。

区块链从表面来看,是不可篡改的去中心化数据库,再深层次来看是去中心化的信任体系,简单总结而言,一个优秀的区块链项目,应该具备以下一些特质。

链生资产

链生资产所对应的反面,是指尝试将现实资产映射到链上。这件事情是可以实现的,但多数是没有太大意义的。因为资产上链这一过程,所面临的问题依旧是个传统问题,依旧需要中心化的机构来做信息可信性验证。因而区块链所扮演的角色就成了分布式数据库的角色,从效率上而言,又无法超越传统数据库,与其如此,倒不如用一个传统数据库方案。

信任是效率本质

链生资产的基础之上,区块链效率的本质在于充分利用区块链的信任体系,打破个体之间建立信任的成本。尽管区块链方案的执行速度,由于分布共识的原因,多数是慢过传统架构的,但是从信任效率来说,如果区块链不是唯一一个可以做这件事的方案,那么这个项目就没有什么价值。所以不要尝试去挑战目前传统意义效率优先的工具,比如 IM 即时通信工具。

把资源变成资产

比特币是把信任变成了一种资产,所有挖矿的矿工,只要自己好好表现,不去欺骗网络,自己就能得到应得的比特币作为奖励。试想没有区块链之前,你需要和一个合作伙伴做生意,建立信任的成本是很高的,更何况,一个人或是一群人对你的信任不论是信任建立,还是信任消亡,都是需要一个反馈周期的。在建立和消亡的过程中,生产力是受到限制的。而在比特币区块链网络内,信任成为一种热插拔式的方案,信任建立和消亡的反馈周期被大幅缩短,同时任何人转变角色是不会遭受历史包袱的(设想现实中,一个犯罪过的人,即便真心想做个好人的难度),也在某种程度上提升了可用劳动力。

案例分析

负面

  • UIP:构建所谓『未来版权,开启个人IP共享时代,该交易平台可为艺术工作者提供文娱作品版权存证、IP 和 IP 衍生版权去中间人交易、IP 创作众筹以及未来的 IP 版权共享等服务。』,文娱作品版权存证这件事情,就是把链下资产(如文学作品)搬到链上的过程,这个上链过程,无法通过去中心化的方案证明提交者拥有作品本身版权,如果想要证明,就又回归到一个传统的中心化机构(如:国家版权局)所正在做的事情。所以整个链,完全就是脱裤子放*,纯粹炒概念罢了。

正面

  • ugChain: 尝试打通游戏间帐号体系,同时建立账号之间游戏资产兑换(比如:用王者荣耀金币兑换皇室战争金币)。本身金币就是链生资产,同时解决了企业间合作过程中的信任问题,个人认为是个非常不错的 idea。
  • ipfs(Filecoin):过去一段时间大热的 ipfs,把我们曾经闲置的硬盘和带宽从资源变成了资产。IPFS 之前,P2P 文件共享已经非常普遍了,但 P2P 的核心问题在于,P2P 并没有将其视为资产,更多的是一种无偿的分享精神作为网络支撑。人是逐利的,P2P 在 IPFS 面前未来可能难以生存。

因此,对于一个优秀的项目,应当从以上三点进行整体评估,不过也有一种项目形态在于协议优化。这种区块链项目更好理解,但也需要更多的技术基础。比如:Monero 强化了比特币区块链本身交易的不可见性,使得每次交易匿名性更好,因此是个值得投资的项目。

大家日常在 ICO 过程中,也应当充分考虑项目本身的质量,越是有价值的项目,越是符合以上几条,不得不承认,ICO 给了『穷人』暴富的机会,但是最终泡沫破裂后,优秀项目的代币才是最有价值的资产。

区块链理论学习入门指南

本文禁止任何形式的全文粘贴式转载,本文来自 代码家 的博客

区块链理论在国外发展迅速,但国内一直没有什么进展,知网上确实存在几篇论文,但多数也是凑热点水出来的。最近在峰瑞资本持续的研究了几个月区块链理论部分,收获很多,想分享一些自己学习路径出来,希望能够帮助国内区块链爱好者快速上手。

研究区块链理论部分,不可避免的是读论文。如果纯粹想开发以太坊合约搞个 ICO 的话,只用看官方文档就行了。读论文的顺序大致如下:

入门论文和白皮书

第一篇:Bitcoin: A Peer-to-Peer Electronic Cash System,这是比特币的原始论文,通篇几乎没有什么公式,只是通过文字来描述整个网络的结构类型,通过简单的数据结构方案,完成了一个去中心化的信任体系网络。如果这篇论文看着有些吃力的话,可以配合《区块链-技术驱动金融》这本书,必须要强调的是:比特币的论文是其他区块链项目(以太坊,ZCash 等)的基础,所以务必花足够多的时间搞懂它。

第二篇:A Next Generation Smart Contract & Decentralized Application Platform Vitalik Buterin 2014 年发表的以太坊白皮书,整篇文章主要讲述了一些比特币网络的缺陷以及自己的一些新的想法,最最核心的部分应属智能合约部分的提议。更多更细节的技术描述在 Gavin Wood 发表的 Ethereum: A Secure Decentralized Generalized Transaction Ledger 一文中,这篇 Paper 是一篇论述非常严谨的文章,在以太坊的发展中起到了至关重要的作用。文章用严谨的数学符号描述了整个网络的工作原理以及细节。(如果你很努力看了,也没看懂,没有关系,只要掌握第一篇的核心思想暂时足矣。)

第三篇: IPFS – Content Addressed, Versioned, P2P File System,IPFS 是基于区块链实现的分布式文件存储系统,对于整个区块链产业的发展起到了很大的作用,在我看来,比特币是单片机,他的诞生只干一件事情,就是记账,而以太坊是一个计算器,可以执行一些简单的运算程序,IPFS 其实就是更底层的存储介质,在未来整个区块链产业的发展中至关重要。IPFS 的整个核心理念更多的是在结合现有技术,并进区块链中。最重要的应该是 KAD 协议,如果大家日常用过种子下载,那 ed2k 协议的基础就是 KAD。说来背后也有很多故事在里面,最早一个叫 Jed McCaleb 的程序员第一次实现了 KAD 协议,发布了 eDonkey(电骡)软件,后来沉浸到去中心化的研究中,持有一定量的比特币后,看到论坛很多人想要交易比特币,因此又开发了全球第一个比特币交易网站 Mt.GOX,曾经一度是全球最大的比特币交易网站,后来不幸被盗,又加入了 Ripple,现在单独 ICO 后在做 Stellar 网络,Stellar 网络也是一个非常有意思和想象空间的网络,大家有兴趣可以去看他的网络白皮书。

第四篇: 其他各种白皮书,目前 ICO 火爆,白皮书多如牛毛,多翻翻看别的白皮书,很快就能判断出项目靠不靠谱,做的事情是否有意义。

进阶论文

比特币被人诟病最多的大致有三点:匿名性、交易速度和费用、浪费电力资源,而针对其缺陷,也有很多学者提出了不同方案。

匿名性

比特币的安全性一直是个非常严重的问题,尽管账户并没有和人做绑定,但比特币所实现的只是伪匿名,交易之间有链接关系(Linkable),整个交易可以被追踪(Traceability)的网络。CryptoNote v2.0 这篇论文成为了目前几乎所有主打安全数字货币的论文基础,如 Monero,Dash,BlackCoin 等都是基于此论文提出的理论做的实现。论文提出两个主要方案,一个是通过椭圆曲线结合 Diffe-Hellman 密钥交换生成了只有交易双方可见的一笔交易,解决了 Linkable 的问题。另一个方案是通过一次性循环签名(One-time ring signatures)机制让每一笔交易不可被追踪。

另外值得一提的是零币(zerocoin)和零钞(zerocash)的概念。零钞是对零币的优化方案。整体思路在于通过零知识验证的方法实现数字货币的匿名性。零知识验证是密码学里比较重要的一个概念。后面的博文我也会继续给大家分享一些相关细节。相关的两篇论文如下:

交易速度和交易费用

交易速度和交易费用的背后本质原因是一样的,即每次交易成本高,并且耗时。因此所有的优化方案基本都是从将多数的交易从链上搬离到链下,即,不实时同步交易数据到整个网络,只有在必须要同步,或达到某个约定条件后再同步到网络,这样就能大幅减少网络共识的损耗,提升速度,降低交易手续费。

电力损耗

比特币电力损耗的一大主要原因是来自于共识机制,为了让网络中对于每一笔交易达成共识,需要消耗计算资源来产生共识和去中心化网络时间戳,因此多数网络优化方案就是替代基于大量计算的共识机制,即替换掉 Proof of Work 工作机制,转而成为 Proof of Stake 机制,因此这方面推荐的论文如下:

  • POS vs POW:这篇主要描述了两种共识机制的方案差异。
  • Proof of Stake FAQ:以太坊创始人 Vitalik 撰写的 POS 机制的一些细节描述。
  • Plasma:下一代以太坊扩容自治方案,里面提到了 POS 部分。

所需理论基础

区块链背后依赖的是密码学共识算法、和博弈论

密码学

目前整个区块链网络更倾向于安全性更高的椭圆曲线方案,也包含一些常规的摘要、加密、密钥交换算法。如果没有密码学基础,买一本书,看 Paper 的时候不懂的地方参考参考即可。密码学中也涉及一些抽象代数学科的内容可以买本书也作为参考。

共识算法

共识算法的核心抽象是拜占庭将军问题,相关的文章论文非常多,学习过程中多搜索多看即可。拜占庭将军目前解决方案较为成熟的是 PaxosRaft 算法。

博弈论

博弈论在区块链的设计中起着非常隐性的核心作用,其最终目标是如何让网络达到一个平衡,坏人没有动力使坏,好人会努力维护网络。

总结

学习区块链理论部分需要非常多的耐心和毅力,去了解很多理论细节,网络协议的设计往往都是最有挑战的事情,工程实现并不是最难的。因此如果对区块链非常感兴趣的话,一定要准备好下苦功夫,后面我还会写一些相关博文,从更多的角度详细介绍区块链的理论部分以及深入到代码和工程中去探讨区块链。ICO 的火爆只是一群骗子(大多数都是)的狂欢,迟早爆炸,而后面大浪淘沙,优秀的项目需要更多区块链人才,所以快去做好准备吧。

如果有兴趣和我交流,欢迎加我微信:daimajia,如果文中要不正确的地方,欢迎斧正。

通过 Bitcoin 打赏: 1QD9entYzxbJKUL97S9ip4YqqJeQvQa8Ej
通过 Ethereum 打赏:0xdbd92588811c76a7a0CD22f45217Df1926B0709D

开发者与业余项目 -(上篇)

那些真的热爱写代码的开发者,即便在工作之余也是停不下来的。研究新语言,创造新的库抑或是去做一个小的业余项目,帮助解决问题或是纯粹的赚些钱。

我也是那群闲不下来的人之一,利用业余时间做了 Gank.io,做了 Waibao.io,开发结束后,每天基本只用投入 10 – 20 分钟时间维护内容就好了,坚持做这件事情的成果也十分显著。一来邮件列表里聚集了 1万 多号优质的开发者,二来 Gank 的 Api 也成为很多人用来做开发的服务端数据标配,GitHub 上目前大概存在 800 多个 Gank 的第三方客户端。也算是个不小的成就。最最深刻的是让我意识到了坚持做一件事情的意义和价值。

技术最大的价值是解决问题和需求。哪里有问题和需求的存在,哪里就有技术伸展的空间,就有盈利的机会,今天想分享些自己对于技术人员业余项目的一些总结。

对于一个面向开发者而言的业余项目来说,可以分成三种:解决问题型制作内容型灰色产业型

解决问题型

解决问题型好理解,当你看到一个生活周边普通朋友使用电脑或手机时,如果遇到的一些重复性或者技巧性的问题时,动动脑筋,他们的这些问题能不能用技术解决,如果可以的话,去尝试着做一个业余项目。举几个例子:

  • Park.io : 一个帮助你抢 io 后缀域名的网站,每个月目前收入有 13万美金,真的是一个人的项目哦,很不错吧。
  • 视频音频转换器: 一款很普通的 Android App,帮助用户做视频音频的格式转换,每个月收入有 3000美金。
  • Weather Extension:一款纯粹简单的浏览器天气提醒插件,每月收入有 1万美金。

目前就我所知的最厉害的解决工具型产品案例是 http://www.youtube-mp3.org/ ,一款把 Youtube 视频转换成音频的在线工具。需求蛮奇怪的对吧,只有一个简单的页面,但是你会发现他支持几乎所有国家的语言,再细细研究会发现这个做的很丑的网站居然是 Alexa 前 500 的网站,每天 UV 和京东一个数量级。经过一番研究我发现它的逻辑其实是这样的:每次新音乐上线,发行方都会在 Youtube 放上公开的 MV,让大家试听购买,但是事实是多数用户想在 iPod 上听却不愿意花钱买,那这个网站就把 YouTube 的音乐提取出来咯,一不小心就这么流行了,每天收入可能在 5万-20万美金级别,很厉害吧。

解决问题型的业余项目从工具出发会是个很好的开始,毕竟工具相比于内容来说,并不需要每天持续输出,只需做程序员最擅长的就好了。

另外,思路可以放宽一些,工具不要局限在 App 和 Web 上,也可以是 WordPress 主题和插件、Chrome\Safari\Firefox 插件、WeChat\Line\iMessage 收费表情包等等,只要用户忠诚,产品好用,铁定是有用户愿意付费的。

制作内容型

制作内容其实是个相对麻烦的事情,但是也是有很多技巧的。

首先得想明白自己制作内容的初衷是什么,是为了纯粹的发表自己的看法,分享见解(类似湾区日报、利器、Gank 等)还是单纯的为了赚些钱。如果不涉及赚钱,就简单很多了,这里不多讲。如果决定做个基于内容赚钱的业余项目,先想明白下面的一些问题,再决定开始:

  1. 你擅长的领域是什么
  2. 你每周能否保证更新频率
  3. 想立足的盈利模式( Google Adsense?微信公众号赞赏?百度百家分成?等等)
  4. 是否想要独立品牌

微信公众号打赏或者接广告之类的模式就不提了,都烂大街了,而且难度与日俱增,因为微信用户对于内容的质量要求日益增高,同时由于其封闭的特性,搜索引擎派不上用场,导致多数内容被看到的可能性大大降低。同时赚钱渠道狭窄,打赏和企业赞助都需要很深的用户基础。Google Adsense 也不提了,只要 UV 足够大,方向比较专(比如美食博客、资讯博客等),赚钱还是比较轻松。

我想分享几个多数人并不熟悉,但却比较直接,模式固定,容易切入的一些赚钱方法。

那就是 Affilicate Program(联盟计划),听起来很高端,其实就是最传统的推广返利,发布商约定好某个产品的返利比例,你通过自己的内容渠道导流到发布商网站,当发布商达成销售或约定目标后,实现收入返利。就类似介绍客人来消费,你拿走一定比例的客人消费金额一样,简单粗暴效果好,毕竟整个 web2.0 其实都是为有能力创造收入的企业服务的(非盈利组织除外)。

看几个案例:

  • matthewwoodward: 一个独立的工具评测分享博客,通过 Affiliate Program(中文叫联盟计划,有点像淘宝客返利) 赚钱,每月有 3万美金左右的收入,之所以我能知道他的收入情况,是因为作者每个月都会公开自己的收入组成,很有意思,而且很涨姿势。大家在网上看到的很多 VPN,主机,CRM 软件,各种在线工具的评测,很多其实都是联盟计划的推广,一旦有用户点了你发布的链接注册并付费使用了你评测的服务,服务商就会返利给你。
  • 大疆联盟计划:当你通过自己的内容平台将潜在顾客带向大疆网站并成功销售出去一台大疆无人机,大疆就会给你返利喔,每月收入最多的账号有 24万美金。这就是为什么那么多人去评测大疆、分享大疆视频了。同理也有京东的联盟计划,可以挑选京东商城里比较火热的一些商品在你个人的内容创作平台上做推广,达成返利赚钱。

其实多数网站都有联盟计划,比如微软Apple ,查找技巧就是搜索 品牌名 + Affilicate program 关键字。当知道自己擅长的领域后,寻找一些这个领域支持联盟计划的品牌,以评测的角度来做引流,从而实现内容变现。

灰色产业型

hmmmm,这个方向也是相当有意思,但是要写的太多,另外有些敏感,如果大家对这个兴趣很浓,欢迎在下面评论,请求的人多了我再写吧。

大致先写这些,如果对其中的方向有兴趣的或者有一些独特的我也不熟知的方向,欢迎留言评论,或加我微信讨论:daimajia,其实 web2.0 下的业余项目机会还是很多的,毕竟搜索引擎是可以低成本抵达任何地方的枢纽,创造了很多可能。

另外,最近一直在医院陪床,夜里时间比较充裕,白天反而都在睡觉,所以可能回复比较晚,还请见谅。😴

先写到这里,期待下篇吧。

你说我是网红,那你是在骂我。

我运营一个技术分享站点已经两年了,为了能够每天分享出优质内容,写了一个爬虫程序,每天去抓取新出的 GitHub 项目,然后分门别类,根据 Star 数,文档完备度以及时间衰减来对一个新的项目来打分,目标是找出最近即将火起来的优质项目。

去年每天都有不少国人的优秀项目冒出来。但今年,寥寥无几,我一度以为我的爬虫程序出问题了,再三确认后,我接受了现实,我也花了些时间去想这背后的原因。

不得不提的是,自打知乎 Live,微博问答这种东西火了以后,很多技术人都急急忙忙去变现了,丢下 GitHub,丢下自己辛苦书写的博客,丢下对技术深钻研究的态度,开启了对技术新手们一波又一波的收割。付费的知识开始变多了,停留在知乎 Live 里,停留在小密圈里。那些所谓的技术大 V 们,每天从一个直播间转到另一个直播间,尽管在粉丝眼里,你是他们眼中的大 V,大神,但在我眼里俨然像一个疲于奔命,四处走穴的三线艺人

现实是,三线艺人多数一辈子都是三线艺人,疲于奔命赚到现钞,停止了技术的孜孜探索,就这么一直消费着自己残存的名气。

之前,知乎的朋友也喊我去做 Live,我当时欣然答应了,但后来却流产了。当时主要问题出在选题上,讲简单的吧,其实资料满世界都有,你并不需要花钱来听,你需要的是花心思和花时间。讲复杂的吧,一个小时也讲不了什么,还不如拉个相关的朋友微信群私下讨论。我的确是有些经验可以分享,但这种经验,我确信不是你听完就能吸收了的,都是那些听起来好有道理,实则睡一觉就会忘的东西。

我有时候在想,多数的知乎 Live 不就是《21 天学会 xxx》系列的翻版吗?听众是那些急不可耐的伪学习者,主播是那些满足你懒惰欲望屠夫,你交了钱,便愉快的步入屠栏。至于小密圈,我完全没想明白,你给你的偶像交了钱,进了所谓的圈子,加了他的微信,你就以为你能跟他平等对话了吗?你 Level 没有到的时候,你永远只是他千千万万客户中普普通通的一个;另外,那些圈子里分享的知识,很多甚至不能称作是知识,只是徒增你的阅读和生活压力而已,我为那些钱和你浪费的时间感到不值。

其实,那些参加 Live 的朋友们,你不是学不会,你只是太着急,你想花钱来省时间。这种心态在我看来真的很危险,要知道,会用搜索引擎来快速解决一个面临的问题,也是一个很有价值的能力,你需要更多的思维训练,花更多的时间去打磨你的解决问题方法论,你走的捷径越多,你给自己挖的坑也就越多。

经济学里,人是逐利的、短视的,而历史证明,最终人会为自己当初的短视付出惨重的代价。所以,那些每天在线上营销自己的技术人,请回归到技术本质,去做更多有意义的研究和创造,把 Live 里那些科普工作交给线上的慕课来做吧,你其实能够创造更大的价值,几万块的 Live 钱,真的只是在耽误你自己而已。

另外,之前那些老把我喊成技术网红的朋友们,不要再这么喊我了,你这么喊,我会觉得你是在骂我。

我所讨厌的那些开发者

前两天,看到湾区日报推荐了一篇文章,名为:「What it feels like to be an open-source maintainer」,做开源项目维护者是一种什么样的体验。里面作者提到一些让他非常不爽的开源体验,读过之后感同身受,也很想写一些自己的开源经历。

如今的开源世界,有两个重要的参与者,一个是类似 GitHub 这样的做工具的企业,另一个是所有愿意开源代码的开发者。GitHub 如今已经功成名就,也从开源中找到了盈利的方法,实现了一个相对完整的闭环。但是对于很多的开源代码贡献者来说,生活其实并没有那么美好。

我是比较早参与开源的开发者,那会儿我崇拜 Jake Wharton 的时候,他的开源的项目也只有三五个,GitHub 相比现在来说也没有什么影响力。我只是鬼使神差的想要把自己作的一些小玩意儿放上去,然后去 v2ex 和 Google+ 简单宣传下。反馈还不错,一次次的正反馈后,就努力的去分享更多。看着 Follower 和 Star 蹭蹭蹭地增长是件很激动人心的事情,但慢慢的我的生活好像改变了。

项目的 Issue 越来越多,遇到配置的问题,新的 Feature Request,甚至跟项目毫不相关的崩溃,各种问题一大堆,也会有人不断的给我单独发邮件提问,有的忘记回复的甚至会追到 Instagram 上发私信问我。

这一大堆的 issue,真的就跟你的家门口排着一排人,在敲门问你问题。你经常得花半个小时的时间,去搞清楚一个 issue 的原因,你得花另外一个小时去解决这个 issue,然后发布新的版本,还需要继续追踪问题,完全正常了才能关闭 issue。一般两三天解决一个 issue 是件常有的事情。

最最最痛苦的事情,开源是件完全不会获利的事情。

工作以后,不论时间还是体力都不足以支撑我完善那些开源项目。我有时候会畅想开源项目爱好者,未来能够在家里全职做开源,又能有钱让自己生活下去,但我并没有想到一个很好的形式,靠打赏吗?简直天方夜谭。

不过得承认,开源给我带来了不少社区的认可,给我带来了微博的粉丝。但是多数开源开发者,其实什么也没有得到过。在默默的付出,却没有人记得,甚至看到。

我有时候跟朋友抱怨,总是会用「割肉喂鹰」来形容开源的生态。不断的牺牲自己的时间去满足那些吸血鬼们的需求,自己内心得到了所谓的满足,前期考验你的技术,后期考验你的体力

开源社区有这几类人总是会很让开源开发者十分讨厌:

  • 没有眼色的自私鬼:这种人总是会在英文的项目中,提出中文的 issue,或是用中文去扰乱秩序。你 百度翻译一下,很难吗?你不去做这些事情,就得项目的维护者去帮你翻译你的 issue。
  • 不会提 issue 的蠢货:这种人,总是在 issue 里丢一句:「魅族手机有 bug」,连堆栈的信息都没有,What?你是要我们通过意念去远程 Debug 吗?
  • 看一下 Wiki 会瞎:这种人呢,从来不想认认真真读一下 Wiki,遇到小问题,就发个 issue,然后谎报 Bug,你费了好大劲,才发现是他没有按配置去操作。
  • 以为自己是甲方:总是用命令的口吻去像你索取。

最让我难过的,是那些毒舌的过客,他们集成出现问题,就开始说出令开发者伤心的话。比如:「这个作者不更新了,大家别等了」,「hey,楼上的,我换用另一个库了。」这种人,从来没有想过要去帮助某个开源项目,开源对他们来说,只是多了一个工作中偷懒的办法而已。

我一直都希望 GitHub 能够提供一个双向反馈的机制,能够让项目维护者,也去评定一个 issue 的质量,从而给发 issue 的人打上标签,让项目维护者,有能力去屏蔽掉那些总是在浪费其他人时间的吸血鬼。

当然,最最重要的,还是希望能有一套完美的体系,让开源项目的维护者,能从中赚到生活费,踏踏实实的继续从事这项工作。

哦,对了,吐槽归吐槽,未来我还是会继续开源的,就跟女人生孩子一样,痛并快乐着吧。

成为一个有目标的学习者

我一个好朋友,他在一家国内较大借贷平台做前端工程师,每天五点起床,早早的到公司,开始读一些经典的前端类的书籍。起的这么早的动力是觉得自己还没能够掌握前端的很多细节,真正在做开发的时候,依然会忘记之前看到过的东西,总是下意识的告诉自己:『可能我还处在入门水平』。

长此以往,起的越来越早,中午同事休息联机玩儿手游的时候,也不放过时间去看书,压力也随之变大。开始否认自己在转行前端之前的时光,感觉都被浪费掉了似的,越是如此,越是无法挣脱,逐步的走到死胡同中,彷徨,痛苦。

他很痛苦,希望我能提些自己的看法。

我想,很多人都曾有过这种时光。就好比高考前的各种模拟试题一样,总有一种人,喜欢在做模拟试题前,把整本书都先过一遍。这样真的有意义吗?我认为回报是很小的。因为你定了一个有些迂回和逃避性质的目标。当入门阶段已经走过以后,你没有必要再从头开始,这是一个会浪费时间、消耗体力的目标,只会让你丧失学习的动力,因为你不再会有比第一次学会更强的正向反馈了,当你耗费大量时间和体力过了一遍以后,依然无所得,这是多么令人挫败的一个过程啊。

那问题来了,一旦入门后,如何得到一个更有激励性质的正反馈呢?

依然是定一个目标,定一个你从未尝试或达到过的目标,让新的目标去刺激你的多巴胺和肾上腺素,让你对某一个东西、技术产生持续的亢奋,从而无形中成为终生学习者。

对于技术人来说,新的目标可以是做一个解决自己生活中遇到问题的小产品,努力做到 1000 日活,做一个开源项目,努力得到 1000 个 Star,做一个小工具,努力赚到 1000 人民币,做一个小社群,努力拥有 1000 个注册用户,或者开一篇博客,写一个公众号,努力做到 1000 阅读。

这些都是可以成为刺激你的下一个源泉。很多很能折腾的人,总是在持续不断的折腾,就是因为他们总是在不断的接收正反馈,他们在不断的认可自己的过程中。

不要因为别人说一本书好,或是一篇文章,一类技术好,就去学它,其实根本没有必要,因为你学它的动力其实是伪动力学有所用才是可能持续学习的动力,主观的坚持不是可持续的真正动力。

我其实一直是很不主张去读其他人的技术文章,至少大多数技术文章都是对你无益的,读的越多,你越是会产生彷徨和焦虑,感觉自己没有成长,缺少自信。缺少自信的表现是你会恐惧未来遇到的新问题,你还是得大量依赖搜索引擎去读几百篇博客去解决一个问题,你没有自己真正的独立思考,你只解决了一个眼前问题,你没有办法套用到千千万万个问题上,你无法亢奋自己的神经,而产生持续的学习和研究欲望。

大量读别人的文章,其实你也无法得到一个独立解决问题的方法论,你会滋生思想的懒惰,很多美好的事物和机会,也会和你擦身而过。

有的时候,读其他人的技术文章也会让自己产生一种诡异的满足感,你会感到我貌似很多东西都会,只是有些不熟罢了,真的如此吗?

举个自己的例子,我当初在准备炒股票前,在雪球上读了很多文章,还专门把牛人们分成了一组,感觉自己差不多了,随即开户砸钱进去,但直到真正开始操盘的时候,这种我已经学会了的错觉,让我赔了不少。有时候就跟你看了一百篇某个技术点的技术文章,真的开始写的时候,什么也想不起来,又得打开一篇,照猫画虎做完,却发现崩溃了。WTF。其实你并没有学会。

我主张你去看原始的资料,主张你去读系统的书籍,主张你去研究官方或是优秀项目的源码。这些都是一手资料和优质 Demo。这才是真正的方法论,Google 是不会给你带来安全感的

而且很多复杂的东西,其实很难用一篇博客文章写清楚。越是清楚其中逻辑和原理的人,反而越是很少写技术文章,一来因为这些技术人感觉还有很多东西要研究,复杂问题写起来总是长篇大论,依赖知识也非常多,写起来麻烦。二来,研究到这些复杂东西的人,往往已经掌握了方法论,也不需要读这些文章,非要写一篇文章的话,只用只言片语提及思路,便够了。

如果你在入门阶段,你读什么都可以,如果你想要有些突破,就按上面三条方法来吧,一定让你有所收获,如果你想有更大的突破,那就先给自己定个从未达到过的目标。

最后,花些时间娱乐,不要总是那么紧张,生活也是很大的一门学问。

正如 文明VI 中提到的一句名言:

那些没时间娱乐的人,他们的时间会花在生病上。——约翰 沃纳梅克

爱德华·霍尔 – 语境文化


去年读了一本很有意思的书,书名叫《超越文化》,作者是爱德华·霍尔。他将自己的一生投入到了跨文化的研究上。

书里提到了一个很有意思的概念:语境(context of culture)。读的时候觉得很有启发性,随即想分享给大家。

语境是什么?

语境就是双方聊天时,共同了解的信息量大小。举个简单例子:你给一个美国人讲一个中国段子,他必然是听不懂的。因为他没有文化背景,你们没有这部分的共同知识,术语一些来说,就是你们的语境不同

高语境和低语境

爱德华·霍尔将语境分两种:高语境和低语境。

高语境多数是那些文化底蕴很深的国家,比如中国,印度,日本。而低语境普遍是那些多民族国家,如美国,澳大利亚,英国。

文化底蕴越深的国家,越是讲究文化上的约束,礼教的管制。清朝的礼部尚书,那可是从一品的大官,位居九品十八级的第二级,相当于现在的文化部部长,古时候主管礼仪、祭祀、宴餐、学校、科举等。

而由多民族组成的国家,想要统一管理美国白人黑人黄种人的文化,简直是件不可能的事情,故而美国一直没有一个叫文化部的部门。如果你去过拉萨或者新疆,你或多或少也会有所体会。

小时候过年摔碎杯子,如果不说岁岁平安,一定是会被父母批的。试想如果你在低语境国家,碎了杯子还要叨咕一阵,对方一定会觉得你很奇怪,也有可能会被误以为是在念咒语。

另外,高语境国家说话更委婉,有时甚至用表情,动作,眼神来传递信息,因为大家相互之间存在着大量的共有文化,传递信息的方式从语言升级到了文化暗示。

而低语境国家,由于民族多样性,以及人群的高流动性,导致在发展的过程中,积累的共同文化相对较少,传递信息的主要方式依旧来自语言。情感会更外露和直白(含蓄了对方可能会搞不明白)。

所以很多做翻译人员在翻译中国文字的时候很痛苦,因为中国话总是旁敲侧击,充满暗示,如果直白的翻译给低语境文化的听众,对方会非常迷茫。

高语境的国家,更注重团体和谐,更考虑团队对方的感受,也更在意自己不会被边缘化。日本就是这种语境的典型,每天即便活儿再少也要努力安排到下班,如果其他同事要加班,自己也会把活故意留一些到晚上,陪着同事一起加班,即便觉得部长挺好的,也会在同事聚餐上,和同事们一起道部长的不好。

而在低语境国家,更多的是以任务为中心(Task Centered),这也是美国个人英雄主义的一大来由。

不知道大家有没有一个感受,就是老外很喜欢用日历来安排自己的事务,而且往往井井有条,而中国日历类的 App,却很难习惯的用起来。

在高语境中,听得一方往往承担着更大的压力和责任。而低语境双方责任较为平等。想想每次人大会议结束后的种种解读你或许能够有所感觉。

低语境国家更容易产生民主制度,而高语境国家更容易产生民族主义

为什么高语境文化难以输出

中国前几年一直在提:“弘扬中国文化,防止文化入侵”。在我看来其实文化入侵是不可避免的事情。低语境文化天生就具备传播性,因为他更为直白,且不需要听众需要额外的知识。

高语境文化可以轻易理解低语境的语言部分,尽管会有些文化上的难以适应,比如老外经常把我爱你挂在嘴上。但是低语境文化,可能连理解高语境文化都很难做到。你能想象到老外看到甄嬛传里一个 Queen 在拿着针扎布偶娃娃时候的一脸懵逼吗?

其实有时候想来,很多文学类国际大奖并不公平,多数都是更偏袒低语境文化的。

低语境好还是高语境好

这个很难笼统的说谁优谁劣。从文化角度来看,高语境更具有沟通效率,但从执行事务的执行角度来看,似乎低语境更容易把每个环节做的更好,从事人员的方向不会被被类似高语境的暗示所迷惑,而误入歧途。

懂得语境,减少犯错

其实我们生活的周围,也大致可以分为两类人,一类是偏高语境者,另一类是偏低语境者。在与不同类型的人沟通的时候,一定要更注意言行,防止对方产生误解,双方出现矛盾。当然做产品也是。

以上都是我的一些个人观点,如果有错误或者待商榷的部分,欢迎大家在下面评论发起讨论。


分享一些自己的学习过程和学习方法

每天,都会有人在微博上私信我,问我关于学习和成长的问题。这种问题我一般都不会回复某个j,毕竟每个人的情况不一样,每个人对待事物的性格也不一样,我不能夸下海口的说,你看某本书几个月就能如何如何,我能做的多数时候只是鼓励鼓励,其次我也从不认为我已经成长到一个多高的境界上,让我去给别人做指导,我还是当之有愧的。

但是,有时候看到大家私信我的时候,确实是处于一种很痛苦或是需要帮助的状态上。
最近晚上有空,就想写写自己从第一次接触程序,到一路颠簸学到今天的一些故事和经验,希望对大家有所帮助。

学习的三个阶段

第一阶段:消费者阶段

我在快上高中的时候,开始接触的程序。那会儿家里有一本 Visual Basic 的书,30 多页左右,也是家里唯一一本计算机类书籍,是我哥学校发的一本课外书,他对计算机貌似没有什么兴趣,就一直堆在家里,直到无意中被我翻到。

书里的程序格外的简单,几行简单的英语代码,就能让计算机弹出一个对话框,当时看到简直神奇极了!跃跃欲试的在老妈店里的电脑上一步一步的敲下代码,弹出一个简单的对话框,那一瞬间,感觉像是推开了新世界的大门,从此一发不可收拾。
实践完 VB 后,又在小书摊,看到了一本 《黑客 X 档案》,看着各路高深的入侵,木马,盗号,试图努力学会这些技能,然后去跟朋友们炫耀,但一直都无法入门。因为需要太多计算机的基础知识了,不是写个弹框,或者计算器水平的人能搞定的。

那会儿家里也没有懂电脑的,也没有人可以问,又处在小城市,连个培训班都没有。

随即,开始漫漫买书求学路。

一旦开始买书,就进入了学习的第一个阶段:消费者阶段。当个消费者其实是个挺轻松的事情,对着书本照猫画虎,一会儿就能跑起来一个看着很有趣的程序。

那会儿,疯狂的买各种书,但是由于周围没有人指导,买了很多类似 21 天 xxx 系列的书,那会儿真的有这种书,我还抱有幻想⋯⋯觉得 21 天后我就⋯⋯

现在想想国内的图书市场简直恶劣到一定程度。很多高校,教师升职评比需要考察发表书籍情况,导致国内一大批烂书其实都是高校老师发出来的。我现在依然认为国内 95% 的技术类书籍是不值得买的,除了像侯杰老师这种文笔很好的技术人以外。

很多作者总是做不到『以读者能理解的顺序,而非自己认为的顺序』写文章,坑害了不少对计算机有兴趣的同学。我一直很崇拜侯杰老师的另一个原因是侯杰老师的书,总是能把你最想问的,如同庖丁解牛,深入浅出的解答出来。就如同 MFC 框架(很早前的一个 Windows SDK 框架,现在已经用的很少了),MFC 是很复杂的一个框架,所有初学的人,都会问一样的问题:”这玩意儿是怎么工作起来的?!”,但所有国产的 Visual C++ 的书,都避而不答,让你照猫画虎的做,就能弹出一个窗体。当初国内只有 《深入浅出 MFC》一书,讲明白了背后的一切。

学完一些基础知识后,就进入了学习的第二个阶段 实践者阶段 阶段。所谓实践者,就是开始用自己所学,去开发程序,成为一名专业或非专业的码农,很多人的职业生涯,也就停留在了这个阶段,过上了小富即安的程序员的日子。

我从消费者阶段过度到实践者阶段大概用了三四年的时间,其实已经挺长的了。我一直都认为我是一只笨鸟,无意中起飞,却飞了很久的那种。

第二阶段:实践者阶段

我真正开始实践的,是在本科学校做的几个网站。

第一个是个学校的匿名聊天系统,就是所有人都可以登录学校的站点,然后会匿名匹配到一个异性,开始聊天,当时用的 Asp.net 做的开发,配合 ajax + jquery,但由于当时技术太差,导致很多人聊着聊着就断线了,导致小产品不告而终。

第二个是给我们信息学院开发的一个官网,用的 PHP。在做这个网站的同时,我选修了一门叫《网络安全》的课程,这门课的老师叫陈路,我曾当着老师的面儿,夸下海口,我开发的官网,坚不可摧…(大概这个意思😳)陈老师知道了我做的网站,随即下达一个作业:”谁能攻陷我们的官网,一个漏洞加五分…”,后来,咳咳⋯网站数据没有了⋯⋯ 有个同学用一个很通用的扫描工具,在他也不知道发生了什么的情况下,工具把网站内容都删除了⋯⋯恩,我犯了个超低级的错误⋯⋯ GET 请求可以删除数据,外加身份认证代码有误⋯⋯

幸好,查看 Apache 日志的时候,发现删除请求到来的前几分钟,Google 爬虫来过(那会儿 Google 还能用),随即马上去 Google 的缓存里找回了所有的数据。
后来陈路老师被学校批斗了一顿,批斗的罪名是『鼓励学生攻击校园网络』,我其实是极力跟学校执事说明这个错误是我犯的,陈老师做的并没有错,而且我到现在还是很喜欢陈老师这种教学方法,毕竟实践出真知。

可能现在陈老师在教《网络安全》课程的时候,会以 “当年有个学生….” 作为开头,有时候想想也挺有意思的。

再后来我花了很多实践学习 Web 安全相关的知识。写各种 Web 程序时,都会最大程度的考虑安全问题。
网站攻陷后没多久,Android 出来了,我买了第一部 Android 手机,然后自己照着官方文档开始学 Android,动力的源头,是我听说写 App 能赚钱。赚钱真是学技术的很强的动力,之前写网站零零星星的赚了六七千块钱,作为同学里的小土豪,我又把目光转到了刚出来没多久的 Android 上。
当时先定了一个目标,写一个图片类 App,打算叫『无尽画廊』。因为很喜欢 WeHeartIt 这个小众文艺图片网站。随即计划利用正则解析图片地址,然后用把图片呈现在 App 上。那会儿 Java 和 Android 完全零基础。

自己在入门 Android 的时候真的超级拼。早上 6 点起床,然后开始悄悄下床(不能吵着舍友),打开电脑开始研究加开发。折腾到早上 7点半左右就和舍友一起去吃早饭,然后上课。中午回来也不午休,开发到快上课,晚上基本都会熬到 12 点左右。持续了 1 个月左右,终于从零基础到开发出一个粗糙的 1.0 版本,发到了国内的几个 App 市场。反馈不是很多,但是都挺积极,随即决定开发 2.0 版本,还加入了广告积分墙。就这样超拼的持续了 3 个月左右。现在网上能看到的基本都是 2.0 版本。我从这个 App 里,也赚到了一些广告费,大概几百块。但是因为广告服务商倒闭了⋯⋯ 钱到现在还没取出来⋯⋯ 心痛⋯⋯
持续更新那个 App 到快毕业的时候,选择了保送到北师大。

暑假的时候去上海一家小公司去实习了,在实习的这家小公司,我做了一个到现在来看依然很屌的功能。现在来看是一个相当不错的 Growth Hacker 的一个案例(那会儿可没有增长黑客这个概念)。

实习所在的公司,是做类似小米盒子的东西。当时的盒子,最重要的当属内容,版权还处于蛮荒时代的时候,大家纷纷解析优酷,土豆这类的网站,以最少的成本,盗用优酷的带宽。简单点而来说,就是做视频聚合。视频聚合最麻烦的就是提取视频的真实文件地址,这样能为所有的创业公司免去版权纠纷,同时解决带宽费用问题。

我去那家公司实习的主要内容,就是用 Node 语言做视频地址解析,费劲功夫搞定了几乎所有的视频网站,各种黑科技都用上了,抓包,逆向,Headless Browser 等等。搞定所有网站后,也算勉强跟竞争对手站在同一起跑线。实习第二周的时候,已经有些没事儿干了,就在这会儿疯狂的想法出现了!

可能很多人还记得当年伟大的迅雷云播,解救了不知道多少个少男寂寞的夜。我们疯狂的想法就是要让我们的小盒子,能够流畅的播放用户从电脑上推送的任意种子文件,无需等待。在那会儿 TV 上,这种功能简直就是创举!

想法出来后,我抗下大旗,开始用代码模拟迅雷云播的全套流程。开发的过程十分艰难,得从不同平台的迅雷上抓包,寻找蛛丝马迹。优先从 Web 端模拟登陆和提交种子文件,这些都相对容易一些,最难的是如何提取到视频的真实地址。花了大概一周时间攻陷了所有的流程,然后公司买了 10 几个迅雷会员,又和各路 BT 网站开始合作,开启了浩浩荡荡的用户增长之旅。具体增长了多少新用户,其实我心里没有数,但是看见旁边的小朋友,每天都在加服务器,优化 Socket 连接数,我猜那一周得新增了 5 – 10万用户,更为壮观的是每到夜里,所有的迅雷账号里就瞬间塞满各种不可描述的日本电影,全部清空后,又被瞬间塞满。以至于后来,实习到第十七八天的时候,我的老板和 CTO 喊我过去,直接送了我 20 万期权,那感觉也是蛮爽的。后来微博上,这个功能也是火了一阵子,不过很快就挂了,起因是有用户在微博上 at 了小米电视和迅雷,让他们跟我们学着点儿⋯⋯ 然后,不超过半小时⋯⋯ 服务就挂掉了⋯⋯ 不过挂掉没几天我就去帝都准备研究生报名了。

还有一件很爽的事,就是我上了研究生后的半年里,那家公司一直给我支付着工资⋯⋯ 每个月轻轻松松就有几千块钱零花钱⋯⋯ 再后来的后来,那家公司倒闭了⋯⋯

快从上海实习结束的时候(实习一个月),我又认识了少楠,加入了 AT!组织。AT! 组织是一个分享优质原创动画的小团队,从此我从一枚野生开发正式晋升为一枚正规军。少楠是一枚非常优秀的产品经理兼设计师,跟着他学到了很多产品的知识和团队协作的技巧,也让我最后真的开发出了近百万用户的 App。AT!组织到现在都是我爱的组织,大家虽然从事不同行业,但就跟亲人一样。每次聚会都是一年一度最嗨皮的日子,都是我经历过最真诚的聊天。从后来做了 AnimeTaste 再到 EverMemo,我第一感觉到团队的重要性,第一次见识到优秀的设计师和 iOS 开发者。

以上的诸多经历也为自己创业埋下了很多伏笔。这些都是我是我的实践者阶段,漫长的三四年。

第三阶段:创造者阶段

实践者阶段之后,自己开始尝试创造。也是我认为学习的第三个阶段 — 创造者阶段,这个阶段是没有结束节点,就一直这么存在着。

我大致是研究生一年级的时候开始摸到创造者阶段的门梁,大三的时候接触的 GitHub,感觉是我学程序来,打开的第二个世界的大门(第一个,算是那个 VB 程序的弹框)。接触到 GitHub 让我第一次开始学习和研究脚本语言( Python,Node,PhantomJS 等等),第一次开始接触真正的生产工具(类似 Less,Sass 等等),GitHub 简直是求学者的宝库,你会很期待明天的 Trending 榜单上会是什么新东西冒了出来。

那会儿在研究生阶段,每个月有了公司发的几千块钱,也开始入手了人生第一台 iPhone,一台土豪金版的 iPhone5s,买 App 太贵便折腾起了越狱(现在都是买 App 了)。装了一款越狱后的 Store(我忘了叫什么了),那个 Store,在下载一个 App 的时候,有个超漂亮的进度条,我每次都会认真的的盯着那个进度条,一边看,一边感叹,一边也暗许自己也要在 Android 上实现一套,这也是我开始第一次开发自定义组件的初衷,也是 NumberProgressBar 诞生的最初原因。

啃下第一个自定义组件,对很多人来说都是很痛苦的,我也一样,那会儿的 Android 组件少的可怜,不断的看文档,看源码,读别人的代码,试图搞清楚更多更底层的东西,不断的尝试运行,折腾了一周左右(每天超过 10 小时投入),终于做出来了,照猫画虎的写好文档,做好测试,小心翼翼的发布到 GitHub,然后发表到当时为数不多的 GitHub Android 分享社群里。地址在这里:https://plus.google.com/+daimajia/posts/d6DJhLhLn1c

再到后来的几个月,又陆续写了一些其他的库,发到 GitHub 上,其实我根本没想到会有那么多人去 Star,可能跟下手比较早有关,恩。

创造者阶段,就是努力创造那些没有的,源自你脑海里的东西,而不是别人安排给你的。努力做到让更多的人用到,可以是一个 App,可以是一个帮助人们提高效率的 Chrome 插件,也可以是一个简单的组件。创造是最挑战你对一个行业的热爱程度的。

我从来不反对重复发明轮子。每一个轮子即便有一些小的改进,都是适应自然法则,优胜劣汰的。

就我身边而言,我最崇拜的创造者是尤小右,将一个小的 Framework,一点点的做大,再到做出国际影响力,真是个不得了的事情,也是很多技术人梦寐以求的事情。

*总而言之 *

如果你忽然觉得自己这几年一直处在一个很稳定的状态中,觉得自己没有提升,那你得想想是不是我卡在了某个阶段,一直无法突破,你是否需要做些什么,突破到下一阶段去。随后的文章我也总结了一些误区和突破方法。

被误以为的学习

当年,有一本书刊特别流行,叫《故事会》。《故事会》后来销声匿迹了,在我眼里,取代《故事会》的是知乎。对,就是那个知乎。
我其实一直很反对一个论调:“上知乎,学知识”。醒醒吧。知乎明显就是现代版的故事会好吗?!
我不否认知乎存在有价值的知识,但,根本不值得你花那么多时间,去发现那少的可怜的知识。去读书吧。用最系统的逻辑,去学会一项技能,哪怕你去《硅谷百年史》里去读那些振奋人心的仙童半导体的故事,也比你不断的知乎看着水的一笔的帖子要强的多。现在,最可怕的是大家在知乎上消费着垃圾,却依然觉得自己在吃着奶酪,学习的过程都是伴随着思考和痛苦的,如果你边笑边学习,那你真的得醒醒了。

目标和激励很重要

我在大三下半学期被保研后,开始了另一个小项目,一个叫 小熊词典 的 App,起因是因为在学英语的时候,所有词典类 App 想要获取最全的词语解释都需要联网,流量消耗大不说,电量是最大问题,自习一早上电量就没了。所以,自己想动手写一个词典 App,主打离线词库和快速查询。

但最后的时候,小项目胎死腹中。说实话,整个 App,已经开发到 95% 了,抓取了非常多有名的词库的数据,并且整理成了规范格式。但项目最后还是放弃了。即便今天来看这个词典依然很酷!(最丰富的词库和最快的查询速度)

现在想想,当初一个人开发的时候,每次想到一个很酷的功能,就决定加进来,项目进度遥遥无期。完全没有项目管理的思路,也没有意识到这样会很快拖垮我的体力,消磨掉自己的意志和热情。

对于很多初学者来说,总是抱着书学,其实也是同样的后果,你无法获得任何的反馈和激励,以至于觉得一件事情越做越难。学习的过程,最好能定一个简单的目标,比如:“我即便现在什么都不会,我就要做个小游戏出来,这个游戏应该是这样的一个玩儿法,blablabla。”,做出来后,快些去找用户,可以是你的朋友,也可以是你的父母,最好是那些不吝惜赞美的朋友们,让他们无形之中给你一些动力。

你永远无法一步达到完美

我认识的朋友中,他们都有各种稀奇古怪的想法亟待实现,但最后,以信誓旦旦开始 Side projects,最后却都销声匿迹了,这是不无原因的。因为很多的开发者在刚开始的时候,缺乏清晰的计划,却想一步登顶完美的境地。这是很可怕的想法。就好比,我一个很少登山的人,却在第一次的时候,就决定登顶珠峰,结果自然可想而知。在实践自己想法的时候,最好能考虑以最低成本去展现你想法的核心部分,而非一个大而全的方案。

从最小成本的想法核心,一步步的去验证自己的想法,去收集反馈,调整策略。最终抵达一个正确的目标。

赶在兴趣消失之前,去学习新知

不得不承认懒惰是人的共性,当你看到别的朋友做出来很酷的小游戏的时候,你是否也有几分钟冲动的想要去学习游戏制作。不要等!快去买两本书抓紧学起来,哪怕你知道你这个热情的苗头很快会熄灭,但请不要放弃任何发现新大陆的机会,在学习冲动消失之前,去入个门先。

我每次跟人互相分享初高中生涯的时候,我总是能想起来我初中时候的一位语文老师,微胖,性格和蔼。
她在一次自由复习准备期末考试的时候给我说: “你复习,不要局限在课本上,你背会 24 节气都是很有意义的,想看什么书,就去看,不要等,不要担心自己学不会。”
这话对我学习新东西影响特别深,现在我基本上想学习什么东西,立马去学,即便可能一周后气馁了,放弃了,但是从来不会怀疑学这些零碎知识的意义。
我学过吉他,写过毛笔字,写过 Delphi,用 Sketch 画过 icon,用 Blender 画过 3D 保龄球,写过 Unity 小游戏⋯⋯ 很多我都没坚持下来,但给我带来的最大改变就是我不会惧怕去接受新事物,思考问题的时候总是能把很多场景考虑到。也能慢慢的找到自己最爱做的那件事情,更清楚的定位自己。
所以,当你忽然对某件事情有兴趣的时候,抓住那几分钟,那几天,赶紧去学点新东西。
毕竟,点总是会串成线的。

少看别人写的文章,多看优秀的代码

我做 Gank 以来,很多开发者都投稿过,以至于现在后台还挤压着 2000 多个投稿没有处理。看过这么一圈而后,我开始不主张去看别人写的技术类文章。看别人的文章,你看到的是他想讲给你的,而这些可能只是他在自己的项目里用到的,而不是一个客观全面的角度。时间一长,以至于你只知道这个东西的一两种用法,更可怕的是你可能已经对思考丧失兴趣,总想走捷径,可能这样前期学习效果显著,但是后期会很快到达瓶颈。我想如果你经常读各种语言的官方文档,总是会有 “啊哈!这样都可以,我以前都不知道还有这种方法存在。” 的感叹,但你看别人的文章,却很少有这种感觉。

至于主张看优秀的代码,其实是希望学习一个技术细节,是伴随着思考的。其实,评价某一种方案好与不好,是没有意义的。只有多积累其他人解决同一问题的方法,才能在下一次做决策的时候,找到适合当前场景的最优解,很多时候,也能触类旁通,给解决其他问题提供思路。

慢慢减少对二手知识的依赖

技术提升这个过程,其实是你对二手知识减少依赖的过程。二手知识是什么?就是那些经过别人翻译,总结的文章。一开始入门,大家看到的都是二手知识(也可能是三手,四手的知识),但,想要提升自己的能力,强迫自己多去看些更官方的文档,体系化去学习。这个过程是很消耗体力和脑力的,但多坚持,一定会有明显改善的。

收藏的意义不大,收藏也不能改变什么

很多人看到不错的文章,总要 @我的印象笔记⋯⋯ 我之前也会这么干,经常把一些不错的文章,存到 Pocket 或者 Readability 里,但,真的回顾去看那些文章的机会太少了,而收藏这些文章给我带来不少压力。有的文章,我只是浅显的读了读,脑子里总是得记着有时间了再去读完剩下部分,正如大多数人一样,再也不会去读了。久而久之,拖延症也就变得理所应当。

有可能你会说万一哪天用到呢?其实我觉得再 Google 一次就好啦,可能会找到比这篇文章更好的。就这样。

现在,看到一篇不错的文章,首先从标题推测下内容,再扫一眼,如果跟我猜测的八九不离十,我基本就关掉了。如果有跟我的推测大相径庭,我一定会一口气读完,而不是收藏起来以后再读。

之所以我说收藏什么也改变不了,是因为读别人的东西,思考的过程是别人的。努力去减少从别人文章里阅读学习的频率,多去读一手资料然后自己总结。

培养一些对产品的感觉

你有没有在 PM 说了要实现某个效果或者功能的时候,你站出来反对,说这样并不合理。如果你有过,那么我想你也是一个有理想的开发者,而不是一个“码农”。聪明人喜欢跟聪明人合作,大家一开口就互相明白了。没有人是天生聪明的,只是看的多了,想的多了,就显得聪明了。

看些什么呢?看看一个优秀的 App 早起的冷启动是怎么做的,看看 Apple Store 或者 Google Play 上最近有没有什么新奇的 App 出现,看看 Tech Crunch 上最近又有什么天马行空的项目融到了钱。

想些什么呢?想想一个产品功能的存在有没有意义,他的下个阶段又会怎么发展,想想某段文案是否会降低产品某个功能的转换率,想想某个动画效果是否是很恼人的存在,如果你可以对微信加一个功能,减一个功能,你又会作何选择。

每个人都应该有个 idea list

我在西安读大学那会儿开始,就有一个小本子,记录着突然冲入自己脑海的一些靠谱或是离谱小想法。上面会写着类似:

  • 做个 Every big moment,用手机记录自己的每个值得纪念的瞬间,然后打印成相册发给我或者放在网上当做自己的 Profile。
  • 狗狗出门便便,主人打扫很不方便,有没有更好的方案?
  • 程序一旦崩溃,直接发送操作记录和堆栈信息到 Dashboard,而不要让测试人员努力重现,写个 SDK,搭建一套服务,一定会很好用。
  • 很多的 Bug 追踪服务,为什么不在错误堆栈旁边,展示出来这个 Bug 的解决方案,哪怕是一个 StackOverflow 的链接也好,这样我就不用去自己搜索了。

那个小本上记录了自己好多做产品的想法,有不少,后来市面上都出来了相应的产品。也有一些现在看来很可笑,有的想法今天再翻看的时候,仍然会冲动的想要组团队去实现。

Idea list 总是能激发你去创造的欲望,有空,就去不断的记录自己的 Idea list 吧。

另外,不要把自己的 idea 当做一个秘密,多和人去讨论自己的想法,在不断的否认和肯定中,完善自己的想法,idea 是不值钱的,只有实现它才是有价值的。

争取去更优秀的地方

这句话可能大家都懂,但我的体会却比大家都深刻。

我在西安一个叫西北大学的地方读的大学,是一个普通的 211。计算机专业客观来说比较一般,在来北京师范大学读研究生之前,我甚至没听说过 ACM。

Python、Ruby、Node 这种编程语言在我们的计算机系,根本连影子都没有,所以正统的计算机技能点基本都是 C,C++这样,这并没有什么错⋯⋯ 但路子就变窄了很多,学长毕业去个腾讯、阿里,已经能被大家推上神坛。

本科学校大二会给计算机系开一门日语课。为什么会给计算机系开日语课呢?因为很多外包来自日本。这个逻辑我一直都接受不能。这都什么年代了,我们早都不需要用外包支撑我国的 IT 产业了。

学校给学生的定位更多是一个学校展示就业率的棋子,你会什么不重要啦,只要你最后有个工作就好了,不要拖累了学校的名声。

来师大后,感受到了前所未有的转变。学校整体的气氛相当自由,很多老师们,都是各自领域的专家,你问一个问题,他们能给你引导出很多有意思的点。久而久之,你也会被这些感染到。有时候,我也会想,以后稳定下来之后,要不要去申请个美国名校读一读。

结尾

目前能想到的一些学习的技巧和陷阱,大致都列了出来。都是我个人的一些学习的经验,如果对你有帮助,想必也是极好的,如果你觉得我写的有不合理的地方也欢迎指出。坚持着去实施提及的一些方法,一定会对你的生活和职业带来改变。

另外,这篇文章是一个在线的可编辑的 Doc,就放在 Dropbox 的 Paper 上,如果你发现什么错别字,抑或是想要发一些评论到某些段落,欢迎直接戳过来给我留言,地址:http://t.cn/Rc9ePRz

我还会在公众号里分享更多自己的经验,欢迎大家关注。

博客搬家了

终于,还是打算把博客从 WordPress 搬到 Ghost 上来了。因为最近博客老挂… 大概是因为 wordpress 占用内存太大的原因吧,没细研究。

其实我也一直很好奇,为什么我的博客一挂,就有人在微信微博上私信喊话:『代码家,博客挂啦,blablabla』毕竟好久没更新了…随后我就用重启大法清理一下内存… 然后如此循环往复,终于,忍不了了。

早上,隔壁邻居咚咚咚敲我门,是个老外,叫阿龙。之前一起吃过 BBQ,我给他说遇到 any problems, knock, knock。

定睛一看,眼睛肿的跟乒乓球似得。他说:『Lin, I need help…』

随后我带着他先去了周围一家社区医院,医生愣是把眼睛肿当眼疾看了。后来觉不靠谱,又去了中日友好医院,发现原来是过敏,根本不需要眼药水什么的。阿西。一早上大概踩了下国内医疗这个坑。

奔波一早上。下午累趴。刚睡着,来了个电话。

遏制暴走,安安静静的坐起来,选择了迁移博客。

侬,就酱紫,你看到了这个新的博客。评论好像都不显示了,原因知道,解决办法也有,以后再弄吧。

附图一张:

阿龙