Programming

Do you want to Learn To Program as engineers learn from the ground up by focusing on performance and high quality?
Here I would like to show a path for those who commit themselves to learning to program. It may take several years to learn these concepts. But, If you are a dedicated person, you can certainly achieve it.
Best failure story
I have started to learn to program in 2012. Back then, after the research I have done I have decided to learn C++ Programming.
The moment I had started to learn C++, I had faced with object-oriented programming concepts. As someone who has no idea about the fundamentals of programming, the object-oriented way of thinking was quite hard to grasp.
I had tried to learn to program, not tried to learn object-oriented programming.
After getting stuck with C++, I have tried to learn Phyton. The same story happened again. Everybody was saying Phyton is easy and should be the first programming language. But, when I tried to build Python applications, there were so many things hidden away from me. These hidden concepts made it so hard to comprehend how it all worked under the hood.
For me, the most important thing was not building something working but rather understanding it in and out.
That’s why, I had moved on to PHP and then Javascript, but the same things were happening again and again.
This resulted in me getting stuck all the time. I had no motivation to progress. But still, I continued.

Later, I have moved on to Pascal programming in 2016. It was my fifth programming language. For me, Pascal was a lot better than any other programming language because it exposes everything and does not hide underlying concepts away from me.
Even though Pascal is a good language, I had a hard time finding high-quality resources with Pascal. Later, I have moved on to C programming language which is my 6th programming language.
Suddenly with the transition to C programming, something interesting was happening. I had started to understand everything I learn and nothing was so hard to comprehend.
In C programming, every concept is laid out perfectly. This resulted in me learning to program without ever wondering.
That’s the time I started to actually learn to program.

After learning C programming quite well, I wanted to build Android applications. For this reason, I have tried to learn Java programming.
Having learned my first programming language, learning Java was easy. I could be able to relate every concept with C programming and even try to write the same object-oriented concepts in C language even though the language does not have built-in support for the object-oriented programming constructs.
After having a solid Java foundation, I wanted to build web applications with Golang. Learning Golang took almost a week or so.
Learning any programming language become so easy after I have learnt C and Java programming.
Following C and Java, I have learned Phyton, C++, Shell, and Assembly Programming Languages without much effort.
Things were so clear in my mind so that no programming language was hard from now on.
Learning to Program
As you can see, I have failed a lot. It took me 8 years to reach this point. But, I know you don’t need to waste that much time. That is why I am here to tell you that there is a better way for you to skip the obstacles that I have faced.
Here I have arranged a path by using the insights I have gained over the last 8 years.
My Programming Path

For me, learning to program consists of understanding the following concepts in their sequence:
- Fundamental programming concepts.
- Data structures and algorithms.
- Object-Oriented programming concepts.
- Advanced programming concepts
- Applying best programming practices

The Fundamental Programming Concepts
When you start learning to program, one of the first things you should be comfortable with is the fundamental programming concepts. Rather than using shortcuts to increase productivity, the main focus should be getting exposed to all the basics as much as possible.
Languages like Java, Python, C++, and almost all the other modern programming languages hide some of the basic concepts to increase the productivity of the programmer.
The problems arise when a new programmer uses a short version of programming constructs to increase productivity. When the programmer prioritizes productivity, he couldn’t understand the problems when he encounters the ‘complex’ error messages.
Then, the programmer wanders all around the web without even knowing what the problem is.
The Fundamentals
The solution is a programming language that supports programming with just the bare minimum programming constructs. One of them is the C programming language. It provides the bare minimum constructs to program anything. You don’t have fancy things flying around. You just have simple basic programming tools, nothing more.
The simpleness of the C programming language gives you the ability to focus on what is important when you are a beginner and never waste time learning further programming concepts when you just starting out.
For this reason, if you like to become a skilled programmer in any language you want whether it is Python, Java, or Golang, you should definitely have a good C programming foundation.

