Being a programmer involves understanding how computers work, what makes them interop, how networks work, perhaps some basic understanding of electronic engineering concepts, the ability to keep mental maps of insanely complex callgraphs in their head, etc.
This is not something "everyone" can just pick up and do. To reduce programming to a set of soft-skills is what got us into this mess in the first place.
Working through complex mental maps is all you need. Thinking through all possibilities and edge cases, and logically ordering instructions to represent a mental model. It's similar to chess where you have to evaluate every possible and unexpected scenario. If you're good at chess you'll almost certainly be good at programming.
If "programming is easy" for some people it's because this one skill comes naturally, and beginners should be made aware of that before they get unrealistic expectations.
I think the problem is also compounded by people who mostly have superficial knowledge of programming (a few frameworks here and there, couple languages etc) and are in the software industry and carry the title of programmers and engineers.
In reality, it's that process * 1000 plus the addition of a few other processes those tutorials can't expose because they're only needed at the intersection of 50+ different applications. Plus an entirely unaccounted for process in the form of creative problem solving that makes up 90% of the work.
I've had a number of executives plop down at my desk, proudly proclaiming to be a python dev only to see their eyes glaze over and every other word fly above their heads only a few commands into the interpreter.
There are also a lot of resources which sound as if they would be great as they have big name authors but they actually make you more depressed. I had many such experiences most notably with Stroustrup’s books. The one called Programming - principles and practice is a hopeless soup of complicated syntax and lousy pedagogy. It’s aimed at beginners but really anyone who’s read chapter 6 of the book where he seeks to teach ‘what programming is actually about” using a calculator program as an illustrative example, he really makes it appear as if recursion is some exotic and esoteric thing, whereas it is a recurrent theme in the domain of programming. I say this because before this chapter he never used recursion and it becomes very unintuitive, unlike SICP, where from the beginning this is identified as one of the central ideas in all programming.
I was fortunate I used to read e-books and didn’t spend too much on purchasing flimsy books, turns out, as far as CS is concerned, the best stuff is actually free (and accessible as pointed above in the link)
On the other hand, if someone has most of my list, then they are probably quite capable of learning the more specific things that meet your requirements.
These are things like:
- attention to detail
- development of a sense of when attention to detail is very important and when "just about" is reasonable
- ability to communicate a process in words, especially written words
- ability to identify patterns and recognize that one has identified a pattern (pattern recognition is automatic in animals and especially humans, but it is often occurring subconsciously)
- ability or willingness to ask "why?" and follow that answer far enough to understand the basic reason for something
- willingness to challenge status quo when the eventual benefit may be worth doing things differently
- ability to consider multiple factors at once (time, cost, effort, etc. etc.)
I could go on and on. Suffice to say, much of what makes good programmers/developers are attributes and behaviors which make good humans. Sure, if for example you have a huge inheritance, you could probably get along fine doing absolutely nothing difficult or productive or creative, but that's not really living. So human life involves a lot of the skills on this list.