One Question about programming fundamentals (Couldn't find it on Google)

Context:
I have always heard “master the fundamentals of programming before anything else”. My question is what exactly are those fundamentals (unfortunately the same article that writes this advice, most of them don’t answer this question) & how exactly do I master them? How do I even know I have mastered them?

My Attempt at answering the question:
After some googling I have broken down the fundamentals into 3 levels.

Very Basics/Level 1: Variable declaration, Data types (some add data structures here but I am not sure if I should focus on that), Control structures, functions, input & output (isn’t it the same as variables). Some also add computer architecture and data basics here but idk if I should focus on it.

Level 2: Data structures, Debugging, OOP, functional programming

Level 3: Algorithm, Design patterns, IDE, command line

Question & My Ideas:
Question: Now, how do I master these? Like how do I master level 1 (since this is the most important fundamental)?

Idea 1: I had heard of Josh Waitzkin, a renowned chess player who had an interesting way to master each piece of chess. He, instead of practicing chess with all 16 pieces at the beginning, he cleared out the board & practiced and tried to win the match with only a few pieces like pawn against the king or knight against the king from different positions. He did this until he got an intuitive feel on how each piece moved. Now how do I apply this principle in programming? Do I make complex apps and programs using only these level 1 concepts or try to solve loop exercises with conditional (which kind of seems impossible)?
Idea 2: I had an idea of breaking down existing function to conditions and loops only to understand how they work but idk if it is a good idea or where do I find the code that works behind the scene to break it down.
Idea 3: I also heard someone once say the only way to measure progress in programming is to count your mistakes and never repeat them, now… This is a very tempting idea but how do I apply this?

I have many ideas jumbled up in my head like this which is why I am not able to decide. Any feedback will be appreciated. Thank you so much for taking your time and reading this.

Joyeta.

Lets broaden this question to: “How I learn to master a skill?” This is the sort of question a lot of different resources have been built. Concepts like “10 thousand hours”, or how you don’t really need 10 thousand hours, or similar set of principles and practices to act upon to just get better.

So lets take the same broadening to the topic of “what are the fundamentals of programming?”, what are fundamentals?

The fundamentals of something are usually aspects that apply to all situations. So fundamental skills would be skills you apply all the time.

So your attempts at answering it are pretty on point. I’ll point out a few things though:

  • Understanding a language’s syntax could be consider fundamental, but only fundamental for using that said language. If you use another language your understanding of another language’s syntax won’t be as applicable, so its not a true fundamental. Of course if you know 0 languages you can’t really build much, so its still important.

  • Data structures, Algorithms, OOP, design patterns, etc are all things that are more concepts than specifics. They will always be relevant regardless of what/where/how your doing things. these are the core fundamentals that you will always use where you realize it or not.

Most other things, like using an IDE/terminal/debugging are more use-case specific, similar to knowing a given language syntax. If you don’t use that IDE, or a different OS, or debugging tools you will need to re-learn some aspects, so they are less fundamental but again are still important skills.

You use them. A lot. The 10 thousand hours might not be a legit figure, but the idea behind it is. the more time you spend doing something, the more experience you gain with it, this is a key factor in learning.

Chess is an interesting comparison, but this method has flaws. There’s 2 parts to chess:

  1. Learning how the piece’s move, the rules, and key fundamentals and realizations about those piece’s, such as how to checkmate with a queen+king in the endgame correctly.
  2. Knowing how to strategize within those rules.

The first one is comparable to learning about programming, its limitations, a given language’s syntax, and being able to get ideas into your program without having to fight the language. If a programming language is the tool, you are learning how to use the tool.

The second is where you go from needing to learn how to wield the tool, to learning how to use it. In chess this is where you find the most depth, as the rules of the game aren’t actually that complex, but how the game is played is where the complexity explodes, and where you’ll find a huge difference between Magnus Carlson and your local club player, even though the knowledge of the rules should be the same.

For programming, you want to get over the hump of “fighting the language”. Its like trying to learn how to play chess well when you can’t remember what castling is, how to setup the board or the objective of the game. So you want to learn the syntax, and be able to wield it to see how it can be used. So essentially everything you have in “level-1” is where you want to start and get things solid enough to start with the “fundamentals” of the underlying theory (data structures, algorithms etc)

I’d be careful of spending too much time worrying about the specifics and thinking of “the best way” to learn. Simply put there is too much to learn to learn it all, and there’s more to learn every day. The only “sane” path is one you start as early and continually as possible. So pick up an idea, start googling all you want around that concept and start doing stuff, any stuff anything new and uncomfortable.

The comparison to chess breaks down with the fact chess and programming are alike in regards to the need to memorize pre-existing knowledge. You could do that for programming, but chess is a set/standardized game, programming is infinitely more complex. In that sense its more akin to writing a novel than chess. And like any great writer, to get better, to become more effective with what you write, you need to write more.

Good luck, keep learning keep growing, keep building.

PS. if you want an actionable item, think of a project near your skill level that includes some new things you want to learn, set a short deadline and build it. Continue this and you’ll learn a ton.

2 Likes

Thank you soooo much for your time & in depth reply. I can not count how many times I wondered if I am on the right track or not cause I always believed fundamentals are the most important part of any skill. I can not express my gratitude to you for the clarity I got from your answer in words. :smiling_face::smiling_face::smiling_face:

You even defined what is “fundamentals” for me. Now I will have even more clarity when learning any new skill or even any new topic in programming, I will understand how much focus I need to give to each topic depending on if the topic is fundamental or not.

Once again, thank you so much for your help.

Joyeta.

1 Like