Separating Programming Sheep from Non-Programming Goats

New programming students need time to learn to program, and master programming very well. Generally many get a lot of programming difficulties at the start of their course. Many are discouraged, and are afraid of subjects/modules that deal a lot with programming. Teaching programming is also a problem in many universities.

Programming should be for people good at mathematics. People who get good grades at math can understand programming well (even if it takes some time). I have also realised that some IT students can never understand programming. These are generally people not good/skilled in logics/maths.

This paper will never be published, seeing as it spends more time on petty insults directed at the people who will have to review it, than describing its findings.

What exactly is meant by a “meaningless” statement in formal logic? They’re not meaningless statements; in fact, they’re statements with a very definite meaning, assuming they’re defined. The computer blindly executes statements, it is a machine after all, but the way we approach the logic is not meaninglessly. x y, say over integers, has a meaning, otherwise, we would have no idea what consequences it has or what it could imply in a particular context. When you read a computer program, x y has a very definite meaning. Tell a mathematician that proofs are meaningless, and you’re likely to get a whack in the head with something heavy and potentially sharp.

How often does a programmer sit there frustrated or wondering why the hell something he intended to express in a program isn’t happening as expected? That is after all what a bug often is; a gap between the behavior intended and the behavior experienced. There are a million reasons why this could happen, many of which boil down to reasoning in absence of some knowledge (either a simply oversight, or lack of knowledge of an error elsewhere, or a misunderstanding). And rest assured, as we should all know, programmers are first and foremost excellent creators of bugs!

If I understand correctly, a claim is being made here that there are people who are incapable of understanding that the intended behavior can somehow not be isomorphic to the behavior observed. I’m not sure I understand, much less believe that statement. Reasoning used in programming is not somehow alien to people. Matthias Felleisen, previously of Rice University and now of Northeastern University, would probably go into one of his famous military-strength fits if he read this “paper”. Programming is a discipline, and like any discipline, it requires discipline. A particular mindset is necessary to work effectively, and mindsets can change.

A more trivial claim perhaps is being made that people don’t understand why they need to, say, add a ; after a statement, or end an expression with a ). I find this claim absurd, especially since syntax generally implies something: the ; tells the computer that the statement is ended, just as the parenthesis make something unambiguous. If there are programmers that think this is some concept that is inaccessible to some people, then I really question their ability to reason abstractly and their ability to form a big picture. Or, they must really suck at teaching something so basic from algebra.

Correlation is not causation. The conclusion is only as good as the premise. Garbage in, garbage out.

I think Bob the Chef pointed out something important when learning to program.

ability to reason abstractly and their ability to form a big picture

Also the ability to take rational/business requirements and transform them into, mostly, concrete logic. For my last semester in college I was able to take a graduate course to fulfill my credit requirements. I was appalled at the number of people in that class that couldn’t abstract out the core process/idea behind a group of functions or processes.

One of our projects was to create a class library(dll) that would encapsulate the logic for a tic-tac-toe game. When discussing it in class it was amazing the number people that would want to print to console or pop up a message box when an error occurred. Just as scary were the number of people that would test the same things in the UI and logic layer, ie testing for a tie in the UI layer when the logic layer would “tell” you if there is a tie, or at least it should of from the specs given to us.

Just as disheartening when I was asked to help debug some classmates programs I found huge 15+ if blocks for testing if there was a winner or a tie. Why not just loop through all the rows and call one method that checks if that row is a winner. It was almost as if they didn’t understand the concept of abstraction or rather didn’t understand how to put into practice the concept of abstraction.

It worries me when I, as an undergraduate, feel smarter than 90% of a graduate course class. They have already been through what I am going through shouldn’t they be better/smarter than me or not there at all? I hope that didn’t sound to cocky I like to think I’m a little more humble than that.

I may not agree with what all of the paper says and some of the conclusions it comes to seem to be coming from incomplete/skewed data, but I do think that there are some people that just don’t have the ability to wrap their heads around the concepts of programming like abstraction and polymorphism and the like, or the ability to break things down into logical steps.

I read this before, it struck me as interesting. I came back to it and now it seems less interesting. It looks like yet another example of academics thinking that they are the gatekeepers to the world. That it is up to them to open the minds of the little people (those who are good enough to deserve their attention at any rate.)

