微信号:frontshow

介绍:InfoQ大前端技术社群:囊括前端、移动、Node全栈一线技术,紧跟业界发展步伐。

十年前端老兵:学习DApp开发,投身下一个浪潮

2018-09-28 17:04 魔法哥

作者|魔法哥
来源|公众号:区块链前哨

过去的十年,可以说是 App 的十年。但未来的十年,DApp 被寄予了厚望。App 的形态是前端开发者的专长,而 DApp 将同样离不开前端开发者的参与。

“CSS 魔法”,08 年加入互联网,是一位有十年经验的前端老兵。他认为区块链将是下一个重要的节点,对区块链技术也有着自己的理解和有启示意义的看法。

 InfoQ:魔法哥,您能先向 InfoQ 的读者介绍下自己吗?

大家好,很高兴能在 InfoQ 这个平台和大家见面。我叫 “CSS 魔法”,熟悉我的朋友都叫我 “魔法哥”。

我在 2008 年来到上海,进入互联网行业。一转眼,我已经是一个 “十年经验” 的前端老兵了。工作之余,我会折腾一些开源项目,也经常会在 “CSS 魔法” 公众号编写教程、翻译技术文档。在 2015 年,我还翻译了一本前端领域的重磅图书《CSS 揭秘》,算是为中文技术社区做出了一点微小的贡献。

 InfoQ:作为一名前端工程师,您经历的关键点和转折点都有哪些?

其实对我来说,“前端” 本身就是一个巨大的转折点。来上海之前,我一直在传统行业工作,投身互联网大潮是一次急转弯式的转型。不过当时的我并不具备对行业大势的深入洞察,转型的动力仅仅是源于兴趣——在互联网行业做产品,离用户更近、效率更高、影响力更大,实在是酷毙了!

这次转行显然是正确的。这些年每次回老家遇见老同事,他们都会夸我当年有魄力有远见。我其实是很不好意思的,我哪里有远见,只不过是跟着感觉走罢了。

在前端领域奋斗的这几年,都还算顺利。五年前加入百姓网,可以说是又一个关键点——感觉自己的职业生涯终于迈上了正轨。

今年上半年,因为一些偶然的机会,我接触到了区块链和 DApp。没想到一发不可收拾,我内心的小宇宙又一次燃烧起来,当年 “投身互联网” 的那种冲动似乎又出现了。我隐隐感觉到,我即将走向下一个重要节点,又一个不可错过的浪潮已经扑面而来!

 InfoQ:为什么区块链和 DApp 会吸引到您的关注?

我这个人一向来对炒得很热的东西是无感的。所以我刚开始对区块链完全没兴趣,甚至是抵触的。前端领域的新东西都看不过来了,还看什么区块链?不过,机缘巧合之下,我惊奇地发现,原来区块链除了记账,还可以跑代码;作为开发者,还可以在区块链上开发应用!

基于区块链开发的应用称作 “去中心化” 应用( Decentralized Application ),简称 DApp。去中心化的含义是指,你的应用不仅是把数据存储在区块链节点上,你的应用本身就运行在区块链节点上!

这个 “新大陆” 深深地吸引了我。简单解释一下,我作为一名前端工程师,精力所限,并不是那么精通后端;但我仍然有一颗做产品的心,一直想着某天可以独立搞一个完整的应用出来,为用户提供价值。可是光有前端,没有后端,能做的事情是比较有限的。而当我遇见 DApp 的时候,不由地眼前一亮!

做一个 DApp 可以不需要后端。因为 DApp 的数据就存储在区块链上,读写数据的逻辑也跑在区块链上,我并不需要用后端语言写一套程序,也不需要搭一个后端环境,更不需要维护数据库——区块链就是我的后端!

开发 DApp 的体验让我想起 Flash 时代的个人创作者,只要掌握了 Flash,制作一部动画的所有事情,包括导演、编剧、剪辑、美工、特效,都可以全包了。同样,在区块链上,只要我具备前端技能,就可以写一个完整的应用出来。这种开发体验对一个前端工程师来说,是相当诱人的。

