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

For me, I do. The traditional arts were developed at a time before guns and people needed those skills on a regular basis to survive. What has happened is that as society has evolved to where that’s no longer needed, the theoretical side has taken over. That’s where you get the fake arts, with people who associate touching somebody with hurting them. That’s simply not how it works.

BJJ, to me, falls half way between real and fake. It was designed to be useful in a sparring environment, not on the battlefield. The Gracies’ favorite catch phrase when they first promoted the art was “the brutal reality of the streets” being that most fights ended up on the ground. I grew up in a small town in the boonies of Ohio. One-on-one, empty handed wasn’t even the brutal reality of those streets, let alone LA or New York.

Applying that to programming, I have a hard time listing any general purpose language as equivalent to fake martial arts. Each language exists to solve a real problem that’s being hit in the real world. Clojure was developed because of Hickey’s experiences delivering products to customers. Same with the other languages, even the niche ones like Rust, Go, Elm, Erlang, etc. The ones that I would put as comparable to fake arts would be ones like BrainF**k or Logo that were designed strictly for teaching or as a lark.

1 Like

That’s why I think the way you’re framing it is not a useful model for answering the OPs question.

You’re drawing an arbitrary line in the sand where something crosses over into “fake” or “real:” a martial art must be “battlefield” tested and work on the “brutal reality” of the boonies of Ohio. We can argue for hours on the efficacy of specific techniques and practices in various contexts; it doesn’t really matter.

Practicing aikido, wing chun, BJJ, TKD, Mauy Thai, tai chi, Krav Maga, whatever is all fine. What stands out to me are the people who train and are clearly delusional about their own capabilities, and have no mechanism to test their capabilities built into their practice or their community. For some arts, their community hits a critical mass of people who exhibit this behavior where it becomes difficult to take them seriously. I think it’s far more interesting to use that as a way of classifying “fake” martial arts rather than “anything that hasn’t been used in a war.”

Using this lens, you can then try and answer the OP a little bit better; there are definitely different languages and programming communities that make claims about their efficacy, some which have clearly not actually tested their claims. And there are definitely programming communities that are very insular and don’t know really understand how they compare to other languages/communities. This can lead to people deluding themselves about their chosen languages merits, and left unchecked (either by using in production or lots of mingling with other communities), leads to zealotry and delusion.

Not trying to take a pot shot, but to give an example, many of the people over at reddit’s r/lisp fit this description in my opinion. It’s not that Lisp itself is bad, but the combination of an insular community, very few large scale production uses of it, and a sort of legendary history leads a very vocal group of people to the unexamined belief that Lisp is the One True Language™️.

It’s obvious to me that there are some wonderful things that live inside of Lisp, that we all would be better off understanding, but there’s also a lot of tradeoffs and bad design decisions. To me, Lisp falls under the umbrella of “fake [programming] arts”: has some good stuff, but doesn’t really do what it says on the tin.


All of them have hit that critical mass, including MMA. The definition of martial is “of or appropriate to war”. By definition, a fake art would be one that isn’t martial, i.e. not appropriate for war.

Lisp falls under the same umbrella as Kung-fu, Karate, etc. It was useful and powerful way back in the day, but they’ve invented better stuff. Back in the 80s and 90s, Lisp did deliver on what it says on the tin. It doesn’t any more because every language out there has borrowed the useful parts of it.

I think this is a good point. There tend to be that with the kind of freedom that Lisp provides at the fundamental layer of abstraction, like the syntax of the language itself and its semantics are flexible. This is a weird attribute. Its like metallurgy at this point. You can do a lot and have so many options where you take this, but do you want to train for the sword, the axe, the shield, etc. Yet I think in the Lisp circles, much time is spent deliberating at that level, never going beyond it.

I think one thing Clojure improved over CL is having an opinion at the layers above. Sure, you’ve got macros, you’ve got reader literals, you can take this syntax anywhere and the semantics everywhere.

But Clojure said, these are the best data-structures, we shall make them our basic set of moves: immutable vectors, maps and sets. Lists shall only be used for manipulating and representing code.

We shall agree on common literals, which improves the syntax from the context of those fundamental data-structures we established.

We shall have this common abstraction, the sequence, we shall build many more tools around it. It too shall be central to how we model our data transformation.

We shall embrace the good parts of OO such as open polymorphism and interfaces.

We shall have value equality of objects, embrace multi-threading, choose CSP over actors, and shall target very specific platforms.


