Separating Programming Sheep from Non-Programming Goats

I think that the syntax is a minor problem. Except perhaps for the int declarators, it is fairly obvious what happens. What might not be as obvious though, is the fact that the program is a sequence that should be read top to bottom. I.e. the statement “a = b;” happens after the initializations of a and b. If that does not occur to you, determining the values of a and b is not straight forward.

I failed my first programming course in college, but I didn’t give up. Now (some 28 years later) I am an accomplished and successful electronics engineer with about 20 years of successful embedded programming experience.
Like I’ve posted before, (1) immerse yourself and your way of thinking will gradually align itself to one that is compatible with programming (2) practice, practice, practice, practice! (3) if you stop trying before you succeed, you’ve failed.
I firmly believe that many people who fail programming at first could succeed if they kept working at it.
I also think it may be more fun to the a professional musician on the road, but there’s an upside and a downside to everything!

~{;o)

Hi,
Maybe i am a fool, but i do not read the results the same way. In my opinion, the got a test before the course, and on after. so the test will allow to qualify of the course, not the students.
Obviously if 44% answer in the right way to the question they have some previous knowledge in the topic (and maybe that’s why they were interested in the course).
(I haven’t read the related academics papers, because I think we just need to change the computer science to something better).

Peace,

Steve

As a linux hobbyist / non-programmer, I find this discussion interesting; especially in that no one apparently posted an answer to the question.

As a non programmer I would have checked off:

a=10; b=20

In other words, the ‘rules’ of this particular program are such that 10=20. I know that 10=20 wouldn’t make ‘sense’ in a basic math world, but I’m assuming that in programming, you can define your own rules, even if it wouldn’t be ‘true’ outside of a programming environment. So…am I correct? Do I have the ‘programmer’s mind’? :wink:

I am a third year computer engineer and work as a student lab instructor for my university. I would like to mention that from my experience, I agree somewhat with the conclusion of the study. I feel that tests like this could and should be used to determine which students MAY need more help understanding the basics. Through my quarters of teaching, I have seen the divide of students who see the code and understand right away…I have also seen students who are too shy to ask for help and as a result, never get a solid foundation of the basics. There is also several students in each group that I feel will just NEVER get it, no matter how many different ways I attempt to explain it (but I NEVER stop trying). My recommendation would be to give a test like this a week into the course, after the assignment operators have been discussed. Using the results from this, I would highly urge the students who had trouble to visit me during my office hours. As I tell all of my students…programming isn’t really hard, you just need for it to “click”. I am a big fan of student lab instructing, just because I know exactly what the students are going through; I’ve had the terrible professors, I’ve had the terrible books, I’m now able to adjust my teaching style to what I feel will work best for the students.

I think a lot of you may be missing the point here. The correct answer did not matter at all. After reading through the draft, I gathered that the test measured whether or not a student could hold a consistent rule set in his/her head or not. The students who did not answer consistently were most likely to be the students that did not understand that computers are dumb and will only do exactly what you tell them…following the exact same rules every time. This is a huge disadvantage when programming, because the rules do not change. Unlike the relativism most high schools teach, where there is no right answer and each problem should be looked at in its own way, where everyone can have his or her own set of rules and values, programming is very strict. The people who comprehend this are much more likely to be good at programming. That was the point of this article, not that knowing the correct answers to these questions makes you a good programmer. I think there was even a list of what all the answers meant the student was thinking at the time, most of which, were perfectly acceptable thought processes, if self-consistent. I’m just worried that something like this may be used as a deterrent for those who really don’t get it at first, but are able to adapt quickly.

A large number of people commenting above fail to realise that the students were not being assessed on their actual answers to questions like the one above: what they were being assessed on was how CONSISTENT the mental model was of what they were being asked.

a=30, b=0 is an acceptable answer, but to be consistent, the student must then answer the remaining 11 questions using the same rules. If they do so, they are “consistent”, and are demonstratably more likely to get higher scores in the actual course.

I’m disappointed by the number of software engineers who read this article and fail to realise this!

“but you coders seem to have ZERO respect for the actual language us humans use” …sorry, but this coder can’t resist: that should be “language WE humans use.”

Ben,
If you have a ruleset that you would then apply to another similar problem, then you ‘pass’ the test and have the ‘programmer’s mindset’.

Your rule set doesn’t match mine.

I read it as follows:

Set A = 10
Set B = 20
Set A = B   (ie. move the value of B, to A)

Thus, both A and B are now equal to 20.

While I have been programming for 20+ years now, I’ve never used C (learned in Apple Assembler and Basic and Pascal, then moved to the AS/400, which is RPG)

Great article, this explains why so many people failed out in College.

On a side note, anyone else think that this site’s grey text is terrible for reading? A darker font would be much easier to read.

I’ve found that people who do well in high school geometry have a better chance of clearly understanding programming… Geometry proofs are pure logic. I did not do well in algebra, but got deans list and merit list in college while doing computer programming (merit list is a deans list for part time students).

