重构你的技能:成为区块链开发者

随着新工具和技术的不断涌现,软件开发领域发生了迅速变化。作为程序员和开发人员,我们必须不断观察我们的技能并评估他们的相关性和当前状况。我们是走在最新趋势上,还是正在走向过时的道路上?

我认为正常的职业是像登山这样的事情。在大约十年左右的时间里,你将走上上升的道路,攀登更容易的斜坡以获得经验和知识,并且可能会在公司中崛起。

当你达到一个稳定的中间点时,很难爬得更多。你将成为一名大四学生,接近技术进步的顶峰;你可能正在领导你不再编码的项目;你可能正在维护具有大量客户群的产品,而没有任何真正的创新。

这里是山丘变成山峰的地方,你必须选择攀登更陡峭的山坡,学习一种新的语言,技术,甚至是当你已经厌倦时的范例,这时你更专注于你的世界:你的家庭,健康和工作与生活的平衡,体力开始下降,而年轻和更有活力的登山者超越你。

我最近就是这样。虽然我的职业道路并不是大多数开发人员的典型代表,但我得到的一点是,我在大学毕业时使用的技术与桌面应用程序完全相同。我使用的是更新语言和新库,但总的来说,范例是相同的。我陷入了困境;展望未来,我开始担心我所做的那种发展可能会在10年后消失。

在我周围,我看到这些新技术出现,发展并建立自己作为未来区块链,人工智能,虚拟现实,移动应用程序,云和虚拟化的目标。而我修复了旧技能,不能再继续变老了。

对我来说最引人注目的是区块链。它闪闪发光,充满争议,充满希望,并且有很多问题需要解决。此外,密码学的基本用法符合我的个人兴趣。当机会来临时,我毫不犹豫地接受了作为区块链开发人员的工作。我在一条尚未被广泛采用的未经测试的技术上开辟了一条新的道路,并决定攀登新语言,概念甚至各种数学基础,以便开发以太坊区块链。

每天上班都是一次学习新事物的冒险,从研究数学概念到移植和集成我们产品中的一些非常具体的库。这给了我自己博客的资料,在那里我与感兴趣的读者分享这些概念。我希望通过它们,我可以教导,激励和帮助人们在这个领域工作。我相信我在进入这个领域时做出了正确的选择,并且我在正确的时间做到了。这篇文章的目的是说服你,对你而言,它可能仍然是正确的时间。

为何选择区块链?

你可能会问的第一个问题是为什么要特别指定是区块链?

现在还早

在上面,我列出了一些处于上升阶段的有趣的职业生涯,或者仍然留有良好的生活。我被这些具有挑战性的人所吸引,因为这是更大的机会所在,原因有两个:更大的破坏潜力,导致更大的财务收益,以及由于更高的准入门槛而减少竞争。

换句话说,如果一项技术被认为更难学习和使用,或者有更多问题需要解决,那么就会阻止更多的人投资它。他们可能不会适应,也不会很快学习,发现自己无法找到工作或坚持下去。但与此同时,那些加入并坚持下去并达到推出产品的人可能会收集较大的奖励,而较小的参与者群体也是如此。

我从John Sonmez的The Complete Software Developer’s Career Guide和他的博客课程中学到的许多课程之一就是成为一个小池塘里的大鱼。Blockchain因其新颖性和前景而成为完美的舞台。此外,它在某种程度上仍然具有难以进入的光环,这对于那些进入的人来说更有价值。

但请记住,在任何行业中,这种状况只是暂时的。开发人员的早期浪潮将解决第一个问题,并且当他们解决问题时,将开始用博客,课程,书籍和其他方法教育下一波。很快,这个话题将部分解决,更容易获得,同时,会有更多人感兴趣并能够加入。曾经,互联网对除了大学之外的所有黑客都是一个谜。现在……我的孩子知道它是什么以及如何使用它。

互联网是一场革命,彻底改变了范式,将软件开发的现有环境背景化,并创造了大量新的领域。区块链可能是另一种范式变化。该部门不再仅仅涉及比特币和加密货币。这是关于比特币引入的技术,它们如何发展以及它们将在哪里引领。主要是区块链,也称为分布式账本技术(DLT),以及共识机制,但新概念不断出现。

区块链用例

人们有时很难找到区块链的用例,以及与我们今天拥有的分布式系统和集中式数据库相比如何证明它的合理性。很多时候,区块链的真正意义在于模糊不清,难以掌握。

就是这样:创造一个不可改变的真理来源的能力由大量参与者的共识决定,而不是由中央机构强制执行。

这就像在天空中写下诫命,每个人都可以看到,没有人可以改变,但不是由上帝给出,而是由整个网络的共同努力创造。

