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

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)

2 Likes

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.

3 Likes

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).

3 Likes

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.