当然,除此以外,区块链和 DApp 还有一些天生的优势——具体细节我们稍后会聊到——这些也是我关注它们的原因。

 InfoQ:去中心化的 DApp 与传统的 Web 应用相比,架构上有什么差异?

这两者确实有明显不同,但 DApp 的各个环节是可以类比到传统 Web 应用的:DApp 由客户端和合约端配合实现,类似传统 Web 应用的客户端和服务端。

“客户端” 顾名思义,是提供给用户使用的产品界面。它可以是 Web 形态,也可以是桌面或移动 app 形态等等。对于前端工程师来说,Web 形态的客户端就是大家的专长,毋庸赘言。

“合约端” 是指 “智能合约”。智能合约是 DApp 的灵魂,是 DApp 开发者部署到区块链上的一段代码,担任客户端与链之间的桥梁——合约端负责提供接口,客户端可以调用这些接口,触发业务逻辑,或对数据进行增删改查。这听起来和前后端分离的 Web 应用是相为相似的,没错,前端工程师可以快速理解并接受 DApp 的架构模式。

 InfoQ:DApp 相对于传统 Web 应用,优势是什么?

这是一个好问题。我们通常会听到一种论调,“区块链必将颠覆啥啥啥”。但事实上,这只是一种博眼球的营销口号。区块链被发明并不是为了取代传统互联网,就好比智能手机的诞生不是为了取代 PC。

但如今区块链广受关注,说明它确实具备一些传统互联网做不到的特性。因此,与传统 Web 应用相比,区块链和 DApp 所擅长的场景和方向肯定会不一样。

先来说几个 DApp 的先天特性:

  • 去中心化。区块链的 “去中心化” 是由分布式节点来体现的,它通常意味着 DApp 没有单点故障的风险,数据的可信度和安全性也会比中心化应用要高。

  • 公开透明。在大多数链的设计中,区块数据是完全公开的,甚至合约代码也是区块中的数据,合约的调用记录也是区块中的数据,全都是公开的——你能想像一个 Web 应用的后端代码是公开的吗?就算公开了,别人如何相信这些公开的代码就是现在在运行的代码呢?但对 DApp 来说,这就是它的先天特性。所以,如果你需要一个完全公开透明接受公众监督的应用,DApp 可能就是最好的选择。

  • 不可篡改。链式结构保证了区块数据不会被轻易篡改,这个大家都知道。大家可能不知道的是,在大多数链的设计中,合约代码在部署之后就无法修改了。这一点在传统 Web 应用看起来简直就是个 bug,但反过来想一想:如果代码是一种 “规则”,那在某些场景下,“规则可以修改” 是不是反而不可接受?

大家可能发现了,我一直在说 “特性”,而不是 “优势”。其实所谓优势,就是把特性用在了合适的地方。区块链的魅力在于,它天生就是不一样的东西,它不是为了取代谁。拿现有的框框去套它,可能不会得出什么有意义的结论;而抛开固有思维去拥抱它的 “不一样”,则可能会开创全新的应用形态。

 InfoQ:您刚才提到了应用形态,对于区块链的落地,您看好哪些应用场景或方向?

区块链和 DApp 作为新生事物,还处在演化之中,同时,我们对它的认知也处在不断演化之中。我很难在这里预测区块链将以哪些应用形态落地,不过我可以简单聊一聊 DApp 已经在某些场景中展现出的潜力:

  • 数据安全。上面提到区块链数据的安全性,这一点在存证、监管、选举等场合将大有用武之地。

  • 游戏。区块链的老本行就是记账,而且是公开的、防篡改的账本,在资产确权方面拥有不可替代的优势。因此不少游戏开发团队已经在区块链领域里试水或大量投入了。

  • 通证经济。通证作为链或应用生态内的价值载体,可以有很多的玩法,开发者可以通过设计激励机制来实现各种运营目的。

 InfoQ:我们讨论的 DApp,一般都是部署在公链上的,那么您选择公链的标准是什么?DApp 的概念最初是由以太坊提出的,那么您如何看待以太坊这些主流的公链平台?

确实,对于尝试 DApp 的开发者来说,遇到的第一个问题可能就是公链的选择了。选择链相当于选择一个开发平台,类似开发手机 app 需要确定是 iOS 还是 Android 一样。魔法哥认为,在入门阶段选择一条易上手且有前途的公链是最为明智的。“易上手” 可以让你快速入门、快速收获成就感,而 “有前途” 则意味着你积累的经验不会浪费。

