Programming: Which OS, Language, Platform, Framework, Library, Is Best?
I am asked very frequently about which OS, language, platform, framework, library, IDE, and or whatever other kind of tech, is the best choice for new developers. Some more frequent questions lately have taken the form of:
- Should I write native, web, or hybrid applications?
- Should I write my own solution for concurrency or should I use a framework to handle that?
Ultimately, we are asking the same question regardless of what we are talking about: What is the best choice to make?
An expert in their field, or someone who simply pretends to be one, may give you a specific answer. Hopefully, they also give you their rationale for the choice:
- Technology A performs better than technology B
- Framework D solves problems in a simpler way that using framework C
- Language E is more concise and legible than language F
With that being said, even true experts (who back their opinions up with thousands of hours of practice instead of relying on opinion polls) do not necessarily know what the best choice is for you.
Therefore, I will try to play the role of a teacher who will give you a method to examine your own situation to find the best choice for you.
A Simple Analogy
This analogy may be simple, but it is very carefully chosen. Suppose that you are in a store looking at two tools:
- A flashlight (or “torch” as they call it in the UK)
- A box of matches
Also suppose that you only have enough money to buy one of these tools, and so you must make a judgement on which tool is the best choice. Knowing this, you decide to ask the two employees in the store what their opinions are on the best tool.
Employee A, points out that matches can be used as a light source and you can light a fire with them if you need to. On the other hand, a flashlight can also be used as a light source, but it will not help you to light any fires.
Upon hearing this, employee B, who is a real expert in flashlights, says that a flashlight is overall a better light source. Further, in an emergency there is actually a way to break the glass bulb of the flashlight, without breaking the filament, which then allows the flashlight to be used to light a fire.
Employee A, while not an expert, is a rational thinker, and points out that it might be very difficult to break just the bulb and not the filament, and the flashlight will not work so well as a light source even if you do manage to turn it into a fire starter.
You consider yourself lucky to have met people with common sense and direct experience with the different tools, but in a way, all this information has not actually given you a clear answer on what the best tool is. You are forced to attach to one opinion or the other, and it is clear that both sides have good arguments.
The Wise Teacher
You notice that there is an old person in the store as well, who has been passively listening to your conversation while they shop.
You decide to ask the old person what they think the best choice is, and the old person replies:
It depends on what I am using it for, and the conditions in which I will be using it.
If my goal is to travel through a forest during night time, then I would choose a flashlight.
If my goal was to spend the night in a forest, I would choose the matches.
If I did not immediately have a goal or job to do which required a light source or a firestarter, I would choose to save my money and go buy lunch instead.
Returning To Software Development
A good teacher points out how to make decisions well, as opposed to making the decision for you. This does not mean that we ignore expert advice or common sense, but it means that one must know that any particular piece of advice is correct, useless, or bad depending on the situation at hand.
Many of you reading this are beginners, and I would be kind of a jerk if I did not address some specifics I would consider regarding the things I spoke of in the title and introduction.
Which OS Should I Pick To Write Applications With?
This is quite likely the least important thing to consider, unless you have low powered computer or a bad internet connection. You can write beautiful code on any modern operating system (and many old ones too if you really wanted to). Most major IDEs (a program you build programs with) have distributions available on all major operating systems (Linux, PC, Mac).
Even if you decide you want to do iOS development but you only have a cheap and low powered PC, you can rent a virtual Mac environment, log into it, and use it remotely through a network connection. Learning to overcome difficult obstacles is a skill that is critically important to any software developer (and by extension something which brings value as an employee).
As a beginner, I encourage you to pick an OS you are comfortable with, and adjust as you better learn what is necessary to write applications of your choice. There is no need to be dogmatic.
Which Language Should I Pick?
Internet “gurus” love to make bold statements about this based on little evidence. Usually the content has a title like “BEST PROGRAMMING LANGUAGES 20 — ,” and the individual will give a long list of anecdotal reasons, backed up by opinion polls from one website or another. Well folks, just because witch hunts were popular in the dark ages, did not make them a good idea.
Again, I am not saying that the popularity of a language is irrelevant, but you need to understand that unless you pick a language which has absolutely no commercial or research value, then you will probably be able to find some work.
People say things like PHP is dead, but a friend of mine happens to be a tech lead working with Drupal projects, who gets paid well and enjoys his work. Also, the idea that enticing and modern languages like Kotlin will completely supplant Java as the primary JVM language anytime soon, is just ridicululous. If you doubt this, simply pour over job postings and be confronted with hundreds and hundreds of positions for Java developers, even though the language is 25 years old.
The only specific thing I will tell you about which language to pick, is that you need to follow what interests and practically makes sense for your situation. I picked Java and Android back in 2014, because:
- I had some limited experience with Java before then
- I had a PC
- I had an Android phone
- Apple wants you to pay them 99$ a year to sell apps which they take a cut from anyways
- I knew I wanted to make mobile apps that I actually wanted to use
Learning any language (within reason) will transfer to your ability to write code in almost any other language. This is because all high level programming languages are ultimately boiled down to the same digital circuits quite regardless of the operating system. In other words, it is perfectly okay to switch to another language in the future, and you should probably expect it to happen as a natural progression for your work and studies. That was my experience anyways.
Should I Choose A Native Solution Or Go Multiplatform?
This question in particular is INCREDIBLY SUBJECTIVE. If an absolute beginner asked me this, then I would suggest that now is not the time for you to be worrying about multiplatform support.
However, if you want to try building a web, Android app, or iOS app using a language or framework that supports multiplatform development, then that is perfectly okay. Just understand that you, as a beginner, need to focus mostly on building your core skill set as a developer and your fluency with the language.
Multiplatform development, which is something I have a bit of experience with, is almost never as seamless as the framework authors make it sound. You will have to solve hyper-specific implementation, configuration, and platform specific limitations. These problems can be hellish to fix, which is something I feel you ought to be worrying about after you develope your core skills.
In the end, that is just my opinion directed towards a generalized beginner student; maybe you are a super genius who can juggle all of those different problem domains and still make good progress.
Stop worrying so much about making a decision (paralysis by analysis) and just start writing some ****ing code.
Social Media | Support
This article was written by Ryan Michael Kay. I am a self-taught programmer/engineer who creates educational content for on a wide variety of topics, on a wide variety of platforms. The best way to support me is to follow me on various platforms and join in with my developer community (we have hundreds of members!):
Tutorials & Courses:
Free Tutorials, Live Q&A, Live Coding:
Java Desktop Programming w/ JavaFX (Intermediate) — https://skl.sh/31pzCa1
Complete Beginner Introduction To Java Programming (Beginner — Intermediate) — https://skl.sh/3fZbjos
Android Apps With Kotlin & Android Studio (Beginner) — https://skl.sh/2ZU6ZT9
Material Design Android Programming w/ Kotlin (Intermediate) — https://skl.sh/2OrwrYZ