Hints and suggestions for beginners to get started on becoming a Solidity developer.
As the title of this article states, this is intended to give you hints and suggestions to get you started on becoming a Solidity developer. This isn't a tutorial or a how-to in itself. There is a lot of literature for that on the web, it wouldn't make sense to add yet another one. This is based on my own experience following the path (which just began) and it tries to help you avoid too much wandering to kickstart yours. For those of you who don't know, Solidity is a programming language used for Ethereum Smart Contracts.
Depending on your background, there are some things you may want to learn before getting started with Solidity, for instance:
There's no need to know all the nitty gritty details and the mathematical demonstrations of the different cryptographic primitives used in the space (although it's certainly interesting and funny). But at least knowing the basics, like what hashes or signatures are, or what
keccak256 is, are fundamental. In the end, the ecosystem is called "crypto", right?
I enjoyed this course going through it some time ago. It's quite detailed, so if you don't have a lot of time, you may want to skip the demonstrations.
I have read good reviews about this one too (it has a second part as well). Hopefully, I will find some time to complete it soon.
Obviously, you will need to understand what a blockchain is and how it works. As with cryptography, you don't need to become an expert, but general knowledge is good to have. Both for historical and technical reasons, I think a very natural way of getting into it is learning first about Bitcoin and then jumping onto Ethereum. Again, I found this course and this book (which you can also read for free on GitHub) really interesting and illustrative for Bitcoin.
Andreas Antonopoulos, the author of Mastering Bitcoin, has released recently the Ethereum version with Gavin Wood's help, which you can also find on GitHub, although I haven't yet had the time to check it out.
A note about previous programming background: of course, having previous knowledge is good, but it can become a drawback too. Sometimes old habits are hard to overcome. This is something that is still happening to me. Let me give you some examples:
- In other environments, you have probably had to deal with infamous race conditions, but with Solidity, you enter the realm of subtle front-running. I find it hard to have it present in my day to day work.
- Security is always important but I would say that even more so in this space for its irrevocable nature and because your code could be handling large amounts of funds. You've heard of The DAO hack? Or the Parity multisig one? Like I was saying before, vulnerabilities and attack vectors are sometimes very particular, so it's hard to keep them all in mind while coding. Another common example is re-entrancy, a mistake I admit to having made myself. This compilation of Smart Contract Security Best Practices is a good resource to get you started.
- Optimization is a very sensitive subject in programming, but here you will soon realize that it's all about gas cost. And gas measurement has its own peculiarities that don't necessarily match real computation costs. E.g., multiplication and division have the same cost in Ethereum Virtual Machine (see below for some links about it).
Now let's finally get our hands dirty with Solidity. My first recommendation would be the official documentation. Yes, I know, you don't need this article for that, but seriously, unlike other projects, I find it really helpful. I personally started with it and I still use it often when in doubt about some details, like how storage works or what's the syntax of assembly opcodes.
If you prefer videos over reading, someone recommended this tutorial to me a long time ago. It looks good, although I haven't followed it myself, so not sure about it. Anyway, if you search around the web a little bit you'll find tons of these.
An important recommendation I would like to make is to find a project to work on as soon as you can, just after having learned the basics. And this applies to any programming language you want to learn. Of course, some people may disagree, but it worked well for me. I had been wanting to learn Solidity for some time, but being very busy at the time, it wasn't until I found out about the Aragon One hiring challenge that I started to move forward at good pace. Motivation is key, and just reading or watching can become boring.
Beyond the language itself, there are some other things that can help you to take more value from your recently gained knowledge.
Remix is an amazing Web IDE for Solidity. I remember when I started I didn't pay attention to it because I thought that nothing too serious could be done in a Web IDE, so I should go for the real stuff. I couldn't be more wrong. You'll be surprised by it. Plus, their creators are nice people! Truffle framework is the most widespread and the one you would likely start with, but Embark has been improving a lot lately and gaining some traction.
As you start digging deeper with Solidity you'll find yourself in situations where you need to use EVM assembly, like for some bitwise operations or for certain gas optimizations. A very friendly introduction can be found here. The previously mentioned official documentation works well for this as well.
The Ethereum Stack Exchange is your friend if you need any help. Use the search function or check the different tags there!
Further tools and resources
- Opcodes gas costs cheat sheets
- A Keccak256 online hash function tool
- Solidity to EVM mapping tool
- Aragon Developer Portal
- Ethereum Developer Tools List
- /r/ethdev subreddit
Bingen is a Solidity Engineer at Aragon One who started learning Solidity around a year ago. He is now an integral part of our Solidity/EVM team. He's also helping community members and Nest teams with Solidity related matters.