这可能是某个实体的所有权证明,没有任何权威,无论是真实的还是虚拟的,都可以审查或暂停。它得到了网络参与者的认可,从这个意义上说,超越了政府,银行和企业的力量来否认它。政府可能会宣布你拥有这件事是非法的,但只要注册该事实的区块链由一个独立的去中心化社区保持活着,它就无法使其消失。

这是一个强大的想法。虽然今天你可以在游戏中使用虚拟货币,或者从品牌提供的会员计划中获得代币,但这些货币完全依赖于其发行机构对这些代币的维护和认可。区块链在任何此类提供者的控制之外提供真实存在。而区块链上存在的东西甚至不必是有价值的代币。它们可以简单地记录,事实陈述,证明在某个时间发生的事情,并且记录不能被改变。

这个想法导致无中介的虚拟市场,一些自动强制执行的法律合同,独特的真实或虚拟资产(如数字艺术品,在线游戏工件,知识产权,房地产或标记化资产)的所有权,沿供应跟踪货物连锁,法定时间戳等。

技术挑战

在区块链领域有一些非常难以解决的问题。使用的一些技术(如零知识证明)很难理解,需要非常高级的数学。这可能会使许多人试图在这个领域工作。但实际情况是,与此同时,我们需要解决的非常具体的问题与密码学或数学无关,而是需要创造力,独创性或经济学。

例如,我们需要解决可用性问题,以制作易于使用且易于使用的分布式应用程序(DApps),用户无需首先获得某些加密货币即可体验。我们需要更多的产品所有者和业务人员,他们能够认识到区块链可以解决的需求,激励团队解决这些需求,并成功推广产品。

还有很多工作要做,还有许多问题需要解决,许多想法在许多地方都经过了试验和测试。在几个方向上有积极的研究,不同的区块链竞争以不同的方式首先或更好地解决问题。但我们仍然需要更多的人来实际开展这项工作。 除了供应优秀的专业人士之外,仍有更多的需求。

但是,不是加密货币崩溃了吗?

他们大部分时间都是在2018年。也许他们仍然存在,也许我们已经达到了稳定的低点。没有人能够知道。但这并没有减损这个领域。技术依然存在;它与各种货币无关,甚至与许多最初的硬币产品(ICO)无关,这些产品的项目失败或者得不够快。再一次,该技术是有用的,它不依赖于投机性代币的市场估值。

在崩溃和诈骗之后,剩下的项目现在有了更好的工作环境并解决了大问题。媒体关注度越来越低,而2017年末繁荣的非理性也越来越没有兴奋。应对炒作的压力较小;随着风险投资资本取代ICO,专业资金现已进入该领域,为精心挑选的项目提供资金并为其提供专业知识以取得成功。各国政府和国际组织正在跳槽,为开发商和客户奠定更加坚实的监管和资金基础;新的有趣技术开始部署在几个区块链的主网上。

空气中充满了兴奋,许多开发人员都很活跃,并渴望展示他们工作的成果。每天,我们努力突破可能的界限,并向世界带来第一代可用且引人注目的DApps。但我们仍需要更多开发人员。

那么,你应该知道什么才能成为区块链开发者?

有几个方面需要覆盖,需要不同级别的专业知识和技术熟练程度,从以区块链为中心的开发到以客户为中心的前端。

前端

以下是构建用户体验(UX)的团队,包括移动DApp,专用钱包和网站。如果你已经精通JavaScript或移动开发,那么加入区块链项目就不会有问题。

这是目前的主要活动领域之一,因为2019年似乎是重点将从基础设施发展转变为将产品推向市场的一年,这种方式很容易被不太技术化的人使用,没有加密货币,并没有任何关于他们的深刻知识,也没有学习的愿望。“可用性”是本年度的关键词之一,而且最重要的是,该领域所需的技能是传统的,不需要对区块链有深入的了解。

如果你了解JavaScript,Swift,Objective-C或Java,你很快就可以开发我们需要的DApps和网站,以提高公众的采用率。

后端

在第一层后面是一个非常有趣的后端。通过在网络中运行节点(例如Geth)或连接到其他人(例如,使用Infura),可以与区块链交互。这些工具是区块链的基本支柱,因为它们通过允许客户端将交易发送到网络,跟踪等待包含在块中的那些,创建添加到链中的块以及验证链的链来维护它。完整性。

这些通常提供API(应用程序编程接口),用于编码驻留在区块链本身的智能合约,以及调试工具,但这个领域还很年轻,而且还很不发达。结果是,有机会创建新的支持应用程序以及改进现有的应用程序。

例如,其中一些工具是用 Rust (Parity), Go (Geth), Scala (Scorex),WebAssembly(EOS)和其他不太常见的语言编写的。如果你不知道或无法学习其中任何一项,请记住:用于Truffle Suite的 JavaScript和用于比特币的C ++仍然非常相关。

