How To: The Novice Guide to Teaching Yourself How to Program (Learning Resources Included)

The Novice Guide to Teaching Yourself How to Program (Learning Resources Included)

Today's post is a small go-to guide for beginner programmers in Null Byte. With many of our community members picking up programming from our Community Bytes, it only makes sense to lay out a one-stop guide for your reference. Hopefully this guide will help you make an educated and thoughtful choice on what programming languages you want to learn, and how you want to learn said languages.

The question has come up in the forums already. What programming languages should I learn? Well, a good friend of Null Byte once said that a programmer should learn a compiled language, an interpreted or high-level language, a scripting language, and machine code.

If you are very new to all of this, I bet you're asking, "What do these types of languages even mean and why should I learn so many?". To answer that, I'll need to explain what each kind of language really is, and list examples of each. From there, I will guide you to great resources to learn the languages that pique your interest.

I Want to Learn How to Hack! Why Is There So Much Programming?

Hacking and programming are nearly one in the same. Don't get me wrong, there is a lot more to hacking than just code. However, when you learn how to code, you are taking the computer and making it do what you want. You are learning what makes it tick. Only then, when you understand how things work, you will have found that you have already become a hacker.

Note: If you need to make a programming environment for yourself, check out this great guide from Null Byte.

Types of Languages & Free Resources to Learn

Binary

The mother of computer languages, binary is as simple as it gets (in terms of logic, not actual simplicity). The 1's and 0's that make up binary represent a boolean integer for on and off. These are grouped into octets called bytes. Each byte can be up to 256 different combinations (0-255). These are assigned registers and values, and are interpreted by computer programs.

Binary Resources

  • Here is a simple binary tutorial. It will provide all you need to understand the basics. It's far simpler than you may think.

Machine Code

Machine code (or assembly) is code that speaks directly to the hardware. Each processor type has an instruction set that it uses to understand commands given to it. This results in code that can be executed with nearly 0 latenecy. Programs execute as fast as your processor capabilities allow when you program machine code using assembly.

Machine Code Resources

  • A great book to read, especially if you are new to programming and assembly, is Programming from the Ground Up. This book will help you understand how computers work, as well as their processors. Then it takes you into coding in ASM assembly.

Compiled Languages

Compiled languages are languages that are written in a code syntax, such as C/C++. They are run through a compiler, which turns them into machine code executables. This may make you wonder why we even use assembly. Well, an elite hacker who is a mentor of mine has always taught me that the compiler takes shortcuts—and for perfect, fast, clean code, you must code it yourself and "outsmart" the compiler.

C/C++

Considered a mid-level languate, C/C++ is probably the most popular programming language and usually the most favored among skilled coders. It is very fast, but can be hard to understand. You probably shouldn't start with this.

C/C++ Resources

Haskell

Haskell is strange, but the people who learn it tend to be very amazing programmers. It is a purely functional language, which means that in general, functions in Haskell do not have side effects. There is a distinct type for representing side effects, orthogonal to the type of functions. A pure function may return a side effect, which is subsequently executed, modeling the impure functions of other languages.

Haskell Resources

  • There is a beautiful answer on this Stack overflow page on how to go about learning Haskell.

Java

Java is a great language. Comparable in ways to C/C++, Java uses its own interpreter and compiler that runs across all operating systems to execute its byte code. This mean it is completely portable. Java is also a very fast and lower-level language, so it's great to have in your arsenal. Many jobs hire programmers with experience in Java.

Java Resources

Interpreted Languages

Interpreted languages are languages that are commonly scripted and then run through an interpreter. The interpreter processes the script as machine code. This allows code to be short and elegant, but takes up a lot more precious resources.

Python

My personal favorite, Python is a fast, simple, clean and user-friendly programming language that focuses on user readability. This makes learning Python easy and very fun.

