The two approaches to learn programming

I started learning about programming back in early 2015. I started with the C# Course for Absolute Beginners at MVA. I can’t really say what was the driving motivation behind me when deciding to start learning programming. I guess I always did incline towards books, short stories, novels and whatnot from my pre-teen ages. And I guess Windows 10 Insider Programme pushed me further in Microsoft’s ecosystem back when it launched on Sept. of 2014.

So the phone I bought was, quite unsurprisingly a windows phone. Well, starting out I expected to start building something as soon as I finish my MVA beginner’s course. Of course, that didn’t happen. It definitely didn’t make me a master of programming but introduced me to the art of it. It’s beauty, it’s potential complexity and simplicity, it’s flow, the infinite ways of composing it and finally the endless possibilities of what it could do. All the way from making the world a better place to literally destroying lives; I was hooked! So, it’s 2017 now and how much progress have I made? Quite a bit I would say!

From what I’ve learned and experienced so far, there are two approaches for learning programming:

Top-down Approach

Top-down defines an approach where you start learning by tackling a problem you’d love to solve and potentially scouring the web, searching for a solution and compiling the available answers to solve the problem. You learn by diving deep into problems and understanding them by attempting to solve them. This approach provides you with quite a jump-start. For starters, this gives you immediate gratification (i.e you solve the problem) and this is really important as you won’t have to go searching for motivation because accomplishing provides its own motivation. Secondly, you won’t have to go through all the fundamental stuff and just hit straight for a possible solution to your problem: this saves time and your energy but of course this can also be a bad thing because learning fundamentals is just as important. And to be honest, this is the con with attempting the Top-down approach. The code you write is inherently bad as you’ve compiled it with the help of different forums and applying different hacks until one works. You do solve your problem much faster and this approach is more fun but the code you write is usually awful.

Bottom-Up Approach

Bottom-up defines an approach where you start by learning fundamentals first, then go about levelling up and solving problems appropriate to your level. These are usually common problems that people using this approach attempt to tackle as a better solution is always needed for better code understanding. Contrary to the Top-down approach, you need some serious motivation to go through all the boring basic material, finishing assessments and only getting to the interesting part much later in the course. This approach rarely provides immediate gratification and hence requires self-discipline. You don’t get to build something until you’ve mastered all the basics so frankly speaking, this approach consumes a lot of your time and energy. But the code you write is good, concise and organized.

Which one do I prefer?

Well, I think both of them are pretty important when you’re learning as a beginner but the bottom-up approach requires a lot of time, funds and patience. It’s a long road and many people don’t see the end of it. While, the top-down approach definitely requires more brains and passion since you have to search and try different suggestions for hours until you hit the right one! But with every mistake you’re learning something useful. In my opinion, if you’re learning to be a UI/UX designer then going with the top-down approach is much preferred as you’ll be creating and experimenting without putting security at risk (as security flaws are mostly present in logic). But if you’re trying to be a developer who works at the backend of things then going the bottom-up route is advisable since you will be working on logic where having a good and maintainable code is crucial to the overall stability of the application.