Are we the programming equivalent of "fake" martial arts?

I definitely don’t have the expertise to make any real judgment, but as an outsider knowing very little, it is hard for me to accept that fighting techniques which were used successfully for fighting real battles where the goal was to kill are less effective at killing then the techniques that are used to spar for fun and entertainment.

I recognize I might be wrong about what actual techniques were used historically to kill, and maybe those are what all MMA makes use of, but for someone to claim that a tried and proven technique that was used for the real deal is not as good as some newer technique that was never really tried for the real deal, and only used in toy projects or experiments, that’s just hard for me to believe.

And I think that leads well to the discussion on Clojure. I think if Clojure was just this new shiny language, with a large number of small toy projects, but no real world usage for big multi-tier, multi-dev, large scale systems, I might say that no matter how good it is at those toy projects, it could be a fake “language” that won’t be able to handle the additional messiness and challenges and surprises of real world use cases. But I think at this point it has shown to deliver and be resilient to such use case.

I don’t think so. I use Clojure for all my use cases now. I write scripts in Clojure, I write back-end services in Clojure, I write front-ends in Clojure, I perform data visualizations in Clojure. That’s all I have used it for, and it worked quite well for all of those. There are still some contexts I haven’t tried yet, but I’d imagine it would fair well for a few more, but maybe not all.

Well, another thing my MMA roommate used to tell me is, if you’re just stronger, faster, bigger, more agile and more flexible, you’ll probably win no matter the martial art. That’s why they have weight categories in MMA, it be really hard for a 130lb 4.6" fighter to beat a 250lb 6.5" one.

This is only true in the average though. When you get to the tail end, like the best feather weight can beat the worst heavyweight. Some woman could beat some man, some kids could beat some adults.

I think this is true for programming as well. The good thing is, I think genetics don’t play as much a role for programming. The equivalent of strength and size and agility I think would be fundamental understanding of computer-science and engineering.

Something I have found about Clojure is that, its practitioners tend to have really good fundamentals. In fact, most of the empirical studies I’ve seen, where Clojure normally does pretty well, always point out that they can’t really isolate the language, because the set of practitioners and problems compared varies.

I think for me, Clojure has forced me to deepen my fundamentals actually. I tell some people Clojure is both lower level and higher level then what they are used too. I think this duality helps strengten one’s fundamentals.

About the rest of Clojure, I think something to maybe think about is that Clojure might be closer to MMA itself, in that it really is a mix of all paradigms and styles. Its Lisp heritage and its hosted nature gives it this power to incorporate all good ideas from other places into itself, and still be coherent. Isn’t that what MMA is all about? Take the best ideas from everywhere and combine them to create the ultimate martial art? What language other then Clojure would best embody this mantra?

great word :smile:

1 Like

A statement begun with this caveat should probably remain unvoiced. “I don’t know anything but have opinions anyway” is a curse of the human condition that we should all work to escape.

In addition to training in Western, Chinese, and Japanese (with a Brazilian accent) martial arts, I’ve had hundreds of combat sports matches under a variety of rulesets, a fair few street fights, “dojo stormed” bad martial arts schools to beat up their instructors, allowed “ninjas” to try to claw out my throat to show that it’s bullshit, and otherwise actually tested all the maybes that dudes like to speculate about over beer.

That is, it happens that I actually have studied the question over which you are speculating. In terms of what people actually trained over thousands of years, we’re lucky because they documented their practices!

main-qimg-fccf1050bc19499ec0a88be96251ef8e
(kicking)


(standing grappling)
400px-MS_U860.F46_1450_41r
(ground grappling – the historical source of the wrestling and judo “pin” is immobilizing your opponent so you can kill him with a knife)

I happen to have chosen European manuals for these examples, but there are exact analogs in jujutsu manuals from feudal Japan. Human bodies all work the same way, so given a certain level of technology we all eventually converge on the same set of techniques because they are what works.

Sword/club/whatever combat involves strikes and wrestling because of the range at which it occurs, which is – again – why the United States Marine Corps trains soldiers in MMA now. Here’s what it looks like when a special forces soldier contends with a trained opponent with a knife (a “shock knife” in this case, which is a training tool so you can work on this skills without dying):