I’ve gotten A’s in some programming courses and F’s in other ones. All of my teachers were quite sure of their own ideas about goto and comments and pointers and OO – and I have seen since the same opinions and other opinions and opposite opinions in many different peoples mouths. All of them think they are saying something.

Everything I have learned I have learned on my own, just like English, just like sex. Stop taking yourselves so damn seriously – you’re just baby-sitters. Especially the college professors.

What’s the correct answer, anyhow? I racked my brain and all I could come up with was none of the above.

the answer is 20/20 haha… :slight_smile:
this is nice website! Thanks!

Brian,

I’m not sure which question you were talking about, but if you were wanting to know the answer to the “x = (x = false)”, then it is that x flips. If x was true before the statement, then true does not equal false. This makes the evaluation of the () part false. So, x gets assigned false. If x were false, then false DOES equal false, so x becomes true. Hope that helped!!

Everyone else,

But just to weigh in on the VERY old thread I stumbled upon here, I have a hard time going one way or the other. We all know those individuals who we have the damnedest time conveying the basics to. Those are often people who want as little to do with computers as possible. However, when it came to school, I think it is very clear to almost ANYONE who was a student that these two camps existed. But WHY did they exist? That is what the paper is trying to figure out.

There is one observation that I would like to make. Most of the students who did very well with little effort did so because they did much of this on their own. I know that this argument has been mentioned, but there is one correlation to this that i’m not sure has been mentioned. Students who are learning in his or her free time obviously have a greater passion for the subject. In the age of the internet, there is nothing that an individual cannot research on his or her own. If the student doesn’t share drive of the better performing student, then maybe THAT is the reason the don’t perform as well.

Basically, my point is the cowardly “agree with both sides” way of looking at it. lol. So maybe the one side is right that the test could potentially predict success. And maybe the other is correct that the test cannot predict who is CAPABLE of learning the material.

To

Matt on July 20, 2007 11:45 AM

Since you can without a moment of thought, lash with little or no respect for those who are slowed in someway, i’ll be seriously frank.

Im just begaining to step into the world of java programming and seeing your posts just irks me.
I’ve been thinking, a friend of mine have a “wired brain” just for programming, astonishingly, always the first to complete any homework within the given time frame.
And i noticed his other areas of study were completely wrecked, engineering maths etc.

So do i look down on his bad areas? Rather i look at how good he tries to coach us into this field.

Since i’m posting just to “bash”, Matt you did best search yourself within and think over how much people you’ve insulted with those so called “harmless” comments. In the business model, i assume theres such a term called “win win situation”.

Rather than posting how bad those people are, you could’ve help them those with sincere learning attitude but as you put it, zero ability to “pain abstract” out of nothing.

And for those who read and got to read by chance

A man with a beard with grey hair is my father, does that make all those with similar traits my god-father?

As said, there will be those with extraordinary gifted talents as well as those with it, struggled yet barely manage things.
However the latter always sees through hardwork.

So please,

if
either the teacher is willing to teach or the student loves programming.

Else

everything will be in Loop.

One does not learn how to walk, but one mimics.
Isn’t that how most of us learn stuff? Memorizing the pattern until our internal minds sorts the pattern out to more logical thinking.

Therefore, if anyone here wana change the "programming world"
start with
Any Random Kindness, help those around.

I don’t have time for this crap (to busy programming) so I’ll get straight to the point.

  1. Some one with no prior programming experience is not going to know that = is an assignment operator and it is not fair to assume that they will infer it from the context of the question.

  2. The question is further flawed by the use of the assignment operator (=) in the answers where a comparison operator (==), or plain English, could have been used. Instead the author is relying on the subjects prior experience with mathematical problems in which the = operator is equivalent to a comparison operator (==). Therefore, in the context of this question, = has two alternative meanings.

However it is likely that those students with an interest and/or experience in programming will have knowledge of both usages and successfully navigate the semantic of the question.

Furthermore I think it’s a reasonable assumption that those students with interest and experience are more likely to be successful.

HENCE THE CORRELATION BETWEEN STUDENTS WHO DID WELL ON THIS TEST AND THOSE WHO DID WELL IN THE CLASS.

In short your question is flawed and your science is crap. I believe this revised question would yield a surprising increase in the number of students able to answer correctly.

–

