在本次分享中,两位老师对经常提及的工程思维进行了多角度的阐述:
- 什么是工程思维?
- 工程思维的重要性体现的哪里?
- 工程思维在区块链中的如何应用?
- 我们在运用工程思维时又要避免什么误区?
本期内容分成三个部分,分别是:
- 工程思维与区块链;
- 用工程思维发现区块链认知误区;
- 自由提问。
以下为本期【碳链共识对话】的全程记录,由碳链价值原创组整理。
工程思维与区块链。
什么是工程思维?工程思维最核心的精髓是什么?
吴为龙:
工程思维我个人的理解更像是说对于技术实现的把握的思维。也就是说从一个定义如何一步一步从接口到最终落地产品,中间需要做一些妥协,做一些优化,最终让他能够工作。
在湾区,一般说来大家都很喜欢说一句话叫做:Do something, and make it work。
基本上就需要带有工程思维的工程师上来解决了。最核心的,有办法把一个想法实现出来。
工程思维为什么如此重要?
吴为龙:
因为大多数学术上或者大家脑海中的一些定义,是可以实现的,比如一些AI,机器人之类,但是工程化这个步骤只能从一个角度切入,然后一点点去实现整个工程,比如说早期的机器学习,因为硬件的限制,所以停留在识别数字的水平,随着硬件的提高,识别的东西增加。
尤其是学术上,本身通过一些假设,在实现上假设并不成立的情况下,如何还将相应的工程实现出来就是工程师的工程思维决定的了。那么在区块链中也是这样,我们在实现的时候肯定需要优先选择工程实现过的产品进行移植或者相对比较早的论文进行实例化。
比如区块链中遵循的分布式设计的CAP定理,就是一个2000年的理论知识,现在照样适用。
计算机工程思维与区块链工程思维在哪些方面是相似的,在哪些方面又是有较大的不同的?
吴为龙:首先这两者都是计算机工程领域的,都是从接口到一步步实现的,其中包含的理论都是很类似,比如全局变量,局部变量,原子性,一致性之类的。
不同的点在于,区块链上是以全局变量为主,所有的更改都是针对全局变量的一系列维护,每次全局变量的改变都需要进行共识。包括通信的也都是开源,所以很容易被嗅探合攻击,这些和闭源的工程还是不一样的,需要对通信多次改进优化。不同处还是主要围绕着变量作用域和点对点通信的思维。
工程思维是一种“受限条件”下解决掉问题的思维方式吗?区块链有哪些大的“受限条件”?工程思维是如何处理这些“受限条件的”?
吴为龙:
对的,工程思维本质就是基于不同的“受限条件”,也就是需求,下如何把事情做出来。即便有一些复杂边界,当时需要简化,未来在实际有场景的时候及时更新,也就是现在的先做出来在迭代的设计思路。
区块链最大的受限条件就是,写节点也就是挖矿节点的资源是有限的,无论是计算验证还是网络通信。
所以在这种受限条件下,需要对虚拟机的资源进行控制,比如ETH的gas limit,EOS的RAM,需要对传输message进行控制,也就是P2P的部分不能太大,次数不能太频繁,以及节点之间如果网络延迟太大也会影响到整个链的tps。需要综合的去根据每一个需求设计区块链。
工程思维是一种为了解决掉问题可以采用“权宜之计”的思维方式吗?你认为在目前区块链所处的发展阶段,哪些东西是可以“权宜”的,哪些东西是绝对不可以“权宜”的?
吴为龙:
对的,最重要的点就是,解决问题。首先,我先说不能够权宜的部分,账户安全,也就是区块链最核心要保护的全局变量。
本身区块链就是为着分布式写节点共同安全的维护全局账本来设计的,如果安全无法保证,经常双花,那么区块链存在的根本意义就没有了。也就是共识机制设计的有问题,并且在分叉后无法保障利益。
那么那些事可以权宜的呢,当然是TPS,因为本身越分散的节点,网络通信时间就已经成为主要的tps障碍了,如果钻tps的牛角尖,可能会让自己的节点很中心化,无论是分片sharding还是不让外人挖矿的一些公链。
毕竟你要打败taobao,你就要先成为他,他有多中心化你就要有多中心化。还是踏实做公链就好。
从工程思维的角度来看,区块链是什么?
吴为龙:
全局读写的节点组成的分布式系统,系统中写节点需要通过竞争或者轮巡的方式对全局变量进行写,读节点(全节点)提供所有的全局变量信息。
所有的脏读脏写这些问题都会重复出现,不过这次名字换了,双花。
从工程思维的角度来看,区块链可以做到什么,不能做到什么?或者说可以解决什么问题,可能无法解决什么问题?
吴为龙:
区块链能做到的是,让读写节点分布到各处,社区一起维护一个全局KV的数据库。
不能做到的是叠加一些跟大数据相关的功能。
首先大家了解一下大数据定义:大数据是指那些超过传统数据库系统处理数据的数据。
毕竟之前提到了,节点都是有限的资源,区块链再怎么分布式,维护的都和传统数据库差别不大。这个需要的就是分布式存储的部分了。MapReduce,Hadoop之类的也是营运产生的。
在区块链领域,工程思维要求工程师时时刻刻放在脑子里的几个核心要素是什么?
吴为龙:这个一定要牢记啊:
- 全局变量一定要注意作用域,无论什么时候在链上做事情,都要签名验证。
- 所有的写节点都是资源有限的,不要动不动就占用很大的资源。
- 所有的通信都是开源的,一定要保证自己被嗅探到了很难被攻击,要么就直接闭源。
我们的第一部分就到这儿了,吴总以工程思维的角度解读了区块链,好多见解都是第一次听到。大家有没有什么问题,可以提问。
Q1:全局变量容易被嗅探和攻击,所以区块链为了解决这一问题上做出了哪些努力?
吴为龙:就是在P2P的时候做了各种认证,再加上加密。细节可以看代码部分
Q2:区块链最大的受限条件是“写节点的资源是有限的”,但以一般的认知来看,似乎受限条件是因为在分布式下对一致性的追求而导致的TPS不高。
吴为龙:TPS的制约:网络瓶颈和内存瓶颈。一致性那个属于CAP设计共识的范畴,在网络瓶颈下,作用并没有想象那么大。当然还有验证签名的CPU
Q2-1:也就是说,最大的瓶颈是网络瓶颈?它能怎么解决?
吴为龙:比如ETH就是通过高速通道来连,10ms左右,社区买单,其实还挺贵的。要么就选择国内最常用做法,不让别人挖,全靠自己弄,就是弄的再远也无非是新疆和海南。
Q2-2:这不是有效的解决手段吧?
吴为龙:这是常见的手段。
Q3:区块链是“全局读写的节点组成的分布式系统,系统中写节点需要通过竞争或者轮巡的方式对全局变量进行写,读节点(全节点)提供所有的全局变量信息”。这个定义是如何与区块链中的一些核心概念或机制对应起来,比如共识机制,比如分叉。
吴为龙:写节点的竞争出块,就是大家最常见的PoW,通过计算一个题,谁先算出来谁获得写的权利,这个计算过程我们称为挖矿。分叉就是一个矿工经过计算算出来题了,但是他只在全局变量里写他自己的东西,然后一群人就开始统一他的全局变量。那么就分成了两波人互相认同自己维护的全局变量,这就是分叉。读节点只干一件事情,下载最新的全局变量,然后供别人下载
Q3-1:似乎全局变量在区块链领域是一个非常重要的概念?
吴为龙:全局变量在哪里都是很重要的,不过区块链里维护的你的账户上的余额就是全局变量。
Q4:想要接着上面的tps受写节点资源限制的问题接着问一个问题么?
像EOS这样,每一个写节点资源都很强,但是这种强资源又给写节点设置了很高的进入门槛。最后我们似乎无法在tps和去中心化之间作出平衡。
吴为龙:这个几乎是见仁见智。有些人就是喜欢tps,有些人就是喜欢社区参与感。所以没法平衡,主要看个人喜好。
用工程思维发现区块链认知误区。对于区块链有哪些认知误区?从工程思维的角度来看。
吴为龙:那我简单的说三个小点吧,抛砖引玉。区块链并不是完全不能更改的,区块链的去中心化不是那么重要,区块链的属性不只是转账,无币区块链真的是下半场。
区块链是不可篡改的,因为篡改的成本很高。
这个没错,其实这个只是针对于说很高算力在里面的BTC而言的,一般的小币种,算力很容易被现有一个大的碾压,然后就更改。也就是写节点选择机制失效。除了PoW,PBFT也有合谋的失效。所以我国人民就有了不公开挖矿的区块链,毕竟写节点外面永远接触不到。而国外走另一条路,发明新的题,包括ETH的dagger也是属于新题型,抗ASIC的都是新题型。做到完全不能改:要么中心化写节点,要么加速堆高算力。
去中心化不是那么重要
当大家意识到现在的PoW成为了硬件中心化,DPoS成为了线下交友会的时候,就发现大事不好,区块链已经中心化了,可能会不好。
失去了相互制约的确是不好,不过这依旧是区块链。
首先,算力总上限在那里,任何新的想攻击的人无法轻易攻击。其次,线下交友会,在链上治理的时候就会很轻松通过一些提案。
可以架一些高速网络让整个区块链系统速度更好所以去中心化只是一开始的一个设想,不过没那么去中心化,区块链依旧也是OK的,只要写节点的选择机制不失效。
也就是说区块链的属性问题。
现在大家都在维护的是账户对应的余额,这个全局变量维护了大家的“资产”。也就有了“你有多信仰BTC,你就多要清仓法币”。而也正是匿名性和金融属性皆占的原因,导致区块链上非常多的菠菜业。
一个链上线,就是一个新的Casino上线。那么全局变量,大家一起维护的,除了资产之外,一些合同,文件,档案之类的都是可以用这样的技术逻辑来设计的,而且有读写节点能够保证国内政府部分“只跑一次好”的要求。
而且通过跨链技术,也是可以进行一系列SPV操作在数字资产链和资产链上的,所以越来越多的可能性要出现在一些除了匿名金融这样属性的里面。
在讲完了工程思维在项目实现上的应用,现在有请古老师就工程思维在投资以及产品开发领域的应用分享他的观点
古千峰:刚才吴总对工程思维在区块链领域的应用做了非常精彩的阐述,我就不谈这块了。我本人对于工程思维的理解,可能更多的聚焦在产品开发和投资方面。
首先讲一下我理解的工程思维,我对工程思维做了个总结,即:
在有限的资源前提下,有所取舍的把事情办成,在做事过程中,通过把未知问题化为已知问题,把大问题分解成小问题,有序的去解决。
举个大家都熟悉的例子,就是怎么把大象放进冰箱里。从工程思维的角度出发,首先分解成三步:把冰箱门打开,把大象塞进冰箱里,把门关上。多简单!
与工程思维相对应的一个概念是理论思维。理论思维的特点是必须要能自圆其说,有理有据,逻辑推理上非常严谨。但工程思维更多的是实践出真知,追求的是解决方案和结果。这是两者的区别所在。
打个比方,比如炒股,很多人刚开始做股票时成绩不错,但做了一段时间后反而退步了。
然后希望能找到优化的方法,但事实上越高越复杂,搞来搞去越来越亏。
从工程思维和理论思维角度,我们可以这样去理解:其实炒股是一个实践性很强的事情,目的只有一个:賺钱。但随着研究的深入,很多炒股的朋友钻到了理论堆里,让理论思维取代了工程思维。
一开始的賺钱,让他们基于这些“成功”的模式归纳出了一套方法,但是在后来的实践中却发现好像并没原先感觉的那么灵,于是就不断尝试着优化,看书,把价值投资、技术分析、各种炒股理论、甚至金融学等等全部撸了一遍,却发现越亏越严重。
原因就是错误的用理论思维去超越工程思维,而炒股却不需要太多理论思维,低买高卖就行了。
这个不是说其他人,其实在说我自己哈相反的,一些稀里糊涂,从不总结,从不优化,盯着一个简单的、传统的方法做的人,反而赚了钱。因为他们一直是以工程思维来炒股。
在数字货币投资领域,也是一样。很多成功投资者(注意:不一定是专业投资人)非常看不起投资砖家。
因为很多专家讲起投资理论来头头是道,操作起来却一塌糊涂。
原因就是他们的思维模式是理论思维,追求逻辑上的合理性与严谨性。但是在数字货币这个非理性市场上却摔得鼻青眼肿。备注一下:我也是其中的砖家之一
我们知道,很多基础物理学家非常伟大,比如爱因斯坦、霍金,他们遵循极其严谨的理论思维,为了证明一个看似简单的公式,需要花上几年几十年时间来论证。但是他们的理论如果要落到实践上,做出产品,则必须依靠工程思维,即在有限资源情况下,怎么解决问题。
昨天晚上,我看了一部电影《横空出世》,李雪健和李幼斌主演的。讲64年中国第一颗原子弹研制的故事。在此过程中发生了很多次物理学家与工程部队的冲突,其原因就是理论思维与工程思维的矛盾。
另外,前端时间受到广泛关注的黎曼猜想也是类似问题。数学家们证明这个猜想,是理论思维,必须要追求逻辑上的严谨,为此不惜花了一百多年时间。
但是作为密码学和计算机软件工程师,却不去管这些东西。管这个猜想是不是正确,先把猜想拿来用就是了。
于是就有了RSA加密算法。严格来讲,RSA算法是不完美的,但是从工程思维角度看,这种不完美并不是非常重要,重要的是能解决问题。找到99分的解决方案,远比100分的证明更重要,这是工程思维的精华。
在区块链行业,类似的事情表现在“不可能三角”,大家可以根据我上面的阐述去理解为什么会有“不可能三角”,这里不再赘述。
前段时间,网上流传着一个视频,某公司前端因不满产品经理提出的需求,而与他大打出手。
这个故事和工程思维有什么关系呢?前面我们讲了工程思维和理论思维的冲突。
现在讲下工程思维和产品思维以及用户思维的冲突。
这个可能更加实用。一般来讲,老板往往是用户思维为先。一切从用户角度出发,因为用户是公司的衣食父母。
比如用户认为App上需要扩充一个功能,他就会命令团队实现。但是他并没有考虑为了实现这些功能,还需要调整数据库,需要调整后台代码,需要改变系统框架,设置需要调整业务组织结构等等。
于是,开发人员不干了,你老板看人挑担轻松,轻易的提个需求,让咱们累死。而如果老板不懂技术,他肯定会非常光火,这么简单的一个需求,居然要1个多月时间才能完成?难道是磨洋工?这就是用户思维和工程思维的冲突。
工程思维想的是实现方案,而用户思维的目标是满足用户需求。有时候一个简单的需求会牵一发动全身,但是拥有用户思维,却不懂技术的老板并不会理解工程思维的开发团队。产品经理的任务是把用户思维和工程思维做良好的衔接。
为什么说好的产品经理多出于技术人员?
就是这个原因,因为他们能充分平衡用户思维和工程思维。比如号称中国顶尖产品经理的马化腾和张小龙,都是技术出生。
我认为在一个团队内,充分让每个岗位(甚至老板)深入理解工程思维、产品思维和用户思维非常重要。不同的岗位要互相理解,这样才不至于闹出产品经理和开发人员大打出手的闹剧。好了,我就说到这里。我是个文科生,没有系统地学过计算机工程,只是从实践中感悟到一些皮毛。说的不到位的地方,望大家批评。
最后,提一位我非常崇拜的古人,王阳明同志,他所提倡的“知行合一”,就是要将理论思维和工程思维结合。“知”乃理论思维,“行”乃工程思维,只有将这两种思维做到有机的结合,才能做到:知行合一。工程思维的最高境界也许是两个字:舍得。
碳链价值:接下来我们进入第三部分,可以问古哥,也可以问吴总。也可以分享自己对于“工程”的看法。
当区块链不在乎是否去中心化了,当区块链也不去追求高的TPS,那么我们需要一个“全局读写的节点组成的分布式系统”做什么?也就是说我们觉得区块链有可能改变世界,那它改变世界的点在哪儿?能力又在哪儿?
吴为龙:我们要一个分布式系统做什么?共同维护一些全局变量,比如资产,比如合同,比如跨境单。更有甚者,比如,终结者里面的天网。
其实人类对于错误的容忍是很高的,比如你电视坏了,你敲敲他就能用了。电水壶自己肯定是不能敲敲自己的,所以未来最大的场景就是对错误容忍性比较低的机器社会,类似于cyber punk。
原来看终结者的时候是不是会想说,我把他电源拔了,天网不就挂了么。或者说未来我要支付给机器人,如何支付,难道他还把钱存到于银行么。但是把镜头拉回来,最大的方便之处就是让大家以后跑政务系统的时候,不需要去哪里都带着一把资料,去签字的时候,不需要去哪里都带一把资料,不需要每年都要等待审计,等等等等。
有人认为无币区块链是对区块链的阉割,使其沦落成了一个分布式数据库。对此你怎么看?中心化似乎很便利,个人的数据隐私似乎也没那么重要。要到什么样的情况,我们才会觉得它们是重要的呢?
吴为龙:首先,没有资产的确是对区块链最大的阉割,但是不排斥无币区块链跨链啊。如果数字资产在会计核算的时候非常管用,那么跨链之后的应用场景可以说非常广了。
其次,他自己没有币,没有激励,不代表不能SPV进来,这边账户用另外的属性代替来做结算啊。
这边的账户用另外的属性代替结算?
吴为龙:就是无币只是说自己的“挖矿”不给奖励了嘛,不代表说无币区块链内部没有结算方式。既然是全局变量,设置成什么Key不都是设计上面的事情。
古千峰:我认为区块链公链必须要有币,但不一定卖币,尤其是在还没影子的时候卖币,融了以后不干活的纯粹乱搞,为了追求合规,而盲目棒杀币,是错误的,片面的,无知的。
吴为龙:主结算部分不能少,但是跨出去还是要具体问题具体对待,你总不能开一个工厂也来造币,就跟现在的Dapp上来就发币一样。Dapp追求的发币在我眼里就跟工厂造假钞一样,主链本身发币是要做一个结算场景,全局的确需要有币的存在。
没有打包区块奖励+手续费,无币区块链如何吸引“矿工”来运行整个区块链呢?
古千峰:腾讯如果没有QQ币,他能迅速起来?但他并没有把币作为一个炒作的东西。
吴为龙:区块奖励 是什么?是不是奖励给写节点的人?为什么在那里自己都掏出来一个账本要写呢?如果那边已经是顺序出块了,为什么要在那边竞争出块。如果哪里都竞争出块,那么总算力固定的情况下,越小的竞争出块越容易双花
古千峰:从源头上讲,币是为了防止图灵完备的合约陷入死循环和资源不可控的唯一手段。但现在被弄成了金融工具,可惜了。
吴为龙:无币区块链就和普通互联网公司类似,一个道理补贴,补贴哪里来,公链的社区基金
社区基金的补贴哪儿来的呢?
吴为龙:主链的主结算是要有币的,剩下的分支结算需要有币么,我说的无币,是和有币结合的。
一个跟币完全没关系的,有被叫做区块链的东西,如何运行下去。
吴为龙:这个就和之前不知道互联网公司如何盈利是一个道理。如果一个公司只贴钱,不知道怎么运行下去,于是我们有了美团
吴为龙:区块链在工程上只有一个解释,读写节点分布式维护全局变量,至于全局变量是balance还是任何属性,不是那么特别,你信这个balance,他就有价值,成为”资产“,让别人都一起使用这个资产,就需要把他们原生的资产,转化为链上“资产”,让一些人共同维护
在一个无币的架构下,写节点还可以被分出去吗?
吴为龙:肯定很难让大家接受,写节点就不能被分出去了,但是还是可以用现有的解决方案哦。
为什么你不支持Dapp发自己的币呢?
吴为龙:我只是单纯觉得,很像工厂自己在发币,就相当于美团在补贴的时候补贴你美团币而不是人民币。而且 eth dapp的在2015年底有好些dapp的,今年dapp也发币了,感觉dapp还是需要努力走进大家生活的。
吴为龙:创始人,趣派科技CTO,第一批区块链开发者,一名具备丰富创新经历的技术极客。曾是硅谷美信集成公司的核心开发者并为三星提供算法;后投身于区块链研发,在溯源防伪与供应链金融等领域开发过十余个智能合约,实战经验涉及区块链虚拟机、P2P存储、共识算法等诸多底层技术。SPoR + PoS可持续共识机制发明人。
古千峰:美国区块链媒体BTC Media亚太区CTO,Ripple早期开发者,企业分布式商业运营顾问,武谷社区创始成员,IPFS原力区创始成员并且为上海软件业协会首批认证区块链架构师。