sladuca.eth

Posted on Feb 04, 2022Read on Mirror.xyz

How To Learn As A Developer

So you’re learning how to build stuff. That’s awesome. Before you waste countless hours watching videos, reading blog articles, and doing tutorials, there’s something I want to tell you:

Development is a skill. That means you learn by doing. Blogs, videos, and tutorials are helpful for learning concepts and getting familiar with tools, but they won’t help you with the part that actually matters: turning a vague, high level idea into an application.

This fact might seem obvious, but it turns out it’s not. In my time with the CMU Blockchain Group and BAF I’ve helped countless people learn all kinds of developer skills, oftentimes from zero. And the #1 reason people struggle to learn isn’t because they don’t understand some difficult concept, nor is it because they have “less experience”. It’s because they spend all of their time reading blogs, watching videos, and following tutorials instead of actually building stuff. The best way to learn a skill is to use it - fast learners truly understand this, and slow learners don’t.

If you feel personally attacked by the last paragraph, that was intentional. My goal here is to get you to stop doing more tutorials and build something.

Of course, I’m not saying to skip the videos and tutorials - you still need to learn tools and concepts. I’m saying that, once you’re familiar with them, it’s better to build something simple, that you’ve never built before, and most importantly, do it on your own, not through a tutorial. A tutorial figures everything out for you, so it won’t teach you how to figure stuff out. But figuring stuff out is the meat-and-potatoes of software engineering - not coding.

Of course, it doesn’t need to be a production-ready project - not even close. A beginning artist would start with a sketch of a simple object like a hat, not a highly-detailed drawing of two medieval soldiers locked in combat - developers are no different.

Left: a shitty practice drawing of a hat I made a while ago. Right: a gorgeous piece from Kingdom Come: Deliverance

That said, there isn’t a “best” way to do that. I understand some people have trouble figuring out what they should do, so here’s some actionable suggestions:

  • Complete a tutorial, but add a feature to the result. The possibilities can vary per the tutorial, so here’s a few examples:
    • If you’re learning React for the first time, the official Intro To React tutorial walks you through making a tic-tac-toe game. Try adding forward and back buttons that allow you to step through the history of the game.
    • The hardhat tutorial on their website walks you through deploying a simple token contract to ropsten. Try deploying it Kovan or Rinkeby instead - you’ll have to figure out which network parameter goes where in the network config object.
  • Come up with a simple but not-too-simple, high level project idea and try to build it yourself. I say “not too simple” because if it’s too simple, you won’t learn much because it doesn’t make you think. But if it’s too complicated, you won’t learn much because you’ll be overwhelmed. So try to find a balance. As a rule of thumb, aim for something that takes ~2-15 hours. Also, your goal should be “it works”, not “it’s awesome” - the goal is to learn, not to show off. Usually it’s best to do this after a tutorial. Here’s a few examples:
    • If you’re learning Solidity dev, try writing full-stack app for one of the following, no tutorials. Asking for help / Stack Overflow is OK (and encouraged)
      • Escrow
      • Election using hash-commit-reveal (look up if you don’t know what that is)
      • Name Service
      • Fomo3D clone (if you don’t know what Fomo3D is, look it up - it’s funny)
    • If you’re learning Rust, try implementing your favorite data structure(s) (e.g. binary tree) from scratch, with tests.
    • If you’re learning a new front-end framework, try implementing tic-tac-toe or a to-do list from scratch
  • If you already have a product you’re working on, chances are you’re learning something because you need it. Unless you’re rewriting your entire product with it, implementing whatever feature you’re trying to implement directly after a tutorial can be enough.

In short, whatever you do, the key is it should make you think. It should make you experiment. It should train your intuition for what works and what doesn’t, in what situations. It should make you spend time figuring out why your code isn’t working. It should make you translate a high-level task into code on your own. You won’t get that from a book, article, video, lecture, or tutorial. You only get that from putting in the work.

Aside: This struggle might be more common with college students, the majority of the people I work with. The tendency to just read and consume information is understandable, because it’s likely they’ve only been given reading and homework by a teacher - they’ve never had to come up with their own reading and homework, and they’ve never learned without some overarching structure that tells them exactly what to do and how.