In the C programming language the = operator copies the value of one variable into another. Read the following statements and tick the box next to the correct answer.

int a = 10;
int b = 20;
a = b;

The new values of a and b are:
20 and 0 respectively
20 and 20 respectively
0 and 10 respectively
10 and 10 respectively
30 and 20 respectively
30 and 0 respectively
10 and 30 respectively
0 and 30 respectively
10 and 20 respectively
20 and 10 respectively

–

I can be contacted at the following email address memeticvirus [insert at here] gmail [insert dot here] com

zeropointo

Actually I lied, I deleted that email account…

I only have my own experiences to relate, which is that it took me a long time – some might say an embarrassingly long time – to understand concepts like recursion and indirection.

I think this research confuses aptitude with ability in an almost offensive way.

This is just an observation. It isn’t tested significantly, and the effects of the environment are not checked rigorously. Please do lighten up and recognize this for what it is, just an observation that the first three weeks of an introductory CS class didn’t manage to change the students’ behaviour much. There is a lot of reasons that could cause this:

  1. People are indeed goats and sheep, no way to help it.
  2. Students don’t attend the first few classes in any measurable way.
  3. We are not teaching people properly.
  4. Students do not trust their brains, they trust the test-passing techniques they were conditioned for throughout their education.

To separate these causes (show which ones are just theories and which are the cold hard reality), one would need to do plenty of work. Probably it’s already happening, and the study was intended solely to indicate that the authors are working on this.

My personal experience is that everybody who can pass a university entry exam can learn to do practically any mental task adequately. The problem is only in how long will it take and how much tutoring it will require, and whether it’s a good idea to sink more resources into bringing absolutely everybody up to the same level rather than separate those who seem to be more able early on (creating a risk of misidentifying the students’ abilities).

Sex has nothing to do with the affinity to programming, social stereotypes and the little biological details of having a slightly different window of opportunity to reproduce and the level of commitment to reproduction (“women are pigs, men are chickens”, if you wish) are what I think cause most of the apparent gender inequality in the industry.

David:

As far as I can tell, you are analyzing x=(x==false) flip x instead of x=(x=false) set x to false.

WOW! A new site to troll!! :slight_smile: Pretty good posts even though I had to skip some of the back log. Yes, it feels like some kind of matrix choice. Some people just like different color pills! There, is ofcourse, loads of scientific data to uncover with respect to all our predispositions, to summarize what exactly humans are and if we will ever be able to really classify human nature even if the taxidermy spawns iterations that out number the population.

I teach at a summer camp aimed at getting kids (ages 13-17) ahead in programming (as in they’ve never seen it before), or teaching them more than your average high school will (for the ones who have seen it before). I COMPLETELY agree with these results. Anyone who claims ‘I can teach anyone this in 15 minutes’ has obviously never tried. I have worked ONE ON ONE with people (albeit, many of them 13-14 and not college aged) to whom I explain these very basic assignment concepts slowly and clearly over and over and over, for a week of camp. They never get it. Ever. Then there are the other kids who when I explain it to the whole group the first time, get it perfectly and start asking me relatively high-level questions like “What do I do if I want to compare them?” before I’ve even covered if statements. Take into account, this camp is mainly for rich people, and all of these kids usually go to fancy private schools or very good public schools. A lot of them are really smart otherwise, but just don’t seem to get programming. Obviously this study is in no way conclusive, but I still agree with it intuitively whole-heartedly. I believe that explaining to the students what the assignment operator does would help some, but really, in my experience, it makes far less of a difference than you would expect.

I find these results to largely be an abdication of actual teaching, sadly it is all to common in computer science departments. The teachers don’t teach, and only the self-learners whose minds may be more predisposed to programming can pick it up on their own. Then the teachers point to the results. I have seen this happen again and again. Sigh. While predisposition is obviously a factor, it is real teaching that is needed, and that is rarely a simply going over of the concepts. It requires really translation of the underlying features of programming into easily graspable metaphors, analogies, and allegories. But that takes work, and dedication to teaching, which is not actually taught to doctoral students. So in the end they are not held accountable for teaching, but merely for knowing, and students continue to fail to learn.

In my experience of teaching introductory programming, I notice that many students do not see the = sign as an assignment operator. In fact, throughout their public school education, they learn that this is, instead, an “is equal” operator.

