I like building jigsaw puzzles.
Not as much as my wife does, to be sure, but I definitely enjoy it.
The thing is: I don't really understand why this is an enjoyable activity. You spend days or weeks patiently assembling a picture that you can quite easily see on the box, and when it's done, even though you might leave it on a table for a few days, you soon break it up and put it back in the original box. Is it just me, or is that weird?
The more I think about it though, learning Software Development is very similar to building jigsaw puzzles. And not just because it's weird - there are other reasons too.
At the beginning, the pile of pieces looks overwhelming and you have no clue where each piece fits. If you're new to software development, this is certainly true. Tech blogs discuss how technology X is no longer relevant, because technology Y covers those features but with reference confabulation. Yet you haven't even heard of technology X, let alone reference confabulation (FYI: Not a thing).
But don't despair, there's a plan.
When I build puzzles, I spend a lot of time just looking at the picture on the box, examining its details. It forces me to look at a single picture more intently than you would ever look at any other photo or picture. This is one of the mysterious joys of building puzzles - it focuses the mind. I spend an equally large amount of time sifting through the hundreds of puzzle pieces - just looking at each one, wondering how it fits together. Trying to imagine where it fits into the big picture.
When learning software development, this is an equally important step. If you open a website, look at the details. Look at the overall layout. What colour scheme was used? What data entities and attributes are displayed? What data is personalised to the current logged-in user, and what data is generic? How are the menus structured, what modal pop-ups are used, etc.? Even though you might not understand how the whole site works, you should start thinking about how these things fit together.
The human brain is an amazing thing. If you pump it full of information and let it process on its own time, it'll figure out how things fit together.
When the corners are in place, and while you're sifting through the pieces, you will identify all the edge pieces. These are not as easy to slot into place as the corners, but they are easier than starting with the section of blue sky in the landscape. The edges give you a safe space to begin figuring out how different pieces fit together, without being totally overwhelmed.
In my opinion, the software development equivalent of this is learning fundamental skills like:
- Data Storage concepts, like relational databases, SQL, etc.
- Analysis skills like user stories and understanding the problem domain with domain modelling (in UML).
- Operating system basics like how the file system is structured, how to use command line tools and how to install software without using a sterilized "App Store".
Another thing about puzzles: You don't go all-out building the whole puzzle in one sitting. It takes days, sometimes weeks. Some days you just spend a few minutes, other days you spend many hours. But the puzzle is always in the back of your mind. And every time you walk past the dinner table it reminds you of an unfinished challenge.
Sometimes you have a lot of momentum, slotting in piece after piece. Other times it feels like you're endlessly scanning for a piece, but you can't find it. And there are always a few pieces that you come across again and again, but you can't seem to figure out where they fit.
As the assembled sections of the puzzle grows, things gradually become easier. This is because you have more context, and more experience of the overall picture, and the number of pieces in the pile gets smaller.
The same is absolutely true about learning Software Development. Initially everything is new, which means everything is either very difficult, or impossible, to understand. But it doesn't stay like this forever: the more things you understand, the more context you have. And the more context you have, the easier it becomes to learn new things.
It's the ultimate snowball effect.
The last aspect of puzzle building that we should highlight is that the joy is in the process, not the end result. That's why we can so easily break up a puzzle that we spent weeks building. The real satisfaction is the tactile feeling when one puzzle piece slots into another. It's like a mini brain-orgasm. That's why people buy huge puzzles - it includes many brain-orgasms.
Yes, there is also a sense of achievement when the puzzle is finished, but that feeling is not bigger than any of the hundreds of small victories that you experienced along the way.
Learning software development is like an endless puzzle. Your picture will never be complete, and new pieces are constantly being added to the pile. As a result, you will never be able to stand back and look at a fully built picture, knowing that you understand everything. But that's not the point.
The point is to love the learning journey. And I certainly do.