Basically, it has gone beyond Lisp’s essence and has brought a conversation around the set of lisp functions and macros that make the most sense. It encourages spending a lot of time thinking about those and making sure they provide us value and work well together.

If you think of most other language, only maybe on v0 of the language does the designer spends time thinking and debating syntax and semantics. Once that’s established, rigid as most other language are beyond that point, all the focus turns to the next layer. What are the supprted constructs, and what’s the standard library going to be like. What are the frameworks going to do and work, etc.

Sometimes I feel the Clojure community almost resist this ascent. There’s a large portion of members who still reject the JVM, reject JS, and want a custom runtime. Others who keep thinking about changes to the fundamentals, can’t transducers replace sequences, why is contains not called contains-key, could defn take the doc-string after the arg vector, should we allow reader macros, etc.

Not saying any of that doesn’t matter. But if you look at where other community invest their time and effort, it is rarely at such a low level. Arguably, they have no control on it, and changing that level is so.much effort on most other language. So people focus on the higher level pieces.

I think this is something that Clojure does better than other Lisps, but still worse than most popular languages.


I keep trying to look away so I’m not tempted to comment more about the martial arts portion of this thread, but I’m having a fairly strong “someone’s wrong on the internet” moment…

Everyone thinks there’s a magic trick that can overcome a trained opponent. The two most common claims, repeated in this thread, are that eye gouging and groin kicks are those tricks.

If you have not trained in a practical striking art, I promise you that you will not be able to touch a trained fighter’s head, much less the smaller target of their eye. Here’s a video to give you the flavour of how much like a magic trick even basic head movement is to the untrained:

(good stuff starts at 1:38)

In addition to this, if someone is beating your ass the last thing you want to do is raise the stakes in the confrontation. They can gouge your eyes too, and if they’re a good wrestler they can pin you helplessly to the floor while doing it repeatedly and with impunity.

The same applies to everything groin-related.

“No one has won a war with MA since the advent of gunpowder”

(Nasal geek voice) Well, actually… guns are not equipped with infinite bullets, and often fail mechanically on the battlefield, which leads to settling matters manually even in the modern era. This is why CQC (close quarter combat) is still taught to soldiers today.

Of particular interest in this regard is the Russo-Japanese war of 1905-07, in which the Russians were so humiliated by their loss to the Japanese – much of it because of hand to hand fighting – that they sent people to train Judo at the Kodokan so they could create a national martial art. This is the origin story of the Russian national MA and sport called Sambo, which mixes judo, wrestling and kickboxing – that is, it’s MMA in a judo jacket and shorts.

In addition, if you spend too much time reading accounts of trench warfare in WWI, it comes into focus that those not killed by bombs or machine gun fire were beaten to death with shovels, drowned in puddles and stabbed to death during CQC in trenches. Most nations revamped their hand-to-hand protocols around this time on the basis of these experiences.

Likewise, there was enough plain old CQC murder in WWII that most world powers revamped their systems. The English and British forces adopted a curriculum created by W.E. Fairbairn, who put together a mix of Western boxing and wrestling with judo/jiujitsu and Chinese kicking techniques while serving as an officer in the Shanghai police force. If they had created a sportive venue for this system, it would have resulted in a Western form of Sambo starting from the 40s and the Gracies wouldn’t have had a business model.

Modern CQC is now literally MMA training plus weapons-related stuff (see the knife defense video upthread). That everyone who really fights ends up with the same basic vocabulary of techniques and training methods comes down to the sameness of physics and human anatomy.


The fact that commercial use of Clojure keeps growing shows that it is at least as effective as other stacks. Business competition is Darwinian in nature, and technologies that don’t work end up being weeded out bacause the companies using them fail.

So, at worst, Clojure is as effective as a mainstream language, but it feels good. I would argue this is a value of itself since happier developers are more motivated and write better cause.

However, I think it’s also worth noting that Clojure is significantly different from traditional languages and has a fairly high ramp up curve because of that. So, the fact that it’s getting adoption despite this fact indicates that people are finding something that’s lacking in their current tool sets. If there was no value in using Clojure, then we would likely not see companies like Apple, Atlassian, and Walmart use it in production for their mission critical products.

To sum up, Clojure is actively competing with other technologies in the wild, and it’s clearly holding its own against them as usage continues to grow, and feedback from companies using Clojure is overwhelmingly positive. Using the martial arts analogy, Clojure is actively competing in the MMA arena of martial arts.