The approach shown in this video would be unsurprising to a 1500s European master of arms or a Japanese samurai.

Fighting is an athletic activity. Attributes matter. But any martial art that doesn’t give you the ability to prevail over an opponent with better attributes is garbage. Go watch the early pre-weight class days of MMA to see how this works in practice.

1 Like

Perhaps. But an even worse trait of the human condition is sharing said opinions without that caveat, one could argue that’s what created the source for the linked video in the first place :smile:

I want to say those early Gracie fights? They are certainly inspiring.

That said, let’s all try to keep it on the topic of Clojure moving forward. I know it’s tempting, I’ve fallen off course myself. Though I’d be lying if I said I didn’t enjoy learning about the history you’ve posted here.

Do you feel Clojure is like the MMA of programming borrowing from what has come before it to bring us a language that gets rid of the ceremony in favor of what’s effective? I rather like that idea that @didibus suggested and started to heard towards that direction myself.

I’ll argue that what really happened – what went wrong – was that an army of consultants grew up around “teaching companies how to OO”. There was so much hype and then companies dumped a bunch of money on “learning how to ‘do it right’”. And a whole industry built up around patterns and processes and, frankly, the blind leading the blind. As we all(?) now know, the original concepts of OO got seriously hijacked somewhere along the way and we ended up with… Java :frowning:

2 Likes

I think we ended up with that massive Pattern Language cultural apparatus because Sun spent a billion dollars promoting a new language with significant weaknesses. The Java style of OO made it very hard to write generic, re-usable code, despite claims that it was better for exactly that purpose.

If anyone’s interested in how Java came to be what it was, here’s a good writeup from the inside. Long story short, they had deadlines to meet and couldn’t do the better thing in the time they had, despite considerable pressure from one of the greats:

(For those of you who don’t know him, Bill Joy was a BSD kernel hacker and co-founder of Sun. He authored the first version of vi while still a graduate student.)

3 Likes

To be fair, the pattern “industry” exploded before Java got popular. The Gang Of Four book – which was the culmination of the first round of pattern discussions appeared in 1994. I was attending OO and pattern conferences in England before Java even happened. Sure, there was a lot of “JEE Patterns” stuff that came later, but I really don’t think you can blame Sun/Java for the OO/Pattern Language stuff that came out of the '90s.

3 Likes

I think we must have been running in different circles. :blush: I don’t remember that culture really ascending in education and industry until the late 90s, after Java had taken off. The culture I remember being most common among people coming out of school in the 80s/early 90s was “structured programming”, largely inspired by the ideas found in Pascal. When I read the freshly released GoF book, it seemed like it was mostly for situations where you have objects but no closures, which led me to recommend it in the context of C++.

1 Like

huh… so… i clearly remember us discussing SICM not too long ago… then i read stuff like:

NOW I AM INTERESTED!!! so i click on your avatar…visit your website… fly over stuff mentioning Cicero… scroll all the way to the bottom of that archive page and find the following:

just how great / fascinating is that?!

… also… and… coming back to:

that really struck a chord with me… since… i would imagine, that… for example… working on a project with someone as intriguing as yourself… that’d probably be fun… no matter what the domain / tools involved were… :smile:

2 Likes

This kind of questioning is essential, and I just wanted to root for it. Ultimately, everybody has to answer that question for himself. The circularity in the question will probably taint the answer as well.

1 Like

Have to admit, I did the same, and was quite amazed. It looks like you’ve got some really cool projects @jackrusher which you’re working on in the realm of creative arts.

My bachelor is in Computation Arts, but since I graduated I went full on in the enterprise software world. So seeing that stuff made me nostalgic.

Also it seemed I had completely missed your talk at Clojutre, very fascinating stuff: https://youtu.be/TeXCvh5X5w0

I’m now confused which thread I’m in :sweat_smile:, but if this is the one where we were talking about the different use of Clojure, I think this is one that wasn’t discussed. Clojure is quite good at the creative arts with Quil and Overtone and I’m sure many others.

2 Likes

that to me seams like an extremely important insight!

now… i have thought ( and also talked ) about many aspects regarding and relating to this at some length… if you’re interested… here is a link to a video that sort of sums up a good many… of what i think of as some of the more important points…

