Programming quickstart for Nada
Choose your speciality
Backend development
The code that runs on the servers, connects to databases, sends, receives, manipulates and stores data, serves connections etc. Options:
- Python: very versatile and easy to learn.
- JavaScript / TypeScript: traditionally used on the frontend and in Web browsers, but it can also be used on the backend (node, bun, deno...).
- Pro: both the backend and frontend code can be written in the same language.
- Java or Kotlin: very popular options for large business applications.
- C#: similar to Java, but developed by Microsoft. Mostly used on Windows Server environments, but it can also run on Linux/Mac with Mono.
- Rust: increasingly popular to build reliable and fast server-side applications, gradually replacing the role of C and C++, but harder to learn because the language is very strict in order to increase safety.
- Go: similar to Rust when it comes to purpose as philosophy, but a bit easier to learn (and with a purposefully minimal syntax). Developed by Google.
- C and C++: traditional programming languages, born in the 1970s and 1980s respectively, very used for server code until very recently, but gradually replaced by Go and Rust - the programmer needs to take a lot of care about memory issues when they write code, or they may produce unstable or unsafe code.
- PHP: very popular language for Web applications (examples: Facebook, Wordpress), but its popularity has been declining over time - it makes larger projects hard to handle.
- Ruby: similar to PHP and Python when it comes to purpose, mostly used for Web applications. Several big projects are built in Ruby (Mastodon, old version of Twitter...), but it's becoming less and less popular. Most of the work on Ruby is work on old projects.
Web frontend development
The code that runs on websites, or on computer/mobile applications that are based on Web views. Most of it uses JavaScript or TypeScript (which is basically the same thing as JavaScript, but more strict on type checks to make sure that the code is stable). But there are many competing frameworks that allow you to do things faster:
- React: the most popular option.
- Angular: it used to be very popular until a few years ago, still popular in some applications, but very heavy and a bit harder to learn.
- Vue: another very popular option (and the one I personally like the most too).
- Svelte: popular within some contexts, similar to Vue but lighter and more pragmatic
- jQuery: older and more minimalistic framework, but still popular, especially on older Web apps
Plus, the two must-learns:
- HTML: the bread and butter of every Web page. It is not technically a programming language - it's a markup language. It doesn't produce code that can run programs, it says which elements are on a Web page and how they are organized.
- CSS (and extensions like SASS/SCSS): the language used to specify the style of the elements in a Web page. It's also not a programming language strictly speaking, it's a language that describes how elements should be rendered (color, size, position, animations...).
Desktop app development
Build native apps that run on your Windows, Mac or Linux PC. This speciality however is slowly becoming less relevant, as many apps nowadays have become Web apps designed to run on desktop too.
- C# or other other languages from the .NET framework (J#, VisualBasic.NET, ASP...) on Windows.
- ObjectiveC or Swift on MacOS.
- Python, C/C++, Go or Rust (with frameworks like Gtk or Qt).
- Java or Kotlin.
Mobile app development
Build apps that run on phones and tablets. Options:
- Java or Kotlin for Android.
- ObjectiveC or Swift on iOS.
Data science
Data analysis, data mining, data visualization, AI etc. Options:
- Python: very popular, easy to learn, and with a lot of libraries for data science.
- R: popular and easy to learn, but gradually replaced by Python.
- SQL: a must learn. The language used by most of the databases out there (MySQL, PostgreSQL, Oracle, SQLite...).
Other useful tools
- Git: version control system. All the code you write should normally be "version controlled" (and committed to a repository), so that you can always go back to a previous version if you need to, or to share it with someone else.
- Docker: a containerization system that allows you to run code in a virtual environment (with the same code running on multiple different machines at the same time).
- Bash: the "language of the terminal". It's a little programming language that allows you to run commands from the terminal.