I had the pleasure of tutoring many students in beginning programming courses. I am definitely a firm believer that some people can never learn how to program. It’s a simple matter of brain function. Some people just don’t have a brain that is suited for logic design.

Many years ago, after teaching myself to solve engineering problems in BASIC, I tried an undergraduate programming course in hopes of sharpening my skills. I made it through the first assignment, then dropped the course when I realized everyone else’s program listings were 10 times as long as mine.

I never tried another class, but I’ve been writing working code as part of my career ever since, learning to use a variety of programming and scripting languages along the way.

I guess I’m an intermediate programmer, in the same way that I’m an intermediate
skiier. To me, programming is both a useful skill and healthy mental exercise, like writing poetry or playing chess or a musical instrument, even if you never get really good at it.

Maybe some people just don’t like it or don’t get it - some of the same people who can’t seem to construct a grammatically correct sentence in their native language.

But it’s still depressing to me that so many bright people I work with have been indoctrinated to believe they’ll never be able to do anything with a computer outside of a GUI.

It is unfortunate when so called “studies” like this come out to make speculations sound like truths. This page might be better served in a Wiki and accepted as “thoughts and streams of conciousness without conclusive proof”. I agree that it appears there are groups of people who just “get it”, but I won’t easily forget about all the social factors and variables at play here. I think the authors should consider other factors as well such as: teachers, class material, language and syntax, prior exposure to similar topics, left/right brain usage. Even though this industry has been around for some number of years, the formalities of teaching the subject are still in their infancy.

“dropped the course when I realized everyone else’s program listings were 10 times as long as mine.”…you’re probably a really good programmer then, assuming your programs worked.

We’ve got a lot of old code where I work that’s probably about ten times as long as it should be. Drives me crazy. Some people just don’t seem to have the knack of figuring out a concise and elegant way of solving the problem.

I find fault with the belief that you can test someone’s aptitude on a subject before they even begin their studies. You can test anyone’s logic skills, which is what variable assignements do. They utilize the critical thinking of the subject. However, that same method can apply to any subject matter and doesn’t really show an natural ability at one particular subject. It merely shows that individuals ability to apply reason across any material.

You test likelihood of success, but that denegrates those who come into it knowing very little and end up learning a lot. Perhaps even more so than those who did very well on the test. My fear is that if this theory is utilized throughout the academic community, then only those who show a natural aptitude for the subject matter will be allowed to take the course. And that even those who complete the course with a high grade, will still be hindered because they didn’t show a natural aptitude for the material. Whereas someone who just barely passed the course will get higher consideration because they scored high on the tests. (Remember, potential and the results are two different things.)

The great thing about education, is that a person can come into their studies knowing nothing and walk away much wiser. It is the pursuit of knowledge that is most important, not who has a natural ability at the subject or not. By testing students for their natural ability, we are going to create a system where by people are only able to do what they show an ability for, not what they want to do. That sounds a lot like the former Communist regimes of the USSR and China.

Two items to note based on the conversation so far

I had the pleasure of tutoring many students in beginning programming courses.

  1. Bear in mind that “the camel has two humps” observation comes from people in the trenches teaching computer programming to novices. The idea that there are two populations, those that “get it”, and those that don’t, isn’t a an experimental concept-- it’s professional observation based on years of hard experience by seasoned, professional teachers.

If someone does not know C (or any other programming language) they could easily not know that = in this case is an assignment

  1. The authors specifically noted that they used the = operator because it was simpler to understand. Probably because it looks more like standard maths. However, this does make me wonder if a more explicit, verbose syntax…

    Variable a is integer
    set a = 10

would have helped at all. Probably not, but worth a shot.

Would you rather hire someone who barely squeaked by a C++ class, or would you rather hire someone who has had to learn how to program 100% on their own for many years and has a proven track record?

I’d hire someone who did well in school and did some self-study. Believe it or not, those people exist. I’ve hired a few. Those are the people with passion - the ones that care about what they do with their life. Everyone else is a damned hack.

Those who can, do.
Those who can’t, teach.

I’ve met plenty of people who can’t, try to do.

I’ve also met many really good programmers/analysts that teach.

I agree with some that algebra, although important is not a necessary requirement. I actually found that I was better at logic and syntax of the given programming language. The mathematical formulae will usually be supplied for the programmer anyway. So in my case I found logic and syntax to be important. I found I was very adept at debugging programs. No I found I was a programming sheep. It also didn’t hurt that at the age of 16 I graduated from a Unit Record School, I am now 55 with a degree in BDP/CIS. I love programming.

Surely the question is a logic problem, it has nothing to do with C, semantics or otherwise. As posted previously, some people just don’t have logical minds - and they would certainly have trouble learning programming, but the mind is a mouldable thing and I firmly believe that they could learn, given the correct tutoring and the will to learn.

Also interesting to note is that people who are good at programming also show aptitude at picking up other languages and vice versa.