For the new & aspiring software developer, programming fundamentals are perhaps the most impactful thing to learn for making progress. Programming fundamentals exist in all languages, all frameworks & the majority of tech.
Really, what I am talking about here, are the Computer Science fundamentals which explain the existence of programming & machines, including the theory which interrelates them.
To put some numbers on it, when you first learn a conventional programming language, it looks something like this, going down asymptotically:
Learning Percentile | Universal Knowledge |
First 10% | 95% relevant to all languages |
First 20% | 80% relevant to all languages |
First 30% | 60% relevant to all languages |
First 40% | … |
First 50% | … |
First 60% | 30% relevant to all languages |
Here, we are talking about understanding binary numbers, compiler theory, common math, basic syntax, abstraction, functions, variables, data types, classes, dependency management, creating environments, etc. All these things are 95% universal to all other conventional languages.
But Learning The Fundamentals Is Hard…
It is actually difficult to find a great curated list of programming fundamentals. The typical way self-taught developers learn them is by natural implementation and haphazardly enrolling and quitting in Computer Science classes/boot camps.
For the majority of people, there are topics which are extraordinarily difficult to pick up without a teacher. Do not let those “I taught myself” developers fool you, they probably had some help along the way. Incidentally, they probably don’t remember or did not credit the instructor internally when they grasped the material.
But you can imitate them and their typical meta. The basic idea is a delicate balance between implementation & learning theory. As you implement code, read & watch videos, you will learn the fundamentals naturally.
But, you will find you often need a boost. College, boot camps, open-source communities, MeetUps and courses will often push you much farther then on your own. No developer, no matter how smart, will be slowed down by organized learning material which specifically applies to them.
Let me recommend a YouTube course to get you started. If you are an absolute beginner, this is perfect:
Tips for More Easily Learning the Programming Fundamentals
For programming fundamentals, the standard recommendation by the self-help influencers of coding is to always start with one language and stick to it. Learning one language should come with the goal of really going deep into the fundamentals. Switching between languages slows down the process of learning by quite a bit and can be very discouraging.
At this point of learning a first language there are a few things you must consider:
- Should I pick a high level language or a low level language?
- How do I pick the right language for me?
When it comes to high-level vs low-level languages, there are pros & cons to both. High level languages are much easier to progress from. They are typically easier to put together, install and get started. Low level languages, however, are extremely cool. They typically have unique capabilities and performance but are often difficult to progress in.
Honestly, this is somewhat controversial but I think there are many benefits to a low level language. In the end there is no best language for everyone.
Instead, I would pick a really cool niche and reverse engineer how you would get to that niche. Like this;
- Machine Learning -> Data Science -> PyTorch -> Math/Julia -> Python -> Programming Fundamentals
- Web Development -> etc, etc…-> Rest API -> Databases -> ReactJS/NestJS -> Client Web Dev -> HTML/CSS -> Express -> Node/JS -> Programming Fundamentals
Go as far as possible into that niche, learning deeply every step of the way but it all starts with the fundamentals.
Well, that’s all for now…
Happy coding!
Resources
Introduction to Computer Science video: https://youtu.be/zOjov-2OZ0E?si=0Nb1dXqhFtMoZlCo
High level languages: https://en.wikipedia.org/wiki/High-level_programming_language
Low level languages: https://en.wikipedia.org/wiki/Low-level_programming_language