…then again… the topic is just so HUGE!!!.. ( … as far as i am concerned,… it may just lie at the heart of human nature / the human condition itself… )… that none could ever do it justice… PERIOD!!!..

having said that… ( i’ve just had a look )… and i do have a ton more philosophical? videos about such topics as information… modelling… language… writing… language complexity… human evolution and stuff like that… yet… or again… all of that ( seams to me ) is not even scratching the surface of what’s really going on…

… but then again… i am no philosopher… i have no licence / credentials or anything of that sort whatsoever… which would / could perhaps grant me any authority on these matters… and so… i guess… what i am trying to say is that you’ll probably find more questions than answers in that ( or those other ) videos… but… you know… maybe that is OK… maybe that’s how it needs to / should be?

While I’m not very excited about the framing of the initial question, I think it does point in the direction of an important concern. It’s very easy (and maybe the natural course) for anything to turn into a cult-like ingroup. One should always be on guard against developing that sort of posture. Here’s a decent writeup of this particular piece of human nature:

One thing I recommend is not to view yourself as a $LANGUAGE programmer.

As @seancorfield mentioned above, programming languages in their daily use are tools. Being a “Clojure programmer” is like being a “saw carpenter” – yes, there are many situations where the saw is the perfect tool, but sometimes one needs a hammer or an adze.

Likewise, beware of investing yourself in the idea that only your community has the right tools, methods, etc. There are many other clever people in other communities doing good work right now. There is not a definite order among those communities from the most benighted to the most enlightened. Instead, there are entangled systems of tradeoffs and preferences at work.

6 Likes

If you don’t mind, how would you frame it? I’d like to get better at framing critical discussions so feedback would be very helpful.

maybe i was wrong after all:

stay safe!

1 Like

I only mean that the “Fake Martial Arts” way of inspecting the question isn’t the region of metaphorical space I might have chosen to explore.

Altho a programming language is a tool its constraints and philosophy have an effect on both how we think about a problem and the properties of the solution produced. Therefore picking a language is not a trivial decision and has a lot of implications. Having said that I’ve worked with a dozen different languages over 33 years and many millions of lines of code, including several million lines of Clojure. In general I would take the constraints and the resulting properties of a Clojure system over most other languages. Is it perfect, absolutely not, but its better than most.

1 Like

May I chip in with a question: how many real wars MMA has won? Even when you set aside real fighting (with rockets, tanks, guns, etc.), how many efficient moves are banned in MMA? Yes, very many of the most efficient ones, mainly attacks to eyes and genitals. Because if they weren’t, the longest fight will last less than a minute, and no fight would be interesting to watch.

So, MMA is “fake”, just as any other martial art in that sense. That does not invalidate its usefulness as a tostosterone competition, but it’s still far from the “real” thing.

I don’t think this sort of comparison could help with tech. Programming is an intellectual activity that always involve some faith. How Clojure fares is best seen by it being often used by converts from other languages, mainly in industry, and rarely seen in academia. Maybe Clojure is MMA in your analogy?

3 Likes

Ya, I think the question would have been better framed as just:

Is Clojure as good as we make it sound? Is it truly much better then other languages? What if it isn’t any good? Or isn’t actually much better, maybe even worse then other languages? How would we know?

2 Likes

What we now call martial arts hasn’t won a war since the advent of gunpowder. Prior to that? It won all of them.

The original UFCs didn’t ban many moves and they didn’t want to ban any. I don’t believe the Gracies banned anything when they were doing their challenge matches prior to the UFC. The only reason anything is banned is so that they can get sanctioned by the states. There’s 2 important things about those deadly techniques: 1) they’re very hard to land against a live opponent, 2) trained fighters know how to avoid them. Look at arm bars and chokes in the UFC. When UFC 1 happened, nobody got out of a rear naked choke. Now, it’s more rare for somebody to lose to one.

Hasn’t that kind of been proven, though? There’s nothing you can do in one language that is impossible to do in another. All that changes is how you achieve the goal. So, better or worse really just comes down to how easy it is to achieve the goal you’re trying to accomplish. Writing a device driver in Clojure would be very difficult, for example. Does that mean Clojure’s a worse language? For that task, yes. For other tasks, no.