Quite frankly almost everything I’ve read by Robert Martin – certainly in the last few years – has ranged from “overly simplistic” to “outright bullshit”. I don’t know if he’s always been like this or if this is one of those “doesn’t get wiser as he grows older but more cookier” things. A few years ago a friend of mine got embroiled in a Twitter pissing match with him and he pretty much suggested that he will be prosecuted and locked up for not practising TDD. Okay…
At this point I hardly even consider it worth my time debunking his claims.
It is generally a problem with any large-scale social network (you are affectively hooked by people you normally wouldn’t even interact with in a subculture or a local community), though it is particularly accentuated in Twitter due to the extremely low-effort it takes to publish and spread content.
If Lobsters becomes as popular as HN, it might start to suffer from some of it as well.
Obviously elitism is harmful, but people do have meaningful preferences about programming languages, and evangelism can help people discover languages that are a better fit for them or their needs.
This rant also reduces programming to just the job, just the business needs. Presumably because the author believes in the primary importance of productivity, another thing without universal appeal. Programming is also a hobby, an art and a medium of scientific discovery.
Sure, programming can be “mental masturbation”, but what’s wrong with that?
Speaking personally, I don’t have time to try every language and every tech stack. I do learn from the experiences of others. I’ve seen some good experience reports here on Lobste.rs over the years. That means I do care what languages people use, at least in two ways. First is the “huh, never heard of that before” moment. Second is the comparison between “thing I know” and “thing I don’t know”. This recent article by Kevin Lynagh hit both of those sweet spots for me.
There’s a world of difference between an experience report and cheerleading, of course. Twitter is best suited to cheerleading or mudslinging.
I saw your comment in the Newest Comments listing and came here before I even knew the topic. Why? Because I gave a shit that you use Clojure and was curious what you were talking about.
Different languages have different strengths. Choosing a language for a project isn’t an empirical process, it’s a statement of what strengths you want to leverage and what weaknesses you’re okay accepting. In a sense, it’s a statement of what you value.
I agree in spirit with the article’s concept of “performative craftsmanship,” but building a system is not like building a sushi roll. It’s like building the sushi roll, curating the environment where the roll will be consumed, sourcing the fish, vetting the sources of the fish, carefully preparing the rice, and practicing the wisdom of those who came before you while also making your own decisions. In other words, it’s impossible to communicate all the work that goes into what makes it good. That’s why so much cuisine is performative. The chef is trying to communicate much more about the food than what’s on your plate.
In another example of this performative culture of software craftsmanship, and I’ll use wood-working as an example because I grew up in that culture, woodworkers take pride in the finished product, and seeing that finish product being used. They are not all hot on the tools they use, and nor do they value the art of planing for its own sake. No, it’s always in furtherance of the ultimate goal: to produce something another human will enjoy using.
I don’t believe this claim. I’ve absolutely seen woodworkers, as well as other types of craftspeople who do creative physical work, “get hot on” the tools they use - in the sense of having personal preferences about tools, discussing the merits of one type of tool over another with other practitioners of their craft, thinking that some tools or broad classes of tool are bad, and so on. Why wouldn’t a professional who earns a living using tools care about the details of the tools they use, or be interested in learning about new and potentially better tools (or new ways of using existing tools) from fellow people who practice their craft? And why should the craft of creating computer programs be fundamentally different from other crafts in this way?
It’s certainly possible for craftspeople to place too much emphasis on the minute details of their tools, and sometimes the correct answer to a debate between different tools is “you can get the work done about equally well with either one” (and this is as true of Clojure vs Python as it is of different brands of circular saw or knitting needle). But I don’t think that tools are irrelevant to the final quality of the work produced, or that craftspeople - including programmers - are wrong to spend time thinking about their tools.
I can guarantee without even checking that every single fortune 50 company uses Excel in ways that would potentially cost hundreds of millions of dollars in losses if there were an error. Do you think the person that pays for the VBA programmers cares that they’re using VBA? No. Do you think the programmer is just jonesing to replace VBA with clojure? Not if they understand what side their bread is buttered on, they don’t.
This is true, and it’s also true that sometimes large institutions like Fortune 50 companies lose hundreds of millions of dollars because of Excel-related software errors (has anyone tried to calculate the monetary cost of things like this ?). Maybe companies should be replacing excel spreadsheets with other technology, in the same way that when a plumber works on remodeling a 100 year old building, he’ll probably replace the cast iron pipe he removes from the drains with PVC (or maybe some other type of pipe, I’m not a plumber - but in any case I would expect a professional plumber to have an opinion about this!).
A programming language exists to put software into people’s hands and to make their lives better. It does not exist for the idle purpose of being good at that language, and it certainly doesn’t exist as gatekeeping, as a way of separating programmers into social classes.
The elitist fucktards that create these social classes do so because it makes them feel important. They have created a bar and put themselves above that bar, while the lowly working programmer should follow their example if they want to be a ‘software craftsman’ or a ‘software professional’. It’s self-serving poppycock (another word for bullshit, I’m certain). It’s also why if you brand yourself as a ‘clojure programmer’, there’s literally only two sets of people who will ever care: Other programmers you want to impress, or a recruiter who is looking for a ‘clojure programmer’. Go say you’re a clojure programmer to your spouse or family, and be prepared to realize how much bullshit language segmentation is to people outside of our industry.
A professional programmer expressing a professional preference about which programming languages are good or bad for different things doesn’t separate programmers into different social classes, and calling people who do this “elitist fucktards” is unwarranted. I would agree that good programmers should be able to use multiple programming languages, and be able to work on different types of software projects. A person shouldn’t solely define themselves as a programmer by what language they use. But there’s nothing bad about describing yourself as a Clojure programmer in the sense of “a programmer who knows who to use Clojure”, and this is an entirely reasonable thing to do when communicating with a recruiter trying to hire Clojure programmers to work on a software project written in Clojure. It’s foolish to portray this as somehow a fault of the programmer doing so.
After all of this, I actually disagree with Bob Martin on object-level point about Clojure! Or more accurately, I disagree with one reasonable inference from the exact text of his quoted tweet, namely the assertion that Clojure is the only important programming language to know in 2021. I don’t know Clojure myself and don’t use it, and I don’t think that’s particularly harming my ability to get paid to write and maintain useful software. I have heard some interesting things about Clojure, and maybe I’ll give it a try one of these days (although it’s not as high of a priority as other things I want to learn). Certainly I have no reason to think Clojure is inherently bad, other than in ways that all dynamically-typed languages are limited. But for me even to make this argument is to presuppose that arguing about the merits of different programming tools is legitimate.
I don’t believe this claim. I’ve absolutely seen woodworkers, as well as other types of craftspeople who do creative physical work, “get hot on” the tools they use - in the sense of having personal preferences about tools, discussing the merits of one type of tool over another with other practitioners of their craft, thinking that some tools or broad classes of tool are bad, and so on. Why wouldn’t a professional who earns a living using tools care about the details of the tools they use, or be interested in learning about new and potentially better tools (or new ways of using existing tools) from fellow people who practice their craft? And why should the craft of creating computer programs be fundamentally different from other crafts in this way?
Programmers bikeshed much more than any carpenters or cabinetmakers I have ever talked with or worked with. Sure, I’ve seen carpenters argue about router bits, moulding planes, the use of the low-angle block plane, and other things, but carpenters by and large agree on the tools that they use as an industry. Programmers put tools on an extremely tall pedestal to the point where I feel like the tools are often just a turing tarpit that scratch an intellectual but not practical itch.
Meh, might as well reuse the space for the deleted duplicate of my previous comment.
To argue the counterpoint as much I don’t care about clean coding, I think programmers caring about programming languages is only natural because they use it everyday. Lay users could also care about programming languages, if they were simple enough like Excel formulas or WordPress templates.
Software is interactive unlike dancing which has a clear distancing between performer and audience. A more appropriate analogy would be software for dancers, where the end user can script the dance choreography with javascript for example. In that case, yes end users definitely care about the language because it an integral part of the software customization. To learn animation plenty of people learnt javascript via flash, photographers use python for some filters, AutoCad users might learn some lisp and so on. In all such cases where professionals are concerned Lua beats Lisp any day.
I’m not sure why you are trying to contort the meaning of the original article into some “pure functional programming bad”, which is very obviously not the point of the article. In fact, you fall victim to the exact pattern the article criticizes.
The original article talks about elitist fucktards in the software industry. I expand on that by stating that programming languages are also elitist and part of the same problem. “Pure” functional programming along with OO is theological in nature, faith driven, derives its elitism from childish notions of “purity” and has no evidence for all its claims.
OO and FP were responses to the so-called software crisis of the 70s. I believe the claims were that using these “completely pure” as opposed to mixed techniques would
Deliver faster software
Deliver software fastly
Increase software durability, safety, maintainability above and much beyond procedural programming
Increase programmer productivity
Make concurrent programs easy
So far all I see is vague opinions on 4, nonsense and marketing slogans. AFAIK generic programming, seen in C++/Ada delivers some evidence on some of these claims.
If I remember correctly Blitz++ uses templates to deliver faster code in some linear algebra stuff as compared to other solutions done in C or something. Generic programming also increases code reuse of algorithms. This paper by stepanov is a good read on the topic.
Which particular claim (out of the 5 items listed above) does this paper provide evidence for?
Here’s the paper’s abstract:
Abstract. Generic programming depends on the decomposition of programs into components which may be
developed separately and combined arbitrarily, subject only to well-defined interfaces. Among the interfaces of interest, indeed the most pervasively and unconsciously used, are the fundamental operators common to all C++ built-in types, as extended to user-defined types, e.g. copy constructors, assignment, and equality. We investigate the relations which must hold among these operators to preserve consistency with their semantics for the built-in types and with the expectations of programmers. We can produce an axiomatization of these operators which yields the required consistency with built-in types, matches the intuitive expectations of programmers, and also reflects our underlying mathematical expectations.
Nowhere in the abstract, or its conclusions, do I see a reference to (much less a discussion of) of any of the five claims above?
Also, if by “deliver faster software” you mean performant programs, then we have diverged far off from the original topic of FP purity being “elitism from childish notions” (your belief, for which there is no empirical evidence whatsoever either) - for which you wanted, if I understand you correctly, empirical evidence (the kind FP programmers don’t bother producing, while they are busy producing software).
If you wait for experimentally concluded empirical evidence in software technology before allowing yourself to actually try out new technology or methods so as to arrive at an experiential knowledge, there will be little progress towards anything better and only stagnancy shall remain as ongoing modus operandi.
Quite frankly almost everything I’ve read by Robert Martin – certainly in the last few years – has ranged from “overly simplistic” to “outright bullshit”. I don’t know if he’s always been like this or if this is one of those “doesn’t get wiser as he grows older but more cookier” things. A few years ago a friend of mine got embroiled in a Twitter pissing match with him and he pretty much suggested that he will be prosecuted and locked up for not practising TDD. Okay…
At this point I hardly even consider it worth my time debunking his claims.
Agreed. The way Twitter makes mental decline visible really scares me.
It is generally a problem with any large-scale social network (you are affectively hooked by people you normally wouldn’t even interact with in a subculture or a local community), though it is particularly accentuated in Twitter due to the extremely low-effort it takes to publish and spread content.
If Lobsters becomes as popular as HN, it might start to suffer from some of it as well.
Obviously elitism is harmful, but people do have meaningful preferences about programming languages, and evangelism can help people discover languages that are a better fit for them or their needs.
This rant also reduces programming to just the job, just the business needs. Presumably because the author believes in the primary importance of productivity, another thing without universal appeal. Programming is also a hobby, an art and a medium of scientific discovery.
Sure, programming can be “mental masturbation”, but what’s wrong with that?
Everything on Twitter is performative, no?
Speaking personally, I don’t have time to try every language and every tech stack. I do learn from the experiences of others. I’ve seen some good experience reports here on Lobste.rs over the years. That means I do care what languages people use, at least in two ways. First is the “huh, never heard of that before” moment. Second is the comparison between “thing I know” and “thing I don’t know”. This recent article by Kevin Lynagh hit both of those sweet spots for me.
There’s a world of difference between an experience report and cheerleading, of course. Twitter is best suited to cheerleading or mudslinging.
Definitely on topic. Even as I confess I’m here to plug Clojure because only one person cares what programming language you use: yourself.
I saw your comment in the Newest Comments listing and came here before I even knew the topic. Why? Because I gave a shit that you use Clojure and was curious what you were talking about.
Different languages have different strengths. Choosing a language for a project isn’t an empirical process, it’s a statement of what strengths you want to leverage and what weaknesses you’re okay accepting. In a sense, it’s a statement of what you value.
I agree in spirit with the article’s concept of “performative craftsmanship,” but building a system is not like building a sushi roll. It’s like building the sushi roll, curating the environment where the roll will be consumed, sourcing the fish, vetting the sources of the fish, carefully preparing the rice, and practicing the wisdom of those who came before you while also making your own decisions. In other words, it’s impossible to communicate all the work that goes into what makes it good. That’s why so much cuisine is performative. The chef is trying to communicate much more about the food than what’s on your plate.
I don’t believe this claim. I’ve absolutely seen woodworkers, as well as other types of craftspeople who do creative physical work, “get hot on” the tools they use - in the sense of having personal preferences about tools, discussing the merits of one type of tool over another with other practitioners of their craft, thinking that some tools or broad classes of tool are bad, and so on. Why wouldn’t a professional who earns a living using tools care about the details of the tools they use, or be interested in learning about new and potentially better tools (or new ways of using existing tools) from fellow people who practice their craft? And why should the craft of creating computer programs be fundamentally different from other crafts in this way?
It’s certainly possible for craftspeople to place too much emphasis on the minute details of their tools, and sometimes the correct answer to a debate between different tools is “you can get the work done about equally well with either one” (and this is as true of Clojure vs Python as it is of different brands of circular saw or knitting needle). But I don’t think that tools are irrelevant to the final quality of the work produced, or that craftspeople - including programmers - are wrong to spend time thinking about their tools.
This is true, and it’s also true that sometimes large institutions like Fortune 50 companies lose hundreds of millions of dollars because of Excel-related software errors (has anyone tried to calculate the monetary cost of things like this ?). Maybe companies should be replacing excel spreadsheets with other technology, in the same way that when a plumber works on remodeling a 100 year old building, he’ll probably replace the cast iron pipe he removes from the drains with PVC (or maybe some other type of pipe, I’m not a plumber - but in any case I would expect a professional plumber to have an opinion about this!).
A professional programmer expressing a professional preference about which programming languages are good or bad for different things doesn’t separate programmers into different social classes, and calling people who do this “elitist fucktards” is unwarranted. I would agree that good programmers should be able to use multiple programming languages, and be able to work on different types of software projects. A person shouldn’t solely define themselves as a programmer by what language they use. But there’s nothing bad about describing yourself as a Clojure programmer in the sense of “a programmer who knows who to use Clojure”, and this is an entirely reasonable thing to do when communicating with a recruiter trying to hire Clojure programmers to work on a software project written in Clojure. It’s foolish to portray this as somehow a fault of the programmer doing so.
After all of this, I actually disagree with Bob Martin on object-level point about Clojure! Or more accurately, I disagree with one reasonable inference from the exact text of his quoted tweet, namely the assertion that Clojure is the only important programming language to know in 2021. I don’t know Clojure myself and don’t use it, and I don’t think that’s particularly harming my ability to get paid to write and maintain useful software. I have heard some interesting things about Clojure, and maybe I’ll give it a try one of these days (although it’s not as high of a priority as other things I want to learn). Certainly I have no reason to think Clojure is inherently bad, other than in ways that all dynamically-typed languages are limited. But for me even to make this argument is to presuppose that arguing about the merits of different programming tools is legitimate.
Programmers bikeshed much more than any carpenters or cabinetmakers I have ever talked with or worked with. Sure, I’ve seen carpenters argue about router bits, moulding planes, the use of the low-angle block plane, and other things, but carpenters by and large agree on the tools that they use as an industry. Programmers put tools on an extremely tall pedestal to the point where I feel like the tools are often just a turing tarpit that scratch an intellectual but not practical itch.
Meh, might as well reuse the space for the deleted duplicate of my previous comment.
To argue the counterpoint as much I don’t care about clean coding, I think programmers caring about programming languages is only natural because they use it everyday. Lay users could also care about programming languages, if they were simple enough like Excel formulas or WordPress templates.
Software is interactive unlike dancing which has a clear distancing between performer and audience. A more appropriate analogy would be software for dancers, where the end user can script the dance choreography with javascript for example. In that case, yes end users definitely care about the language because it an integral part of the software customization. To learn animation plenty of people learnt javascript via flash, photographers use python for some filters, AutoCad users might learn some lisp and so on. In all such cases where professionals are concerned Lua beats Lisp any day.
the author dismisses all the arguments about PLT discussions because some people are absolutists: not sure it’s the best choice.
[Comment removed by author]
I’m not sure why you are trying to contort the meaning of the original article into some “pure functional programming bad”, which is very obviously not the point of the article. In fact, you fall victim to the exact pattern the article criticizes.
I recommend some self-reflection.
The original article talks about elitist fucktards in the software industry. I expand on that by stating that programming languages are also elitist and part of the same problem. “Pure” functional programming along with OO is theological in nature, faith driven, derives its elitism from childish notions of “purity” and has no evidence for all its claims.
What kind of evidence are you exactly looking for?
OO and FP were responses to the so-called software crisis of the 70s. I believe the claims were that using these “completely pure” as opposed to mixed techniques would
So far all I see is vague opinions on 4, nonsense and marketing slogans. AFAIK generic programming, seen in C++/Ada delivers some evidence on some of these claims.
Source?
If I remember correctly Blitz++ uses templates to deliver faster code in some linear algebra stuff as compared to other solutions done in C or something. Generic programming also increases code reuse of algorithms. This paper by stepanov is a good read on the topic.
Which particular claim (out of the 5 items listed above) does this paper provide evidence for?
Here’s the paper’s abstract:
Nowhere in the abstract, or its conclusions, do I see a reference to (much less a discussion of) of any of the five claims above?
Also, if by “deliver faster software” you mean performant programs, then we have diverged far off from the original topic of FP purity being “elitism from childish notions” (your belief, for which there is no empirical evidence whatsoever either) - for which you wanted, if I understand you correctly, empirical evidence (the kind FP programmers don’t bother producing, while they are busy producing software).
If you wait for experimentally concluded empirical evidence in software technology before allowing yourself to actually try out new technology or methods so as to arrive at an experiential knowledge, there will be little progress towards anything better and only stagnancy shall remain as ongoing modus operandi.
Have you got figures to support that Haskell (the pandoc dependency) is used less than OCaml in industry? I’d be surprised if that’s the case.