Python Resources

  • How to Think Like a Computer Scientist, Python is a great book to get started in Python. It gives you analytical tips on tackling tough programming problems. Even a little bit of artificial intelligence is taught at the end where you make a program that actually learns!
  • TheNewBoston has tons of great vTutorials that will walk you through learning Python.
  • Learning Python takes you from the beginning of learning Python, to the elite. It is a very long, but complete book to becoming a sage with Python.
  • DiveIntoPython is a pre-exposed programmers tutorial for Python. If you can trudge through it and understand it as a beginner, this is by far the best way to learn the language. The book teaches perfect coding habits and syntax, right up-to-par with the Python standards.

Perl

Perl is similar to Python in many ways. Its syntax is slighty more difficult, and it is less powerful than Python in some areas. For that, I reccommend only learning it to read and hack other coders' Perl scripts.

Perl Resources

  • The Perl website has a free book and loads of other resources right there, which also happen to be some of the best.
  • Learning Perl is an extensive book and Perl's counterpart to its Learning Python cousin.

PHP

PHP is an important language on the internet. Nearly every website uses this language to perform scripted tasks, such as parsing information from a database. It can also be used to code fun things like IRC bots! Learning PHP is essential to learn if you want to be a hacker, because most websites on the internet use PHP, and to exploit it, we must learn it.

Resources

  • The official PHP documentation is the best place to learn PHP, in my opinion. Learning from something like the PHP bible can be far too overwhelming, and a lot of the information provided could be irrelevant to beginners, or make little to no sense.

Ruby

Ruby is a dynamic, reflective, general purpose object-oriented programming language. It is a popular language to learn and was also used to code the Metasploit framework and many of its payloads.

Resources

  • The Ruby Learning site has some great information that you can use to learn to code in Ruby, but it costs money. However, the best choice in my opinion, would be Learn Ruby the Hard Way. This is an awesome, free learning resource to go from programming newbie, to Ruby-ninja.

Shell

Learn BASH/ plain and simple. Windows users rarely need to use the terminal. However, Mac and Linux users can benefit on a large scale if we all got together and learned the terminal. This can make repetitive takes a cinch with a script! If you have a webhost, it is likely they will run Linux, so why not make your life easier and just learn it now?

Resources

  • The best guide to BASH and just managing your computer from the terminal would probably have to be The Rute User Tutorial. I really can't stress how great this book is, so please do not forget to pick it up if you plan on learning shell commands.

If you have any questions about programming, ping me, or any of the other helpful people on Null Byte!

Get Involved!

Just updated your iPhone? You'll find new emoji, enhanced security, podcast transcripts, Apple Cash virtual numbers, and other useful features. There are even new additions hidden within Safari. Find out what's new and changed on your iPhone with the iOS 17.4 update.

Image via ninjasofcode

11 Comments

Awesome PDF, didn't have that one yet :P
The BASH book is in a strange format, that throws frequent errors at me :S Will take a closer look at that sometime I'm not playing skyrim XD

I'll remember this page for learning java! A week ago I started HTML again, and I really forgot how much fun it is to code something cool! I am having troubles editing the class path variable thing, (whatever allows me to just do javac {file}) I can't seem to make it work right. Would an update to the most recent JDK help? Do any IDE's do that automatically or with a script that refers directly to the JDK folder instead of the command line?

You just need to make the "name" of your class the same as the name of the file and javac should work fine.

Oh my God, thank you SO MUCH. This is PERFECT!

Haha, you're welcome!

another python tutorial from google code. i haven't gone through it yet, i'm doing the learn python the hard way exercises right now.

http://code.google.com/edu/languages/google-python-class/introduction.html

Does anyone have recommendations for making learning to program exciting or interesting? I did some HTML and BASIC(TI-84) in high school, and the BASIC was fun for a little while but HTML got dry real fast.

The only way is to code things that you want to code, and learn what's needed along way, though this method has various flaws in its methodology.

I gotta say: C and C++ should be separated, because the creator of C++ -- Bjarne Stroustrup -- often has insisted that one should not write C code in a C++ program, and vice versa.

Holy crap! This might be the very best article I've ever seen on here. Very nice job. Should have way more upvotes

Share Your Thoughts

  • Hot
  • Latest