… now… first of all… i am a huge fan of your luminus related work :smile: …i have been using it for a while now… and i am super happy with it!!! GREAT STUFF! KEEP IT UP!!!

…having said that… the arguments you outline in this post… well… they do seam, to me at least, kinda shaky… AT BEST!

now what do i mean? … well… where to begin? :smile:

so… for one thing… to me people always come first… so… to me it is never just about the argument,…NO!.. it is at least as much about the person delivering it… and so… often times… to me… “cui bono” seams like a great place to start… also mind you the following:

so… given the fact that you are highly invested into clojure yourself… that alone puts you at risk to become somewhat less objective… ( socrates was ugly, mind you :smile: )

…so it feels to me like you are trying to rationalize / justify your own preferences… which then leads to weak / questionable arguments… which you don’t really need to advance in the first place :smile:

for example…

this does not work at all!.. you could claim that clojure feels terrible and makes programmers less happy just as easily… you see… in order for this logic to make sense… it has to remain limited to the personal level… hence… this can not possibly hold water for the general case… i.e. this really isn’t convincing at all!

also… there is this huge problem with cause and effect here… you argue… companies using clojure are doing reasonably well, therefore clojure is necessarily at least on a par with other programming languages… which is a HUUUUUUUUGE leap… one that i am certainly not willing to follow… you see… not only is a programming language just one small factor in the extremely complicated puzzle that is the successful functioning / operating of even the smallest of enterprises… worse… it is not even clear… i think… if technological soundness necessarily fosters economic success… now you may say… ohh… but what he is saying is just nonsense… the causal relations are clear as day / could be!.. to which i will reply:… how do you prove to me that smoking causes cancer of the lungs?.. is that obvious?.. you may think so, but it most certainly is not!.. in fact… there have been decades of countless trials… and the definitiv answer / proof did really only come with the advent of modern genetics… because… you see… to soundly proof such correlations is a really tricky business indeed!!!

then there is this notorious problem with feedback… so you argue:

that means almost nothing at all!!! one of the main problems with it is that the people you ask are already invested in clojure and paying for it so to speak… now… let me give you another example in order to be able to better illustrate my point… suppose you were interested in the effectiveness of psychoanalytic-therapy… so… what are you gonna do?.. well… simple task you say!.. lets just ask the therapists and the patients, what they think of it!!!.. ( …and insurance should pay or not for the costs of the treatment, based on that outcome of that survey?.. ) …so you go ahead and do that… and WHAT A SURPRISE!.. you well get feedback that is overwhelmingly positive!!!.. but… so… does that mean it is effective?.. just because people involved in it like doing it?.. and because they report that it is effective?.. well… personally i do not think so :smile:… because… always keep in mind… CUI BONO!.. also i think this example in particular… it can be very insightful… since… you know… we are discussing clojure… and how well it works… but on the large scale of things… nobody really cares about that :smile:… on the other hand… an enormous amount of energy has been invested in exploring the effectiveness of psychoanalysis… yet… here is all that wikipedia is comfortable saying about that:

…now… when i read your post… and felt like i had to reply… i thought i had many more objections that needed to be raised… but now… i am afraid i have already forgotten about most of them… so… i don’t know… plus… i guess i have already made a few critical remarks now already… and also i do not wanna sound too harsh… also… i am really a huge luminus fan!

so… let’s perhaps end with a quote from oscar wilde:

“A cynic is a man who knows the price of everything, and the value of nothing.”

which i personally like to turn into:

a lot of ( cynical? ) people seam to think … or at least argue… that price = value and popularity = quality… BUT I BEG TO DIFFER!!!

so… what does ultimately give value and meaning to our all lives?.. well… hmm… i don’t know :smile: … but there is this nice quote from zhuangzi… which is kind of fun to contemplate for a moment or two: :smile:

“All men know the use of the useful, but nobody knows the use of the useless!”

p.s. i just got a:

Your post was flagged as inappropriate : the community feels it is offensive, abusive, or a violation of our community guidelines.

so… now i am not really sure what to make of that… i have just re-read the community guidelines… and i am not really sure how this is supposed to be in violation of them… so… let me be very clear on this… i think very highly of Yogthos and his work!.. i have also made a few small contributions to luminus myself… i just think that the particular argument i have commented on is not a 100% convincing one… so… well… i don’t know… does Yogthos himself even think of this as being offensive?.. if so… obviously i will apologize right away!.. that was never my intention!!!


