No. The article is right, too much time is wasted by programmers arguing which is the "right" programming language and we need to collectively learn to care less.
For some, astroturfing about their favourite language is almost a religious experience. But the fact remains that even some of the "ugly" languages have valuable tools written in them and we're never going to rewrite the entire Linux / Windows / macOS / whatever stack in everyone's favourite language. And nor should we. It's a fools errand.
> That nobody can make changes to, or upgrade to take advantage of newer technology, or optimize for execution time or memory usage.
No. Not even close. Nothing is stopping anybody from contributing. More often people chose not to contribute because they don't want to contribute and then they use language as a retrospective excuse. But the fact that the tool exists in the first place dispels the myth that it couldn't exist due to some limitation of the language.
As an open source contributor myself I've written code in a variety of languages, including some I don't personally like, and I do so happily when I know there's a bug that needed fixing or a feature I wanted included in a tool I like to use. That's how I know that people who care about a project will still contribute regardless of the language.
Furthermore, arguing that language x doesn't "take advantage of newer technology" is ridiculous when it's bloody obvious to any developer worth their salt just how regularly popular languages are updated, runtimes optimised, etc. And arguing about tools not being optimised for execution time or memory usage misses the point that most tools aren't mission critical software running on embedded devices and most open source developers don't have hours of free time to hand roll assembly just to show off super cool benchmarks. In fact most tools can barely muster more than a couple of regular contributors, many of who work day jobs and have families to care to at the weekend. So instead of complaining that language x isn't optimised for performance, instead be fucking grateful that someone took time to write the tool and open source it in the first place.
As an open source author myself I see time and time again just how entitled some users are and it's often ridiculous comments like the ones you've posted. Don't get me wrong, I don't mind if you don't want to contribute. But please don't insult my intelligence by saying my language choice is the inhibiting factor to the projects success when it's clearly already enough of a success for you to have stumbled upon it in the first place.
Go is a hammer.
Rust is a hammer.
PHP is a hammer.
JavaScript is a hammer.
<your favorite language> is a hammer.
The problem is finding the right nail. Everyone touting a language talks about how it will fix all the problems, rather than specifying what nail it’s best at working on.
Unfortunately egomaniacs like UBM are on hiring committees. It's worth sticking your fingers into whatever flavor of the week garbage is out there on a weekend so you can atleast talk about it during interviews.
"Pick the language and stack based on your team’s needs and comfort, based on your business’s need and risk tolerance, and based on how easy it will be to produce software for your target users in that language or framework. That’s your criteria"
Yep especially the part about "how easy it will be to produce software for your target users". Case in point. My company uses PHP/Laravel framework for our SAAS and we didn't just choose it because it was cool but because Laravel comes with a great ecosystem, packages and community and most of my team was good in PHP for a while. I actually tried to go rogue by trying to force Golang on my team (long story) but almost dodged the bullet when my CTO told me to go pound sand just because I wanted to switch to Golang (I am the CEO). I am so glad I have people to tell me that I am wrong when I am.
We have not only created a great product but the time to market is 20 times of what could have been if we had switched to Golang just because it was cool (and don't get me wrong, I love Go as an amateur programmer and even wrote an internal tool in it to help our team). But for our core SAAS product, focus should be on time to market, customer needs and our team's strength and I am so glad we stuck to what works for us, PHP and Laravel in this case. I hardly have a customer asking about the Programming language we use (may be 2-3 have asked in last 7 years and those were technical folks from customer's team)
The sheer volume of fretting about what might happen later in a company's life because of day 1 type decisions is bonkers IMO.
I participate on some forums where folks are just learning and literally folks will show up "yeah but if you start your project with X what happens later if it takes off and you have to <scale, change schema, whatever>".
In reality if some new guy takes off and makes Facebook 2 he'll have so much money that that problem will be probably pretty darned nice to have.
IIRC hearing Facebook was using ColdFusion at one point, somehow that didn't stop them...
I remember we had some discussions in management meetings about these 'what if' situations and they always end the same: once we have them,it means we now have tons of money and can hire people to do whatever needs to be done or simply throw money on available solutions. Worrying if your blog can handle 1M/day queries when you only have 2 readers doesn't make sense.
Yea. If I had a nickel for everytime a customer asked "Can your system handle hundreds and thousands of concurrent users" and when asked how many they have now, the answer is "Oh we are just starting out but wanted to plan now", I would be a gazillionaire.
The problem is that responsibility and risk in busienss gets passed down to those that do the actual work. You're not really concerned about your blog going from 2 readers to 1M/day, you're concerned that iff your blog volume jumps that much, your job and perhaps livelihood may be on the line because the business doesn't understand why you didn't prepare for this and doesn't understand why you now suddenly need a bunch of more resources to accommodate this change in demand.
Most all these long drawn out what-if discussions almost always dance around the real topic everyone's discussing: who is taking the risk and whose neck is on the line should things go south. If businesses were more willing to take reasonably accessible risks back from their employees doing the work, we'd have a lot less of these discussions. Instead they just go on and on. Who has to do what or will get fired and have to deal with explaining to future employers why they were fired. Instead, we end up passing as much risk as possible to customers and innovation suffers.
Quite refreshing to read. My first job out of university was at a start-up bank whose first version was, would you believe, built on PHP+MySQL. This disgusted my functional purist build beautiful abstractions wanker self at the time, and I distinctly remember feeling that PHP was below me.
They are still running and handling people’s money.
They're all just tools. There's things to be discussed tool to tool (language to language) for sure, but I generally agree with the idea here.
>woodworkers take pride in the finished product, and seeing that finish product being used. They are not all hot on the tools they use
For a while another hobby of mine was photography, and oh man photography has so much tool talk online that I lost interest in any online discussions / forums. Comparing this lens to that and so on was so prevalent that it seemed entirely disconnected from the hobby of actually taking a photograph.
Decades ago I took some outstanding photographs with an early days digital camera that would be greatly outclassed by a random camera on a smartphone now, but does that matter?
I suspect it is because high level talk about tools is just easier than talking about the actual code / effort and hard work it is to make a thing.
Interestingly bass forums were better than guitar forums around this. Still mostly gear chat, and lots of discussion about cabs (fearful bass cabs are cool, it's true), but since many venues bass would go preamp->front of house, and you wouldn't really have much control, seems like people were more likely to just deal with not having "perfect" tone. If anything, power was the biggest vice. "Oh we play outdoors once a year, I need 2000 Watts to feel it properly on stage."
> For a while another hobby of mine was photography, and oh man photography has so much tool talk online that I lost interest in any online discussions / forums.
Can relate. Snobs know every single line of specs document, yet forget the camera costs $10K and no matter what,it will produce absurdly high quality that wil be enough for years to come.
one of the most advanced simulator-type games is built in a custom programming language/engine so shoddy that people struggle to maintain it, and yet every single attempt to replicate it in "better" languages/engines has so far failed. This game was originally built by 1 person.
>Wherever tools are used there are tools made of shit.
I find it's super easy to shit on tools. That doesn't mean another tool is better / will have a better outcome. Most of the tool talk is very focused on a few problems that I am not so sure actually point to the outcome of using it.
I can’t find the source of this quote, but it applies here: “the hallmark of an amateur is the focus on tools”. Obviously tools matter, but professionals know how to balance getting the best environment set up, and actually producing what they need to make.
I heard that quote when I was an aspiring musician (trombone). Once when I was complaining to an instructor that my horn just couldn’t produce the sound I wanted, he took it, played the passage beautifully, and said “sometimes it’s the fiddler, not the fiddle.” A humbling, eye-opening experience that has applied to all of my professional experiences.
Amateurs seek new apps, novel idea, or that best trick that will cure all procrastination. I've been there, and still be sometimes, but much less now since the system began to click and taking shapes after numerous (failed)attempt.
(Well, that made me semi-amateurs I think)
Professional have their own system(usually simple and routinely) and run their life with it. My mom and her trusty pencil & notebook run our household budget for fifty years!(and still going) I can't imagine doing that without some Excel...
Although I'm sure we're all amateur at some point in life...
First of all programing languages are not tools, they are more like tool builders. Programming languages are used to build real tools aka libraries like http server, db library, html templating etc which are then composed together to form an application.
So not only does the programming language choice dictate what kind of tools you have available but also what kind of tools are easy to make and how to compose these tools. Even taking open source tools into account, different libraries in different languages can behave quite differently so the programming language choice matters a lot. It affects how you think about the problem and what solutions you end up with
My long-time colleague Jordan said it this way. "In my toolbox I have a red hammer and a yellow hammer. Sometimes one is the right tool; sometimes the other one. I don't get all wound up around 'red hammer is best'."
That's the comic narrative tone, which is the writer's prerogative to invoke. The question is does the narrative tone match the cognitive effect the author is attempting to elicit in the audience. For me the answer is "yes" even though I also like hearing about why Erlang was the key to whatsapp becoming a unicorn or why PG loves Lisp.
I sort of felt like the rant was more of a meta-rant against UBM's politics than anything actually related to programming language choice. (He linked to a much more detailed personal attack on UBM, in fact).
The author of this post appears to do an excellent job of projecting negative emotions onto the tweet that broke the camel's back, so to speak.
He makes it appear as though the entire software development industry, and especially how developers carry themselves within it, is not to his liking. I think he is calling for more humility, but I'm not sure, because this appears to be more of an attack on a vaguely-defined group of people rather than a call to action or a proposal for how software developers could present themselves more to his liking.
So there’s no room for language advocates? No one can discuss the pros and cons of a language because this author steeps themselves so deep in programming meta-talk, that it’s all they hear and have grown tired of it? What does the world gain from non-interest in programming languages?
> Pick the language and stack based on your team’s needs and comfort, based on your business’s need and risk tolerance, and based on how easy it will be to produce software for your target users in that language or framework. That’s your criteria. Not what I think, not what UBM thinks, and certainly not the language or framework de jour on Hacker News.
How do I determine the above if I’m not allowed to dictate which language I think is best? Especially if I’m given several options for languages that are similar?
"It's 2021, why aren't you programming in Clojure? It's time."
If... you were in a software team, and said...
"I think Clojure is the best choice for this project because the talent we have is comfortable with Lisp programming and functional paradigms, we'll be able to deploy with the full featured JVM which is frequently updated and has a ton of libraries, and X and Y, and Z"
I think the author would be totally fine with your statement because as he notes in the article, you're taking into account the particular needs you have for your current project and the resources you have available in order to produce something for the end user.
The author is saying (in my words) "blanket statements like 'why aren't you using Clojure?' are bad because they create classes within the software community and don't take into account the real world considerations you need to look at when you're building something, you're just creating hierarchy for no reason"
Which seems more reasonable. Basically... don't consider yourself great cause you're using Clojure and someone else is using PHP. Instead... consider yourself great for creating value for end users and don't be haughty about your programming language, or stack. Use the tools that are proper for the job instead of making the intern feel like shit cause you're so great at Lisp and they just got out of college with some basic OO skills.
I think your comment about "there's no room for language advocates" takes things to a level the author never intended. You can say "I think we should use language X for project Y because of A B and C", that's totally fine. Saying "Wow, you're not using Clojure in 2021? What are you an amateur?" is just kind of a dick statement.
It's toxicity of a culture of elitism and a fetishizing of language purity.
People get pilled on languages and tools. It's totally unhealthy. They guide decisions based on faith and optimism and never check back in with reality
Yes and no. I see this with junior developers who think they’ve gain senior insight. Really they just learned to be efficient with a specific set of tools.
JS for example is loved by Junior devs. However due to JS’s flexibility they may later decide they like Typescript because typing can eliminate edge cases that JS is flexible with. The knowledge gain isn’t whether Typescript is a better language or not but that the developer learned why more experienced developers prefer using Typescript. Something that may have been pounded into their brain but was just noise until they were forced to deal with it.
Languages and tools exist as socially created institutions. They have all the same entrapments and faults as any other institution.
Orthodoxy, zealotry, blind loyalty, mobbing, cultist behavior, these can happen in any human institution; a subreddit, financial institution, political party, exercise system, startup, religion, and yes, even computer software.
It doesn't have to, but the point is it can and we shouldn't ignore the tripwires. Computers don't magically make the humans that use them immune from such possibilities
None of those problems are caused by elitism for a language. Advocating and language elitism are symptoms of larger ideas. Attacking elitism in language choice is silly and a waste of time as it's naturally inclined to happen. People do give a shit and for a myriad of reasons.
Elitism for idealism is exactly what it is. That's exactly the problem.
It's all about trying to avoid haphazardly creating cults.
People don't really set out to create cults, they arise out of a set of reasonable intentions that can manifest as toxic institutions.
People want things to be utilized, relied upon, popular, talked about, exciting, enjoyed, make people feel special, etc. All good, as long as we're being careful. I just described Jim Jones, heavens gate and astrophysics or an entertaining movie.
Being careful about culture is important.
We want to have robust, healthy, long lasting, respectable institutions in computing.
I recently started a book on this topic. Hopefully it'll be something I'm proud of. I know there's more writers than readers so that's really my only expectation.
I look forward to see said results and encourage any change that could happen. My previous comment isn't meant to be curt, but honestly the author of the article did not propose a solution so in essence this article comes off as no more than a complain. Which is equivalent to complaining about "X person should have used Y language".
> The elitist fucktards that create these social classes do so because it makes them feel important.
This is from the article, do we honestly believe that these things are created by the people saying them intentionally? As we just discussed this isn't a phenomenon, it organically happens inside of human organization.
I'm curious what level of social posturing and manners is required to avoid it. Is the solution to have "social-justice warriors"-like people patrolling Twitter and work platforms and correcting them?
Especially in the notion of public platforms on the internet, a lot of things are often taken out of context. Not every comment about "X language should be used" is a malicious elitism.
If I can successfully describe things that's the only win I can hope to achieve
Curative steps I think take much longer. Science has had to deal with this stuff constantly.
In say medicine, there's always quackery spontaneously arising somewhere. It can take the form of well funded startups like theranos, mainstream established companies like purdue or what we usually think of, the supposed miracle cure person with the bad website and YouTube channel.
Luckily medicine is continually creating a pretty solid culture that stamps that stuff out pretty quickly. Not as quick as we want, sure, but it's track record on the whole is getting better. Certainly not free from criticism but the people in medicine are clearly aware of the tendancies.
Variation and a lack of agency over results appears to play a key role in susceptibility to these patterns.
In computing we have for the most part not even acknowledged it's possible.
One of the key promises of these patterns is more agency and less variation. It's what everyone is reaching for and this make it fertile ground for toxic institutions with fundamentally undeliverable promises.
People chase the ideals hoping for the promises. Everyone gets screwed
I drank the Ruby Kool-Aid when I first got into programming. I thought it you weren't using Ruby on Rails, Heroku, Postgres, TDD, Cucumber, etc. that you were doing it wrong. I tried to take that attitude into my first couple jobs & it didn't serve me well at all. After nearly burning myself out on trying to find the right way to do things, only to realize that programming is more art than science & there are tradeoffs w/ every approach, now I'm more in the http://programming-motherfucker.com/ camp.
to be fair, if you start with ruby on rails, it's hard to understand why anybody would use something else. at first ruby felt horribly cryptic compared to the Java and C++ I studied in school, but once I got better at it, I fell in love. unfortunately I've only used Java and Javascript ever since lol. serious analysis aside, ruby and rails are awesome tools and were a ton of fun when I used them for work
Programming can and should be be both art and science. Ruby is not a particularly good vehicle for this approach, it is heavy on the art. A book and course showed up here recently that covers some of the science in a beginner friendly manner: A Practical Theory of Programming (http://www.cs.toronto.edu/~hehner/aPToP/). Unfortunately the material on combining the art and science of software and applying them to practical business problems is a little thin. I'd like to contribute with a project I'm working on, A Working Programmer's Guide to Working Programs, which is a play on words for working out programs like working out algebraic equations or proofs, and in the process demonstrating the programs are working.
PS I drank the Ruby Kool-Aid as well. I agree it was very tasty. I even at one point was a Ruby Engineer, as if that means anything :)
> toxicity of a culture of elitism and a fetishizing of language purity
While you use words like toxicity, elitism, and fetishizing, a positive take could be given. Say instead there is a nourishing culture of experts, core contributors who mentor those interested and write articles expounding the language's culture. And that language purity is a meta reasoning tool that enables engineers to focus on business problems rather than the quirks of a language lacking conceptual purity.
No one gives a sh*t about what materials are used to construct the turbine of your airplane - until it crashes specifically because of this material. Then and only then will anyone care.
But does it mean the material otherwise doesn't matter? Obviously not, it still matters a lot.
Then again, asking others to use a language generally without context, that's annoying.
At the same time nobody needs to hear in every topic about home gadgets that they should have been built from $MATERIAL because it's what aeroplanes use.
<1% of software is life and death (or even mission critical like a space probe). Most of the time people are writing gadgets. Some of the time people are writing complex business critical code. But almost never will someone be writing code where the decision between Rust or C++ would cost a company millions, let alone put someone's life at risk.
Don't get me wrong, I agree it's important to pick the right language for the job. But the amount of astroturfing that happens with regards to language preferences is simply ridiculous. It's like the emacs vs vi arguments of old that people used to mock UNIX grey beards over.
>"No one gives a sh*t about what materials are used to construct the turbine of your airplane"
In case of programming the material is rather people who designed and wrote the software. Good programmers will do decent job disregarding of the language used (assuming language is suitable for domain) and shitty ones will produce clusterfuck regardless.
More subtly, people will be one order removed from the design decision if the turbine material simply increases the maintenance costs of the aircraft, but the problem will still be there!
I dunno, it's not that I give a shit, it's that I find it interesting what languages people are using, and why. I don't find it elitist or offensive, it's just people being... I dunno people on Twitter. If someone wants to brag about using Clojure (or whatever was the point of the highlighted tweet - I actually took it as a joke), so what? So now I know someone probably really likes a language I know nothing about.
I guess I just don't understand the strong reaction to this. You wanna be a programming language elitist? I don't give a shit, go right ahead and be an elitist.
I suppose I don't care if someone wants to be a language elitist, as long as they do it somewhere I'm not. When they do it around me, though, it gets old. Being told by some newbie zealot that X is great and I'm a fool for not using it gets annoying by the time I've heard it from 20 zealots, with different values of X.
Regardless of the technology used there is a lot of value in writing code that can be changed without incurring $5MM in surprise losses to a company on a random Monday morning.
The sushi craftsperson and the wood worker are creating something that does not have to be read and understood by some poor schlep a year or even two weeks from now. Software is in maintenance mode almost immediately. It is not functional art nor should one ascribe it to be.
I despise the word craftsman in relation to software for a few reasons. First off, the word invokes visions of a crusty old dude carving wood. Secondly, it's "craftsperson" which doesn't have a good ring to it and does not express the notion properly. Perhaps it does sound elitelist, gender aside.
The author should have thought a bit more before firing off this rant but I kind of agree.
I'm tired of people autistically obsessing over languages too. It would be nice if we could always select a domain specific language that naturally begets readability but we cannot.
Why did you write that in Java? Because the company made me.
>Why did you write that in Java? Because the company made me.
I made the mistake of sharing just a bit more technical info than I usually share with some folks online once.
I was bombarded with "OMG why did you build it like X" and so on. It was all unrelated to the mistake / story I told.
Now I appreciated their responses as some had ideas how it 'should be' and I find that of value (albeit limited as they know so little about the context...) but I was sort of amused that so many would seem to assume that I was somehow in charge / could just rearchitect an application that a ton of other people work on... just because or something.
I wanted to know where all those folks work that they can just do that ;)
Nobody cares, until the choice of language has practical consequences for the end user. E.g. I'm not touching anything written in Ruby because of my bad experiences with the mess Gems leave in the system.
Nobody cares as long as your choice of language doesn't make the program into its own special thing that needs to be handled differently than all other programs. When it does, I will not only care about your choice of language, but also about your choice of toolkit (e.g. Gtk3 being out of place outside of Linux/Gnome).
On the server it's less of an issue, because it's mostly the developer that needs to deal with the consequences of their choices, not the end user.
Well, I think Bob Martin promoting Clojure is a bad thing for Clojure... The Clojure community is really awesome, and so is the language, there's no need to have a self-declared (and under-substantiated) guru promoting it. I don't particularly care which languages other people use, but I do care about the ones I use (and, in my case, Clojure is the first one I reach for unless I have very specific requirements that would prevent me from doing so).
Under-substantiated?! The guy was one of the signers of the original Agile Manifesto, and think what you will about big-A "Agile", the manifesto itself was a revolution in our industry, It may not seem that way now, but only because of how thourgly the ideas of the manifesto have been integrated into our culture. Then he wrote his whole Clean Code series which are generally considered necessary reading for any junior developer. Then after that he's basically been the senior dev at 8th light, which is both a highly successful consultancy and an excellent example of a company creating a structured mentorship program for new developers.
So yeah, feel free to disagree with Uncle Bob, but in no way is he "under-substantiated.
Of course your allowed that opinion. But I would say we do have a crystal ball into the world where agile was not popular, and that was the world before agile. And that world was full of over engineered systems that did not solve the users' real problems.
Part of how you feel about agile likely has to do with the industry you are in. If you're doing embedded systems for cars or medical devices, agile is absolutely trash. But for the very large world of consumer facing software, or even business software that isn't dealing with life-or-death situations, the agile world is so much better than the waterfall world.
If more user engagement is the key, the agile philosophy would be a sentence rather than a manifesto.
Instead it was a bunch of vague maxims, that became a cult collection of heuristics (nominally rooted in Java, as much as it claimed to be polyglot).
The counter-argument to this is "No True Agiles-man", so the brand never needs to take responsibility for the reality, and this defense is as much a part of the culture as anything. It's like agile is a religion, and the manifesto is the religious texts - selectively ignored or interpreted as needed. No, I don't feel this is much better than waterfall, especially as even that could have evolved into more user engagement, without the mantras ("waterfall is bad" itself being a mantra) - why can't waterfall be a "tool in the belt", or a reasoned stage in the process? Why can't agile principles be taken individually rather than adamant on the whole? Why can't sometimes people be more important that process, and sometimes process more important than people? Why can't we have a plan (moreso upfront), and still respond to change?
I don't know, I think we did: what is called "agile" today is all of the exact same stuff that the agile manifesto was explicitly the opposite of. Agile became popular among developers, managers didn't really understand what it was, consultants rebranded it to be exactly what it was supposed to be a replacement for, managers were happy, and developers went back to being frustrated.
Let's not get too carried away ripping on Bob. Clean Code is the "Wealth of Nations" of software engineering. Lots of pages of examples and discussion somewhat steeped in the time but nevertheless containing a sentence or two that make everything click and cements an inevitable and pervasive set of core ideas on the subject.
I wish we could bring ourselves to value writing code that is accessible instead of conjuring up gibberish that reads like a pretentious scientific journal. Uncle Bob has literally been saying that we should write code that anyone can understand easily. Hardly a radical elitist concept.
Maybe no one should but the majority of people in the industry certainly do. I feel like I can program in any language and for most product use cases the choice is essentially arbitrary. Interviewers do not seem to agree.
Being prideful of the tools you use is dumb. Being prideful of not being prideful of the tools you use is also dumb. When you have "sh*t" in your title, you might want to check if this is something you really want to say.
This is extremely to the point especially when developers are consultants who deal directly with business people. I haven't met a single decision maker in any company who'd know the difference between Rust/Golang/ Pascal,nor could they care to know. All they need to know is that you can solve their problem by writing code. Of course when you walk into an existing JAVA codebase that needs modifying, that's what you'll work with but outside of these situations nobody cares.
I don’t disagree with the general viewpoint, but I’m not sure why all the vitriol. The idea of software craftsmanship is just an over-correction on the earlier prevailing perception of programmers as nerdy assembly line workers. These days programming is a well-paid and well-respected job, and we can probably just ignore those with weird chips in their shoulders from either side.
Same here. I read this because the headline resonated --- nobody does care which programming language you use, they care about the results you provide for them.
What I got was a story about first idolizing a stranger only to be disappointed by them, to the point where the worship turns to disgust. Why do I care? He's just a guy who shares his thoughts publicly. He doesn't need to be better than anyone else.
Don't worship people and you won't be disappointed when they don't fit perfectly into your ideals.
I don't know if we watched different versions of Jiro dreams of Sushi, but it seems we came away with very different pictures of Jiro if the author sees him as non-elitist, or believes he concentrates on things that matter overall rather than the details of his craft.
Anyway, I agree with the author's overall concept that the language isn't necessarily important and shouldn't be worn as a badge, but I think he goes off track a bit in the details.
> Pick the language and stack based on your team’s needs and comfort, based on your business’s need and risk tolerance, and based on how easy it will be to produce software for your target users in that language or framework.
Developers clearly do care what language they use so this is a factor to take into consideration. Plain and simple - Java 1.0 might tick all of these boxes but you'll struggle to find many interested and passionate developers.
> I believe we can build better software, faster. I believe adopting Test Driven Development can change how we build software. I believe it allows us to build better software, faster. I believe it allows our software projects to reflect the needs our businesses and stakeholders have: To get the features stakeholders want, and demonstrate how the system works as quickly as possible.
This is from George's homepage which reads exactly like the 'BS' he's targeting. Which I think nullifys his argument - he's just gone on to give a shit about programming techniques instead.
When I was young I also had this issue, at that time I thought that C# and .Net is the best thing ever and we will never have memory issues, there will be an OS made in C# and there are some benchmarks where C# is better then C++ . If you pay attention you see is almost the same thing that is now repeated by Rust fans, though to be fair there was no rewrite it in C# crowd from what I remember.
I had a similar phase where I was trying to convince people to switch to Linux, I still believe Linux is better for many tasks but I don't care anymore if my brother or some friends is running Windows, it is Red Hat ,Canonical and other's job to promote Linux for Desktops.
I love using Perl for simple automations I have; especially when those automations involve text manipulation.
I focus on C# and .NET professionally; although I've done production work in C, Python, TypeScript, JavaScript, and Perl.
But, the language and stack I pick for a given task is entirely dependent upon the reasons I list in the post. I'll happily dump C# or .NET if the situation calls for it.
> Take Jiro from Jiro dreams of Sushi, an example of a master of the ‘craft’ of making Sushi. Jiro doesn’t tout that he’s the best at it; but everyone else does. That’s a major difference from UBM’s (and others) self-identifying as a craftsman, is that Jiro doesn’t do that. He humbly learns and tries to get better, and more importantly tries to serve others. He doesn’t parade around with a self-given label that says “Sushi Craftsman” even though he ostensibly is.
The self-labeling does exist though, they just use a different label: Artisan.
133 comments
[ 3.0 ms ] story [ 86.9 ms ] threadFor some, astroturfing about their favourite language is almost a religious experience. But the fact remains that even some of the "ugly" languages have valuable tools written in them and we're never going to rewrite the entire Linux / Windows / macOS / whatever stack in everyone's favourite language. And nor should we. It's a fools errand.
That nobody can make changes to, or upgrade to take advantage of newer technology, or optimize for execution time or memory usage.
No. Not even close. Nothing is stopping anybody from contributing. More often people chose not to contribute because they don't want to contribute and then they use language as a retrospective excuse. But the fact that the tool exists in the first place dispels the myth that it couldn't exist due to some limitation of the language.
As an open source contributor myself I've written code in a variety of languages, including some I don't personally like, and I do so happily when I know there's a bug that needed fixing or a feature I wanted included in a tool I like to use. That's how I know that people who care about a project will still contribute regardless of the language.
Furthermore, arguing that language x doesn't "take advantage of newer technology" is ridiculous when it's bloody obvious to any developer worth their salt just how regularly popular languages are updated, runtimes optimised, etc. And arguing about tools not being optimised for execution time or memory usage misses the point that most tools aren't mission critical software running on embedded devices and most open source developers don't have hours of free time to hand roll assembly just to show off super cool benchmarks. In fact most tools can barely muster more than a couple of regular contributors, many of who work day jobs and have families to care to at the weekend. So instead of complaining that language x isn't optimised for performance, instead be fucking grateful that someone took time to write the tool and open source it in the first place.
As an open source author myself I see time and time again just how entitled some users are and it's often ridiculous comments like the ones you've posted. Don't get me wrong, I don't mind if you don't want to contribute. But please don't insult my intelligence by saying my language choice is the inhibiting factor to the projects success when it's clearly already enough of a success for you to have stumbled upon it in the first place.
The problem is finding the right nail. Everyone touting a language talks about how it will fix all the problems, rather than specifying what nail it’s best at working on.
That’s the problem right there.
https://blog.codinghorror.com/the-php-singularity/
Yep especially the part about "how easy it will be to produce software for your target users". Case in point. My company uses PHP/Laravel framework for our SAAS and we didn't just choose it because it was cool but because Laravel comes with a great ecosystem, packages and community and most of my team was good in PHP for a while. I actually tried to go rogue by trying to force Golang on my team (long story) but almost dodged the bullet when my CTO told me to go pound sand just because I wanted to switch to Golang (I am the CEO). I am so glad I have people to tell me that I am wrong when I am.
We have not only created a great product but the time to market is 20 times of what could have been if we had switched to Golang just because it was cool (and don't get me wrong, I love Go as an amateur programmer and even wrote an internal tool in it to help our team). But for our core SAAS product, focus should be on time to market, customer needs and our team's strength and I am so glad we stuck to what works for us, PHP and Laravel in this case. I hardly have a customer asking about the Programming language we use (may be 2-3 have asked in last 7 years and those were technical folks from customer's team)
I participate on some forums where folks are just learning and literally folks will show up "yeah but if you start your project with X what happens later if it takes off and you have to <scale, change schema, whatever>".
In reality if some new guy takes off and makes Facebook 2 he'll have so much money that that problem will be probably pretty darned nice to have.
IIRC hearing Facebook was using ColdFusion at one point, somehow that didn't stop them...
Most all these long drawn out what-if discussions almost always dance around the real topic everyone's discussing: who is taking the risk and whose neck is on the line should things go south. If businesses were more willing to take reasonably accessible risks back from their employees doing the work, we'd have a lot less of these discussions. Instead they just go on and on. Who has to do what or will get fired and have to deal with explaining to future employers why they were fired. Instead, we end up passing as much risk as possible to customers and innovation suffers.
They are still running and handling people’s money.
>woodworkers take pride in the finished product, and seeing that finish product being used. They are not all hot on the tools they use
For a while another hobby of mine was photography, and oh man photography has so much tool talk online that I lost interest in any online discussions / forums. Comparing this lens to that and so on was so prevalent that it seemed entirely disconnected from the hobby of actually taking a photograph.
Decades ago I took some outstanding photographs with an early days digital camera that would be greatly outclassed by a random camera on a smartphone now, but does that matter?
I suspect it is because high level talk about tools is just easier than talking about the actual code / effort and hard work it is to make a thing.
This has been my experience too!
Wherever tools are used there are tools made of shit. Thus we need to discuss the tools.
(https://en.wikipedia.org/wiki/Space_Station_13)
Honestly, I think devs love to overanalyse tools as a form of procrastination. A poor carpenter blames his tools, after all.
>Wherever tools are used there are tools made of shit.
I find it's super easy to shit on tools. That doesn't mean another tool is better / will have a better outcome. Most of the tool talk is very focused on a few problems that I am not so sure actually point to the outcome of using it.
I heard that quote when I was an aspiring musician (trombone). Once when I was complaining to an instructor that my horn just couldn’t produce the sound I wanted, he took it, played the passage beautifully, and said “sometimes it’s the fiddler, not the fiddle.” A humbling, eye-opening experience that has applied to all of my professional experiences.
Amateurs seek new apps, novel idea, or that best trick that will cure all procrastination. I've been there, and still be sometimes, but much less now since the system began to click and taking shapes after numerous (failed)attempt.
(Well, that made me semi-amateurs I think)
Professional have their own system(usually simple and routinely) and run their life with it. My mom and her trusty pencil & notebook run our household budget for fifty years!(and still going) I can't imagine doing that without some Excel...
Although I'm sure we're all amateur at some point in life...
So not only does the programming language choice dictate what kind of tools you have available but also what kind of tools are easy to make and how to compose these tools. Even taking open source tools into account, different libraries in different languages can behave quite differently so the programming language choice matters a lot. It affects how you think about the problem and what solutions you end up with
JavaScript is clearly superior.
He makes it appear as though the entire software development industry, and especially how developers carry themselves within it, is not to his liking. I think he is calling for more humility, but I'm not sure, because this appears to be more of an attack on a vaguely-defined group of people rather than a call to action or a proposal for how software developers could present themselves more to his liking.
> Pick the language and stack based on your team’s needs and comfort, based on your business’s need and risk tolerance, and based on how easy it will be to produce software for your target users in that language or framework. That’s your criteria. Not what I think, not what UBM thinks, and certainly not the language or framework de jour on Hacker News.
How do I determine the above if I’m not allowed to dictate which language I think is best? Especially if I’m given several options for languages that are similar?
"It's 2021, why aren't you programming in Clojure? It's time."
If... you were in a software team, and said...
"I think Clojure is the best choice for this project because the talent we have is comfortable with Lisp programming and functional paradigms, we'll be able to deploy with the full featured JVM which is frequently updated and has a ton of libraries, and X and Y, and Z"
I think the author would be totally fine with your statement because as he notes in the article, you're taking into account the particular needs you have for your current project and the resources you have available in order to produce something for the end user.
The author is saying (in my words) "blanket statements like 'why aren't you using Clojure?' are bad because they create classes within the software community and don't take into account the real world considerations you need to look at when you're building something, you're just creating hierarchy for no reason"
Which seems more reasonable. Basically... don't consider yourself great cause you're using Clojure and someone else is using PHP. Instead... consider yourself great for creating value for end users and don't be haughty about your programming language, or stack. Use the tools that are proper for the job instead of making the intern feel like shit cause you're so great at Lisp and they just got out of college with some basic OO skills.
I think your comment about "there's no room for language advocates" takes things to a level the author never intended. You can say "I think we should use language X for project Y because of A B and C", that's totally fine. Saying "Wow, you're not using Clojure in 2021? What are you an amateur?" is just kind of a dick statement.
It's toxicity of a culture of elitism and a fetishizing of language purity.
People get pilled on languages and tools. It's totally unhealthy. They guide decisions based on faith and optimism and never check back in with reality
JS for example is loved by Junior devs. However due to JS’s flexibility they may later decide they like Typescript because typing can eliminate edge cases that JS is flexible with. The knowledge gain isn’t whether Typescript is a better language or not but that the developer learned why more experienced developers prefer using Typescript. Something that may have been pounded into their brain but was just noise until they were forced to deal with it.
Languages and tools exist as socially created institutions. They have all the same entrapments and faults as any other institution.
Orthodoxy, zealotry, blind loyalty, mobbing, cultist behavior, these can happen in any human institution; a subreddit, financial institution, political party, exercise system, startup, religion, and yes, even computer software.
It doesn't have to, but the point is it can and we shouldn't ignore the tripwires. Computers don't magically make the humans that use them immune from such possibilities
None of those problems are caused by elitism for a language. Advocating and language elitism are symptoms of larger ideas. Attacking elitism in language choice is silly and a waste of time as it's naturally inclined to happen. People do give a shit and for a myriad of reasons.
It's all about trying to avoid haphazardly creating cults.
People don't really set out to create cults, they arise out of a set of reasonable intentions that can manifest as toxic institutions.
People want things to be utilized, relied upon, popular, talked about, exciting, enjoyed, make people feel special, etc. All good, as long as we're being careful. I just described Jim Jones, heavens gate and astrophysics or an entertaining movie.
Being careful about culture is important.
We want to have robust, healthy, long lasting, respectable institutions in computing.
To be simplistic, snobbery isn't a good fit
Thanks
> The elitist fucktards that create these social classes do so because it makes them feel important.
This is from the article, do we honestly believe that these things are created by the people saying them intentionally? As we just discussed this isn't a phenomenon, it organically happens inside of human organization.
I'm curious what level of social posturing and manners is required to avoid it. Is the solution to have "social-justice warriors"-like people patrolling Twitter and work platforms and correcting them?
Especially in the notion of public platforms on the internet, a lot of things are often taken out of context. Not every comment about "X language should be used" is a malicious elitism.
Curative steps I think take much longer. Science has had to deal with this stuff constantly.
In say medicine, there's always quackery spontaneously arising somewhere. It can take the form of well funded startups like theranos, mainstream established companies like purdue or what we usually think of, the supposed miracle cure person with the bad website and YouTube channel.
Luckily medicine is continually creating a pretty solid culture that stamps that stuff out pretty quickly. Not as quick as we want, sure, but it's track record on the whole is getting better. Certainly not free from criticism but the people in medicine are clearly aware of the tendancies.
Variation and a lack of agency over results appears to play a key role in susceptibility to these patterns.
In computing we have for the most part not even acknowledged it's possible.
One of the key promises of these patterns is more agency and less variation. It's what everyone is reaching for and this make it fertile ground for toxic institutions with fundamentally undeliverable promises.
People chase the ideals hoping for the promises. Everyone gets screwed
PS I drank the Ruby Kool-Aid as well. I agree it was very tasty. I even at one point was a Ruby Engineer, as if that means anything :)
While you use words like toxicity, elitism, and fetishizing, a positive take could be given. Say instead there is a nourishing culture of experts, core contributors who mentor those interested and write articles expounding the language's culture. And that language purity is a meta reasoning tool that enables engineers to focus on business problems rather than the quirks of a language lacking conceptual purity.
Note well: I'm not taking a position on whether your particular group is toxic or nourishing. I'm just saying that you can't spin one as the other.
But does it mean the material otherwise doesn't matter? Obviously not, it still matters a lot.
Then again, asking others to use a language generally without context, that's annoying.
<1% of software is life and death (or even mission critical like a space probe). Most of the time people are writing gadgets. Some of the time people are writing complex business critical code. But almost never will someone be writing code where the decision between Rust or C++ would cost a company millions, let alone put someone's life at risk.
Don't get me wrong, I agree it's important to pick the right language for the job. But the amount of astroturfing that happens with regards to language preferences is simply ridiculous. It's like the emacs vs vi arguments of old that people used to mock UNIX grey beards over.
In case of programming the material is rather people who designed and wrote the software. Good programmers will do decent job disregarding of the language used (assuming language is suitable for domain) and shitty ones will produce clusterfuck regardless.
I guess I just don't understand the strong reaction to this. You wanna be a programming language elitist? I don't give a shit, go right ahead and be an elitist.
Some problems are yet, better expressed with one language than another.
As a CTO I always use the same language for prototyping, but in production we don't.
The sushi craftsperson and the wood worker are creating something that does not have to be read and understood by some poor schlep a year or even two weeks from now. Software is in maintenance mode almost immediately. It is not functional art nor should one ascribe it to be.
I despise the word craftsman in relation to software for a few reasons. First off, the word invokes visions of a crusty old dude carving wood. Secondly, it's "craftsperson" which doesn't have a good ring to it and does not express the notion properly. Perhaps it does sound elitelist, gender aside.
The author should have thought a bit more before firing off this rant but I kind of agree.
I'm tired of people autistically obsessing over languages too. It would be nice if we could always select a domain specific language that naturally begets readability but we cannot.
Why did you write that in Java? Because the company made me.
I made the mistake of sharing just a bit more technical info than I usually share with some folks online once.
I was bombarded with "OMG why did you build it like X" and so on. It was all unrelated to the mistake / story I told.
Now I appreciated their responses as some had ideas how it 'should be' and I find that of value (albeit limited as they know so little about the context...) but I was sort of amused that so many would seem to assume that I was somehow in charge / could just rearchitect an application that a ton of other people work on... just because or something.
I wanted to know where all those folks work that they can just do that ;)
Nobody cares as long as your choice of language doesn't make the program into its own special thing that needs to be handled differently than all other programs. When it does, I will not only care about your choice of language, but also about your choice of toolkit (e.g. Gtk3 being out of place outside of Linux/Gnome).
On the server it's less of an issue, because it's mostly the developer that needs to deal with the consequences of their choices, not the end user.
So yeah, feel free to disagree with Uncle Bob, but in no way is he "under-substantiated.
Am I allowed the opinion that it was bad for the industry, and some of the ideas it integrated are harmful and still holding us back as an industry?
It's convenient that we have no crystal ball into a parallel universe where agile never became popular.
Part of how you feel about agile likely has to do with the industry you are in. If you're doing embedded systems for cars or medical devices, agile is absolutely trash. But for the very large world of consumer facing software, or even business software that isn't dealing with life-or-death situations, the agile world is so much better than the waterfall world.
Instead it was a bunch of vague maxims, that became a cult collection of heuristics (nominally rooted in Java, as much as it claimed to be polyglot).
The counter-argument to this is "No True Agiles-man", so the brand never needs to take responsibility for the reality, and this defense is as much a part of the culture as anything. It's like agile is a religion, and the manifesto is the religious texts - selectively ignored or interpreted as needed. No, I don't feel this is much better than waterfall, especially as even that could have evolved into more user engagement, without the mantras ("waterfall is bad" itself being a mantra) - why can't waterfall be a "tool in the belt", or a reasoned stage in the process? Why can't agile principles be taken individually rather than adamant on the whole? Why can't sometimes people be more important that process, and sometimes process more important than people? Why can't we have a plan (moreso upfront), and still respond to change?
I don't know, I think we did: what is called "agile" today is all of the exact same stuff that the agile manifesto was explicitly the opposite of. Agile became popular among developers, managers didn't really understand what it was, consultants rebranded it to be exactly what it was supposed to be a replacement for, managers were happy, and developers went back to being frustrated.
I wish we could bring ourselves to value writing code that is accessible instead of conjuring up gibberish that reads like a pretentious scientific journal. Uncle Bob has literally been saying that we should write code that anyone can understand easily. Hardly a radical elitist concept.
What I got was a story about first idolizing a stranger only to be disappointed by them, to the point where the worship turns to disgust. Why do I care? He's just a guy who shares his thoughts publicly. He doesn't need to be better than anyone else.
Don't worship people and you won't be disappointed when they don't fit perfectly into your ideals.
Anyway, I agree with the author's overall concept that the language isn't necessarily important and shouldn't be worn as a badge, but I think he goes off track a bit in the details.
> Pick the language and stack based on your team’s needs and comfort, based on your business’s need and risk tolerance, and based on how easy it will be to produce software for your target users in that language or framework.
Developers clearly do care what language they use so this is a factor to take into consideration. Plain and simple - Java 1.0 might tick all of these boxes but you'll struggle to find many interested and passionate developers.
> I believe we can build better software, faster. I believe adopting Test Driven Development can change how we build software. I believe it allows us to build better software, faster. I believe it allows our software projects to reflect the needs our businesses and stakeholders have: To get the features stakeholders want, and demonstrate how the system works as quickly as possible.
This is from George's homepage which reads exactly like the 'BS' he's targeting. Which I think nullifys his argument - he's just gone on to give a shit about programming techniques instead.
I hire subcontractors from time to time and after skipping clearly incompetents "passionate about the language" come next.
I had a similar phase where I was trying to convince people to switch to Linux, I still believe Linux is better for many tasks but I don't care anymore if my brother or some friends is running Windows, it is Red Hat ,Canonical and other's job to promote Linux for Desktops.
I love using Perl for simple automations I have; especially when those automations involve text manipulation.
I focus on C# and .NET professionally; although I've done production work in C, Python, TypeScript, JavaScript, and Perl.
But, the language and stack I pick for a given task is entirely dependent upon the reasons I list in the post. I'll happily dump C# or .NET if the situation calls for it.
Formal verification people, however, do care a lot.
Haskell is logic, so if you have managed to express your solution in Haskell and it typechecks and compiles, you suddenly have more than just code.
But, of course, Javascript...
- How much do you currently understand and trust it?
- How curious are you about learning to use it better?
- How well can you converse with a teammate about how to use it?
The self-labeling does exist though, they just use a different label: Artisan.