>People presumably don't take CS1 papers unless they think they >might do well, yet CS1 papers notoriously have a very high failure >rate.
People take CS courses because their experience of computing has not so far involved (real) programming and they think that it is all word documents and games. Or often because they have no idea what they want to do and they think they can get a job if they have some sort of computing qualification. >Clearly programming _isn't_ intuitive for most people, but >people who are _now_ programmers often feel strongly that it is. >Why? Is there something we can use to reduce the CS1 failure rate? You reduce the failure rate by not letting in the people who are there by mistake in the first place. How you detect these is a different issue. I can assure you I have spent hours on the phone as an admissions tutor trying to dissuade people from doing computing courses when they were adamant they wanted to do them and equally clearly entirely unsuited to them (and some of these were highly qualified too). People don't take Physics courses if they have had no experience of physics (other than living in the world of course, though probably don't realise that is physics), but they turn up in droves for computing courses with no experience. >So if, for example, you "get" variables-and-assignments easily, >that makes it more likely that you will "get" Java 'for' loops, >and that makes it more likely that you will "get" how to work with >arrays. But you have to factor in to this that some people have already realise that in fact they don't want to learn to program and so have switched off. A lot of people get started on musical instruments or learning languages and a few lessons in realise that it is not for them and they stop. The problem is that at University there is pressure to stay put and struggle on so we get these problems. Try getting into most music courses at University with anything other than a grade 8 on an instrument. >Wrong. I still think that spreadsheets *ought* to make programming >more "intuitive", but I'm not seeing much evidence of it. Or is it that your intuition is that spreadsheets should make it easier? :-) >The most popular declarative language is SQL. >Perhaps the fact that it doesn't use recursion may be a factor >in its success? How many of the users do really hard joins and actually understand what they are doing? As an SQL user I hold my hand up straight away and admit that there are many parts of it that I don't understand so I don't use. I dive in get the job done and leave. >Haskell experts advocate a higher-level style where most of >your code is free of explicit loops, not completely unlike >using LINQ. Except that people actually do understand the concept of looping - they do it all the time in real life. However sometimes they are effectively doing recursion but simply don't realise it because it doesn't look a lot different IRL and that might be the key. Think about calculating a factorial by hand. L.