this does not work at all!.. you could claim that clojure feels terrible and makes programmers less happy just as easily… you see… in order for this logic to make sense… it has to remain limited to the personal level… hence… this can not possibly hold water for the general case… i.e. this really isn’t convincing at all!

Explain to me why people would jump through hoops to use a niche language if they didn’t enjoy using it. After all, it’s a lot easier to get a job using a mainstream language. There’s a lot less effort involved in learning a mainstream language as well since there’s a bigger community, more documentation, and often better tooling available. My argument is that people choose Clojure despite it being niche. Furthermore, empirical data appears to support my argument

which is a HUUUUUUUUGE leap… one that i am certainly not willing to follow

I agree that there are plenty of other factors involved in creating a successful business, however if Clojure was a significant determent to delivering working products then companies would fail. We don’t see people using Brainfuck to build their products for example. We’re also seeing Clojure usage in production grow, and people who do use it talk about tangible benefits they saw compared to other technology they’ve used. So, at the very least there is a perceived benefit from people using Clojure. This goes back to the earlier point that if nothing else, at least people find it enjoyable and productive. Here’s one concrete example

that means almost nothing at all!!! one of the main problems with it is that the people you ask are already invested in clojure and paying for it so to speak

I disagree, lots of people talk about specific problems they solved with Clojure, and why it was easier to solve these problems than with other technologies they used.

To sum up, the feedback from majority of people using the language is that they are happy with it. Nobody is being coerced to use Clojure, it’s a completely voluntary activity. Seeing that the community keeps growing, I think it is quite reasonable to say that people do enjoy using the language.

My experience is that developer happiness is a big factor in productivity. There are lots of studies, such as this one, showing that developer happiness is a factor in success. This is one tangible benefit of using Clojure supported by the available data.

There is also no evidence that I’m familiar with to suggest that Clojure has any negative impact on code quality. Here’s a replication study looking at code quality in different languages, and Clojure clearly isn’t an outlier in any way.


It seems we have a few different arguments going on.

Is the Clojure language like a “fake” martial art?

  • Is it as effective or more so than what you commonly find out there?
  • Clojure seems to be developed with a very specific vision in mind. Does it make it super effective for problems it’s intended for or does that get in the way of long term, widespread reach? (Like catch wrestling, seems effective but very specific)
  • How can we quantify effectiveness?
  • Is Clojure more like MMA incorporating many practical techniques from the languages that inspired it?

Are we like “fake” martial artists?

  • Have we created a bubble for ourselves where we feel Clojure is the best, only true language because it’s what we use, what we enjoy, and where we spend most of our time with?
  • Are we as a community at large learning from other innovations and incorporating what works or are we dismissing anything that doesn’t come from within the Clojure community?
  • Are individual Clojurists exploring other languages and solution strategies to learn alternative approaches to incorporate and evolve our work or are we perhaps unintentionally rewarding loyalty and devotion?
  • At large does the community respond to criticism constructively and openly, or do we become overly defensive, dismissive, and make excuses?
  • Do the leaders of the language\community cultivate a healthy give and take relationship with the community or do they act above questioning and dismiss any attempts to do so?
  • What can we do to keep our egos in check and make sure we don’t fall into this trap?

Comparisons between MMA and traditional martial arts?

  • Unavoidable territory considering I invited the comparison
  • Not what I’d like to focus on

My Thoughts

Is the Clojure language like a “fake” martial art?

  • No. It has practical value to the common problem spaces out there. In many cases it improves upon what traditional languages and approaches can offer. Often solutions take less code, and significantly less boilerplate to get there.
  • There’s room for more discussion on how to measure effectiveness but those articles like real-world example comparisons are a great start
  • Clojure’s use in production, growing popularity, and developer happiness are not the strongest proof here as fake martial arts can also be used in production (for instance some fake martial artists end up getting to train police officers and military personal in demonstrations which is scary to think about) and grow in popularity and be fun to learn\use.
  • I see where @Yogthos is coming from: Successful companies using Clojure may suggest that it’s effective enough to solve many business problems out there but I see @taf’s counter-point that it’s hard to attribute directly to the use of Clojure with so many other factors involved.

