The Top Programming Languages 2023
spectrum.ieee.org
spectrum.ieee.org
And JSON, since it looks like programming spaghetti.
It is like comparing the popularity of HTML vs. CSS.
English is Turing complete and is meant to be processed by a human or AI compiler, but you wouldn't compare it with Javascript.
For example, search Indeed for software engineer jobs and filter by programming languages. Last I checked JavaScript had far and away the most results. And it becomes clear why - basically any web development position requires it. Python + JS, C# + JS, Ruby + JS, JS (node, ts, etc) + JS, etc.
Again, it depends on how you define “popular.”
Essentially, it's a weighted metric of:
* Number of google search results for "X programming language" (w/ quotes)
* Number of questions asked about the language last month in StackOverflow
* Number of academic publications that mentioned "X programming" last year
* Number of job postings (on two different sites)
* Github repository counts (based on stars or recent PRs)
* Number of books published last year about said programming language
* Number of discords tagged with said programming language
I suspect they are looking for keywords in job titles and missing the fact that iOS development = Swift just as Web development = Javascript.
assuming not a Microsoft employee on the Excel team
Additionally, SAP cloud supports extensibility via containers and Web APIs.
Ladder logic is not "old fashioned tech." It is by far the most commonly used language in American manufacturing. Nothing beats it for allowing the onsite techs to easily debug the machine at 2am.
There is a hidden economy of programmers who often don't realize they're programmers. They're hidden inside every industrial facility, maintaining machines that use ladder logic to control their functionality in PLCs. And the ones I've met are generally brilliant at it.
I was watching as one such person modify the program running a machine. "How do you deploy the change?" I asked. "Deploy? No, this is live. Every change I make is happening immediately."
- A decent type system, which makes it better than Python, JavaScript, R
- Runtime errors with good stack traces instead of UB for things like invalid casts or null dereference, which makes it better than C++
- Automatic memory management without complex borrowing rules, which makes it (arguably, for some situations) better than Rust
- The JVM targets many different platforms and Java programs often “just work”, which makes it better than Swift
- Decent abstraction, which makes it better than Go
- Large ecosystem, which makes it better than Dart or Nim or Zig
- C#? I’m not sure, C# is a lot like Java. IMO what Java has which is better than C# is Kotlin and better JetBrains support
Now Java isn’t perfect. In fact I prefer Kotlin (always), Rust (despite the increased difficulty), and Swift (if the platform allows) as general-purpose languages. But unlike those, Java is one of the ancient big languages everyone knows about, and compared to the others (JavaScript, Python, C++) it’s the best general-purpose language by far.
All because of politics.
Odd statement. Take away spring boot and Java would shrink more.
Isn’t that a but like saying “Take away all that enterprise stuff and Java would shrink more?”
but if thre's one thing that embodies complexity for the sake of complexity its java.
java is also pragmatic. you're less likely to lose hair using java than python.
but java sucks -- you've a lot of "come-from" statements that you can't easily grasp the code. maybe it's me just being a dumb mofo
I'm old, and so are Python and SQL.
SQL is also the second oldest language in top the 20, after C. Hell, the only languages older than SQL on that list overall are C, Fortran, Lisp and Assembly
I mean, not Lisp/COBOL old, but old.
And under jobs, J is 0.02 vs. Rust's 0.0162. I have a better chance of getting a J job? Cool.
Not at all true.
> we use it to read/write to a data store.
Reading and writing a datastore is programming, but, no, that’s not the only thing SQL (including its standard, and various proprietary, procedural modules/extensions) are used for.
Top 15 PL are Python, Java, C++, C, Javascript, C#, SQL, Go, Typescript, HTML, R, Shell, PHP, Ruby and SAS.
Python doesn’t just remain No. 1 but it has managed to widens its lead in 2023 at the expense of smaller, more specialized languages. It has become the jack-of-all-trades language and has found its niche in AI, where powerful and extensive libraries make it very popular.
For PL job ranking, SQL is No. 1 skill but to get proper jobs it must come with Java or C++ skill.
Java and the various C-like languages, however outweigh Python in their combined popularity for high-performance or resource-sensitive tasks where Python is slow.
Very specialized languages like R and Fortran are still very popular perhaps due to their hard to replace reputation in legacy systems.
So it’s not one or the other.
I have thought ML Phd students that mostly used Pandas in Python about SQL, and they where a surprised about the similarities (and the additional power with combining them)
Now that is a name I haven't heard in a long time. Long long time.
Java… yeah, lots of legacy code and large corps. Fine.
But C++? I can see why C might be up there due to the embedded world, but is C++ really more popular than JavaScript? I’d expect JS to be at the top of the list, and meanwhile it’s only about twice as high as GO? I like Golang, but ask ten software engineers and maybe one has used it, whereas it’s unlikely you haven’t used at least some JS.
My gut tells me that this list isn’t very meaningful.
You've just imagined reality.
If it's anything like tiobe, they give bonuses for vendor offerings, which gives languages like c/c++/fortran legs up for most domains that aren't web development. Robotics, embedded, scientific computing, etc.
Or at least I've never seen a js vendor offering that wasn't for web development.
I guess this is because the typical IEEE member is a scientist, not a web developer.
Sure, but it all boils down to what exactly is ranked right? "Percentage of programmers that has used at least some of this programming language." is probably not a criterium.
https://docs.flutter.dev/resources/faq#should-i-build-my-nex...
SQL is Turing complete. Standard SQL may not have been before SQL:1999 (though proprietary query and procedural extensions made many concrete implementations Turing complete), but both CTEs and procedural code (SQL/PSM) were added as part of the SQL standard in SQL:1999, and either one alone would make standard SQL Turing complete.
Otherwise, it’s a language that has picked up pace in the last few years and is not laying still (Java 17 and now 21 for example, but also AOT compilation with graalVM, etc).
End of '90 to mid 2000, Java was the go-to language for everything, from browser applications (applet), to coffee machine, to enterprise applications. It is cross-platform, and was free before oracle bought Sun Microsystem.
It's also the language of devellopement of Android.
It's even Turing complete (not that a programming language needs to be)
It's just not a general purpose programming language like e.g. Python/C/Java/etc
Unlike it seems almost everyone else replying here, I'd say it is a query language and not a programming language.
Maybe an artificial distinction, but I don't think of SQL statements as programs.
The argument of “it’s a mark up language” tends to not hold weight for me as when I ask people why they say “because it’s in the name” - which, for me, misses that HTML is considerably more developed now than when it was named and should be measured on the current feature set.
It’s not a hill I’d want to die on though so really, it doesn’t matter.
That said, I think SQL, CSS and maybe HTML are the only ones that are a league of their own, that is, you could get a job as a pure CSS or SQL programmer.
Definitely completely clear that nobody would start any major projects in C++.Python being described as a jack-of-all-trades and master of some is a really succinct way of explaining it's dominance. One of my kids is about old enough to start learning to program. At this point, I can't see a reason to teach her anything but Python.
I remember when I was a TA teaching CS 101 with C++. People constantly stumbled with types and compilation. Just the concept of storing a value in a variable and retrieving it again was too much for some people.
That is where Python will shine for youngsters. Variables, control structures, functions. I bet they will get to the point on their own when they’re like “what’s the deal with numbers and letters being different”? and then you can take their hand and say “grasshopper, you are ready to learn about C/integers/ASCII/floating point”.
I like JS for it’s node_modules solution. In python you end up with libs conflicits and segfaults that you cannot debug unless you are deliberate about deps management.
The reason not to teach Python is the same reason you'd use for preferring home-cooked meal to McDonald's take-out. And I'm saying it as a parent who has to compete with this food enterprise... I think, I'd be a horrible parent if I didn't allow any McDonald's food ever, but I certainly don't encourage it.
Similarly with Python: if you want to give your child something good: there are plenty of options that are better than Python. But, Python will be the inevitable garbage they will have to face due to its popularity. It would be counter-productive not to prepare the next generation to deal with it.
Playing stupid games with someone's ego and the ability to self-assess is a sort of insidious evil. Just to give you as an example, a story of one Polish naive artist who was led to believe he was a big deal by some newspaper publishing an article about him. It was in the 80s, I think, when the world went through an infatuation with naive art phase (again). Excited about the newly-earned fame, the guy applied to Krakow's art academy, and... was basically laughed out of it for not being a "conventional" good craftsman. He committed suicide short afterwards.
In a less dramatic way, the other thing that comes to mind is the scene from Kung Pow! Enter The Fist, where the protagonist was "taught wrong, on purpose, as a joke". I cannot imagine telling someone who knows nothing about programming that Python is a good way to do anything or to learn anything. It's just a pile of trash made popular by the network effect. If anything, anyone with a drop of common sense should work hard to prevent the next generation from using it.
Agreed. If you start in any other language, you'll be spending less time teaching programming and more time teaching the language.
Java in particular, because the fact that it's so verbose and has so much boiler plate, I think, is actually good for a new programmer.
class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
to start a nice journey into programming, right?
https://medium.com/@shwetha.hey/java-21-no-more-public-stati...
Also you can do
new {
System.out.println("Hello, world!");
}But I had to look after your comment and Java can cope with no package declaration! https://stackoverflow.com/questions/2335211/what-is-the-defa...
There are also different ways things can be hard. Some things are hard to understand once -- and then once you understand, no extra effort is required. You just go around knowing it. Some things could be hard because nobody can explain them to you, and you will be running up against the wall trying to figure them out. Some other things are hard because they are always in flux. You think you've understood them, but the next moment someone is pulling the carpet from under you, and you have to start understanding them all over again.
I still remember my disappointment, for example, when after second semester of automata theory, we ended up constructing "mini machines" -- short sequences of instructions that could be combined to build bigger programs. And then we went straight to Java. There was no continuity. Nobody cared or even could explain how, if you wanted to build from the first principles could you get Java. The step between "mini machines" and Java was never explained. There was no explanation for why should Java have such and such feature, or what would have happened if it hadn't etc.
People are masters of reconciling inconsistencies, and not in a good way. When something doesn't make sense, people will masterfully invent some cooked-up nonsense to replace the real explanation. And this is the case for most CS majors. When you ask them questions about basic things about their trade, what you hear back is some laughable excuse of an answer. We have several generations of programmers today who grew up with this nonsense, internalized it, made it into a cult. Python owes its popularity, in great part, to these generations of programmers with missing foundations, lacking ability of critical thinking which led to bizarrely distorted view of the world.
As someone who's day job is mostly Python, not off the top of my head, but I could probably find out if it was ever relevant to my work (finding information about Python is quite easy, which is one of its social strengths), which it would almost certainly not be, because in normal use of Python modules, it doesn't matter.
> How many facts like this one do you think exist?
Trivia that's irrelevant to most use of the language? Lots. So what? That doesn't make actual use hard.
> I still remember my disappointment, for example, when after second semester of automata theory, we ended up constructing "mini machines" -- short sequences of instructions that could be combined to build bigger programs. And then we went straight to Java. There was no continuity. Nobody cared or even could explain how, if you wanted to build from the first principles could you get Java. The step between "mini machines" and Java was never explained.
I can see why that might, to some tastes, make that course of study intellectually unsatisfying, especially if one both had an obsesssive need to see the whole picture but not the drive to do the obvious work laid out, implicitly, fior the student, but it seems like a non-sequitur when discussing whether or not Python is hard.
None of those things matter to a beginner, what's important is minimizing friction, so they can actually learn programming without having their curiosity rewarded with a flood of compiler errors. Python is fantastic in that regard. No need to define a main function, no need to care about signed/unsigned int, printing out the contents of an array or dictinary directly is a single statement that won't just output a heap address, etc.
And when they learn about more advanced stuff they will understand why many languages do things differently, and Python will still be very useful for small scripts and prototypes.
That's where you are wrong. Beginners don't know that these things matter to them. But they very much matter.
> so they can actually learn programming
But they won't. They will become the "water from the toilet" idiots. Whatever they learn how to do will have no value, if they don't know how to do it well. Accidentally I saw this article today about how US military lowered IQ requirements for draftees during the Vietnam war, and how people with low IQ were five times as likely to die. You are suggesting to do thing wrong in hopes that it's somehow if you do it fast, nobody will notice? -- hell no. We already have armies of programmers who believe in strict static typing or in object-oriented programming. This will just add more idiots to their ranks.
Could you specify why they matter for a beginner? Because I've been using Python for quite a while and I can't answer your previous question about what specific Python version did that subclass attribute change. I think by the time such a detail comes up a "beginner" is already comfortable enough with the basics to learn about it. But in Python those basics tend to be more straightforward and riddled with less boilerplate and redundant syntax than in many other languages, which is nice because getting slowed down by those things when learning is frustrating.
> You are suggesting to do thing wrong in hopes that it's somehow if you do it fast, nobody will notice?
I'm suggesting that reducing friction in the first phases of learning programming is a worthwhile improvement and that the choice of language matters in this regard, nothing else. I didn't say a word about learning an entire language or learning programming up to the point which you call "knowing how to do it well".
> We already have armies of programmers who believe in strict static typing or in object-oriented programming. This will just add more idiots to their ranks.
Am I reading this correctly that you think relying on strict static typing is for idiots? Because I made the experience it's very helpful for maintaining code, in addition to other best practices of course.
This is, IME, not a function of what language people learn with first (ot second or...) but of their personality and desires. Most people who learn programming learn it as a means to an ends (often the latter is a paycheck) and will learn only as much as feels like a good payoff for the effort in that context. This isn't the fault of the language they start with, its just human nature.
You can't fix that things you thibk everyone should know about programming, and should want to know, actually don’t make sense to bother learning given most people’s actual utility function by using a different first language.
I think that for teaching, you can go too far and eliminated too much friction. In python in particular, there's all this type stuff going on under the hood that's absolutely critical in understanding what the output of your program is going to be, but nowhere in that program is it explicit what that type information is.
It's easy enough to keep track of that in your head once you've mastered the concept, but for a true beginner, I think
int x = console.nextInt(); String operation = console.next(); int y = console.nextInt();
is probably better suited for helping you get your bearings than having to figure out why you have to cast x and y after doing
x, operation, y = input().split()
If you're trying to train somebody to be a software engineer, rather than just automating a particular data entry task as quickly as possible, I think boiler plate is good. It's better to force the details on the person at first than to have them be hidden, automatic, and mysterious forever.
I actually returned to JS scripting after a long hiatus thanks to Deno. And now like the language a lot more.
Lua also integrates with C extremely well, so it can help with that transition.