The world’s leading publication for data science, AI, and ML professionals.

Programming Path For Those Failing to Learn Programming

The path from the very beginning to the further high-quality programming practices.

Programming

Photo by Jefferson Santos on Unsplash
Photo by Jefferson Santos on Unsplash

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.

Photo by Steve Halama on Unsplash
Photo by Steve Halama on Unsplash

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.

Photo by Vek Labs on Unsplash
Photo by Vek Labs on Unsplash

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

Drawing by Author
Drawing by Author

For me, learning to program consists of understanding the following concepts in their sequence:

  1. Fundamental programming concepts.
  2. Data structures and algorithms.
  3. Object-Oriented programming concepts.
  4. Advanced programming concepts
  5. Applying best programming practices
Photo by Karsten Würth on Unsplash
Photo by Karsten Würth on Unsplash

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.

Photo by Bench Accounting on Unsplash
Photo by Bench Accounting on Unsplash

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.

Screenshot of Mastering Data Structures & Algorithms Course Curriculum
Screenshot of Mastering Data Structures & Algorithms Course Curriculum

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.

Screenshot by Author from Hackerrank Website
Screenshot by Author from Hackerrank Website

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.
Screenshot of Java Programming Masterclass Curriculum
Screenshot of Java Programming Masterclass Curriculum

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.

Take Your Programming Skills to The Next Level

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.

The Path to Develop Professional Programming Skills

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.

Photo by Ali Abdul Rahman on Unsplash
Photo by Ali Abdul Rahman on Unsplash

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.

Related

The Cyber Architect Curriculum


Related Articles