Are we like “fake” martial artists?

  • I think we can agree we are not like a no-touch martial art selling something that is completely ineffective.
  • At worst we can perhaps be like a dedicated traditional martial artist convinced ours is the one true art
  • I felt @lilactown’s answers which gets into more detail about that comparison: Mainly that we narrow our focus to one discipline then convince ourselves its the only correct path. When talking to non-Clojurists I know I have come off as over-confident and arrogant in the past so I need to keep this in mind.
  • I liked @seancorfield’s suggestion of learning a new language every year to keep up with what’s available.

Comparing traditional martial arts to MMA

  • Looking at the video linked in the OP as well as similar ones, the traditional fighters are not losing due to the rules or from being held back employing more lethal strikes. They simply lack the skill to attack, defend, and move with another highly trained and experienced fighter. They are consistently outmatched. In many of these cases they were the ones who issued the challenge to the MMA fighter in the first place. Especially in the case of Xu Xiaodong.

One last thought:

A friend sent me this which I felt had a beautiful, relevant quote to it:

The tool molds and is molded by it’s user. In my experience the same happens for programming languages: the usage of a specific programming language will mold it (the user will extend it by creating scripts, libraries, blog posts, etc which will influence the evolution of the language itself) and the language will mold the user by influencing the way he thinks about problems, therefore creating a virtuous or vicious cycle between the user and the language.


That’s a pretty good summary.

I think, if you think of what makes a fighter a good fighter, maybe that’s a better angle to move the conversation further. The question of if a particular technique can make you a good fighter is always going to be a bit of a stretch of the imagination.

So I would like to think about what makes a programmer great. There is a chicken and egg here. Does the great programmer make a programming language appear great, or does the great programming language make the programmer great?

I think this is a dance somewhat. I think learning new ideas, new techniques, new approaches, definitely makes you a better programmer, and similarly, great programmers will make any programming language appear great, and if contributing libraries, frameworks, or even being in charge of the design of the language, will influence how great the language is as well.

I won’t answer more of this myself, I’m interested to hear what other people think, what makes a good programmer good? Why are some programmers better then others? And what can you do to improve your own programming skill as quickly and effectively so you can become a better programmer yourself?

P.S. I will leave this with another paradox. I’ll make the assumption that it is acknowledged that to become better at anything, one needs to constantly challenge themselves. Easy things will not push you beyond your current skill level, sticking to easy things won’t help you improve. If you use a programming language which focuses on “ease of use” and being “easy” and making things as “easy as possible”? Does that mean you won’t be able to become a better programmer? If instead you use a programming language known to be “challenging to learn”, “hard to master”, “with a big learning curve”? Does that mean it will directly contribute in making you a better programmer?

1 Like

This is actually a very tricky question because there’s a broad school of thought – very reasonable thought – that you can teach anyone to program and that anyone can become a reasonably good programmer. There’s nothing inherent about programming that excludes anyone on any realistic grounds.

There’s also a school of thought – which in many ways is behind a lot of (very problematic) Silicon Valley culture – that there are genuinely 10x or even 100x programmers and those “amazing” people can drive “disruptive” change by cranking out ground-breaking new apps that will be worth millions. The “guru” programmers.

The former school are in the “programming is nurture” camp, the latter in the “programming is nature” camp, broadly speaking.

If you believe programming is a creative exercise (as opposed to, perhaps, an engineering exercise) then you are probably more inclined to believe that individuals can excel within any language. If you believe it is more on the engineering side, then you are likely more inclined to believe that good tools can make “any” individual great.

(I think it’s a bit of both, based on everything I’ve seen in the industry in three and a half decades)


love the nature versus nurture angle!

…also i agree… definitely a bit of both!.. having said that… you can’t really do much about the nature part… therefore i makes sense, i think, to focus more on the nurture part… so for example:

i think that is pretty interesting… and this kind of reminds me of the situation in which someone wants to play the guitar… you know… just around the campfire… or when at a bbq etc. …so… they will learn a few basic chords, a few basic strumming patterns… a few well known songs… done!.. then they will go perhaps a lifetime playing the guitar like that… perhaps never even knowing the notes on the fretboard… similarly i can see someone wanting to become a programmer… learning about a few basic concepts like a loop… getting a job… and perhaps never even knowing about the lambda calculus… :smile:

so… why is it that some will push themselves further / harder? what is the incentive / gratification?

also… one final remark on something that really keeps pushing my buttons lately… like A LOT!.. and that is this nonsense of the:

