Note: This post was revamped on July 10, 2025
If something is off in this post, you’re free to leave a reply and let me know.
There’s a large number of programming languages, and there’s no single programming language that you should learn - it’s often determined. The programming language you should learn is based on which programs you’ll be writing.
1. Python
Python is the most popular programming language in the world, known for its simplicity and ease of use. It was released in 1993. It is a scripting language, supporting object oriented programming, both weak and strong typing, and cross-platform support.
Python is so easy to learn that even people at young age who are new to computer science are being taught to code in this language.
Example of a Python hello world program:
print("Hello, World!")
Semicolons are optional.
print("Hello, World!"); # works
print("Hello, World!") # works too
Example of writing text to a file:
with open("myfile.txt", "a") as file:
file.write("Hello, World!")
To get started, see the official tutorial.
For an IDE, I recommend JetBrains PyCharm or Visual Studio Code (with the Python extension installed).
USE:
- if you’re new to computer science and getting started with coding
- to learn how coding works
- to write simple scripts to do basic things (i.e. for productivity, testing or demonstration purposes)
DON’T USE:
- for low level code
- when performance is critical. Python is slow since it’s interpreted
- for real world apps, Python is not made for that
2. Assembly
Popular amongst players on ORE who create their own CPU, Assembly is highly primitive. Mostly, Assembly involves writing direct CPU instructions in a textual form. It also supports other features like labels and strings. However, the features of the Assembly language are highly dependent on the assembler. In general, syntax for CPU instructions and labels can define the Assembly language.
The CPU instructions are dependent on the CPU architecture for which the Assembly code is being written. Example for x86:
myLabel1:
mov eax, 20
jmp myLabel2
myLabel2:
add eax, 40
hlt
Any IDE can be used for Assembly - even Notepad, since there’s not much of an indentation required.
Assembly should not be used in real-world apps, unless there’s a deep low-level optimization or it’s related to a low-level operating system component.
USE:
- for deep low level code
- where performance is critical
- to write programs for your Minecraft redstone CPU, in case you built one
DON’T USE:
- for real world apps
- where stability and memory management is important
3. C
Also popular amongst players making their own redstone CPUs, C is a compiled, low-level language with strong typing. It doesn’t support Object-Oriented Programming (given that it’s a language from 1972).
C compiles directly into machine code, making it perfect for performance.
It does come with its own downsides, though. Developers writing C code often need to manage memory carefully, given pointer support which, when not used carefully, can actually access wrong data in RAM, causing a segmentation fault as the operating system’s memory protection feature kicks in. However, for writing low-level or performant code, it can absolutely benefit.
Example of a Hello World C program:
#include "stdio.h"
int main(int argc, char *argv[]) {
printf("Hello, World!");
return 0;
}
C is also platform independent. Often times, you’ll import external OS libraries and import functions from them. On Windows, you might have to import Kernel32.dll, whereas on Linux, you’ll have to use ioctl.
Example of writing C code to make a Beep sound on Windows and Linux:
#if WINDOWS
#include "Windows.h"
#elif LINUX
#include <fcntl.h>
#include <linux/kd.h>
#include <sys/ioctl.h>
#include <unistd.h>
#endif
int main(int argc, char *argv[]) {
#if WINDOWS
Beep(500, 700); // Kernel32.dll
#else
int console_fd = open("/dev/tty0", O_WRONLY);
if (console_fd == -1) {
perror("open");
return 1;
}
int freq = 700; // Frequency in Hz
int duration = 500; // Duration in ms
ioctl(console_fd, KIOCSOUND, (int)(1193180 / freq)); // Start beep
usleep(duration * 1000); // Sleep
ioctl(console_fd, KIOCSOUND, 0); // Stop beep
close(console_fd);
#endif
return 0;
}
C typically isn’t used for real world apps unless it’s a performance-critical or low-level scenario.
USE:
- for high performance code
- for low level code
DON’T USE:
- in real world apps
4. C++
Initially a C extension, C++ is highly similar to C - except that it adds object-oriented programming support. It’s popular for writing real-world apps. It also compiles into machine code directly.
Example of a C++ program:
#include <iostream>
int main() {
std::cout << "Hello, World!" << endl;
return 0;
}
C++ simplifies many complexities of C. For instance, it adds std::vector for arrays, std::string for strings without direct pointer management, object oriented programming, and much more. This is why it’s favored when programming real-world apps - all of this, without losing on performance.
To get a C/C++ compiler, you have many options - but I recommend MSVC (Windows-only) or GCC (cross-platform).
USE:
- for real world apps
- for high performance code
- for low level code (if you use the so-called Inline Assembly)
DON’T USE:
- if platform independency is important (you don’t want to add extra logic if you’re willing to compile your C++ program against different platforms like Windows, macOS, Linux, or FreeBSD)
- if manual memory management is painful
5. C#
C# is a popular, object-oriented, open-source and C-like programming language. It’s also compiled, but not directly into machine code - but its own machine code called CIL (Common Intermediate Language).
It offers great performance and can be used to create basically anything - from video games, to desktop apps, to websites, to even IoT/embedded devices.
It was Windows-only, until 2016, when C# finally had cross-platform support. It can now be used to write platform-independent code that runs on Windows, macOS, Linux, Tizen, Browser, webOS, Android, and iOS (potentially even more).
Example of a C# program:
Console.WriteLine("Hello, World!");
C# is highly popular amongst desktop, web, IoT/embedded devices, and video games.
It is worth noting that C# isn’t suitable for low-level code since it compiles to its own bytecode.
USE:
- for modern, flexible apps that can target multiple platforms with platform independency
- if automatic memory management is comfortable to use (although C# partially supports manual memory management too)
- if performance is comfortable enough, which there’s not much difference besides from C++
DON’T USE:
- for low level code
- where performance is highly demanding
6. Java
Java is a popular, object-oriented programming language. Like C#, it’s compiled to its own machine code - Java bytecode.
It’s also cross-platform. While it’s closed-source, there are popular alternatives like OpenJDK which are open-source (even Minecraft uses them).
It can be used to write platform-independent code that work on Windows, macOS, Linux, Android, iOS and more.
Java is also iconic for being able to write Minecraft mods.
Example of a Java program:
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
USE:
- if performance is comfortable (Java’s performance is great but much slower compared to C#)
- if you’re willing to write platform independent apps, especially those targeting Android
- if you’ll ever write Minecraft mods
DON’T USE:
- for low level code
- if you need great performance (try C++ or C# f that’s the case)
7. Kotlin
It’s similar to Java - but refined.
Introduced by JetBrains in 2011, Kotlin compiles directly into the same bytecode as Java, and uses the same architecture as Java - but with refinements, such as support for data classes, null safety, extension functions, and more.
It is worth trying Java before learning this programming language.
And because Kotlin compiles into Java bytecode, you can also make Minecraft mods with it - which is exactly how some of the ORE features are written.
USE:
- for all the same reasons as Java
- if you tried Java before and you’re not a fan of it
DON’T USE:
- for all the same reasons as Java
8. JavaScript
JavaScript is the default language for writing websites.
Example of a JavaScript script:
console.log("Hello, World!");
If you’re new to web technology, it would be beneficial learning JavaScript first. If you have any web browser - you already have everything to run JavaScript code.
The most popular IDE for writing JavaScript code is Visual Studio Code.
USE:
- if you’re willing to write websites (Note: Although other languages like C# or Java do support writing websites too, they’re often server side, whereas JavaScript can run on client side. If you’re more comfortable with using C# or Java to write websites, you could consider using those languages.)
- if performance isn’t a concern
DON’T USE:
- if weak typing and lack of OOP is a concern (try TypeScript instead!)
- for low level code
9. TypeScript
It’s like JavaScript, but refined.
TypeScript adds strong typing, null safety, refined object oriented programming, types, and more.
TypeScript is neither compiled nor interpreted - it’s transpiled. In essence, your TypeScript code is converted into JavaScript before execution.
TypeScript can make writing JavaScript significantly less painful, but it’s worth learning JavaScript first.
USE:
- if you’ve tried JavaScript before and you need OOP and strong typing
- for all the same reasons as JavaScript
DON’T USE:
- for all the same reasons as JavaScript
So, which programming language are you choosing?