Separating Programming Sheep from Non-Programming Goats

That test was ridiculous! It is so biased towards the imperative programming!!!
It does little to test logic.
Maybe the problem aren`t the students, but the whole “think like you’re a fSCing Von Neumann machine.” Of course, so many C++, Java, C, Python programmers out there won’t even understand what I’m talking about.
So instead of identifying the disease, they choose to name students “uncapable.” F******G CRIMINALS! MORONS! It seams the mental disease called imperative programming has caught everyone, except the few of us who choose to reamin sane and inside Computer Science, but outside marketing and corporations intrduing in on the field, and taking over…with their substandards…But so many people in academic departments are seriously braindamaged.
LOOK AT THE F******G RESEARCH DONE IN THE LAST 20 YEARS AND YOU’LL SEE…EFFECTIVE COMPILERS FOR NON-IMPERATIVE FUNCTIONAL LANGUAGES…VIDEO GAME COMPILER WRITTEN IN LISP…OR CLEAN…SML ALMOST CATCHING UP WITH C…YOU CHOOSE TO STAY STUPID!
A functional proagrammer would fail it, because of assignment.
Maybe Math students would fail it too.

It’s an interesting question, but the 3rd line contains an error, a=b is clearly illegal.

To be honest I am very fascinated by the study being done here. It quantifies some of what I experienced in a beginner computer course in High School. As part of the course we were introduced to a programming called Turing which was developed as beginners programming language at the University of Toronto.

Prior to taking that course I was already exposed to logic and programming courses, and would consider myself to an analytical thinker. What amazed me about my peers was their inability to grasp logical concepts. Being done my assignments very early on, I assisted the teacher in help students to debug their program errors. These programs were littered with a large number of logic errors like:

  1. Not dealing with assignments properly.
  2. Not able to transcribe the requirements into the language constructs.
  3. Not understanding the actual project requirements.

I think it would be even more interesting if these test could be applied to a high school level when students take their first programming course at a point where they have been taught the basics of the language… I think the results would still come out the same way because there was a group in my class that would not be able to understand the problem even with additional programming teaching.

Just to reitterate the language problem, I showed the test (out of personal curiosity) to several people who have never programmed, and they all got very confused, aggitated and thus reluctant to continue with the test over the fact they failed to understand that the = was an asignment, and thus the question made no logical sence in any form. After I explained this, they were alot happier.

I think the previous comment on prior programming exposure is a good one. I remember first ‘getting’ assignment from a Spectrum BASIC program I had entered from a book. I have had similar experiences in ‘getting’ Prolog, C++ pointers, threading and, more recently, Ruby closure blocks, so I feel it is not a matter of either understanding, or not, these concepts, but in how long it takes for one’s brain to make the comprehension leap.

If people fell into two camps on understanding assignment, then would not those assignment-impaired individuals never understand alegbra also?

This not c syntax. The answer could be 20 or 10 as long as the rule is applied consistantly by the person taking the test.

One thing that no one has taken into account is learning style. Almost all public school and college instruction is geared to ONE kind of learning style (this is one of the problems with mass education). This “study” completely ignores this factor. Another factor that this study ignores is that most Computer Science programs do not teach the process of programming, but rather syntax, flow of control and encapsulation methodologies. The result is that students know “what,” but not “why.”

Forget teaching students syntax right off the bat, teach them how to solve problems, teach them how to break down complex systems into groups of interactive, simple systems. For instance, my oldest son wants me to teach him how to program, but he is still too young. He is not yet able to reason from the complex to the simple. He also does not have enough math to understand how to make logical comparisons. So should I teach him how to write “Hello World” on the screen? NO! There is no value in that way of teaching; it is pragmatic and therefore useless. Instead, using real life situations, I am teaching him (many times without him knowing I’m “teaching” him) how to think logically about things and how to see a bigger problem as simply a sum of parts. If you want to learn how to draw a realistic looking tree, start with understanding how to draw a leaf and even then leaf drawing can be broken down into simpler parts.

If a student does not like this kind of problem solving, he will never be able to look at a problem and write a program that really solves the problem (because he does not truly understand what the problem is). That same student may “get” assignment and recursion, but they if they do not know how to apply it, what good is the knowledge? The reason why there are so many bad programs out there is because the market is flooded with this kind of programmer.

In my own education, I had this same problem. I would have failed the test that is being put forward in this study. I found my first year of comp. sci. in high school boring and I did not really understand what was being taught. Why? Because I did not learn in the same way that I was being “taught.” The only reason I passed the class, is because I had friends in the class who mostly understood what was going on and they let me study (not copy verbatim) their programs (yes, this is still cheating and it was wrong as well as pragmatic – I should have asked for help from the instructor which probably would have done like those doing the study and told me to quit the class because I was not predetermined to be a programmer). My point is that I learned programming by pouring through programs and deciphering them. By looking at how several people solved the same problem, I was able to understand the problem and the best way to solve it. By year 2 of comp. sci. all of my friends (who were all smarter than me – at least according to the public school system’s grading methodologies) were coming to me for help. And now (16 years later), as far as I know, I’m the only one still programming.

Am I the world’s best programmer? No, not even close. There are many reasons for this many of which are beyond the scope of this reply, but one of these reasons is lack of specialization. To be really great programmer, one has to be able to specialize in a small set of programming languages and then learn every nuance of the language so that he can apply the appropriate features of the language in developing the best solution to the problem at hand.

A comment to those who think you need to know programming to answer the first question on assignment… What a joke.

This is basic math. NOT programming. You have 2 variables and you are assigning one to another. Simple as that. Grade 7 math taught me all I needed to know for that question!

And yet, there are companies out there that would rather hire someone who has graduated college with a computer science type of degree, irregardless of how skilled of a programmer they are.

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?

For a lot of places, it is still the college graduate that gets the preference. Maybe it’s a CYA move…I dunno.

Might be interesting to substitute
a == b;

He-he.
One of the typical pitfalls usually encountered
in conditional statements -
if (a = b)
versus
if (a == b)

Roger

About the only thing missing here is … Hitler!

a and b both equal 20 as the operations are executed in sequence

  1. The integer of a - presumibly 11 a 10 is a valid assumption is calculated to be 10

  2. The integer of b - presumibly 21 a 20 is a valid assumption is calculated to be 20

  3. The result of a is then made equal to the result of b thus rendering a = b = 20

I think it depends on the person at the end of the day - some can and some can’t - also depends on the language that one has been exposed to . . .

Steve

Looks like a paper describing the failure of professors to teach the subject they know (which is likely not education).

Perhaps if more of them (and I’m sure some do) focused more on conveying the material instead of carbon copying their favorite textbook to a chalk board, more students would know important things like what programming language the test is in, and what the symbols mean in that language as well as on the hardware of the machine it’s instructing.

Who did well? The kids that learned something on their own first, beacuse thats obviously all they come out with!

Related to comment that implied ‘No good woman programmers’ Dr. Grace Hopper (COBOL and other early work). She as also coined ‘debugging’ since she found a moth in a relay switch on early computer. How about Ada Lovelace [The Ada language was named for her] the very first computer programmer ! Do google search on each for details.
I have been a computer programmer for 48 years [I still work for clients] and enjoyed the various comments etc.

There is a theory that women are smarter on average, but that men have more variability/larget standard deviation. Women cluster around a higher average, but men have a higher chance of being extremely smart.

This has beared out in my experience as a 34-year-old programmer. Women are generally good, but I have never met a superstar female programmer.

For example, does anyone know of a framework author/architect that is female? The people that come up with Jini, or Ruby on Rails, or Hibernate, or the like. I can’t recall a single female author of groundbreaking ideas, either theoretical or practical.

I agree with many people that the given C example is riddled with hidden lessons/assumptions that actual programmers have learned. The ‘=’ as an assignment is confusing since equality is a test, not an implication of transferrence or copying.

“I agree with many people that the given C example is riddled with hidden lessons/assumptions that actual programmers have learned. The ‘=’ as an assignment is confusing since equality is a test, not an implication of transferrence or copying.”

I couldnt agree more. The test is already biased towards people that have programming knowledge, (especially C related languages). It isnt doing non-programmers any favours, not exactly a level playing field of a test.

PS Jeff - shouldnt you get a few words to enter when posting? i’m sure a spammer could work out “orange” is the word quite quickly :slight_smile:

“I agree with many people that the given C example is riddled with hidden lessons/assumptions that actual programmers have learned. The ‘=’ as an assignment is confusing since equality is a test, not an implication of transferrence or copying.”

I think the programming language is lesson important to be concerned about than the ability to just let things stand for other things. Choosing a language where ‘a’ is the assignment operator and other symbols are chosen compeltely randomly would be bad, but using = at least gives some people a clue of what is going on. I think it is key to note people using the = consistently is what is being looked at(I think) not necesssarily them using the = operator correctly.

(let ((a 10) (b 20)) (let ((a b)) a))

Gives new people less of a clue as to whats going on that the c code does. It would be interesting to see what would happen with a test like that.

You could even go with something like pascal assignment using
int a := 10;
int b := 20;
a := b;

But i think the slight ambiguity in the = operator actually tests whether or not a person will use that symbol consistently(even though it is tempting not to) which is what is really important.

int a = 10
int b = 20
a = b

In my mindset, a = b = 10, but then again I’m a basic programmer anyway. (Even tho that’s sort of like me blaming almost failing English 10 on the position of Mars)

I enjoy coding. I enjoyed algebra but did not like geometry. My response to geometry was, “Prove it? What do you mean, prove it. It is intuitively obvious.”

Maybe further instructions would help? Although I think the test would work, perhaps something like:

“where the equals sign is an operation of some kind. Decide what operation you want this to be an apply it consistently across all the following problems.”

Or would that be explaining too much?