… now i get this sooooo often these days… and people will not even be contempt with 2 orders of magnitude any more… they will talk about 1000x or 10000x programmers… which is just CRAZY / LUDICROUS for the run of the mill kind of work that ( i and ) most ( other ) people do!.. i mean… ahhh… i don’t know… i am starting to feel again like when i have to talk to people claiming that nietzsche was an antisemite… or that vaccination causes alzheimer’s disease… and i really don’t wanna go on a rant right now… so lets just leave it at… i am very skeptical about this stuff :smile:

p.s. i have also given this entire thing about me being offensive / abusive in my previous post a bit more thought… and although i really didn’t mean for it to be offensive / abusive… and although i really do not think it is offensive / abusive… i can still see how i could have chosen my words a bit more carefully… and how… if you read it over very quickly… i guess you could be left with the wrong idea… so… and with that… i guess i just wanted to say, that if what / how i have responded to Yogthos offended you… please forgive me… also… i will try to be a bit more careful / considerate about this sort of “the-tone-makes-the-music-thing” henceforth.


This reminds me of a comment that was often made in one of my previous tech communities, that were developers claiming “15 years experience” but on inspection it became clear that they really had one year of experience that they’d just repeated fifteen times… (because that tech focused on being “easy”, not “simple”, and it attracted a lot of self-taught programmers, often with prior non-technical backgrounds).


I always wondered about that myself. Mainly I wonder if it’s about trying many different challenging problems or trying 1000 different ways to solve the same problem.

For instance master sushi chefs, Itamaes, train for years doing the same task. After 5 years of basic training an apprentice gets the opportunity to make the rice. It may then take years making only rice until the senior Itamae decides the rice is good enough to promote them to be “near the cutting board.” After years of that they may finally get to prepare the fish. Imagine how refined their skills are by that point?

Learning about that from the Jiro Dreams of Sushi doc made me wonder if there’s a particular kind of depth trying to solve the same problem differently each time. I think the trick is not to be complacent but still striving for improvement with each iteration, then learning how to do it consistently.

Unfortunately this is a whole different comparison but I think I can bring it back to the original theme!

1 Like

That’s an interesting outlook. Honestly, this is another super weak area of science. For example, there’s the famous study mentioned in Gladwell’s outlier book, which states 10 000 hours of practice is key to expertise. But then there is a replicated study that found that practice isn’t the only criteria, but it only had a sample size of 39. Both studies suffer in that they are simple surveys as well, I always find measuring things through surveys, unless we measure peoples emotional feelings, to not be very accurate.

Beyond that, there’s quite a few studies which show that practice is definitely not all it takes, but seems to be required. There’s some proof of genetics at play, there’s some proof of quality of mentorship, the type of practice, the person’s interests and motivation, and the amount of practice. All seem to play a role. I tend to reject single variable explanation for anything as I’ve rarely seen this true in the real world, so to me this mutli-variable model follows my intuition.

But a lot of this is about comparing one person against another, and personally that’s not my philosophy. I strive only to outdo my past self, this would be true even if I was the worse compared to everyone else, my interest is in how can I be better than myself a year ago.

That’s why I don’t really care about the “nature” idea. Until such a time where I can alter my own genetics, from a practical standpoint, the question is just how can I nurture my potential to its fullest.

Which is where I think it’s an interesting take, should you practice the same thing 10 000 times, or should you practice 10 000 different things?

My intuition says it depends what your goal is. For computer science and software engineering, generally, you don’t build the same thing over and over again. If you did, you’d actually not be paid anything, because software can be copied infinite times, which isn’t true of say a house. Build the same house 10000 times, maybe 10000 people pay you for it. Build the same website 10000 times only one person pays you for it. It’s in the differences that you get paid. People want new things, different things, they want you to solve their very specific needs and problems. I’ll generalize this and call it problem solving. People want you to use software to solve their problems, and they don’t all have the exact same problem.

So from this axiom, that software engineering is always about solving new and different problems than what you last solved, I’d say it pays off to practice the same. That means practice solving different problems, or at least solving the same problem in different ways. And probably best to do both.

I say practice, but I think it’s also worth it in our case to read about problems and how others have solved it. Building a mental dataset of solutions to many problems help you solve new ones. Cause you can do a kind of nearest neighbor search in your head.