For me, if you ask what is the difference between C and Python in terms of a programmer’s productivity perspective, I would say you have to write 100 lines in C programming when you could just write a line of code in Python.
From the perspective of productive programming, of course, it is best to write a line of code and have the same effects as 100s lines of C code.
But, if you don’t know what is hidden behind a line of code, how would you suppose to create highly complex applications?
By stacking things that you don’t understand just like doing a puzzle?
- No, it doesn’t work.
Even if some people think it works, in the 21 century, everybody can write code. The point is writing efficiently working and high-quality code rather than putting another legacy code pile into the existing billions of legacy codes.
If you want to become a solid programmer, you have got to focus on the basics only when you are starting out. After you learn basic things, of course, you can shorten your 100 lines of code to a line of Python code.
Here is a representative list of ‘basic’ concepts.
- Loops
- Control Flow
- Variables
- Pointers
- Strings
- Bitwise Operators
- Memory Allocation
If you show this list to a programmer who only knows Python, he won’t know what the memory allocation is, what is a pointer, how strings are stored in computers, or even he may not know what are the bitwise operators.
In short, if you like to have solid programming skills, you should always start with basic programming concepts. Do not interfere with complex programming concepts by using languages like Python and Javascript when you are starting out.
Data Structures and Algorithms
Data structures and algorithms are the backbones of computer science. Without knowing how data structures and algorithms work, it is hard to create something useful.
There are so many data structures and algorithms. For this reason, you should definitely not try to learn them all when you are just starting out.
Before learning Object-Oriented Programming, you should have an understanding of what are some of the basic data structures and algorithms.
You can also learn data structures and algorithms at the same time you learn basic programming concepts.
- After you learn the bare minimum programming concepts, start to learn data structures and algorithms.
Before jumping into object-oriented programming, you should have a good understanding of the topics that are covered in the following course.

Mastering Data Structures and Algorithms with C and C++ Training
This is not an advertisement but rather it is the best teacher I have seen that teaches data structures and algorithms from basic to high levels.
The same instructor also has a youtube playlist but the playlist is out of order and some videos are missing.
- You should follow the same path as the Udemy course.
Solving Problems
When learning data structures and algorithms, you should certainly measure your understanding by applying them.

In websites like hackerrank and leetcode, you find lots of problem sets starting from easy to hard. Step by step solve the problems and improve yourself.
Job interviews have a part where they watch you solve the problems as you see on hackerrank.
- Try to solve as many of them as possible to train yourself for an upcoming interview.
Object-Oriented Programming
Object-Oriented Programming is the programming paradigm behind Java, Python, and C++.
If you like to become a good programmer, you should definitely have an understanding of what object-oriented concepts are.
- Mastering an object-oriented programming language is also important.
When learning Object-Oriented Concepts you can either go with Java-like me or C++.
- You should research what are the things you would like to build when you become a programmer and choose the appropriate language.
- If you don’t have any idea about what you will build, go with Java, you won’t regret it.

You should definitely cover the topics that are shown in the image.
Advanced Programming Concepts
Here is a list of advanced programming concepts. These concepts can be found in almost every programming language.
- Input-Output (IO)
- Working with Databases
- Socket Programming
- Network Programming
- Lambda Expressions
- Static-Dynamic Libraries
- Interprocess Communication
- Threads
- Concurrent Programming
- APIs
After you get comfortable with the target programming language you would like to learn, you should try to learn as many of the advanced concepts as possible and use them as a tool.
Best Programming Practices
Up until this point, you have learned what is required to become a junior programmer. From now on, you should start to make big projects and learn the best programming practices.
As I have described why applying best practices is crucial in the following article, you should definitely read the Clean Code book or watch its video series.
Professionalism
The last step in our never-ending learning journey is to learn to build software products. Here one of the most important skills is to prioritize the business constraints, provide a high-quality user experience and also achieve the software architecture constraints.
Being able to meet the deadlines, business constraints, and also not violate software design principles is the challenge you need to get good at solving.
The process leads you to architectural trade-offs. You learn to apply the correct architecture according to the needs rather than the implementing popular one.
Optional Step: Assembly Programming
If you learn how to apply best practices very well, probably you don’t need to take this step. When you apply the best practices, you won’t find yourself lost in the debugger.
But if you do find yourself inside of debugging stage for so long and you have to understand what are the exact commands that are being sent to the processor, then you should definitely learn to program using Assembly Programming Language.
Personally, I would suggest you learn 8086 Assembly Language but you can learn any one of the assembly languages you want. Just make sure you understand how a programming language works behind the scene.

Last Words
I hope this path will help you learn programming as it did to me. Remember, always keep things simple. Don’t try to rush into a high-level programming language like Python before understanding what are the things that are hidden behind these modern programming languages.
- Start with C programming fundamentals.
- Then, move on to data structures and algorithms.
- Continue with learning object-oriented programming paradigm and other paradigms as well if possible.
- Further enhance your toolset, by learning advanced programming concepts.
Also, after learning an object-oriented programming language very well, you should start to learn best practices using Clean Code.