Coding
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
- Python Programming: An Introduction to Computer Science, 3rd Edition
- Intro to Python for Computer Science and Data: Learning to Program with AI, Big Data, and The Cloud: It helps students master Python while preparing them for a future where scalability is a core development consideration.
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:
- Violent Python: A Cookbook for Hackers, Forensic Analysts, Penetration Testers, and Security Engineers
- Black Hat Python: Python Programming for Hackers and Pentesters, 1st Edition
- Cracking Codes with Python: An Introduction to Building and Breaking Ciphers
- Mining Social Media: Finding Stories in Internet Data
- Web Scraping with Python: Collecting More Data from the Modern Web
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:
- C++ is backwards-compatible. A C++14 compiler will process C++98 code without any issues.
- 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
- C++ How to Program, Edition 9: Later editions exist but are often overpriced.
- C++ Primer, 5th Edition
- The C++ Programming Language, 4th Edition
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:
- Computer Organization and Design MIPS Edition: The Hardware/Software Interface: The MARS simulator can be used for writing small MIPS programs
- Programming from the Ground Up (x86 Architecture)
- ARM Assembly Language: Fundamentals and Techniques, 2nd Edition
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.
- Learning Web Design: A Beginner’s Guide to HTML, CSS, JavaScript, and Web Graphics, 4th edition
- Web Design with HTML, CSS, JavaScript and jQuery Set, First Edition
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