And solving the problem isn’t enough in my opinion. Understanding what the problem is, being able to explain it succinctly to others, being able to explain your solution, and maybe replicate it a few times, understand its limitations, come up with a few alternatives, explore what differs between them, etc.

I say that because a lot of problems can be solved by brute force. But this isn’t reliable, who knows how many attempts until you solve it. Building a cognitive toolset to figure out shortcuts through the problem space is key to productivity or solving really hard problems.

Circling back to Clojure, all I can say is I feel it helps me do all this. It does it by kind of just getting out of my way, and by letting me do whatever I want, because of how expressive it is. No ceremony, no constraints. That’s what I look for in a language. It also helps me in bringing new ideas and new techniques to my attention, some from the core language itself being so innovative and different, and the community being so full of smart and interesting people.

1 Like

I agree that building the same thing the same way 2 times or even 1000 times would likely hinder development. Though what if you had to make 1000 different web apps? You could try every frontend framework, you could combine each with a different Clojure backend. Once you’ve exhausted those options you could try other languages to see what they offer then try to incorporate what you liked into the next web apps you create with Clojure if that was preferred.

If you had to hire between two people:

  1. Someone who worked like mentioned above. Created many web apps but clearly pushed themselves and tried something different with each one.
  2. Someone who tried a platform/medium only once. Made a web app, made a mobile app, made a desktop app, made a CLI, made a game, made a library, made a template, etc…

Which would you hire and why?

I think those categories arn’t good. You need to approach things from fundamentals. The difference on some of these is just the coat of paint. And with others, the differences are too much.

You can definitely benefit from specializing in a certain category, and then it helps to focus your practice and learnings in relation to that category. But you’d still want what you learn about and practice, within that category, to still be varied and to overtime grow more ambitious time after time.

Coming with good categories is actually the first challenge.

For example, made a web app. What’s that? That’s the category of any piece of code that interacts with the internet? Or is that only the category of any piece of code that runs in a web browser? Does it assume that it only counts if all the code runs in the browser? Or are we saying this is the category of applications that do not run in a web browser, but exposes controls through a web browser? Is it all of the above? Is it even more then that?

That’s just from the tech side. What’s the application domain going to be? Is it a simulation engines for physics? Is it going to be 2D graphics manipulation? Is it going to be financial transactions? How much of the domain do you have to learn and become knowledgeable in to model it into a useful application?

So I mean, within the search space of all software , you can specialize for sure. But within that specialty there’s still a ton of wiggle room, and on there you should diversify and make sure you take on more and more ambitious projects.

And now, across all category of software, some things will be same. Those are the fundamentals. I know a lot of people complain about fundamentals. Like I want to make a website, why does University not teach me how to do that, but instead teaches me about hardware, OS, networking, graphics, sound, data-structures, algorithms, storage technologies, information handling, math, data modeling, computational complexity, file systems, input devices, code structure, code modularization, compilers, linkers, etc.

Learning and becoming more familiar and knowledgeable about those will always help you get better, no matter the category, because these are same accross all of them. Those are the real tools of the trade.

So an example of what I’d say is bad would be say if you offered services to build blogs for small businesses and individuals. And it’s not really that it’s bad, it’s just that this is not really practice for being a software engineer or a computer scientist. This is about making small websites that lets people post small articles and will see a small amount of traffic. The fact that someone needs to know a little bit of coding to build this is accidental complexity, it’s because the software engineers have kind of failed to deliver the blog building software people are really asking for.

Its like if your dishwasher required a little bit of custom wiring everytime it got installed. Actually, those do require a little bit of plumbing and need a professional installer generally to come install it for you.

I’m not making any judgements here. I’m just saying it’s different goals.

Say you now wanted to go from small blogs, to full news website? To a network of them? With integration with physical print and tv. To then handle payments, and deal with fraud, and then offer a mobile interface, and then a console app, and now you wanted a chat app, and a online support center, and you wanted it to handle investor report, analytics, and newsletters, and it now needed to scale to a global audience in the millions of views per day, etc.

What would you do for that? Would you still just build another blog for your mom, and then build one for your dad, and then your best friend, and then your girlfriend, over and over?

Well, I’d say if so, you’re going about it the wrong way, and it’ll take you a whole lot of time to get any better at being able to do all the above.

I’ve rambled a bit, but I’m not finding a way to summarize my thoughts more concisely right now sorry.

1 Like

… not really THE answer… but still… not hatin’ it… :smile:

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.