I just woke up from a nice dream where the people in my research group were asking all sorts of questions on using Unix more effectively. I was delighted that near the end they were beginning to ask programming questions, and the last one, "how can I change my programs to allocate memory more efficiently?" was about to lead me to explain slab allocation and some wonderful technical details that make me feel all fuzzy inside, but I woke up before I actually got to start talking. In the between-awakedness states, I remember being very frustrated.
As much as I've been trying to round out my character in the years since university, I still am an OS geek. There are times I think I should've gone to work for one of the big iron Unix vendors... If I ever end up working for google, perhaps I'll be a professional OS geek again.
I must admit though that my current position, of being the only CS geek among a bunch of research-oriented people who are using Unix, is quite nice. In real life, I don't think I'll ever get the last question (programming is a very useful "extra" skill in psychology, and some of my coworkers can "kind of" do it, but not in the deeper sense)...
At Ohio State, CIS 221/222/321 were the intro CS courses - they "weeded out" about two thirds of the people who initially tried to get into CS. Some people were unable to grasp essential concepts and dropped out within the first month. Other people didn't have the right kind of mind for programming - they could program a little bit, but it took them a very long time and making original code (as opposed to finding an example and altering it) was almost impossible. They typically left near the end of the first class or the middle of the second class - in theory they could program, but the efforts involved were probably about ten times the people who stayed. Everyone else found it easy. The second group probably benefitted from their experience - I would wager that most of them do token programming and scripting through their careers - even a little bit of that is incredibly useful in many careers, whether it be tweaking some AppleScript or VBScript to automate some computer stuff or getting a better feel for how programmers think (and thus how programs are written). I have a suspicion that the process of becoming attuned to a programming language and thinking within its constructs is a big part of what doesn't happen for the second group - whenever I learn a new programming language and don't use pseudocode, I go (quickly) through that kind of helplessness in trying to be effective, and a lot of my difficulties resemble theirs.
I sometimes am amused at exactly how much of the standard C libraries we absorb in learning this craft (and for those of us who take those paths, the Java and Perl APIs, among others). If someone were unable to absorb much of any of those, could we call them a programmer? What could they do?