以太坊确实是 DApp 概念的开山鼻祖,我非常佩服他的创始人。以太坊上线已经好几年了,但它仍在不断进化。在眼下,它的某些技术参数已经明显落伍,但它的深厚积累和发展潜力仍然值得看好和期待。

接下来就不得不提 EOS 了,今年链圈最具话题性的平台就是它了。EOS 有很多独特的设计,也表现出优异的性能,获得了很多开发者的青睐。不过 EOS 定位于企业级市场,对个人开发者来说门槛较高,它的很多设计也一直存有争议,因此魔法哥持观望态度。

 InfoQ:前端工程师着手开发一个最小化的 DApp,需要掌握哪些技能、使用哪些工具、怎么选择编程语言?

首先,我们需要对区块链的原理、DApp 架构、DApp 产品形态具备基本概念。接下来,我们从客户端和合约端分别来讲一下所需的技能和工具。

DApp 客户端的开发,其实跟大家平常开发 Web 应用是基本一致的。你可以使用你自己最顺手的前端框架、编辑器、构建工具,无需改变开发习惯。在实现客户端与合约端的交互时,往往需要用到链的 SDK,这是需要开发者去了解的。

而合约端的开发,就要跟着链的设计和生态来走了。链除了提供客户端 SDK 之外,往往也会提供合约端的开发工具,比如合约开发框架、Web IDE、合约 Lint 工具等等。如果我们只是开发一个小型的 DApp,其实脱离工具纯手写也没什么问题,读通相关文档就好。

最后,说到编程语言,各条链所采用的合约端开发语言也不尽相同。如果我们选择的某条链刚好采用我们最熟悉的 JavaScript 作为合约语言,那就基本不存在语言学习成本了。关于这几个方面,魔法哥也会在 “CSS 魔法” 公众号陆续发布教程,希望能给大家提供一些参考和帮助。

总而言之,对前端工程师来说,DApp 的开发成本并不高。而且前端工程师天生离用户最近,更懂交互,更容易开发出用户体验出众的产品来。

 InfoQ:您认为前端工程师有必要去学习区块链并转入相关行业工作吗?

我觉得这要看情况,看看自己是什么类型。

如果你是一个谨慎派,喜欢稳扎稳打,则不妨专注地把自己规划好的路线一步步走踏实。对于区块链和 DApp 可以保持关注,也可以上手实践,但不一定要立即投身其中。

这是因为,区块链行业仍然处于早期,还多方面还很不成熟——毕竟传统互联网已经发展了这么多年,该有的都有了,而区块链才刚刚走出极客的小圈子。另一方面,区块链天生就是招黑体质,发展方向也远远不够明朗,从业者往往需要承受更大的压力。

而反过来,如果你是一个激进派,喜欢尝试新事物、喜欢开拓未知世界,那区块链行业可能就比较适合你。

总的来说,这是一个因人而异的问题。但不管怎样,如果你是一个技术人,而且正在对自己的职业生涯做一个或短或长的规划,那么区块链值得你去了解和关注,说不定它就是你打破僵局的转折点。


更多内容可以在 QCon 上海站现场与魔法哥深入讨论。此外,QCon 还设立了更多关于前端和区块链相关领域的落地思考。大会报名即将截止,点击「阅读原文」 查看大会完整日程。有任何问题欢迎咨询票务经理 Ring,电话:010-84782011 / 17310043226,微信:qcon-0410

 
前端之巅 更多文章 Nuxt 2.0正式发布:支持 Webpack 4、ES module 首屏时间从12.67s到1.06s,我是如何做到的? 百度智能小程序月活破亿,今日正式开放申请 Electron 3.0正式版发布,新特性详解 Stack Overflow预测:Python将在五年内超越JavaScript
猜您喜欢 在IT圈年薪50万,我们该如何努力达到这个目标? 【Node.js丨主题周】聊聊Node.js 的哲学思想 领导的对象,是人还是任务? 比特币-常见问题 拨开大数据的迷雾