In ordinary math, the = sign means that both sides are equal. Another corollary to this in math is that the left-hand-side (LHS) and right-hand-side (RHS) are interchangeable.

In computer programming, it never has that meaning. For example, in Visual Basic, the = sign might mean one of two things:

  1. Assignment - This is where the right hand side is “boiled down” to a single value, and that value is then stored into the single variable on the left of the = sign.
  2. Comparison - This is where the left and right sides are compared and a question is asked, “Are these values equivalent?” The answer, of course, must be a True or False (aka “Yes” or “No”).

Another interesting item to note is that this difference is seldom explicitly pointed out to beginner programmers. They are left to “infer” that the “mathematical meaning” isn’t ever used in programming. At some point, we as educators fail to take into account the fact that we are “re-defining” symbols and constructs that students already have definitions for (largely through Math, but also through Chemistry, Physics, etc.).

Another item pointed out in the documents by Saeed is the problem that students have with thinking that all the statements somehow occur simultaneously. The idea of “sequence of operations” is not always easily perceived by students. Again, that can be seen in math statements. Consider these statements:

a = 45
b = 55
c - b = a

This is a “set” of “equations” which are all true at the same time. Their order is irrelevant. Sometimes their order is changed, but the meaning, it is emphasised, is the same:

c - b = a
b = 55
a = 45

The problem, as it is put to the student, is that they are to “solve for c”.

When these students are put into a computer programming course, where they believe that the computer knows how to solve math problems, there is a fundamental set of assumptions and definitions (mostly false) that they bring to the area of computing.

Notice: These students aren’t “dumb” or “stupid”. Sometimes these are very bright students! They are simply employing a form of logic, but it is not programming logic. What we can do as educators is to be explicit about how we are going to re-define what they currently know or assume.

Actually, I have to say I have witnessed the same thing in both my programming classes and my logic classes.

Some students simply could not do logic. No matter how much everyone here howls in protest, some people can’t do logic. Period. It’s a fact.

Some of the students who lacked the ability in my classes were those who studied the hardest, asked many questions and really really tried. I felt bad for them. They really tried. They just lacked some kind of innate ability.

There is a middle group who can’t do it yet but can learn. But there really is that group that is incapable. I am sorry if that offends you, but it’s the truth. Sometimes life isn’t fair.

http://www.secretgeek.net/camel_kay.asp

Alan Kay’s comments on The Camel Has Two Humps. Found on Leon Bambrick’s blog, thanks to reddit.

1 Like

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.

There are profound differences between men and women in world view and mode of thought. These are evident from the literature they create, the literature they consume and the way they comport themselves over the spans of their careers.

The archetypal chick flick – Gone with the Wind – is described in its own advertising as a searing tale of passion in a world gone mad. Essentially, it’s about the feelings of the protagonist in a world that is utterly beyond the protagonist’s control. If a Mills and Boon novel has a happy ending, it’s provided by the intervention of a man. At no point does a woman attempt to change her world. She adapts to it, cries about it, or waits for a man to change it for her.

Men, by contrast, write about almost nothing but taking control of their world, and the mechanics by which this is attempted.

Another fundamental difference is the list thing. Men teach one another the mechanism, the distilled principle, because there is less to remember and it has to be taken in context anyway. Women want a fixed context and rote instructions. If you try to teach them the principles instead, they don’t listen and they get angry, saying “I don’t care why, I just asked you to tell me what to do.” If you give them a list of steps it must be exhaustive like a computer program because (also like a computer program) if context changes breaking the procedure or if anything has been omitted, blame is ascribed to the writer of the procedure.

A direct consequence of this intellectual inflexibility is that women do not create tools. They can be taught to use them, often very well, provided that the use of the tool can be described as lists of steps - programs!

Visit a craft shop like Spotlight. It will be crawling with women who think they are creative. In fact all they ever do is stick glitter to boxes, or cut cloth according to a plan that was almost certainly created by a man, before stitching it together using a sewing machine definitely both invented and made for them by men.

Some of them will vary the patterns, but creation ex nihilo is a behaviour exhibited almost exclusively by men.

I suppose you could say that women play god using the thing between their legs, whereas men use the thing between their ears. Probably this is enculturated behaviour. Possibly it is an artefact, in men, of the inability to play god the easy way; certainly many of us see our creations as children of sorts.