While many resources exist for learning programming, I recommend that beginners use books with extensive and challenging end-of-chapter exercises.

Why? I find that online walkthroughs do not teach concepts systematically, leaving gaps in conceptual knowledge. Furthermore, they typically lack technical depth and extensive, well-designed exercises for cementing skills. Concepts aren’t mastered by typing a pre-prepared demonstration program with ease, but by independently creating a program that uses them. In addition to providing a solid foundation, these books can serve later as solid references!

One can’t run before learning to walk. Focus on the fundamentals. Do the exercises.

This list will not cover all the languages and tools one might use in InfoSec. That is impossible. Instead, it will build a foundation that allows one to easily pivot to new libraries, frameworks, or languages needed for their InfoSec goals. I explained why I consider the following to be important in my post explaining how to get started with coding for InfoSec.

Python

These can be supplemented with online lecture videos, if one prefers to learn theory that way. There are plenty out there. I’m especially fond of MIT OpenCourseware 6.0001.

There are also security-specific books. I listed them separately; while beginners can complete them, they are best-suited for those with prior Python knowledge. I do not recommend starting with them as they do not have extensive exercises for practice. However, they provide fantastic examples of Python’s applications:

C++

C++ was first released in 1998 as an object-oriented extension of C and has undergone revisions since.

Such changes have their effects. For starters, learning resources may not cover the latest version’s capabilities. And even if updated book editions are published shortly after the latest version’s release, they are often ridiculously overpriced.

Beginners should not worry about language versions for two main reasons:

  1. C++ is backwards-compatible. A C++14 compiler will process C++98 code without any issues.
  2. The newely added features cover advanced functionality and syntax cases. Unless you are a highly-experienced C++ programmer, you will most likely never see nor need them.

Hence, learning an earlier version is fine. I recommend that one learn at least C++11 (the largest update to happen since the 2003 standard) in order to learn its traditional functionality and to get an understanding of the language’s trajectory. If resources are available for later versions, even better!

This is why I recommend

These can be supplemented with online lecture videos, if one prefers to learn theory that way. While there are many, I find Stanford’s CS106B to be the best.

Assembly

The goal is to gain a rudimentary understanding of how a computer processor works and how to read and write program code. The specific type one learns is less important than might be expected; different architectures have many similarities and share fundamental underlying concepts. Learn one well and you will be well-prepared.

My suggestions:

Web Design

Web applications can be extremely complex, with advanced frontend and backend functionality. First learn how the frontend works. Backends are built with database and API tools and frameworks that can be learned after developing a basic programming skillset.

HTML lists a website’s bare bones, CSS formats it, and JavaScript makes its elements interactive. Learn the basics and you’ll be well-positioned.

I am also a big fan of the w3schools web development page. Unlike many online programming tutorials I have seen, it is so well-laid out that it can serve as stand-alone documentation.


This should be enough to get you started. I wish you luck on your programming journey.

Comments