Introduction to Programming

In any conversation, all participants must understand the same language to communicate effectively. Machines relay instructions as electrical inputs that alternate between states of being on or off. This transaction is referred to as a binary state, which is a condition where only 2 states are possible. Binary code (machine code) represents these states as either 0 (off) or 1 (on) and is the most fundamental representation of a language that a computer can execute directly. However, it is not very human-readable.

Programming languages are an abstraction of machine code using words, symbols, and structures that are easier for humans to read and write. Assembly is the language used most often to abstract binary mnemonically.

As an oversimplified example, the operation code 00000011 in binary is written as ADD in Assembly.
In C, a language derived from Assembly, this is simply written as + and is often the syntax in other languages as well.

Most modern programming languages are built upon C and categorised into low-level, mid-level, or high-level languages based on their level of abstraction from machine code. Some common languages include:

Choosing a Language

The best programming language for your first or current project is one that has a design philosophy aligned with what you're trying to achieve. Experienced developers typically use multiple languages and treat them as specialised tools, as each one was originally created to solve specific problems. Some are designed to improve upon and even supersede older languages, while others arise as a natural response to advancements in computing technology, providing solutions to new hardware and software requirements.

Higher level languages trade performance and control over hardware resources for relative simplicity, making them a good starting point for beginners and easing the process of learning more complex languages later on. Most of them are also interpreted, which allows for faster code iteration as changes are reflected immediately, further lowering the barrier to entry.

Interpreted languages are translated into machine code concurrently with execution.
Compiled languages are translated into machine code before execution, which leads to faster execution times and improved performance.
Just-In-Time (JIT) compilers offer a compromise by initially interpreting the code, then compiling and storing frequently used sections for faster reuse.

Python is a common first language recommendation because it's very easy to understand, has "batteries included", is supported by a vast ecosystem of external libraries, can be executed in both interpreted and JIT runtime environments, and is used in many different fields.
However, C is extremely valuable due to its low-level nature and as a foundational building block that many other programming languages, including Python itself, are based upon.

Suggestions

Software developers often use an Integrated Development Environment (IDE) because they include features such as an embedded terminal, syntax highlighting, code completion, debugging tools, version control, plugins, and more. Some specialise in particular languages, while others strive to be more agnostic. Ultimately, any tool that supports text editing can be used for coding, and features beyond that are merely conveniences that may or may not enhance your workflow.

Some popular IDEs

Language
IDE
Any
SQL
C, C++
Python
Java, Kotlin
PHP, Javascript

Regardless of the tool used, code should adhere to a few guidelines.

Getting Started

The most effective way to learn a subject is by putting it into practice. Reading documentation or even educational articles such as this one can provide essential information, but the given examples rarely align exactly with what you're trying to do. Modifying those examples so that they work with the problem at hand creates a much more thorough understanding of how it all works. Programming is all about problem solving, so find a problem that you have and solve it.

Personal anecdote My experience started with Bash by automating routine tasks at home such as software updates, data backups, and system deployments. One job at the time involved data entry, so I automated most of it with Bash and AWK to reduce repetition and human error. Learning DaVinci Resolve eventually resulted in working with Lua and Python through its scripting API, which supports creating tools that extend the software's capabilities. Building this website required becoming familiar with HTML and CSS.

Official documentation should always be the first referenced resource, but not all software is documented equally nor is it guaranteed to contain examples that are easy to follow. Introductory articles from this website will be linked here as a form of basic language directory once they've been written.