随着我们在攻击可伸缩性问题方面取得进展,我们开始意识到许多事情需要在链外进行。例如,生产者可以将他们的数据保存在传统数据库中,并且只存储在其链摘要中,或者发生的交易的证明。因此,后端必须管理自己的数据库,并进行大量的数据处理以及时访问区块链。

这一层非常接近区块链,需要全面了解它的工作原理,但所需的大部分技能并不是区块链范例所特有的。如果你想在这个领域工作,你应该具备很强的编程技能,以及对分布式账本是什么,它是如何工作的基本知识,以及在某些情况下对所用协议的低级知识,直到数据的二进制表示。

由于它是前端和区块链网络之间的接口,后端必须管理发送到网络的交易和从智能合约接收的数据,并在链外处理,过滤,搜索和存储这些交易。数据库。它还需要方便地与区块链进行时间和汇总交互,以避免小额交易的过高费用。

这需要云服务(如AWS),虚拟化(Docker,Kubernetes),可扩展存储(Cassandra,DynamoDB)以及持续集成/持续交付自动化(Jenkins)方面的专业知识。如果这看起来像很多东西要知道,那么反过来看:它有很多机会来匹配你现有的技能。你总能在工作中接受其余的工作。

智能合约

第三层是技术最依赖的层,它是关于编写支持协议本身的智能合约。智能合约是驻留在区块链上的代码片段,因此可以通过发送给它们的交易来调用和执行。这些是分布式分类帐的移动部分,支持诸如拥有和交易CryptoKitties之类的东西的逻辑,或者在交付后立即将支付转移到数字产品的销售商。

编写智能合约通常需要了解新语言。在以太坊中,最受欢迎的是Solidity,但是新语言WebAssembly(以及它的以太坊变种EWasm)打算取代它并使其更快更容易访问,允许开发人员用C,C ++,Go,Rust或JavaScript编写智能合约。

以太坊目前是编制智能合约的主要网络。竞争对手包括EOS和Cardano。由于我最了解以太坊,并且由于其受欢迎程度,我将以此作为本节其余部分的示例。

要在这个级别工作,你必须非常擅长编程。虽然Wasm或EWasm不可用,但你应该学习Solidity及其许多特点,并熟悉测试和部署智能合约的环境。这还包括区块链资源管理器和可用的测试网络(Rinkeby,Ropsten和Kovan)。

一个流行的工具是Truffle,它需要很好的JavaScript知识。这是一个学习曲线,但随着越来越多的人进入这一领域,互联网上可用的知识和指导量也会增加,并且更容易找到正确的答案。

研究

最后,你最终可能会进行研究而不是编程。这是目前区块链技术的重要方面,因为仍存在需要解决方案的基本问题,否则整个概念将无法实现。

最着名的是基本的三难问题:安全性,可扩展性和去中心化性。研究人员提出了许多角度来解决这个问题,使用各种技术,如零知识证明,Merkle树,加密彩票,侧链,状态通道等。这些是高技术课程。

另一方面,有很多关于创建良好的用户生态系统和智能合约所必需的经济激励措施的研究,不能被恶意用户滥用。这甚至导致了新词义符号组学的创造,指的是对区块链的经济激励的研究。

如果你想在这个领域取得成功,你应该具备良好的分析能力,好奇心和奉献精神来探索潜在的解决方案。根据你打算研究的技术,你可能需要有关密码学,分布式系统,通用计算机科学,博弈论和经济学的高级技能,但希望不是所有这些都在一起。这是区块链令人兴奋的前沿。

你会迈出下一步吗?

我试图鸟瞰区块链世界,它是多么多样。如果你了解你的手艺,进入它并不困难。

在某些领域,所需的技能可以从其他常见的编程领域转移,开发人员可以轻松地进行转换。这可能是对可能在将来消失或减少的扇区(例如,桌面应用程序)的逃避,而无需重新配置你的技能组合。在其他方面,现有的编程技能是不够的。

但无论如何,你至少应该:

  • 了解分布式分类帐是什么。
  • 了解共识机制是什么以及它们如何在最重要的区块链中发挥作用。
  • 熟悉加密哈希函数和签名。
  • 了解加密Token和智能合约。如果你将在以太坊工作,请熟悉ERC20和ERC721 Token。
  • 养成考虑经济激励,如何滥用协议以及防范此类攻击的方法的习惯。
  • 探索该地区正在开展的项目,以了解该技术的潜力并想象它的新用途。

事实上,这个领域仍然是非常开放的,有许多未解决的问题,这些都是充满活力和激动人心的。如果从项目到类似的项目一直在努力,这是一个振兴职业生涯的机会。

最重要的是,培养对该领域的兴趣,并尽可能多地与人们交谈。尽管市值和媒体关注度下降,就业市场仍在增长。这些都很有趣,你也可以成为区块链开发者。

======================================================================

分享一些比特币、以太坊、EOS、Fabric等区块链相关的交互式在线编程实战教程:

  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
  • Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是重构你的技能:成为区块链开发者