Beginning my Journey to Learn C Programming

Hey guys, for those that do not know, I have decided to go back and study the C programming language.

In light of some feedback that I received, I am currently in the process of re-evaluating and changing the way I write.

However, because this is a personal post, I will be reverting back to the style I write. Although this post is more for equipping myself, I hope that those who decide to read through my incessant rambling will find some value in some of the things I process.

Earlier on last week, I had lunch with a developer who wrote out the source for an embedded wireless communication device for controlling LED lights. I did not see him in quite some time, so I used this opportunity to pick his brains. As a developer, he is somebody that I respect, also as well in terms of work ethics.

I am a backend developer/system architect that is currently working on the entire system. From coming up with the system architecture, designing the database, writing queries and procedures, doing both backend and frontend development, as well as UI/UX. Needless to say, I have a lot on my plate (on top of also managing this blog and taking a Nanodegree at Udacity).

I am not saying this to brag. But rather, to admit to my weakness, as well as my slowness in realizing that I was unknowingly being spread thin.

Decision: Learn Software Engineering Principles, not Languages

learn c programming feature image

Languages come and go based on trends. The C programming language gives you precise control. Therefore, it is very important for creating embedded systems that run on low memory and power.

You might say that learning to effectively apply software engineering principles can be done in any programming language. This is true, and I agree with you. However, learning using a new language can give you a fresh perspective. Some software engineering principles are more prominent in specific languages. For example, developers that code in Scala will generally tend to write their code using functional programming principles.

Programming languages are tools.

When you need to chop wood quickly, a chainsaw will get the job done quickly. However, if you want to cut it a specific way, using a saw will give you that extra control, at the cost of time and additional effort.

C and C++ are Different Languages

This might sound obvious to most, but I am going to throw it out there. I consider myself an absolute beginner when it comes to C. Although C++ is a superset of the C programming language, the two are entirely separate beasts. First of all, the programming style is entirely different. As a programmer who writes code in C++, I can immediately tell if somebody is coding the C or C++ way.

C and C++ are like apples and oranges.

Apples and Oranges are both round fruits. However, their flavor and nutritional values are entirely different.

C++ supports object-oriented features such as classes and provides nice standard libraries that contain features such as strings, whereas, in C, strings are created using character arrays.

And yes, I am a complete beginner at C, so I am looking forward to practicing and building some stuff that I built in other languages using C. Or something entirely different.

Learn Tools that You Will Use

programming languages are like tools. Learn tools that you will use.

If you are learning how to use a drill, you should always have a use case. Unless you use what you learn, all the information that you stuff into your brain will eventually leak out, regardless of your intelligence of memory.

In the same way, learn a programming language to use it.

In my case, I sometimes have to work with embedded devices whose firmware files are written in C. I am a Java programmer who writes the software that parses data from the device via an in-house protocol and provides the user with the interface. However, I want to learn C so that I can also update and add new features to the firmware of the embedded device when the need arises instead of relying on other developers.

Call it greed or foolishness (and you may be right). That is why I am learning the C programming language.

Learn the Programming Language

After I have the purpose, I need to actually learn C programming. In the past, I wrote about ways to learn and master programming languages in an effective and methodical way. It all boils down to learning and understanding the

  • Syntax
  • Idiosyncrasies
  • Features and quirks
  • Applying software engineering principles and best practices effectively

In another word, practice.

I can read all the “learn c programming” books that I want.

Solve Problems

The next step is solving problems. You learn the syntax, understand the basic features and syntax of the language. But what good is a tool if you cannot utilize it to solve problems? What good is a hammer if you don’t know how drive the nails in with it?

So here is my plan:

  • Go through basic exercises in textbooks
  • Solve katas on codewars
  • Work on projects
  • Read online resources on C programming
  • Review my work
  • Polish up finished projects

C Programming Books

The one book that I am reading: C programming language – A modern approach is fairly good. I have read my fair share of programming textbooks. If you see my bookshelf at home, I have a wide range of books on software engineering from Java, C++, Design Patterns, Database architecture, Oracle PL/SQL programming, etc. And this book is one of the better books. Don’t expect to be entertained, however. It is still a textbook and reads like one. However, this book is quite informative and provides projects at the end of each chapter for you to apply what you learned.

Application is key. Without application, there is no growth. Programmers, believe it or not, need to also develop muscle memory.

Some other books I have heard good reviews about include the following. Please note that I have not purchased or read any of these books. Rather, it is the general feedback and consensus of C programmers that I have talked to.

Below is a list of books that I am open to exploring if the opportunity presents itself.

Additionally, if you have any suggestions on good books to read, please leave a comment below and let me know. I am also interested in Arduino programming in C.

C Programming is Hard

Unlike some of the higher level languages such as Java, JavaScript, Python or even C++, C is a lot less forgiving. For those that are like me, and are used to classes and object oriented features, C does not support classes.

However, if you are familiar with C++, you can use structs to create objects that store data. Learning C is stretching my brains to think outside of the circle. If innovation, trying new things really makes you feel alive, after mastering or developing a certain degree of proficiency in at least one programming language, I recommend you to give the C programming language a try.

The reason why I am reminding myself that C programming is hard is that I am the type of individual that does not work hard unless I perceive something to be challenging or worthwhile. The takeaway message from processing is this.

Understand how you get motivated.

Find the best way to get yourself motivated. You might be goal oriented. If so, work on a challenging project or create a checklist of items to learn and master. Whatever it is, finding out what motivates you and taking advantage of that fact to propel yourself in the journey of learning is key.

Reminder to myself: Code Every day

Practice makes perfect. Right now, I know you are busy with the Udacity Nanodegree, work, and blogging. But if you don’t code at least an hour outside of work doing new things, guess what? You are going to forget everything!

Sorry for the incessant rambling. That was just a way to give me a good kick in the butt.

If you did read through that, I am pretty sure that a lot of it sounded like blabbering. That is because it probably was. The focus for my personal blog is to keep myself accountable to do the things that need to be done.

If you did read this, although most of it was reminding myself of what I need to do, I hope that it provided some sort of insight or encouragement.

To myself and all that read this, JUST DO IT! Don’t think about the inconvenience or the difficulty. JUST DO IT!

And remind yourself why you are doing this in the first place.

About the Author Jay

I am a programmer currently living in Seoul, South Korea. I created this blog as an outlet to express what I know / have been learning in text form for retaining knowledge and also to hopefully help the wider community. I am passionate about data structures and algorithms. The back-end and databases is where my heart is at.

follow me on: