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.
-
Examples of design philosophies:
- Lua is simple and lightweight
- Java is designed to be highly portable
- AWK specialises in data extraction and text processing
- Rust prioritises memory safety, performance, and reliability
- Python has a large standard library and is very easy to read and write
- PowerShell and Bash are tightly integrated with their respective operating systems, allowing them to leverage system functions for scripting and automation more easily than other languages
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
Regardless of the tool used, code should adhere to a few guidelines.
-
Divide problems into smaller, more manageable tasks, then create a plan to combine them cohesively
- Using pseudocode is an easy way to visualise the process layout without actually needing to write functional code
- Divide modules into separate files for large projects and maintain an organised file structure
- Use consistent naming conventions, delimiters, and spacing to make debugging and collaboration easier
- Comment and document your code; comments benefit developers and documentation benefits users
- Meaningful software strives to simplify complex issues, so find ways to minimise user interaction with repetitive tasks
- If a solution seems convoluted, consider whether a different method exists outside of your current knowledge base to avoid overengineering
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.