It was an effort by big tech to create low level “coders” and grunt workers to lower the bar and compensation for more valuable personnel.
That said, it was great for introducing people that were never going to be professional developers to a powerful productivity multiplier and cognitive toolkit.
It is a matter of deep intuitive capture and understanding of complex problems / data systems / processes…and intuiting the intersection of that structure with the structure of the computing system that you are using as a tool to solve the problem. That isn’t something that can necessarily be taught to everyone.
Aptitude barriers to professional competence in the space are significant, and a minority of the population can ever be more than barely performant no matter how many syntaxes they know or sorting algorithms they memorize.
Hell, I’ve been engineering software and hardware for 4 decades and am considered an expert in my field, and I find I am barely up to the task of complex problems, having to break them down and lose any value that the hidden interrelations that the chunks might have because I simply cannot see it in the timeframe permitted. When a problem gets up over 6 dimensions or so I can’t “visualize” it any more at as a whole without overgeneralizing to the point of an extremely blurry interpretation. When visualizing things in frequency space instead of coordinate space I am even less performant.
I have met people that can effortlessly juggle a seemingly limitless dimensional space without giving it a second thought, and I can tell you they are rare and truly exceptional people in that regard. Maybe 1/10000 of the population, and most of them go into maths. But that is the skill you need in order to intuit the correct data structure for a complex problem.
I think It is a matter of being able to hold a lot of context and logical relationships front-of-mind for meaningful periods of time, and for most people that also requires exceptional concentration skills and an ability to ignore distractors.
Those are things that are not typically taught. Students normally bring those skills with them from childhood, and education serves mostly to expand their understanding, teach them new ways to express data representations and processes, and generally to broaden and sharpen their skills.
That doesn’t mean that we shouldn’t teach everyone how to write programs to solve problems. It just means that it doesn’t represent a career opportunity for everyone that can put together a simple invoicing program in python or make a cool JavaScript animation.
Us elite 10x engineers turn our noses up, but random business users are building workflows and processes in stuff like PowerApps all day.
Yet the biggest hurdle for me was actually trying to grasp OOP. I understood what function is, a loop, an condition a variable, a record, but I had very hard time to understand why I needed to write classes, instantiate them, make property private... Now I get it: polymorphism, encapsulation. But still. These are not easy concepts for people with no formal compsci education.
SVN, I got it, MYSQL I got it, but OO? fast forward 10 years and I was all about Symfony 2, design patterns, IoC, ...
My point being that anybody can learn to code and write programs. I just feel like higher abstraction like OO, while they are certainly elegant and useful for maintaining huge codebases, are not necessarily something people wanting to learn programming should be obsessed about (though obviously, all most successful modern languages tend to be OO now, so they have no choice). I don't think PHP would have been that much of success if it forced OOP everywhere when it started.
I mean people programmed without OO for decades before it became really mainstream, therefore most programmers did not have to understand the concepts it carried to work.
You don’t. It was a lie. Tying functions into state is silly. 90s era OOP has no resemblance to Alan Kay’s original concept. If it didn’t click for you, it’s probably because you have a solid bullshit detector. You did nothing wrong.
Well, its all very arbitrary. But the idea is that people expect these practices to lead to better code, so you should follow them. There isn't really anything deep to understand. You just do it like that.
That's not a very fulfilling answer, so it's tempting to want to know why people think these practices lead to better code, but I don't think that's really that important for "understanding" programming.
NoahZuniga•6h ago