作者简介:
- 张应平,纸贵科技技术顾问,某CA前副总经理,从事信息化及密码产品技术研发16年,曾主导电网企业综合实验平台、一证通公共服务平台、电子政务统一平台等大型国家级项目,近5年主攻大数据、物联网、区块链相关领域。著有《走进区块链》、《大话区块链》。
- 公众号“应平与你说未来”。
- github [@yingpingzhang] https://github.com/yingpingzhang
与大多数毕业就工作的人不一样,我毕业后没有工作,而是与朋友一起组乐队,由于各种原因,一年后乐队解散——曾经的音乐梦想就这样破碎了,人生突然没有了方向。
那段时间是我人生最灰暗的时候,各种权衡之后,我决定开始自学计算机编程。
一开始,我先学习的C、VB、ASP,后来得知j2ee是未来的趋势,就毫不犹豫买了一堆书籍开始研究,幸运的是竟然找到了一份实习工作,从此开始了我长达十几年的IT生涯——从程序员开始,一路干到了技术总监、技术副总的位置。
一直以来有个想法,就是想通过现身说法,告诉大家编程其实没有想象的那么难。全职区块链之后,我开始将这个想法付诸实施——经过三个多月的努力,2019年春节期间终于完成了《大话区块链》一书的编写(目前已经提交出版社)。
这本书的副标题是人人都能学会区块链开发,除了区块链技术本身之外,也融入了我多年一线实践经验和对技术的理解,目的就是希望有更多人的参与到区块链世界中来。
非常碰巧的是笑来老师的《自学是门手艺》也在这个时候完成了,欣喜之余我用了一周时间读完了这本书,发现我的很多想法竟然与笑来老师有相似之处。
下面我就结合《自学是门手艺》,谈谈我对区块链开发的理解。
为什么你学不会区块链开发
大部分人学不会一项新技术,根本原因是无法克服心理障碍,学些过程中缺乏耐心,重复练习的次数太少。因此,要学习区块链开发首先要做到以下三点:
第一,克服心理障碍。
大部分人做不好一件事情的原因,不是自己脑子笨,也不是事情有多难。根本上是无法克服学习的恐惧心理,对于一件新事物有心理障碍。所以我们要做的第一件事情就是告诉自己:我一定可以学会区块链开发,我一定能学会区块链开发,我一定会学会区块链开发,最终你会发现区块链开发其实真的不难。
第二,保持耐心。
很多人在学习一项新技能的时候缺乏耐心,在尝试了一两次失败之后就直接放弃,告诉自己这东西我学不会。但是,我们忘了一个基本的事实——任何人学习一项新的技能,都是经历了很多次的失败之后才最终掌握一项新的技能。
第三,刻意模仿并不断重复练习。
学习区块链开发一开始只需模仿就行,时间久了你就会自然理解。这就如同我们小时候背诵古诗一样,很多时候我们不一定理解古诗的意思,但随着时间的流逝,突然有一天我们会恍然大悟。
最后需要强调的是任何一项新的技能都需要不断重复地练习,到最后这项技能就会刻在你的脑子里,最终成为你一辈子的财富。千万不要认为一次学习就可以掌握一项新的技能,即使是行业从业者,也是经历了很多次的练习。
揭开区块链工程师背后的秘密
我身边的很多牛人都不是科班出身,也没有系统学习过计算机,只是大学接触过一些基础的计算机教育,而这些教育基本上与编程没有太大关系,对于成为一个软件工程师也没有太多帮助。
大部分人认为,作为一名软件工程师必须要有高等数学、计算机原理等学科背景才可以从事软件开发,但真相是只需高中学历就可以从事软件开发。
why?
这里面其实存在两个误区:
第一个误区:将智能合约开发与区块链底层协议开发混为一谈。
大部分人认为的区块链开发其实是智能合约开发,也就是基于某一个链(比如以太坊、超级账本Fabric等)进行智能合约开发,而不是区块链底层协议开发。区块链底层协议开发门槛很高,需要有丰富的密码学、分布式等技术开发经验才可以胜任。但智能合约开发其实就是基于区块链底层协议提供的高级语言进行编程,目前常用的有以太坊的solidity、EOS的C++、Fabric的go语言。
第二个误区:将技术研究和工具使用混为一谈。
如果我们的目标是要去谷歌、微软这样的大公司从事研发工作,那就需要具备深厚的计算机素养,熟悉计算机原理、算法等知识。但如果我们的目标是网站、APP、微信小程序、网络爬虫等应用的开发,那么只需要学习一点儿高级语言即可。比如APP开发就需要学习Android或者IOS的开发,网站开发就需要具备一些Html、JavaScript知识,人工智能就需要学习Python。同样学习区块链智能合约开发,在以太坊上我们需要掌握solidity(类似于JavaScript),在Fabric上需要掌握go语言、Node.js、Java其中一门开发语言,EOS需要掌握C++。
从工程角度来看,软件开发更看重的是业务需求、系统设计能力。一个高级工程师和一个初级工程师水平的差异在于两者的需求理解能力和软件设计水平的差异。如果只从编码角度来看,工程师就像生产线的工人,只不过大家使用的工具不同罢了。程序员需要熟悉计算机的基本操作,熟悉一些工程师必备的工具(linux、git、docker 等)就可以开始干活了。在实际工程中,那些熟悉业务的人员,一旦掌握了开发工具,软件开发能力反而会超过一名纯粹只懂技术的人员。
很多时候看似一项高深的技能,其实都是由许多基本技能组成,只是一旦涉及的技能较多时,对于大部分人来说无形之中就形成了一个无法跨越的鸿沟。但如果我们能够找到这些基本技能,并将其逐一攻克,最终你会发现其实也不难。
这就如同弹琴一样,貌似一个非常复杂的曲目,其实都是由许多独立的音符组成,只要保证每一个音符都可以近乎完美地弹奏出来,一旦将这些音符可以熟练的连接起来,就成了一首美妙的曲目。反之,一定非常难听,甚至你都无法忍受。
弹琴如此,区块链开发也是如此。
从事区块链开发需要具备什么样的能力?
经过我的学习和思考,我认为从事区块链开发只需具备以下三种能力:
第一,能够正确理解区块链。 了解区块链技术的基本概念,熟悉密码学、分布式、共识机制、P2P网络等技术,熟悉比特币、以太坊、超级账本等区块链技术实现原理,对区块链商业价值和应用有一定的认知。
第二,至少熟悉一种开发语言。 比如Solidity、Node.js、C++、Go等。
第三,至少熟悉一种区块链的智能合约开发。 比如以太坊、超级账本、EOS等。
关于第一点正确理解区块链,可能是大多数人的一个坎。对于大部分人来说,最难的事情是克服心理上的障碍去拥抱一个新生事物。由于区块链技术比较新,中文方面的书籍、资料比较匮乏,导致大部分人无法正确理解区块链。片面和断章取义地理解都会误导大家,如果能够在一段时间里系统学习区块链,我认为这不是一件难事。
关于第二点至少熟悉一种开发语言,我认为也不难。不管是Solidity还是Node.js这方面的学习资料已经非常多了,大家可以选择一种开发语言进行深入全面地学习。比如以太坊智能合约开发使用的是Solidity语言,超级账本的Fabric支持Go语言、Node.js和Java, EOS目前使用的开发语言是C++。
很多人对于编程有一种莫名其妙的畏惧,动不动就说自己不懂技术,做不了开发,在我看来这都是借口,其实编程没有大家想象的那么难,甚至我认为每个人都可以学会编程,前提是你愿意持续投入一段时间进行系统地学习。关于编程语言的学习,笑来老师的《自学是门手艺》是一本不可多得好书,值得每个程序员和准备进入软件开发行业的人反复阅读。
能够正确理解区块链,至少熟悉一种开发语言,选择一种区块链就可以开始区块链开发了。
将区块链开发能力拆解之后,逐一攻克,最终你会发现其实区块链开发其实也不难。
网友评论