The TIOBE index is widely regarded as mostly useless for the kind of thing people try to use it for. Their own description of the index shows the problem:
> Basically the calculation comes down to counting hits for the search query +"<language> programming"
That's it. The rest of the definition hinges on weighting the different search engines and deciding what counts as a programming language. So the index is actually just measuring a proxy (search hits) for the number of online pages that contain the words "$LANG programming" in them.
A number of problems become evident with that definition, but most important here is that common linguistic usage patterns in a community have an enormous impact in rating. "Swift programming" may get fewer hits, but "iOS development" is a synonymous search term these days that gets ignored by TIOBE. The same for "Rails" and "Ruby" and "Android" and "Kotlin".
TIOBE is fine as a tool if you understand its limitations, but articles like this rarely do.
Kind of. It doesn't measure search traffic, it measures search results. So I could see it doing that to the extent that fewer articles may be being written in certain communities than before.
Aside from my doubts about the way this is measured, is it even a good strategy to simply chase the currently "most popular" languages?
A few years ago I shared an office with three aged graybeards who sat in a corner and spent 3 half-days per week silently working on legacy COBOL systems. I thought they were something of a joke, and said so when a person with insight into their invoicing was present. They corrected my impression.
Aside from "the right tool for the right job" kind of conversation, there's one inherent aspect to chasing the most popular language (given that you find an actual ranking that's put up meaningfully, which I don't think the TIOBE index is): you may find more people able and willing to work with it, which can sometimes be a feature.
I've been in a company which had a major refactor need, and they took the opportunity to slowly convert their backend from PHP to Go* because they couldn't find any good PHP developer (let alone any willing to work in PHP). For the actual project, it kinda worked, but for the recruitment, it went from not having any applicants / very mediocre people, to having way more people applying, and a few competent ones in that pool.
* As to whether that was the right choice, that's a completely different topic...
Sort of. Chasing the latest everything is always a bad thing. Chasing ONE latest anything may be a good thing. Staying to far back can be a big negative - COBOL may pay the bills, but you will have a hard time hiring someone willing to work with it, and there are some things we have learned since COBOL that really are worth having.
You should always keep an eye out on what is happening elsewhere. Sometimes those things are enough better you should switch. Sometimes those things are better but you should just add them to what you have. If you write COBOL you should be writing the 2023 version today which has a lot of things not in the original 1959 version (what I don't know what since I don't write COBOL).
There is a cost to switching/rewriting everything. There is a cost to whatever downsides of your language/frameworks have. The other language/framework options also have their own downsides - often they are unknown. Most of the problems you are having are not caused by the language, rewriting to a better architecture in the current language would solve a lot of problems (I recommend you put the money for a big rewrite into a refactor in place effort, the costs long term is similar, but you are always shippable which means if budgets are a concern you can scale back and extend the schedule)
If the language is popular that is a big advantage. I can teach you whatever programming language you choose to use, but if the language you choose is popular you can hire "experts" while if the language is unique you will spend years training people before they are experts. This is a big advantage of something popular.
I agree this is not a good strategy, but I found it curious that Kotlin seems to have stalled and maybe is even declining. After all, it really seems what many developers would like Java to be. The article also mentions the existence of better alternatives in the form of some other languages' cross-platform frameworks, but doesn't make any concrete example. Anyone has ideas on which frameworks those could be?
Btw, Kotlin isn't platform-specific as they seems to say in the article, it's cross-platform as well.
It may not be that Kotlin is declining in general but rather mobile development using it (and Swift) is declining which is the dominant case. If we could see non-mobile Kotlin use that would be an interesting trend to see. I imagine some of the adoption and familiarity could carry over to backend uses.
> After all, it really seems what many developers would like Java to be.
As a backend Kotlin developer, I wonder if a lot of the advantages that Kotlin used to have over Java are rendered moot by new features in recent versions of Java.
The TIOBE index is based on search queries. I stopped relying on it years ago, and I imagine this will become less and less relevant over the coming years.
I agree. It would be useful to include additional metrics on things like new/active projects/number of commits/etc. that give a better idea/representation of how active a programming language is.
Search queries will only really reflect news around a language, such as an AI paper, Ladybird announcing it is adopting Swift, a language conference (like Google's I/O conferences referencing Kotlin), etc.
High or rising TIOBE ranking might as well be viewed as a warning sign, like “why are people struggling with this language so much?”
Especially with AI tools integrated into IDEs and able to usually get you over small hiccups with syntax or explaining a language concept interactively and with RAG on the language and framework docs, personally searching through the SEO slop is increasingly a waste of time.
I write Java for Android. But I'm more like jack of all trades, I'm not specializing on Android development. I know Kotlin, but it's too complex for my taste, so I'm avoiding it, Java works just fine.
Actually the same for iOS and Objective C. I learned Objective C like 15 years ago and it didn't change much since then. I also learned Swift the day it was released and I know nothing about modern Swift, it changes so fast. I don't really care. Objective C works just fine for me too.
I still write Android apps exclusively in Java, albeit it's Java 17. The most recent new app I started was in 2022.
I don't know Kotlin and don't want to know it. The one time I had to deal with an app with parts of it in Kotlin, doing anything in those parts felt like coding through molasses.
So, as someone who only knows the basics of the android ecosystem, are you able to compile down to lower target versions and still use the Java 17 niceties?
As I understand it, most people were using Kotlin because the alternative was java 8, and the syntactic sugar made it worth migrating.
Yes. In one instance I used Java 17 in an app that ran on as low as Android 4.2, and it did work just fine on an actual Galaxy Nexus. My current app's minSdk is Android 6. Though there are caveats: you can't use records (because they extend the new class java.lang.Record that desugaring library doesn't contain) and sealed classes (presumably because they require extra checks by the class loader).
edit: records actually work now, with compileSdk set to 35
edit2: and sealed classes now work too. I tested both on a Samsung Galaxy S9 running Android 10, but the decompiled code looks very much Java 6 compatible so it should run on anything
Kotlin really got lucky with Google choosing it for Android dev. While Google is known for relegating some of its tech to the dust bin, Android is too big at the moment. Flutter + Dart was a little surprising though. If they hadn't chosen Kotlin, I couldn't have seen a real path forward for JetBrains. It was basically a much nicer Scala (and I'd argue, a really nice Java) But they keep it locked up with IntelliJ. This, by the way, is why none of us are writing SmallTalk these days. Having to purchase and use a particular IDE is not how we do software these days. (Feel free to tell me how AMAZING IntelliJ is... it's not my cup of tea)
I recently blogged about the developer experience with server-side Kotlin at https://glennengstrand.info/software/coding/csharp/kotlin so you should know that the IntelliJ folks offer a community edition of their IDE that works great with Kotlin. You don't even need the IntelliJ IDE at all. I was able to code up that Kotlin service using VS Code which was also a great experience. Nothing felt limited or dummied down at all.
The entire JVM ecosystem is built around "we all know you're using an IDE, right?" I among most folks who use Kotlin are aware of the Community Edition of IntelliJ. The price isn't the thing keeping me from using it. 1. an employer _should_ be covering that cost. 2. The tools is truly outstanding and well worth the 500 bucks (I'd argue it's not worth 500 bucks a year but...) With all of that said, I really don't enjoy the IDE experience. I do tend to write Kotlin + Quarkus in NeoVim... but the LSP is a volunteer effort. Meanwhile Rust and Go's LSPs are incredibly.
My biggest complaint against the JVM community will alwyas be, "don't expect that we can auto-import... document where methods/constant/imported vars come from".
Nice writeup, but it's kinda meaningless to consider import statements when comparing LOC as they're written for you in both C# and Kotlin. Also, just because the default code style doesn't like glob imports doesn't mean you have to roll with it - Kotlin isn't like Go where there's One True Style and everyone is expected to follow it. You can just turn on import globbing and optimization. That would presumably cause LOC to be much more similar.
Oh no doubt it's my favorite backend way to build an API. Just toss in SpringBoot or Quarkus and it's very nice. The only thing that bothers me is that it's a pain to use with NeoVim.
It always boggles my mind that python is so popular while being so unfriendly and hard to use. Terrible package management. Poor typing system. Useless stack traces. Unintuitive syntax (no ternary operator?!). And yet it has become the default language almost.
I guess the way forward now would be to "make python good". Thank goodness uv is trying.
I personally don't think this "use a dependency for every little thing" npm development style is good for software quality, performance, maintainability, etc. The complaints I see about Python in this regard seem to be coming from that mindset.
Using the included batteries, and just adding a small number of well vetted extras had worked great in my experience.
I like Python of short scripts. Anything over 100 lines and bash is painful. Python works great up to about 50,000 lines of code. Anything larger than that and I need a strongly typed language. A larger number of programs/services/scripts can be done in less than 50,000 lines of code and python is easier than getting those type details right, but as you get bigger than that the effort of getting type details correct becomes well worth it.
The lines of code numbers above are somewhat arbitrary and not a hard block. Instead their are a continuum, the more lines of code you have the harder code is to maintain. Languages offer various things that make it easier to maintain long programs, but they just help, 10k lines of python will always be easier than 10 million lines of Java.
But yeah I can't stop myself from eye-rolling when I'm using python (which honestly is very useful for a lot of data manip that is one-off for my job) and there's just tiny syntax differences for seemingly no reason, like not instead of !, X if Y else Z, len(x) instead of it being a member... it's all very fast to look up, but easy to miss when you're also working in C++ or Rust.
> Kotlin and Swift have declined in the ratings because they are both mainly used for a particular mobile platform, Kotlin for Android and Swift for iOS, Jansen said. There are other sufficiently good languages and frameworks to use for cross-platform development now,
Yeah that sounds about right, native work has been drying up quite a bit in the past couple of years and React Native is all everyone is after, it seems. YMMV
RN also has a very unfair advantage where you can use Codepush to OTA updates, bypassing Apple/Google's reviews (within its limits of course). It's against the TOS, but the store caretakers have no way (or don't want to) of policing apps that do that, so in the end if you do native only - you're playing with one hand behind your back.
And it's not only small devs that do that - all the major automotive manufacturers like BMW (Flutter), GM (React Native), etc do it.
I am curious how much of python’s rise is a result of the data/ai rise and people wanting to be a part of that. Is it being used to consistently build production applications? If the TIOBE is mostly lines of code, which it’s description seems to indicate, are their any other indexes that are something like “production lines of code”?
As a guy who started off as a PHP developer and graduated into a jack of all trades, with only so much time and different types of problems to solve, and before AI, the objective for me has been to economize my learning capacity and not double up on learning languages to solve the same domains of problems.
To that end, I’ve always seen Python and Ruby as similar except Python has all the data goodness and a slightly less popular web framework for which I could always fallback on PHP (Laravel) if I need a web framework that got it all.
Betting on Python a decade ago was a good use of my time.
Depends on what you are doing. Betting on C++ was a good idea for me 20 years ago - but I work in embedded systems where Java wouldn't work because I sometimes need to access hardware. Embedded also means I don't even have a web server, so I have no need for a web framework which the person you replied to seems to find important. I don't know their situation, but there is a large need for people to write web code and so for many people betting on a web framework is a good idea.
I have done enough web to know I'd bet on python over PHP, but only because I know there are several popular web frameworks in python to chose from.
How do you define "production application" though? Customer facing? Running 24/7 to keep systems alive?
Python is great for making scripts, e.g. to process logs or quickly analyse and plot data for example. I've seen so many of these Python scripts and internal apps that are critical to customer support and keeping other systems healthy. They might not be in the critical path but they help with and speed up work.
TFA lists C at number 3 per the Tiobe ranking and the linked Tiobe report has Ruby at #24. I tried to find a different list for comparison as I dont think that is true for projects at large. This project [1] for instance tracks github repositories with Ruby at #8 and C at #9 which is closer to what I expected (both in the top-fifteen, neither in the top-three). At least it confirms my bias, and maybe we learn more about who is being surveyed.
My understanding is that TIOBE is primarily based on number of search engine results. Other results like number of active (a commit within the last 6-12 months) open source repos or number of new repos in a given language are other metrics worth considering. The project you linked seems to be one like this.
A high search rate doesn't necessarily mean high rate of real world usage. Correlating across multiple metrics would be a better way to measure popularity.
Although popularity itself may still be a weak signal depending on your purposes.
There is no way that 23% of production software is written in Python. The TIOBE index, based on search engine queries, is useless.
In Python it is simply possible to create large amounts of flaky software at a rapid pace. People don't care for quality, so the amount of Python software on GitHub and PyPI explodes.
Because everything is basically buggy, people have to search constantly for solutions, which helps this bogus index.
The amount of student questions and AI promotion blogs also helps.
>In Python it is simply possible to create large amounts of flaky software at a rapid pace
Your core point is valid -- python is grossly overrepresented -- but you don't have to (weakly if not ignorantly) shit on Python to make the point. Loads of extremely important, excellent software is written with python. It's actually laughably easy to write performant, extremely robust, quality solutions with python.
But python is searched a lot because everyone is doing trial little AI things to not be left behind.
I don't deny that there are some good packages, but I cannot see that it is easy to write robust software on Python in general, especially with the incompatibilities and bugs introduced between releases. Anyway, for the purpose of the TIOBE discussion new people flooding GitHub with software will likely not have internalized best practices.
Objective-C is a fantastic language. Apple is still writing tons of it. It's the C++ we should have ended up with. Protocol oriented programming is an absolute revelation if you've never been exposed to it before. And being a superset, the ability to seamlessly drop in and out of pure C within the same file is something no other language can do. It also happens to have the most highly cohesive, battle tested, well documented interface libraries in existence for native desktop apps with Cocoa/AppKit/CoreGraphics et.al.
One thing I've found recently is that Obj-C actually works extremely well with agentic coding tools too. Having header files is like a cheat code for them. You don't have to fill your context with implementation code; just the interfaces, and the agent can actually reason about an entire huge codebase.
Apple Spent the past 10 years working on Swift and all of its tools and slowly rewriting Apps in Swift when they could have continue to use Objective-C.
Lots of legacy codebases still kicking around, as well as highly mature Objective-C libraries that don’t stand to benefit a lot from being converted to Swift.
For Apple platforms I write almost entirely Swift these days but Obj-C really isn’t that bad. Every once in a while for uncomplicated personal projects I’ll use it for its simplicity and compile speed.
I am surprised by this to be honest. Though, I have to assume things like React Native, Flutter, etc are becoming more common... Why write all your mobile code twice when you can hire a team that targets both platforms with one shared codebase.
I’m a native developer, I write code twice. The challenging part is not about the code anymore, but lately more on the UI. To cross-platforms good luck on iOS 19 where it’s gonna be all translucent.
I hadn’t thought about it but you’re right. If the iOS 19 UI rumors are true, non-native is going to stick out in a bad way. Even RN apps aren’t going to be spared, because even though RN uses native widgets in parts they still do a lot of custom styling which will look downright broken mixing in with a pseudo-3D visionOS-like UI.
Because you'll still need UX experts for each platform. And people who know how to get through the App Store review. And expertise to handle each platform's quirks, push notification implementation limitations, etc.
Things like ReactNative or <insert cross-platform app dev toolkit here> miss exactly the same point that CEOs firing engineers over LLMs or vibe coders do: the code was _never_ the problem. It's all the domain expertise that allowed you to produce said code.
Do you know how often I use an app that was clearly built for Android, but also happens to run on iOS? Most likely once, and then never again. Because all the conventions are wrong, and it requires more effort than what I'm willing to give it.
Granted, I haven't played around with Flutter so maybe I'm unaware of how good these cross-platform solutions have become, but still.
For apps with any level of complexity you’ll absolutely at some point need to get “under the hood” and have to be able to work with native Swift/Kotlin at some point, likely many times. If you can’t you’ll be at the mercy of maintainers and other contributors who may or may not encounter the same problems you do.
That being the case, the value prop of cross platform UI frameworks is a lot more shaky. Usually the UI isn’t the hard part, and most apps don’t have a ton of complex logic they need to share either (though there are ways to do this, if necessary). At that point why bother with the cross platform UI framework at all? Just skip the extra layer of bugs and write native.
You can still have RN dev focused on Apple nuances, and another for Android? They can work together towards a common goal, what you're also missing with React Native is that the UI is platform specific, the business logic is fully shared however.
My experience is that anyone who is sufficiently specialized in either platform will select to develop natively for that platform over using RN, since RN imposes lowest common denominator UX for both platforms, more or less.
> Things like ReactNative or <insert cross-platform app dev toolkit here> miss exactly the same point that CEOs firing engineers over LLMs or vibe coders do: the code was _never_ the problem
Problems are subjective.
To the people who work on the app and actually use it as a part of their work or daily lives, you're exactly right.
To the CEO doing the firing, the problem is that he wants a bonus because the other guy who founded his startup around the same time is able to afford <insert ostentatious display of wealth here> and he cannot. And in that case, the engineers are the problem because they cost money. Worst case scenario, you fire the engineers, business goes down, and you have to exit for less money than you thought you would. Not like it matters; you were paying yourself insane amounts of money out of the seed money anyways so you have plenty of money to last until the next big idea that Marc Andreessen wants to flush money away on.
... as for the survival of Objective C, I'm willing to bet that there's an entire class of apps for iOS and iPadOS that most of us use every day but barely give any thought to; apps that are the COBOL banking backends of the mobile world. They've fulfilled a purpose at some business since 2012, they're mission-critical, and you gain zero value rewriting them in anything else, so Objective C keeps getting written to add things onto those apps as new features are needed.
I like Kotlin and I use it at $dayjob but I'm not doing Android development, just backend. I'm at a big company and most new code is Kotlin, many colleagues like it too.
Most people think Kotlin = Android, but it would be interesting to know the exact proportion of Android vs the rest of Kotlin developers. Even frameworks like Spring Boot officially support Kotlin, so I think there's a significant user base, maybe too silent.
Kotlin's fame is mostly due to Kotlin Virtual Machine, aka Android.
So as long Android stays around, Kotlin will keep its relevancy.
Same with Swift and iDevices, especially since Metal was the only thing that Apple still bothered to implement in Objective-C first, with Swift bindings.
Now Ruby, well outside Rails I hardly see any demand for it on the circles I move on.
I've had a few hits from recruiters lately that mention Ruby on Rails. My experience in the Salt Lake City valley was that several successful businesses started with that stack and now it's just sort of "entrenched". Some have been working to move to Elixir, but they still have to turn wrenches on the old (money-making) stack. It's kind of created this microcosmic COBOL dev-like niche. We still need folks who know this stuff. With all that said, I do think there are new startups that still choose Ruby on Rails for its quick time-to-market ability. So demand definitely varies by location.
Maybe the fame, but I've only recently taken up Kotlin and... I can't say anything bad about it. Yes, Java is catching up, to a degree, but Kotlin is really nice to use if you're on the JVM anyway. (non-mobile btw)
JVM is built on Java, as is the whole ecosytem, also doesn't help that JetBrains seems to only care about JVM to the extent it helps bootstraping Kotlin own ecosystem.
Except for Android, there are no JVM implementations that take Kotlin into consideration.
The beauty of kotlin is they don't need to.
I use kotlin on the backend (never did android development). It's amazing. Better version of java than java. Use any and all java libraries transparently (there's nothing to change or do), heck you can even have the java and kotlin in the same codebase (something I haven't really done, but tried it for fun)
Java and Kotlin both compile down to .class Java bytecode.
Suspend functions appear as regular JVM methods with an extra Continuation parameter. Tools like runBlocking make them straightforward to call from Java.
My main point was that you can use Java code as is without modifications from Kotlin, and that if you wanted you could have Java code in your project and it will work just fine. Of course if you wanna start calling co-routines from the Java part of your project to the Kotlin part, hey that's up to you.
There is, but lacks all the nice tooling Objective-C and Swift enjoy for Metal development, it is only there for game developers to integrate Metal into their C++ engines, without dealing with Objective-C++.
The only place C++ has really first class treatment on Metal is a shading language.
The only way for Ruby to survive is to continue to improve. While I understand Matz's insistence no backward compatibility. I think the JIT part should actually be a testing ground to drop support to certain features.
Yes. That's surprising. Community events for Free Pascal have been very healthy and growing. Some old people from the community have died in recent years, but somehow even more new people showed up. It's not big, but the community of Delphi and Free Pascal is very active.
I just had this same thought this morning. I sure do with OCaml was far more popular. Right now, if you're planning a startup, you want something that you can just snap together a bunch of well-tested libraries. You want DB libraries, S3, message queue stuff, Kafka stream stuff. OCaml does have a lot of these things but they just aren't well known. If they exist, they're just poorly documented. This is why people opt for Java/Typescript/Ruby/Python. It's easy to hire devs, and the tools they'll use are fairly well understodd.
OCaml suffers greatly from a lack of unified practice. There's a YouTube playlist, a Udemy course... an Apress book and those two other ones with camels on the cover. That's about it for stock OCaml. If you want to learn Jane Street flavored OCaml, there's Real World OCaml.
I agree with you. Just have a clear structure and onramp for building stuff. Go and Rust seem to have a lot of the attention, there is room for Ocaml also, especially if it was as clearly and simply defined. (I have a sneaky suspicion it fits in that 'cloud native' space quite well) I am sure that the maintainers and architects see that also, they have made great strides the past few years and I hope they bring it together.
Ruby seems to continue to exist largely because of Shopify. If Shopify didn't have some dogmatic religious zeal about Ruby because of the beliefs of the founder(s), it seems likely it would have faded into irrelevance.
Popularity aside, I have been feeling lately that cross-platform and familiarity are reducing in importance. LLMs make it easy to pick up something new. Maybe "right tool for the job" will win more often over "familiarity".
> Basically the calculation comes down to counting hits for the search query +"<language> programming"
That's it. The rest of the definition hinges on weighting the different search engines and deciding what counts as a programming language. So the index is actually just measuring a proxy (search hits) for the number of online pages that contain the words "$LANG programming" in them.
A number of problems become evident with that definition, but most important here is that common linguistic usage patterns in a community have an enormous impact in rating. "Swift programming" may get fewer hits, but "iOS development" is a synonymous search term these days that gets ignored by TIOBE. The same for "Rails" and "Ruby" and "Android" and "Kotlin".
TIOBE is fine as a tool if you understand its limitations, but articles like this rarely do.
https://www.tiobe.com/tiobe-index/programminglanguages_defin...
reply