There is a widespread tendency in technology to discuss specific programming languages (and their frameworks) with open contempt. Who hasn’t heard people scoff at how stupid PHP is, how backward Java programmers are, and how criminally short-sighted C++ users are?
Nothing infuriates me more than this open gatekeeping, this active bullying. Putting people down is not valid technical criticism: its only goal is propping oneself up as part of an elite in-group. It is blatantly exclusionary.
Discussing technology should be a dialogue driven by compassion and respect. Not putting in the effort to understand why people made a particular choice, what constraints drove them to it, and most importantly, what lessons you can learn from them. Borrowing the expression from a friend, you are being arrogantly ignorant.
Knee-jerk criticism considered harmful
Gatekeeping is the act of denying people access to resources that you have access to. When you derisively denounce a programming language as wrong or harmful, you are framing its users as stupid and incapable; you are implying they are not worthy of working in technology and should leave.
Such statements show a screaming lack of empathy: everybody starts as a beginner and tries to make the best of what they know — you certainly did, not that long ago. A person learning to program at a young age on their personal computer, with parents in engineering, and then attending a prestigious school is just as worthy of being a programmer as someone attending a boot camp at age 35 and then hustling WordPress themes. Expecting the latter to know about dependent types because the first had the opportunity to work at that level of abstraction is shortsighted at best; privileged, and entitled at worst.
PHP is one of my favorite languages, not just because I got into web programming in the wayward days of PHP2, but because of how empowering it is to beginners. When you write PHP, you always have a running website — the language feeds and sustains your motivation. Fighting pip, setting up a remote environment in WSL, and having to learn vim is why many people drop out or feel they don’t belong.
With the widespread adoption of WordPress, you can, in a very short amount of time, become a professional developer: building websites for local businesses, selling themes and plugins on its marketplace, or joining one of the many consultancies and freelance marketplaces. It is hard to stress how transformative this can be for marginalized communities and people in countries outside of western Europe and the US. PHP and freelancer.com allowed me to go from making sub-minimum wage to being able to make rent in an afternoon.
PHP changed orders of magnitude more lives than Haskell.
Gatekeeping as the actual technological sin
People write code trying to operate to the best of their capabilities. They make choices according to what they know, the industry's current state, the constraints of the problem they are trying to solve, the pressures of the market, and their personal lives. Viewed through these lenses and given how wildly successful these technologies are shows how capable and driven their users are.
The only valid reason to publicly criticize a decision is when it purposefully harms people or was made by someone who fully knew that there was a better choice but chose not to for personal gain. I often went for architecture choices that I thought were not perfect: out of time pressure; to help a colleague grow by having them make their own choices; so I could hire from a broader, more diverse community.
Rejecting a programming language outright makes you a poorer technologist. It closes you off to huge, vibrant, diverse communities. The lack of humility causes you to miss the creativity of engaged, practically-minded users. You might never experience the quality of their tools and how good their documentation and onboarding can be. A tool with 200,000 users and 500 contributors will quickly become better than something maintained by 3 people in academia. Beginners who get pull requests on their project in the first week promptly improve their software engineering game.
Being dismissive shows that you are missing the larger context of being a programmer: building products, turning concepts into reality, and working and interacting with others. A programmer is much more than a code monkey narrowly defined by their choice of technology.
By poo-poo-ing these popular languages and frameworks, not only are you keeping people from becoming better professionals; from having access to the knowledge and resources that you have—you are actively stunting your personal growth.
You are staying ignorant out of arrogance.
Instead of criticizing, engage and share
Of course, valid criticism is essential and healthy. While everything is a matter of choice and compromise, some options are better than others; some decisions are obvious mistakes (in hindsight). Learning new languages and approaches is an essential path to growth.
Criticism is valuable when everybody participates in good faith, with mutual respect. One should criticize concrete, technical points—critique shouldn’t be aimed at people and why they made a particular choice. Core contributors to languages such as C, Haskell, Typescript, and PHP have candid, deep, and respectful conversations. They know they each come from a different background, embrace each others’ choices, and know they can learn from them.
Instead of putting a language and its users down, consider how you and your interlocutors can enrich each other's lives. We all love programming, working in tech, and learning. If we understand that we each have our journey, skills, motivations, successes, and struggles, we can all make better choices in the future.
I will forever remember the day someone on IRC praised me for my janky PHP website and told me that I would enjoy “Structure and Interpretation of Computer Programs” by Abelson and Sussman, which transformed my career. Had they told me I was an idiot, that PHP sucked, and that I should be ashamed for having written such blatant SQL injections, I might never have gotten to where I am today.
The next time you feel the urge to criticize something or someone, take a breath and reflect on where that urge comes from: do you want to feel superior, or do you genuinely want to help someone?
We should all aspire to make technology more welcoming — the best way to do so is to approach every situation with humility, compassion, empathy, and a love of technology and its communities.
If you think you know better, then act like it.
Top comments (41)
This is just wrong. There are hundreds of reasons for using a bad programming language like PHP: Working on legacy software, being more familiar with the language, simply not knowing any better, having a need for certain language features, etc.
Making a statement about a language is not the same as making the same statement about its users, and acting like it is risks completely derailing the conversation.
Again, this is just wrong. Nobody should have empathy with a programming language. Thus starts the aforementioned derailing.
I have little to add to this, other than saying that I 100% agree. How you end up in programming is nothing more than an interesting story to share with fellow developers, not a sign of how good or bad you are at what you do.
And this is where the entire argument starts rolling downhill again. First of all, it is entirely dependent on context whether someone needs to or should be expected to know about these things. If you don't need it for the job, regardless of whether you've spent 20 years in academia or have stacked bricks until two years ago, then there's absolutely no reason to expect that you should know a thing.
But of course there's another side to this too: Thanks to the internet, everyone has access to this information. Universities aren't magical; all they really offer is make the decision of what information you need to learn and offer an environment for people to learn.
Being self-taught is not an excuse and it shouldn't discourage people from just looking these things up and learning them. On the contrary, our effort should be focused on demystifying these more "academic" concepts.
The problem isn't that we keep people out for not knowing certain things. It's that we keep them from learning these things when they absolutely could.
Not only is this a very short-sighted oversimplification, even if you narrow it down to just the financial impact these languages have had on developers, it's not like PHP has achieved this success through its many design flaws, but in spite of them. This makes it all the more important to criticise the language for everything wrong with it, in a way that that doesn't really apply to a language like Haskell.
Again, this is plain wrong.
Your assumption here is that people who reject these technologies without further thought have never, in the past, put in the actual effort of looking at these technologies and evaluating them. But many people have. Most people who say PHP is shit will most likely have worked with it and, through this experience, concluded that they simply do not see any value in the language.
So really, what you're doing here is dismissing people's professional experience as "Off-handed" simply because it does not align with your personal attachment to your first language.
The only valid reason to publicly criticise a decision is when it was a bad decision. Whether it was made due to malice, incompetence or project constraints, a bad decision has no excuse that shields it from criticism.
And yet here you are, defending the language you started out with, attacking those who have moved on to other technologies they like more for daring to suggest that the thing you feel emotionally attached to may be so flawed that some people just don't want to go near it if they can at all avoid it.
There is this thing called the Dunning-Kruger effect. The fact that you attribute disagreement with your position to incompetence, ignorance and arrogance gives me a good hint where you roughly are in your learning process.
This is what most people are doing already. This is how most conversations about poor choices of technology look like. If your experience is different, then maybe, just maybe it's your surroundings that are being toxic.
Sounds to me like you're fighting Windmills here, but again, maybe you're just stuck in some really toxic communities where something like that actually happens. In my world, I can assure you, it doesn't.
There is plenty to criticize about PHP, and it's necessary and healthy, but you can do so without implying that people using PHP don't know better. It will also not help anybody make better choices in the future.
For example, saying "PHP makes it easy to use and misuse global variables, it is a flaw that has survived mostly to this day" I think is very valid. If you see someone using global variables, there are productive ways of pointing it out. Assuming they should have known, and are responsible for their lack of knowledge, I think lacks compassion.
PHP is far from hot garbage. If your past experience left you with that absolutist statement, then I think you are missing out. I very much have strong criticism about any of the technology I use. There is a huge difference between "PHP is hot garbage" and "I think PHP is hot garbage".
I'm glad you work in communities where this doesn't happen, but I see this behaviour very often, and I know how much it impacts people who are starting out or who are coming from more alternative paths.
Heck, it even kept me from using Rust for years because I got piled on, called irresponsible and outright criminal because I was working in C++.
Indeed. And I would agree with both statements. There's plenty of things that make me personally dislike PHP as a language, but there's also a good list of reasons why I think PHP is objectively a bad language. Things like the inconsistency of built-in function names only make it harder to use without adding anything, while features like OOP add something that others enjoy but I don't personally care about.
Just like how transformer oil is used by many to deep-fry food. That doesn't automatically mean it's a good or a bad thing, it just means that lots of people do it. A more important question is: Could these same people be achieving even more if they were to use another tool instead?
Unsurprisingly. As someone who hasn't tried Rust, the two cliches I predominantly associate with the language are transgender cat girls nyaaa~ and elitism (from my experience, these two seem mostly disjoint though).
As far as community involvement goes, most of my experience is with the Lua community, which is rather small, so that may be an important factor. Most of the interactions I've seen are generally more leaning towards "PHP is shit, here's why, here's some alternatives and if disagree I'm curious to hear your opinion" (replace PHP with any other hated technology).
In other words, people have the same strong opinions as anywhere else, but with a healthier attitude towards different perspectives.
PHP is good at what it does: web oriented OOP.
PHP 8 is a joy to use and the ecosystem is insane: there are few web frameworks as good as Symfony out there... Django or Rails don't match Symfony.
Some php devs prefer laravel but I personally don't like when there's too much magic.
My point is that in the industry, very few teams use php without Symfony or Laravel's tools. They also mostly use things like static code analysis tools to catch edgy errors.
Some will argue that if those tools are needed then the language is bad... Maybe, but I don't know any language that would make me more productive than PHP and Symfony for doing SOLID server-side programming, not even nodejs.
Slack dev team wrote a great article about why they they came back to PHP for their server side stuff.
Thinking a bit further, "I think PHP is hot garbage" is much less valuable an opinion to hold as "I think PHP is hot garbage because I ran into these issues XYZ, and PHP made it possible. It wouldn't have happened if we had used W, etc...". When I dislike something, I try to think very deeply about it, often read old bug reports and commits to see why someone built something a certain way. I often learn something about the context in which a decision was made.
It doesn't change the technical impact, or that certain things should be avoided, but it is a richer, deeper approach to technology.
As I already said though, assuming that other people, just because they don't want to give you the full essay on why they hate what they hate, haven't also done the exact same thing and put in a lot of thought seems like you have a rather low opinion of your fellow developers.
Sure, there's always some knobheads who just hear that a thing is bad and repeat it because it's what they heard, but I don't think it's the majority of criticism, at least not in any online space worth staying in.
Thanks for the conversation, and you have a good point there. People can definitely make broad inflammatory statements out of frustration, certainly I did with this article. But I think it's easy to forget how hostile technology can be, especially for people who don't fit the usual mold.
I have been mentoring quite a few people as well as hanging out in a lot of communities, and daily I will see someone explicitly putting not just a language down, but its users, often personally and viciously. I also hear the impact it has on people who come from very different backgrounds, and don't have the confidence to ignore hot takes.
If you don't like a technology, and genuinely want to help people move away from it and get better, I think it's vital to check yourself and see how you can be productive. For example, I genuinely want to hear what you like about Lua, what you dislike about PHP, and vice versa. Now, when I'm talking to my buddies in private, flame away, since they know where I'm coming from.
There is also value in practicing how to communicate these kinds of criticism at the workplace. That's for example why I wrote my article about RFCs.
I definitely have a very high opinion of my fellow developers, and the only thing I find despicable is bullying and putting the work of others down.
I'm definitely trying to find my voice with these articles, my "just be kind" takes on the problem got a very different traction than the more forcible ones. Talking with you helps me refine what I take, and indeed, be more empathetic myself.
The point I wanted to make with "public" criticism is that there are people listening that might take your words differently than just "someone doesn't like XYZ because of their experiences".
The latest experience that ultimately making me write this article was being at a conference, and hanging out with people who out of grad school got a haskell job, calling java programmers "brainless drones that can only program because of their IDE."
What I might expand upon with regard to rejecting technologies say, on their pure technical merits, misses a lot of what programming and technical strategy is in practice. There is always a larger context, and for example WordPress, as much as a despise it when I bang my head against its database schema, is a reasonable choice for say, a small business that wants to self host. As is JAva if you come into a big, completely delusional codebase entirely written in Java.
That might of course not be the kind of work you want to do, and noone forces you, but it's definitely not worth such harsh words.
This. You like PHP? Okay, great, keep doing it. But don't pretend like all languages are same because they clearly aren't. You can't compare a language which was designed in a small period of time as a small group of utilities with a language designed by people with PhDs in a long period of time and which is used for completely different purposes.
Of course you can compare them, that's fruitful. PHP has also tremendously evolved since the early days. If anything, I benefit a lot from my knowledge of haskell and functional programming / category theory concepts when writing PHP. The article is not about any technology, but the fact that putting down a language in order to make yourself seem smarter is harmful.
I love both PHP and Haskell. What I don't like is Haskell programmer thinking PHP programmers are idiots, or, conversely, PHP programmers thinking Haskell programmers are ivory-tower headscratchers that don't know how to ship stuff. Plenty of very smart people have invested a lot of time and effort into both ecosystems.
It has evolved but it's nowhere near the Haskell's level. That's a fact. I'm not saying it should be though - they are made for different purposes. Both serve their needs.
100%. In many ways, Haskell's strength is to be a playground of evolution, while PHP benefits from keeping its roots, as ugly as they might be.
A big strength of PHP is the existing ecosystem around it and its widespread adoption, partly because a lot of messy legacy systems are still around and run "fine" (fine as in, they work well enough that nobody has replaced them with something else).
I love experimenting and prototyping in Haskell, writing what I thought would be a simple API server with servant really did my head in.
There are many concepts I experiment with in Haskell that I can easily transpose to PHP.
I have a feeling you might enjoy Lua 😅
I had some good times with pico8! Made a couple of games with it. Quite a few of my buddies are into it, I haven't fully had the need for it so far, but it is quite enticing indeed. I was planning on building some with fennel-lang.org this summer on my sabbatical, but of course many other things were interesting too.
The problem with gamedev is that your code turns to garbage super quickly. And sadly coroutines are quite expensive on pico8, if i remember correctly:
I heard great things about the JIT but never looked closely into it.
The landscape of languages that compile to Lua is also quite interesting; there's at least two lisp dialects (urn and fennel), a coffee-script-like with two different dialects (moonscript and yuescript) and even an ML-like (amulet)
My current "language I want to make some money with so I can call myself a pro" is rust, which I finally picked up after being turned off of it for a while. It's really a solid improvement over C++ in the bare-metal / embedded space. After that, Lua is high on the list (or retirement, hopefully :). Any resources you particularly enjoy?
Great post, well written, this deserves more likes!
I think that the tendency of people to put others down (and big themselves up) mostly stems from their own insecurities, and nagging feelings of inferiority ... psychology 101 :)
It's a form of bullying, not that different from classical schoolyard bullying, and driven by the same motivations. I think once people realize this, they might be inclined to stop doing it - as it's not a good look at all, ultimately you're just putting yourself down.
Not even that, it's simply the ego being dumb.
No true engineer will ever admit publicly that someone else has a better solution than he has.
Well then I'm not a true engineer, because if I see that someone came up with a better solution then it's easy for me to admit so ;-)
then you are not a true engineer and the maxim holds true
Haha nice one, a classic fallacy ... no "true" engineer would ever admit they're wrong!
Anyway, some people (and I tend to agree with them) say that "software engineer" is a bit of a misnomer - what most of us do is probably more "art" than "science" ... so, personally I rarely (if ever) use the "software engineer" moniker for what I do, "software artisan" comes closer, but I'll simply stick with "developer" :-D
More than art, I'd just call i tinkering. Large parts of the potential artistic side of programming usually gets destroyed by business goals and what we end up with is FizzBuzz Enterprise Edition.
Yeah lol not even "art", tinker is what we do :-D
Personally I say that we are like journalists. We are bombarded with problems all the time we don't know much about, and our main skill is to investigate and to learn whatever is needed
Hadn't looked at it that way, but when I have to maintain old legacy code I feel more like an archaeologist :)
I love legacy code. You can look at weird stuff and then look at the git log and who worked on it and recognize how it came to be. It's fascinating.
It is indeed! The tragedy however is that we'll then be inclined to proceed and replace that poor old cute legacy code with shiny new start-of-the art hipster code, lol ...
And be just one more commit for the next archeologist to find :)
I know I was prone to flaming when I was a teenager, and I wish I had known better at the time. Being inclusive, pragmatic and welcoming is now one of the things dearest to my heart.
What is your take on flaming?
The reason for my dislike of said languages is their frailty, that makes too easy to introduce bugs. For example, the fact the PHP and JS try to convert everything in everything else is, in my opinion, a huge issue. Someone could find it convenient, in my experience a strongly typed language catches many bugs already at compilation time. I am willing to pay flexibility to get back resiliance and reduced debug times.
C gives you a lot of freedom, too much, in my opinion. C assumes that you know what you are doing and trust you; with time I maturated the idea that this assumption of C is too optimistic: people make error, even professionals with lots of experience do; therefore, you need a language rigid enough to prevent you from doing silly mistakes (which are the huge majority of mistakes out there). Someone sells C saying that being so low-level is very efficient; but I am quite skeptical. With modern CPU is not so obvious what is more efficient and, moreover, many "C optimization by hand" construction (i.e., using
i=i+1) are easily done by optimizers (this kind of optimization were common already in the 80's),
C++ attaches the complexity of OOP over the frail basis offered by C.
Said that, this says nothing about who uses PHP, JS, C or C++. Maybe you use it because you cannot help (if you want to do web programming there is not much choice); maybe you see as an advantage what I see as a big issue (type "volatility" of PH/JS or the flexibility of C), maybe there is some other reason; honestly, I do not care. It is as with food: I like truffles, but maybe you find their aroma too strong. OK, who cares?
If we know each other since long time and are friends, I could tease you for your choice of programming language (and you could do the same with me), but it is more a "bro-like" joking and none get offended.
In case you are curious, if I get to choose the programming language, I use matlab (octave, actually) for number-crunching, Ruby for scripts and fast-and-dirty stuff and Ada for programs of medium to large complexity and/or very long lived.
I think maybe I need to formulate my point a bit differently, because I think we completely agree.
But saying “JS is flaming hot shit and people who use it are destroying the web” (you wouldn’t believe how common that is), is lazy and ignorant. I think even just saying “JS is flaming hot shit” without saying “I think JS is flaming hot shit” is insulting to JS users, and it also closes you off to some of the good things in JS.
For example, I like C++ quite a bit, but I use almost no OOP patterns in it. I use the templating to enforce strong constraints on my types (for example to dismantle type coercion), and abstract virtual classes as more of a “trait/interface” like pattern. Discussing C++ at that level, comparing it do Ada and how you can use either language to enforce constraints, pre conditions, etc… Great discussion, and we both know neither language is shit, nor are its programmers.
Matlab/octave is one of the languages I often see get shit as well. Mention matlab and someone is bound to say it’s utter garbage because arrays start at 1 or some nonsense. That’s what I am addressing in this article.
People who flame like that and choose to stay ignorant, should never become parents. Young children, especially babies, are dependent on guidance and support for growth. With the attitude of ignorant aggressive bullies, these children would perish within two weeks. THAT is how fragile a child's life is.
And why would we think that in our adulthood we would be less susceptible to this behavior and attitude? It is devastating!
That's also why the "ubuntu" mentality has been adapted by a broad range of acumen in IT. When one wins, everyone should win. If one is let down, we all should feel as if it's us that is suffering.
Arrogance is a spirit killer. No good comes from it. And it should be a focus to eradicate it everywhere, especially on the work floor.
We've seen millennia of years of results of what arrogance leads to. It's the single most attributing factor leading up to fights, wars, conflicts everywhere.
And if arrogance is all you've got, I pity you. Because that means you've never learned to grow up. You think you're big and important, but all you are is a miserable piece of burden.
We all have our struggles, we all have our past and we all have our opportunities to cease every day. That makes us unique. Not better, not worse. Unique. So nobody is having a head start or is winning. You might ace in fields and suck in others. That's fine. But don't bring others down because of their struggle in areas where you thrive.
The Netiquette is something less and less people are aware of. It should still be the standard online.
PHP, Java, Python, C++, etc. get a lot of hate, because they are so popular that you're guaranteed to come across absolutely atrocious code.
Unfortunately, capitalism rewards quality products/services not quality code. On top of that, most devs only master one language/stack.
Also, the SO survey doesn't lie. Some languages are truly awful. Like C++.
What I was thinking while reading this was, ok there are toxic communities out-there. this guy seems to be fighting that.
Just to reply an specific:
I kinda disagree here. In the end, personal preferences matter. If you just don't feel comfortable in a language/ecosystem you better change to another one you do like.
Personal example: I do not like python (the ecosystem, the tools, the docs), so I avoid it as much as i can - I'm just happier with js. It does have use cases, but If the decision is on me, I will try other alternatives
==== EDIT ====
I've just read again your quote: you said " rejected a p. language outright"
So I do agree xD
I was replying to : "rejecting a p. language makes you...."
My point is: you can have preferences and avoid those tools you just don't like... But extremism is always a bad thing 👍
That's totally fair. But saying "python is hot garbage" makes you miss potentially miss out on say, the jupyter ecosystem, maybe new patterns and libraries, or just being able to maintain a python codebase when needed.
Of course, you don't have to do any of those things, but there is a difference between "python is not for me, I have better uses for my time" and "python sucks and there is no value whatsoever in it."
I personally have strong distaste for python, especially for bigger projects, but I see the good in it, and surely if someone comes to me with a cool python project I won't reject it outright because it's in python.
Arguing passionately about programming languages has been around since the second language was introduced.
I've lived through 47 years of the phenomenon and never have tired of participating. VB.NET is your gig? I have empathy. My advice? Move on from that job.
The arguments expose the pros and cons of languages, which are helpful the next time you choose one for a project. In the 80s, the emphasis was on speed and memory. That's something I still take seriously. You won't find me writing code that's interpreted or JITed or garbage collected when high bandwidth or transaction counts are involved. I'm saving the company money and doing my part for the planet.
I don't begrudge anyone of their languages of choice. Most are faster to develop and maintain. If I wanted to understand data science, I'd start learning Python. I've done an awful lot of Windows and browser programs in C#.NET and enjoyed it.
The right tool for the job is the thing.
Having said that, VB still needs to be eliminated from computing. 😀
Wow, perfect article! I'm a beginner too and it's almost common to see arrogant people idolizing X technology. I think that many time people appear to be experienced but don't know basic things!
You should rewrite this article in rust…
I think I agree with the main sentiment here. Thanks for writing!
I needed it so much 🥺
Does this mean we can't hack NASA anymore with the beginners? I was just adding Starlink hack to that fun hack...
Hello Manuel Odendahl,
thanks for your article.
It's easy to read and feels very emotional without being offensive, which I respect a lot.
I agree with "Discussing technology should be a dialogue driven by compassion and respect.".
I also don't like gatekeeping and I think it's a lack of education on how to approach issues without being harmful.
I once heard an interesting phrase that goes like this: "Don't criticize beginners but help them grow because a beginner doesn't yet have the knowledge to understand criticism or if the criticism is even valid."
Some comments may only be visible to logged-in visitors. Sign in to view all comments.