Programming Languages to Avoid and Learn in 2022.
Things I didn’t know when I started coding.
Motherland | मातृभूमि | ମାତୃଭୂମି | જન્મભૂમિ | মাতৃভূমি | الوطن الأم | mère patrie| 祖国 | ojczyzna | Heimat | Родина | 모국 | tanah air |
We speak so many languages but, how many do we actually CODE in?
It is hard to choose just one programming language which is
- in demand in job market and
- will continue to be in —
- that too with a high pay scale,
- developer satisfaction and
- productive! Yes.
and it’s not always that easy to pick one, never will be, :(
there will always be some trade-offs (or is this even a right question to ask?)
“because no programming language is perfect!”
one is easy to learn but sometimes slow(Python),
one is easy to learn but has a tiny userbase and hardly any libraries (Nim)
one is very fast but a bit hard to learn(C/C++),
one is incredibly fast, but incredibly hard to learn (NASM)
one is verbose but in demand(Java/C#),
one is made by Google(Go/Dart),
One is everywhere but no one talks about it because it’s favoured by script kiddies (PHP)
“Languages need hype to survive; I just wish people didn’t have to be blinded by it.”
you get the feel, right?
A SHORT OVERVIEW:
This article is my personal opinion. Every language is as good as a tool, it’s just how you, the developer, use it.
You probably won’t finish this article. In fact, I may have already lost you
- to another tab in your browser.
- Or an email from your boss.
- Or a ping from a coworker.
- Or any number of other digital distractions that have come to define your modern life.
[The below recommendations are for the context of the United States, United kingdom, and other 1st world and some 2nd world (Russia, and neighbours, etc) countries. Scroll down for Indian and Chinese context.]
YOU SHOULD LEARN:
- Python — easy to learn, backend, ML, data science, data visualization, scripting, hacking, automation, education and finance sector, web scraping, adoption continues to grow.
- Dart — One codebase for Android, iOS, Web App, Windows, macOS(beta), Linux(beta) application, embedded systems (unstable), servers → Flutter.
- C# — Platform agnostic, simple, general-purpose language, desktop, console and web application, windows and web services, game development, VR, AR.
- Go — Solves scalability issues, simple elegant code, easy to learn, the language of the cloud, DevOps, backend, servers, microservices, DNS, cloud native development. (Uber, Netflix, Docker, Kubernetes, Soundcloud, Prometheus)
YOU SHOULD CONSIDER LEARNING:
- Java — In high demand worldwide, big data, android, finance, databases, system software, testing tools, enterprise king, the core language of industry-standard tools like Apache Kafka, spark, hive, MTLAB is Java based, distributed apps, IoT, Hadoop, etc.
- R — statistics, ML, Data Visualisation, fintech, research, retail, automobile industry, but slow and data-intensive.
- Kotlin — server-side, client-side web and Android, (embedded systems, macOS and iOS is coming), gradle plugins, microservices, smart-contracts, backend, data-science.
Swift — Develop for anything that has on it (iPhone, iPad, macOS, watchOS, tvOS and apps for all of them) versatile, simplification of existing native app development methods, productive than obj-C
- Rust — memory management, systems programming, Linux kernel, game engines, operating systems, file systems, browser components and simulation engines for virtual reality. Takes a little time to learn(relative to Go). Good pay.
- Others → C and Julia.
YOU SHOULD NOT CONSIDER:
- Ruby — webApps, automation (WATIR), scraping, servers, DNS, but better tools are available now. (Sidenote: Github, Gitlab are written in Ruby on Rails framework, and still the first choice of many startups for easy MVP and fast deployment).
- PHP — PHP originally stood for Personal Home Page, but it now stands for the recursive initialism, Hypertext Preprocessor.
→ Desktop GUI, web backend, lacks good debugging tools (compared to other languages), relatively low pay, still extensively popular, tough competition from java, E-commerce and public websites King. [Earlier versions of PHP paid less attention to security features, presently, it’s as robust as any other language]
- C++ — bridge between LLP and HLP, memory unsafe, game engine development, OS level, embedded, fintech, trading, compilers, browsers, VMs, can be frustrating to work with. (Visa, Mastercard, Amex all use C++ for their backend system). Do not consider C++ if gaming and hardware programming does not interest you.
- Super-new and very niche-specific languages which do not have a healthy community.[For more on that, please refer to the end of the article]
[Edit: Java is promoted to the ‘You should consider’ section after consideration with industry devs. ]
Truffle Framework, Hardhat Framework, Brownie Framework, OpenZeppelin SDK, Chainlink SDK.
FOR INDIAN CONTEXT:
- Java — Most in-demand language according to Indian Job Market, Safe bet.
- C++ — Use it for Data Structure and Algorithms and Competitive Programming (at Codeforces, Codechef, Topcoder, SPOJ, etc and participate in Hashcode, Kickstarter, Codejam, Hacker Cup, ACM ICPC, etc)
FOR CHINESE CONTEXT:
- Java [29.28%]
- C++ [16.08%]
- C# [10.95%]
- Python [8.21%]
- Go [6.94%]
- PHP [5.19%]
- Matlab [1.48%]
- Lua [1.28%]
- Swift [0.83%]
Source here, [xx%] indicates the percentage of developers using that language per 100 dev.
You have a very slim chances (if you are a fresher) to directly land your first Job if you just know :
1. Rust, but not C++
2. Go, but not Java
3. Kotlin, but not Java
4. Swift, but not Objective-C
5. Julia, but not Python
6. Dart, but zero experience with any native app development language.
You all won’t agree with me on this but thats okay!
Just have a closer look at the Job description of companies who hire folks who know cutting edge technologies, they will have “must have 1–2 years of experience working with [the-language-which-you-hate] language”
People claim PHP runs the world,
The following are certain categorisations of languages, please have a look,
Based on different Programming Paradigms
Object Oriented Programming Language
Procedural Programming Languages
BASIC, C, PASCAL, FORTRAN, Go
Functional Programming Languages
Scripting Programming Languages
- System Administration: BASH, PERL, Python.
- Linux Interface: BASH
Logic Programming Languages
PROLOG, ASP(Answer Set Programming), Datalog, and Coq.
HTML, XHTML, RTF, TeX, LaTeX, Markdown, YAML, XML
“Learn one Object-Oriented Programming Language and one Scripting Programming Language.”
Go, Lisp, Scheme, OCaml, Haskell, Eiffel, Erlang, Rust, Clojure, Elixir, etc., that have cool features that you’d love to use in production but would never.
OOP is a style of coding. Some languages are opinionated, as in, they force you to use a specific code style. Typescript is not opinionated in that sense, you can use typescript to write object oriented code, but you can also write functional or imperative code.
Based on Runtime Differences (Language Characteristics )
Dynamically Typed Languages
Statically Typed Languages
C, C++, Java, Typescript, Go, Haskell, Kotlin, Rust, Scala, Swift, OCaml, Delphi, ReasonML,
Both Static and Dynamic (Gradual Typing)
Dart, C#, Clojure
Open Source Language Compilers
C(gcc), C++(g++), C#(.NET, used to be closed), Java(JVM), Python(PVM), Go, Kotlin(JVM), Julia, R, Scala, Dart, Swift, Free Pascal Compiler(FPC, using Lazarus IDE) practically every famous language.
Closed Source Language Compilers
Matlab, MSVC++, ABAP, SAS, Delphi, VBScript, Microfocus COBOL, LabVIEW, IDL, PL/SQL
“A programming language isn’t open-source or closed-source as such. Its compiler and run-time libraries can be closed-source.”
Automatic Garbage Collection
Manual Garbage Collection
C, C++, Rust, Delphi, ReasonML, Fortran, Pascal, Zig
Swift and Objective-C have optional garbage collection.
C, C++, Erlang, Haskell, Rust, Go, COBOL, Delphi, Haskell, Julia, Swift, Obj-C, Scheme, Fortran
Types — Just-in-time (JIT, Tracing just-in-time), Ahead-of-time (AOT), Transcompilation, Recompilation.
Compiled to Virtual Machine Languages
Other VM — C#, F#
JVM Languages — Java, Clojure, Apache Groovy, Scala, Kotlin
Note: Most programming languages can have both compiled and interpreted implementations.
“Compiled languages can be dynamically typed too!”
This mean that on an average, one(1) line of python ~ six(6) lines of C.
Languages with starting array index of 1 and not 0.
- APL, COBOL, Fortran, Julia, Lua, Matlab, R
- ALGOL 98, AWK, CFML, FoxPro, Lingo, Lua, Mathematica, PL/I, RPG, Ring, Sass, Smalltalk, Wolfram Language, XPath/ XQuery
Based on Application (Where it is used)
For Mobile App Development
- Native-Platform — Java or Kotlin (Android Studio), Swift or Objective C (Xcode, for iOS and macOS)
Special Mention — Delphi(Android, iOS and desktop apps).
For Web Development
- DevOps — Go, Python, Bash
- Elm and ReasonML are functional, compile-to-js languages.
- Before Angular, React and Vue, the world used Backbone.js and Ember.js
For Game Development
For Desktop App/Software Development(Windows/Mac/Linux)
C# (.NET framework), Delphi, Dart (Flutter), Swift(XCode), C++(Qt), Python (Kivy, Tkinter)
For AR/VR/Metaverse Developers
For Systems Programming
Go, C, C++, Rust, Erlang
For Artificial Intelligence/Machine Learning/Deep Learning
For Data Science and Analytics
Python(Scrapy, Pandas), R(ggplot2, dplyr), Julia(Flux, Mocha.jl)
For Big Data
Java(Apache Hadoop, Hive, Storm), Scala(Apache Spark, Kafka)
Python, Bash, PHP
Automotive Industry — C/C++
Healthcare — Python
Marketing — SQL
Science — MATLAB
Embedded System — C/C++
Linux Programming(Kernel) — C, Rust
Cloud and web APIs — Go, Elixir(Phoenix, ecto)
Finance — F#
Before I tell you some of my recommendations, consider these THINGS in a programming language first:-
- Type System (Static or Dynamic?)
- Learning effort (approachable by beginners?)
- Nulls (Why are null references bad?)
- Error Handling (Catching exceptions is a bad way to handle errors?)
- Concurrency (Processors will not get any faster, utilize multi-core computing)
- Immutability (it’s data that doesn’t change)
- Ecosystem/Tooling (good libraries may save months of development effort)
- Speed (How fast does the language compile?)
FAST — Go, Rust, Elixir ← | → SLOW — Scala, Python, C++
- Age (generally, newer languages will be better than older ones)
- What about runtime footprint? Nothing beats C in that case, and C (not C++) is actually a very high productivity language.
- You shouldn’t worry about language performance in advance — that’s a premature optimization.
- Programmer time is very expensive, so pick a language that makes the best use of programmer time.
and now decide for yourself, you have enough context.
Possible Combos to learn:-
- Python and C++
- Go and C#
or any other combination of LHS and RHS.
Do not forget to learn SQL or any sort of NoSQL language. (any 1)
Note: Choosing a language and going all-in based on assumption that it is going to be the future of computing is nothing but premature optimization. Don’t fall for this trap.
People are very protective and often defensive when it comes to discussing certain technology, architecture and most of all Programming Languages, so it is a sensitive topic.
If you ask me for 1 single answer (or opinion),
- for mobile- flutter(dart)
- for backend — django(python)
- for frontend — react(jsx)
- for AI/ML — python
- for enterprise — close your eyes and ears and learn Java
- DS Algo interview — python
- for game dev — C++
- for hardware — C
Based on StackOverflow Trends (What’s hot)
I get it, trends can’t always paint a true picture but at-least gives a rough image.
Based on Google Trends (What people are searching)
Well again, these trends do not accurately define the job market or industry trends. You can even get a good job coding in COBOL which you hardly see being used.
look at this picture below carefully, do you see a red eclipse around a seemingly unpopular language? — yes, that’s Rust for you.
If it stands out why not Rust (or Go)?
This is why more and more programmers are adopting other more modern languages — the top players being Julia, Go, and Rust.
Julia is great for mathematical and technical tasks,
while Go is awesome for modular programs,
and our Rust is the top choice for systems programming.
Turing-complete languages. Heard of them?
→ Turing-complete languages are those languages that can be used to simulate any Turing machine. Virtually all programming languages today are Turing-complete.
One more chart,
and more please…
Let’s talk Salaries: (How much we get paid)
Average salaries too, doesn’t paint an accurate picture. Don’t get swayed away.
These trends can be misleading, so do not base the superiority of a language based on how much the developer of that language earns in a year as this survey does not mention if they were senior developer or entry level or intermediates. Too wrong for a conclusion.
I confused you right? Sorry! :(
Let me simplify it here for you, a universal solution.
→First, figure out what are you really interested in (web development, AI/ML, mobile and/or desktop apps, infrastructure, automation, cybersecurity, game dev, etc.)
→ Then narrow down to a specific niche, (e.g. iOS development, or in the web dev world it could be “building websites that convert for small to medium businesses”.)
→ By the time you’ve chosen your specialization, chose a language, as I mention above about almost every language.
→ Don’t worry too much about bank balance, what is paid well is your expertise and ability to solve real world problems for that specific niche — whether it’s small websites for regular folks or the engineers behind Cloudflare or Google. The better you are at it, the higher the pay and demand. Don’t follow the trends blindly. Yes.
A little history about popular programming languages.
Not necessary, but good to know which era programming language you are still using. Feel free to skip ahead.
1951 — Regional Assembly Language
1957 — FORTRAN (first compiler)
1958 — LISP
1958 — ALGOL 58
1959 — COBOL
1962 - Simula
1964 - IBM Basic Assembly Language
1964 — BASIC
1964 - PL/I (Programming Language One)
1969 — B (forerunner to C)
1970 — Pascal
1972 — C
1972 - Smalltalk
1972 - SPL
1976 - S
1978 — SQL
1980 — C++ (as C with classes, renamed in 1983)
1984 — MATLAB
1985 - Eiffel
1986 — Objective-C
1986 — Erlang
1987 — Perl
1990 — Haskell
1990 — Python
1991 — Visual Basic
1993 — R (influenced by S, 1976)
1995 - Delphi
1995 — Ruby
1995 — Java
1995 — PHP
2001 — C#
2002 — Scratch
2003 — Scala
2006 — PowerShell
2007 — Clojure
2008 — Nim
2010 — Rust
2011 — Elixir
2012 — JuliaOther new programming languages include Red, Crystal, Elm, Hack, Haxe, Zig, Reason, and Ballerina.
“C is the closest language to modelling how computers work, Lisp is the closest to modelling how computation works.”
Meanwhile, back on Planet Earth…when you were busy living life, these tech giants made some cool programming languages!
2009 — Go
2011 — Dart
2011 — Kotlin (developed by JetBrains, supported by Google)
2012 — P
2012 — TypeScript
2017 — Q#
2019 — Bosque
2021 — Microsoft Power Fx
2014 — Hack — Facebook
2014 — Swift — Apple Inc.
Tech giants develop languages primarily to solve their own problems (and not for charity), some even plain copy another already popular language in the market (Microsoft copied Java to make C#, also, Microsoft’s Bosque is very similar to Google’s Go).
Languages evolve slowly because they’re not really technologies. Languages are notation.
Learn just enough and start making something. You’ll find out which languages you need as you go along.
You might have heard everyone say just master one language, true but usually only a few follow this advice, the rest of us jump from one buzz tech to another.
Mastery of one language means knowing :
- how APIs are built or any other use cases that language is built specifically for,
- how to send a different kind of request (GET, POST), concurrency and parallelism related features,
- how memory is managed, how to optimize intermediate assembly or bytecode for performance and things like that, classes, objects, etc.
These things hardly differ between programming languages.
E.g — Go and Java are very similar in this respect.
Keep an eye on Tech: —
- Web Assembly (WASM)
Some popular saying in the Programming World —
- The inventor of C++ STL was on record as saying he hated OOP.
- Java is the most distressing thing to happen to computing since MS-DOS.
— Alan Kay, the inventor of object-oriented programming.
- “C++ is a horrible language… And limiting your project to C means that people don’t screw things up with any idiotic “object model” c&@p.”
— Linus Torvalds, the creator of Linux.
- “I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.”
— Alan Kay, the inventor of object-oriented programming.
- “With OOP-inflected programming languages, computer software becomes more verbose, less readable, less descriptive, and harder to modify and maintain.”
— Richard Mansfield
- “I think that large objected-oriented programs struggle with increasing complexity as you build this large object graph of mutable objects. You know, trying to understand and keep in your mind what will happen when you call a method and what will the side effects be.”
— Rich Hickey, creator of Clojure.
- “I’m sorry that I long ago coined the term “objects” for this topic because it gets many people to focus on the lesser idea. The big idea is messaging.”
— Alan Kay, the inventor of OOP
- “I think the lack of reusability comes in object-oriented languages, not in functional languages. Because the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.”
— Joe Armstrong, creator of Erlang
- “I’ve learned a painful lesson, that for small programs dynamic typing is great. For large programs, you have to have a more disciplined approach. And it helps if the language actually gives you that discipline, rather than telling you, ‘Well, you can do whatever you want.”
— Guido van Rossum (creator of Python)
- “If you look at the history of programming languages, a lot of the best ones were languages designed for their own authors to use, and a lot of the worst ones were designed for other people to use.”
— Paul Graham
- James Gosling (Java) even said, a few years ago, that if he had to do it all over again, he wouldn’t have used interfaces.
- React was not made for TypeScript. React initially was made for a functional language.
There’s a conflict between programming paradigms:-
TypeScript is OOP-first, while React is functional-first.
React expects its props (i.e. function arguments) to be immutable, while TypeScript has no proper built-in support for immutable data structures.
- In C++ we don’t say “Missing asterisk” we say
“error C2664:’void std: vector<block,std: allocator<_Ty>>:push.back(const block &)’: cannot convert argument 1 from ‘std:: Vector iterator<std: Vector val<std:: Simple_types <block>>>’ to ‘block &&’”
and i think that’s beautiful.
Here’s something for PHP lovers.
And finally, a question for you.
“American technology companies want the government to make immigration easier because they say they can’t find enough programmers in the US.
Anti-immigration people say that instead of letting foreigners take these jobs, we should train more Americans to be programmers. Who’s right?”
Both? Answer in the comments.
If you are financially stable, you can show your support to me here, that’d be great.
(only and only if this article provided value to you in some way) https://www.buymeacoffee.com/zriyansh
“Buy me a coffee” is a global platform where people like you support creators like us and artists, financially.
I hope you got clarity out of this article. I have taken the feedback from valuable critics in improving this article. I love and thank them all.
I’d love to hear your thoughts about (I missed something?) this, so feel free to reach out to me on LinkedIn or Twitter or respond in the comments below but first ask yourself a question, (hopeful) If I told you to jump off a bridge, would you do it?
Do reach out, I would love to talk to you.
— If this article helped you in any way, consider sharing it with 2 friends you care about.
Follow me (if you think I am worthy like, Thor)
Turn on email notifications (totally your consent, so that you do not have to come here).
Till then stay alive.