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.

Prerequisites

Depending on your background, there are some things you may want to learn before getting started with Solidity, for instance:

Cryptography

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.

If you end up liking this topic a lot, you can move on and learn more advanced topics, like Zero Knowledge proofs, which are becoming very popular and useful.

Blockchain

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.

Then, to add the Turing completeness and the Ethereum Virtual Machine into the mix, these lessons can help. Here you have a way shorter explanation.

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.

Of course, there's always the Ethereum white paper as well as the yellow paper.

Solidity

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 Solidity

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.

Web3

Sooner or later your smart contracts will have to interact with real people using browsers, so without the need of becoming a master front-end developer, you need to understand at least a little bit how to use Javascript to interact with your Solidity code. Usually, Solidity tutorials include some sort of introduction for that too. Here you can find the official reference.

EVM assembly

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.

Stack Exchange

The Ethereum Stack Exchange is your friend if you need any help. Use the search function or check the different tags there!

Opcodes gas costs cheat sheets

https://github.com/trailofbits/evm-opcodes

https://docs.google.com/spreadsheets/d/1m89CVujrQe5LAFJ8-YAUCcNK950dUzMQPMJBxRtGCqs/edit

A Keccak256 online hash function tool

http://emn178.github.io/online-tools/keccak_256.html

Solidity to EVM mapping tool

https://solmap.zeppelin.solutions/

Aragon Developer Portal

https://hack.aragon.org

Ethereum Developer Tools List

https://github.com/ConsenSys/ethereum-developer-tools-list/blob/master/README.md

/r/ethdev subreddit

https://www.reddit.com/r/ethdev/

Be unstoppable

Ok, so now you feel confident about your abilities, it's time to use your skills for good and fight for freedom. Build your DAO or your dapp on top of Aragon!

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.

Follow Bingen on Twitter