Refactor Your Skills: Become a Blockchain Developer
The field of software development changes fast, with new tools and technologies emerging regularly. As programmers and developers, we must continuously watch our skills and assess how relevant and current they are. Are we up-to-date with the latest trends, or are we on a route to obsolescence?
I view a normal career as something like mountaineering. For the first decade or so, you’ll be on the ascending path, climbing the easier slopes to gain experience and knowledge, and maybe rise in the corporate ladder.
When you have reached a stable middle point, it is difficult to climb more. You’ll be a senior, near the top of the technical progression; you may be leading projects for which you’re no longer coding; you may be maintaining products with large customer bases, without any real innovation.
This is where the hill turns into a mountain and you have to choose between climbing steeper slopes—learning a new language, technology, or even paradigm when you are already tired—and focusing on the rest of your world: your family, health, and work-life balance, beginning the descent while younger and more energetic mountaineers overtake you.
I’ve recently been there. Although my career path is not typical of most developers, I got to a point where I was developing in exactly the same kind of technology I was using when I graduated from college: desktop applications. I was using updated languages, and new libraries, but in all, the paradigm was the same. I was caught in a trap; looking at the future, I began to fear the kind of development I was doing may simply disappear in 10 years’ time.
All around me, I saw these new technologies appearing, developing, and establishing themselves as beacons of the future—blockchain, artificial intelligence, virtual reality, mobile apps, cloud, and virtualization—while I was fixed in my old skills, getting older without moving on.
The most compelling of these for me was blockchain. It was shining, controversial, full of promise, and had big problems to solve. Plus, the fundamental use of cryptography matched my personal interests. When the opportunity came, I didn’t hesitate, and accepted a job as a blockchain developer. I took a gamble on a new path, in an untested technology that is still not widely adopted, and decided to climb the rock-wall of new languages, concepts, and even maths to develop for the Ethereum blockchain.
Every day at work is an adventure to learn something new, from researching mathematical concepts to porting and integrating some very specific library in our products. This gives me the material for my own blog, where I share these concepts with interested readers. It is my hope that through them I can teach, inspire, and help people to work in this area. I believe I made the right choice in entering this field, and that I did it at the right time. The goal of this post is to convince you that for you too, it may still be the right time.
The first question you may ask is why blockchain specifically.
It’s Still Early
Above, I listed a number of interesting careers in development that are in the ascendant phase or still have good life left in them. I am attracted to the challenging ones, because that is where the greater opportunities lie for two reasons: a greater potential for disruption, leading to larger financial gains, and less competition due to higher barriers to entry.
In other words, if a technology is perceived to be more difficult to learn and use, or has more problems to solve, more people will be discouraged from investing in it. They might not adapt, nor learn quickly enough, and find themselves unable to get a job or hold onto it. But at the same time, those who get on board and persevere, and reach the point of launching their product, may collect big rewards divided by a smaller base of participants.
One of the many lessons I took from John Sonmez’s The Complete Software Developer’s Career Guide and his blogging course was to be a big fish in a small pond. Blockchain is the perfect arena for this, due to its novelty and promise. Besides, it had, and I think to some extent it still has, that aura of being difficult and hard to get into, which makes it more valuable for those who do get in.
But keep in mind that this state of affairs is only temporary, in any industry. The early waves of developers will tackle the first problems, and as they solve them, will start educating the next wave with blogs, courses, books, and other methods. Soon enough, the topic will become partially solved, more accessible, and, simultaneously, there will be more people interested and able to jump in. Once, the internet was a mystery to all but hackers in universities. Now … my toddler knows what it is and how to use it.
Internet was a revolution, a total change of paradigm that uprooted the existing landscape of software development and created a multitude of new sectors. Blockchain is potentially another paradigm change. This sector is no longer about Bitcoin and cryptocurrencies only. It is about the technologies that Bitcoin introduced, how they have been growing, and where they will lead. The main ones are the blockchain, which is also called distributed ledger technology (DLT), and the consensus mechanisms, but new concepts keep appearing.
Blockchain Use Cases
People sometimes struggle to find use cases for the blockchain, and how to justify it in comparison to distributed systems and centralized databases that we have today. Very often, the real point of the blockchain is obscured and difficult to grasp.
This is it: The ability to create an immutable source of truth decided by consensus among a large number of participants and not enforced by a central authority.
It’s like having a commandment written in the sky, that everyone can see and no one can change, but rather than being given by God, it is instead created by the common effort of the whole network.
This could be a proof of ownership of some entity that no authority, real or virtual, can censor or suspend. It is recognized by the participants of the network, and in that sense transcends the power of governments, banks, and corporations to deny it. The government may declare it illegal for you to own that thing, but it won’t be able to make it disappear as long as the blockchain where that fact is registered is kept alive by an independent decentralized community.
This is a powerful idea. While today you can have virtual currencies inside games, or tokens from membership programs provided by brands, these are wholly reliant on the maintenance and recognition of those tokens by their issuing authority. Blockchains provide a “real” existence outside the control of any such provider. And the things that exist on the blockchain don’t even have to be valuable tokens. They can simply be records, statements of fact, proof that something happened at a certain time—and that record cannot be altered.
This idea leads to unmediated virtual marketplaces, some automatically enforceable legal contracts, ownership of unique real or virtual assets (like pieces of digital art, online game artifacts, intellectual property rights, real estate, or tokenized assets), tracking of goods along a supply chain, legal timestamping, etc.
There are some very hard problems to solve in the blockchain arena. Some of the techniques used (like zero-knowledge proofs) are difficult to understand and require very high-level maths. This may put off many people from trying to work in this area. But the reality is that, at the same time, there are very specific problems that we need to solve that have little to do with cryptography or maths, and instead require creativity, ingenuity, or economics.
For example, we need to solve usability, to make distributed applications (DApps) that are likeable and easy to use, that users can experience without first having to acquire some cryptocurrency. We need more product owners and business people who can recognize the needs that blockchain can solve, dynamize a team to solve them, and market the products successfully.
There is a lot to be done, a lot of problems to be solved, and many ideas being tried and tested in many places. There is active research in several directions, with different blockchains competing to solve a problem first or better in different ways. But we still need more people to actually carry that work forward. There is, still, more demand than supply of good professionals.
But Aren’t Cryptocurrencies Crashing?
They have, greatly, in 2018. Maybe they still are, maybe we’ve reached a stable low point already. No one can know. But that does not detract from the field. The technology remains; it is not tied to the individual currencies, not even to the many initial coin offerings (ICOs) whose projects failed or didn’t get far enough quickly enough. Once again, the technology is what is useful, and it does not depend on market valuations of speculative tokens.
The projects that remain, after the crashes and the scams, now have a better environment to work and solve the big problems. There is less media focus, and less euphoria around the exuberant irrationality of late 2017. There is less pressure to respond to the hype; as venture capitals replace ICOs, professional money is now coming to the field, funding carefully selected projects and lending them the expertise to succeed. Governments and international organizations are jumping on the scene and laying a more solid groundwork of regulation and funding to developers and customers; and new interesting technologies are starting to be deployed on the main nets of several blockchains.
There is a buzz of excitement in the air, with many developers active and eager to show the fruits of their work. Every day, we work to push the boundaries of what is possible, and bring to the world the first generation of usable and compelling DApps. But we still need more developers.
So, What Should You Know to Become a Blockchain Developer?
There are several areas to cover, requiring different levels of expertise and technical proficiency, ranging from blockchain-centered development to a customer-focused front end.
The Front End
This is currently one of the major areas of activity, since 2019 seems to be the year where the focus will change from infrastructure development to bringing products to market in a way that is easy to use by people who are not too technical, hold no cryptocurrencies, and haven’t any deep knowledge about them nor the desire to learn. “Usability” is one of the keywords for the current year, and more than anything, the skills required in this area are traditional and do not require deep knowledge about the blockchain.
The Back End
Behind this first layer lies a very interesting back end. One interacts with the blockchain by running a node in the network (such as Geth) or connecting to one run by someone else (for example, with Infura). These tools are the essential pillars of a blockchain, since they maintain it by allowing clients to send transactions to the network, keeping track of those waiting to be included in a block, creating the blocks that are added to the chain, and verifying the chain’s integrity.
These often provide APIs (application programming interfaces) for coding smart contracts that reside on the blockchain itself, as well as debugging tools, but the area is young, and these are still underdeveloped. The consequence is that there is an opportunity for creating new supporting applications as well as improving the existing ones.
As we progress in attacking the problem of scalability, we begin to realize lots of things need to be done off-chain. For example, producers may hold their data in traditional databases, and only store in the chain summaries thereof, or proofs of the transactions that occurred. Therefore, the back end will have to manage databases of their own, and do considerable data processing to access the chain in a timely manner.
This layer is very close to the blockchain, and requires a thorough knowledge of how it works, but most of the skills needed are not specific to the blockchain paradigm. If you want to work in this area, you should have strong programming skills, as well as fundamental knowledge of what a distributed ledger is, how it works, and, in some cases, low-level knowledge of the protocols used, down to the binary representation of data.
Since it is the interface between the front end and the blockchain network, the back end has to manage the transactions that are sent to the network and data received from the smart contracts, and process, filter, search, and store these in off-chain databases. It will also need to conveniently time and aggregate interactions with the blockchain to avoid excessive fees for small transactions.
This calls for expertise in cloud services (such as AWS), virtualization (Docker, Kubernetes), scalable storage (Cassandra, DynamoDB), and continuous integration/continuous delivery automation (Jenkins). And if this looks like a lot of things to know, look at it the other way around: it’s a lot of opportunities to match your existing skills. You can always pick up the rest on the job.
The third layer is the most technology-dependent one, and is about coding the smart contracts that enable the protocol itself. Smart contracts are pieces of code that reside on the blockchain, and so can be called and executed by transactions sent to them. These are the moving pieces of the distributed ledger, the logic that supports things like owning and trading CryptoKitties or immediately transferring a payment to the seller of a digital product as soon as it is delivered.
Ethereum is currently the main network for programming smart contracts. Competitors include EOS and Cardano. Since I know Ethereum best, and due to its popularity, I will use it as an example for the rest of this section.
To work at this level, you have to be very good at programming. While Wasm or EWasm are not available, you should learn Solidity and its many quirks, as well as be familiar with environments to test and deploy smart contracts. This also includes a blockchain explorer and the available test networks (Rinkeby, Ropsten and Kovan).
Finally, you may end up doing research and not much programming. This is the essential aspect of blockchain technology at the moment, because there are fundamental problems still requiring a solution, without which the whole concept will not be viable.
The most famous is the fundamental trilemma: security, scalability, and decentralization. There are many angles that researchers have proposed to solve this, using technologies as diverse as zero-knowledge proofs, Merkle trees, cryptographic lotteries, sidechains, state channels, and others. These are highly technical subjects.
On another front, there is much research on the economic incentives necessary to create sound ecosystems of users and smart contracts that cannot be abused by malicious users. This has even led to the coining of the neologism tokenomics, to refer to the study of the economic incentives of a blockchain.
If you want to succeed in this field, you should have good analytical skills, curiosity, and dedication to explore potential solutions. Depending on the techniques you intend to research, you may need advanced skills on cryptography, distributed systems, general computer science, game theory, and economics, but hopefully not all of these together. This is the exciting bleeding-edge of blockchain.
Will You Take the Next Step?
I tried to give a bird’s eye view of the blockchain world, and how varied it is. It is not difficult to enter it, if you know your craft well.
In some areas, the skills needed are transferable from other common programming areas, and developers will make the transition easily. This may be an escape from a sector that may disappear or be reduced in the future (for example, desktop applications) without much need to reconfigure your skill set. In others, existing programming skills will not be enough.
But in any case, you should at least:
- Know what a distributed ledger is.
- Know what consensus mechanisms are and how they work in the most important blockchains.
- Be familiar with cryptographic hash functions and signatures.
- Understand crypto tokens and smart contracts. If you will work in Ethereum, familiarize yourself with ERC20 and ERC721 tokens.
- Get in the habit of thinking about economic incentives, how to abuse a protocol, and ways to defend against such attacks.
- Explore the projects being carried out in the area to understand the potential of the technology and imagine new uses for it.
The fact that the field is still very open, with lots of unanswered questions, is energizing and exciting. It is an opportunity to revitalize a career if it has been plodding from project to similar project.
Above all, cultivate an interest in the field and talk to as many people about it as you can. The job market is increasing, despite the fall in market capitalization and media attention. These are interesting times, and you too can become a blockchain developer.