It is OK to have basic literacy, and the educational system is quickly adopting coding as part of basic literacy. That, in turn is making more and more people good enough to do basic coding, even if they will never do it as a professional career.
Just like people play basketball in their drive. Just like they drive their cars around town.
They might make a decent birdhouse/python app, but after that most will just put the knowledge on the shelf.
If only. They're mostly fooling around with random low-code or no-code tools that get misrepresented as "learning to code", when literally just teaching BASIC, LOGO or PASCAL in K-12 the way they used to do it back in the 1980s would bring us all a lot closer to that worthwhile goal.
Or knowing when you need to call a plumber vs running to Lowe’s and fix it yourself.
I don’t thing we should expect anybody beside software engineers to be software engineers.
But a greater code literacy would go a long way.
Imagine scenarios where you hand over your code delivery to a client that can actually run and manage it.
I don’t know what NBA level would mean for software.
You need a uncanny, almost innate ability to perform in a extremely competitive field, where a ton of other really good agents are operating at the same time.
I can’t think of anything like that in software really. E-sport would apply but it’s not really the subject. Maybe some demo-scenes? Or raw effective genius ala John carmak.
Writing code as part of a job isn't being in the NBA, it's just like writing as part of a job.
> Not everyone can safely drive a car.
A better analogy for code, but only a very small share of those who are employable at all are not employable in a job where driving a vehicle is a part (though not necessarily a central part) of the job.
There's no reason coding can't be like that.
> Not everyone can architect and write good code.
Not everyone can organize and write quality prose, either, but most people who can't can still get jobs where writing text is a required part of the job.
You are a pointer, pointing at nothing.
Attempt to put shit where you're pointing and you have shite all over the floor.
Malloc creates a bucket. Now when you put shit where you're pointing it lands in a bucket.
When you're done with the bucket you clean it up.
If you try to put too much in the bucket, you end up with shite all over the floor.
If you forget to clean up the bucket, the place will start to stink.
If you change the pointer so nothing is pointing at the bucket of shit, then it will just sit there, forgotten. But the shit is still there.
No one ever forgets this way of teaching it.
Objectively not true? Not even close to true.
I guarantee you there are many orders of magnitude more people in the world who understand recursion and that understand pointers than there are people who are 7 feet tall. Being 7 feet tall is extremely rare, and building a functioning C app is not.
The average height of an NBA player at the highest level of the sport is under 7 feet.
----
I don't understand why we're all commenting under this thread accepting the premise that good programmers are rare. They're not, look at the size of the industry and the output. The only way this argument makes sense is if you redefine "good" to mean something incredibly exclusionary, and even if you do it's impossible to argue that none of the software coming out of the industry is producing any value for users or solving any problems that they have.
> And without understanding indirection and recursion, the most you'll ever do is ...well..not much...
How do you think we have a software industry at all if you're claiming that both:
A) only an extreme minority of the population (<1 in a million) is capable of understanding very basic concepts like pointers, and also
B) it's impossible to build useful tools without them.
One of those two things has to be false, or you have to explain to me why the entire software industry hasn't collapsed by now from lack of talent and lack of output.
Have you ever used a no code application?
They never - not even close - mention pointers.
You can create great business apps without ever understanding a pointer.
What's so hard about understanding this?
Not every piece of software is Linux, or an NSA-worthy encryption algorithm, or a bespoke Silcon Valley web forum for that matter.
I don't know how a carburetor works but I can pump my own gas.
I don't have a medical degree but I am still allowed to self-medicate a cold.
I tune out when math PhDs start geeking out, but I can do my taxes.
I am aware of what a pointer is, but my old ship captain-turned-trading desk boss most certainly is not and he wrote several nifty SharePoint workflows to automate invoice approvals and legal reviews.
I mean recursion is almost never better than a while loop (stacks don't love it), and pointers... Yeah everything in JS and Python, Elixir and Ruby is really a pointer (most everything) but the average day to day it's not something devs care all that much about.
As an ex c and c++ dev, and CS grad, I know about them. I think if I pushed myself, I could find perhaps 5 times in the last 10 years where knowing that things are pass by references in ruby was expressed as such.
There's a board game Robot Turtles based on the Logo version where you provide instructions via a stack of cards to navigate your turtle through a maze.
The game is scored like golf, fewer cards are better, and it includes looping cards.
Definitely designed more for elementary students but it's visual, intuitive, and you (as parent) can "design" the maze.
There are several similar video games (they are simple and cute enough to paper their very dry subject matter, and they are level/puzzle based so easy to dole out in manageable amounts of enthusiasm )
Lightbot
Human Resource Machine
7 Billion Humans
Also my kids and I whiteboarded out and then coded a few of the games from
https://github.com/coding-horror/basic-computer-games
It was fun acting as the game designer who wanted this feature or that!
Maybe something like, place three eggs on the counter in a row. Tell her "Pick up the first egg. Crack it into the frying pan. Put the shell back where the egg was. Pick up the second egg..."
Then, next time, tell her "For each of the three eggs, pick up the egg, crack it into the frying pan, and put the shell back where the egg was."
Would she get something like that?
While there are still crayons in your bowl, the colors in the rainbow grows.
"what time is it mr wolf?" When you reach daddy/mommy you stop.
And programming is not the NBA, and people who write code are not all-stars. We're plumbers, and the idea that programming is some genius's endeavor that only the smartest people can understand is laughable.
Now pointers... yeah. I use those a fair amount.
What I enjoy about code is that I can understand it on a number of levels.
But "while (true)" is also equivalent to a goto :-)
While both of those are true, I'm not sure that understanding either of them is relevant to dmitrigr's claim that you have to understand both recursion and pointers in order to amount to anything as a programmer.
someone with another job doesn't need to make software someone will pay money for. their real job is how they make a living. but they can write software to do their job better or easier.
code isn't basketball, it's duck tape. people other than duck tape specialists can make use of it.
And this viewpoint is why the slack app uses 6GB of ram, and we consider 8GB a minimum amount to browse the web...
I don't think many people are looking at the software industry as it exists today and saying, "this is a group with standards." :) So why get upset over whether some minor automation project or side project that an office user writes is of engineering quality when it's being written to get around some half-thought, bad UX we professionals foisted on them in the first place? We build restrictive apps and bad workflows that make it harder for them to do their jobs, and then we have the gall to say that they're not professional enough or predisposed enough to a certain kind of thinking to write their own code?
Give those non-programmers some degree of access to a world where computers are creative tools that can be commanded, not just single-purpose devices that do pre-specified things. Because that world is great, and they should have access to it regardless of whether or not they're good at programming. And it's not like the modern software industry is so wildly quality-controlled right now that we're in any position to tell anyone that they're not good enough or thoughtful enough to deserve having more agency over the tools they use.
Many of the no-code apps I see getting built by non-programmers at my place of employment are things that IT has outright rejected because developers are a limited resource and there are bigger fish to fry.
But that doesn't mean these problems aren't impacting teams in real ways. Some horrible workflow for a small department that functions by manually juggling 3 spreadsheets may not rise to the level of an IT provided solution being created, but with the proper tooling the non-programmers can create a better solution than what currently exists.
There's nothing more "hacker" than a non-engineer sitting down with a no-code app and cobbling together an actually working, tangible solution to their problems that lets them calculate payroll, or coordinate schedules, or automate some data import task or whatever, all while a bunch of people on a web forum mock them for using Excel instead of a database language or argue that their solution is bad because it's not backed up by Git or doesn't use pointers correctly. That's the most hacker crud ever, and it says something about us if we push those people down instead of encouraging them.
Yes, you can spend a LOT of time and get kinda good-ish at basketball, but you'll never make it to the NBA. You lack the biological talent (height, speed). Sure, you can work very hard and take serious driving classes, but you'll never win an F1 race even if given a chance. You lack the biological talent (reaction speed, ears able to better hear details in the engine noise, higher visual acuity). And sure, you can work very hard and learn how to write code, but that will not magically make you good at architecting solutions properly and producing code worth paying for. You lack the talent (ability to think abstractly)
Please do not try to counter any of these examples. They are clearly just that. I am sure sometime someone was short in the NBA and maybe your aunt once took a defensive driving class and it saved her life, but the point is clear.