10 ms·
Java in College: "You might as well be teaching Chinese to a monkey."
- misuba 18y agoWhy on earth are those three types of student all in the same class?
- tokenadult 18y agoa) Some students have no idea what they are getting into when they register for a class. (This explains some of the clueless students who can't do any of the assignments.) b) Some students who register for a first course in their probable major subject register conservatively, especially if they can't prove completion of equivalent courses. (This explains some of the students who easily do more than what is assigned.) c) Some students have some good preparation (e.g., math) but not all the best possible preparation (e.g., previous programming experience). (This explains some of the students who seem to find the course just right for them.) Further along in a computer science major sequence, students who neither get it nor like it will move on to some other major. Then the ability spread in any one class may diminish somewhat.
- mynameishere 18y agoI remember some non-CS majors in an assembly language course. About 5 or 6 people walked out 30 minutes into the first class--a behavior too seldom seen.
- rms 18y agoNo system exists to identify the slow programmers before they get to class and most colleges don't have the resources to offer the more personalized instruction needed to the slower learners.
- sofal 18y agoI just finished helping to teach an introductory programming class as well (HTML and JavaScript -- one step below the Java class). I also observed a surprising range in the ability of the students to grasp programming. Hardest class ever all the way to easiest class ever. Another funny thing I noticed is that many students had the idea that they could get credit for non-functional code. They would treat it like a math class and hope that we would pop open the hood and look to see that they had the right general idea. I guess I can't blame them too much though. I've been a programmer for so long that I've acquired the unforgiving attitude of the machine. I certainly wish my computer would do what I mean and not what I say.
- tokipin 18y agoi remember another student complaining to the teacher, "so you're not giving me credit because i'm missing a for loop?" i wish i was the teacher. i would have explained that "missing a for loop" isn't something like, say, having an injured arm. it's more like having an arm that was recently sawed off and is spraying and pouring copious amounts of blood all over the place you have to be strict in those cases I think. programming requires precision, and if a person can't muster it then they shouldn't be fooled into thinking it's something they can major in, because then their time will just be wasted
- rthomas6 18y agoThis reminds me of a class in C I took last spring. Some people fell so hopelessly behind that they probably "borrowed" a good bit of code from other people for projects. On the other hand, some people turned in an almost commercial-quality video game for their final project. I got an A, but fell somewhere between those two extremes.
- brandnewlow 18y agoI snuck into the roster for an intro to Object Oriented Class when I started grad school, which was taught in Java. I took physics with the engineers in college and this was about as hard conceptually for me. But it was one of those things where it was hard until I stepped away for a while and then came back to it. Then it wasn't so hard anymore. Just too much info to take in at once I found. Loops were the hard part. Oh man. Loops. that took forever to "get."
- amrithk 18y agoRecursion for me. I still grapple with it sometimes.
- trevelyan 18y agoRecursion is really fun until you have to use it to solve something under pressure.
- sadfsa 18y agoRecursion is easy if you're used to it. A recursive procedure just looks like a loop to me.
- mlLK 18y agoMy first programming class (or my first class I had to use a compiler) was in C (it was one of those CSCI classes for non-majors) and this guy took us through the whole gamut, even if I barely passed the class, it was a rush. It was probably such a rush because I knew what I wanted to do, but had no idea how to express it, until we finally got to arrays, and I realized that a string is just an array of sorted characters. This insight catalyzed another insight and by the end of the year I was more interested in recursing meaningless input just to see what it looked like when it came out, which never really solved anything in my text-book, but this act taught me more about computer programming than any book could, this act showed me that computer programming is the art of counting and comparing for measuring an unknown order of magnitude. I came out of the course with so much more than what my grade reflected (somewhere between a D and C), but could really care less. One semester later I ended up in a class called Object Oriented Analysis and Design; [insert brain hemorrhage here] I could not communicate with any of these people (nor my teacher) ever since the problem domain was suddenly so tangible, it seemed so much less enticing. This was when I laid my eccentric theory to rest, went with the flow, and started solving my exercises.
- kwamenum86 18y agoSome people start coding at a young age and some people graduate high school and decide it is time to give programming a try. Of the latter group, a subset seriously understand what it involves. I think cs concepts can be taught to anyone but they can't be taught BY anyone. If you start from the very beginning and take baby steps I doubt there is anyone who can't pick up coding.
- mdasen 18y agoI don't believe that programming is something you need to just get. I've seen a lot of people struggle on assignments like these as a TA. Usually, it's that they're missing certain concepts, but they don't know which ones and they can't debug themselves. If you know 70% of basic Java, you won't be able to create a working solution. You'll get tripped up on a type mismatch error that just makes you bonkers until you give up because you don't know what the error message means or you tried to make a templated array rather than an Object array and casting it to a templated array or whatnot. There are lots of little pitfalls in programming that are just terrible. In C, you can just walk off the end of an array (or the beginning). In Java, you can store an object in an array and then modify that object in both the array copy and the one you have in a regular variable because Java works by reference, not by copy. A lot of the time, you just need someone who is a lot more learned in programming to notice that. It's not that you don't get a concept like object references, it's that if it's not in your mind, you don't notice when your code does it and it takes a long time for these things to really get into your mind to the point that you catch them fast. And most people give up. You get hit enough times with silly things like these and you just want out unless you're truly dedicated. I know when I was learning, I hit all the trap doors. It's why I noticed them when other students made them. Heck, back in the old days of Java, you could easily screw up things like int vs. Integer and not notice it - especially since a lot of professors might not make a distinction because for veteran programmers, we know that pitfall, but also because its place is at the start where students get inundated with syntax and such a distinction might go unnoticed (or abbreviated as int in notes). I would think schools should hire more TAs to help students through those pitfalls except that most students like to do assignments at the last minute where these errors become the source of the mind-breaking stress.
- amrithk 18y agoI agree with you. I started my CompSci degree a few years ago without any programming experience. The first intro-class was quite challenging as I had never programmed before. It took me a while to get used to the quirks but I became better after sufficient practice. Like anything else, programmers only get good after they have put in the hours to learn programming and the programming language. Its like music or sports or even academics. Practice makes perfect.
- kragen 18y agoSeveral people in the blog comments have cited the “camel has two humps” paper, which still hasn’t made it through peer review. There have been some failures to replicate the study. Perhaps their results were an artifact of the authors’ teaching style, i.e. they were just terrible at teaching, so the students who entered the class without knowing the material failed? I’m very skeptical of results that claim that some large fraction of the population is incapable of some mental feat like programming. 500 years ago the same was thought of reading, writing, and arithmetic. (also posted to the blog comments)
- rms 18y agoThe 1/3 of college students that have great difficulty with learning the fundamentals of programming can certainly learn it -- but it won't come naturally, and it will need to be slower and more personalized than how it is currently being taught. Differentiated instruction is the appropriate educational buzzword.
- bprater 18y agoI think personalization is the key, too. Why are we teaching programming with a human? At what point are we finally going to have machines that can work 1-on-1 with humans, at their pace, until they grok concepts. Some people learn more quickly, some don't. Let's not punish one group or the other. Let's teach interactively, but not with humans!
- pmorici 18y ago"I’m very skeptical of results that claim that some large fraction of the population is incapable of some mental feat like programming. 500 years ago the same was thought of reading, writing, and arithmetic." Yeah and the reason was that 500 years ago reading and writing was college level material. Now they start teaching the alphabet at what age 5? Then again most print material is targeted to a pretty low reading level. So even if learning programing early becomes more common that still doesn't make it easy because chances are the majority won't be very good at it just like many aren't good with the written word.
- mattmaroon 18y agoWait, what does he mean about the shift key? I pushed shift, then pushed a, and the a is still lower case.
- qqq 18y agoyou didn't even write it in all lowercase.
- byrneseyeview 18y agoI used to use caps-lock for that. But then I learned enough Chinese to tell my pet monkey to type my comments up for me while waiting for Eclipse to launch.
- nostrademons 18y agotRY LAYING OFF THE CAPS LOCK.
- jorgeortiz85 18y agoAbout a third of his class needs to switch to a more challenging course. Every university should have a way to "place out" of introductory programming classes, just like you can place out of introductory (natural) language classes if you have previous coursework or are a native speaker. This should be done by demonstrating proficiency in the skills that will be taught in the programming course.
- Eliezer 18y agoWell, sure, if universities were there to teach things, they'd invent ways to teach you using fewer classes. If universities are there to make you take classes until you get a piece of paper, why would they care?
- deleted 18y ago[deleted]
- neilc 18y agoExcept that this is a pretty common practice: at most reputable schools, if you can demonstrate you don't need to take an introductory programming class, you can switch to a more advanced class.
- llimllib 18y agowhat schools? (I ask because I hope that my school was "reputable" but that was certainly not the case)
- lincolnq 18y agoAt Brown (where I went for undergrad), you are normally tracked into an intro course, but if you can convince a professor of a higher-level course to override the prereq, then you can take whatever course you want. I have the sense that most universities will do this given enough prodding; you are, of course, paying them tens of thousands of dollars a semester. Sometimes there won't be an official documented procedure, but I would be surprised if you were qualified for a particular course but couldn't talk your way into it.
- Eliezer 18y agoI've noticed this with higher-level concepts too. There are people who simply can't grasp the concept of a mind that doesn't work like a human mind. There are people who simply can't grasp various levels of meta-thinking - like the distinction between metaethics and object-level moral decisions. You can keep trying to point in the direction of the meta-level but they just can't look in that direction, like they're in Flatland and you're trying to point "up". And at least according to them, some of these people are programmers. It seems there are multiple "gears" that you can have or not have, not just the "programmer's gear". I suspect I'm missing a social gear or two, because there are things I can't see, even after the fact, no matter how often they're pointed out to me.
- SapphireSun 18y agoI'm not so sure about that gear theory. I think you can have new gears installed. When I took some higher level courses that required new kinds of thinking, I didn't get it. I looked and felt retarded for a while, because no matter how it was explained I didn't get it. Then by continuing to study, and thinking about things, eventually I was able to see it, and it started to integrate itself into my thinking. It's almost like I can feel my brain being rewired. I think that what's required is enough exposure and determination to reset some neural connections and eventually the idea will integrate itself into you.
- brandnewlow 18y agoYeah, for me it's always been struggling through. Stepping away and then coming back to it. Then I get it. Same with piano lessons as a kid. I had chopsticks down pat after a few weeks. Then it was time to play a triad (a 3 note chord) and I just couldn't do it, pushing three keys at once with one hand. Spent a whole lesson with my teacher literally just pushing my hand down on the piano while I looked on in horror at how badly I was at it. That sucked. Then my family went on vacation for a week. At my next lesson I could play them just fine. Something clicked. But it wouldn't have clicked had my teacher not spent an hour pushing my hand down onto the piano over and over again.
- 18y ago
- andreyf 18y agoDiagnosable mental defects aside, I refuse to believe that there exist students who genuinely want to learn Java with a private tutor who understands the student's mental model of the world. Students range from couldn't-care-less to passionate, not from stupid to smart.
- dcurtis 18y agoStudents range from couldn't-care-less to passionate, not from stupid to smart. Wow, I never thought of it that way, but it really makes a lot of sense.
- maw 18y agoYou don't honestly believe that, do you? I'm quite sure that both axes exist (and maybe others too).
- silentbicycle 18y agoI suspect students could be plotted on both axes, and probably several others (amount of background knowledge, for example) as well. It seems clear that smart/passionate will generally do well and stupid/CCL will generally fail, but that leaves smart/couldn't-care-less (know-it-alls who won't listen to anything in class) and stupid/passionate (who will probably need to put in extra time, but have a good chance). Everyone will fall somewhere in between, of course - those are just quadrants.
- coliveira 18y agonice, you just demonstrated that caring about the topic is all that matters to have a good chance of succeeding (not how smart you are).
- andreyf 18y agostupid/passionate (who will probably need to put in extra time) I think this view ignored the correlation between "put in lots of time" and "smart". All of the smart people I know have usually put in an extraordinary amount of time studying whatever they are good at.
- 18y ago
- tlrobinson 18y agoThis really has nothing to do with Java, except it happens to be the language he's teaching. A more accurate title would be 'Programming in College: "You might as well be teaching Chinese to a monkey."' as it would be equally applicable to any programming language.
- iamelgringo 18y agoI can think of a couple other languages that I'd rather have people learn how to program with. It's a horrible first language. In my "Intro to programming with Java" class a few years back, it took people three or four weeks just to be able to install java, set up the path in the environment variables on their home computer and compile a "hello world" program. If you were raised on Windows, and you've never used a command line before, it can be a challenge to figure out. I suggested to every teacher as well as the dean of the program that if they're committed to Java as a first language, then offer students a pre-configured VMware Virtual Appliance with a Ubuntu install with the programming environment preconfigured and set up for the students. That way, they could download the appliance or hand it out on CD, download VMware player and start programming. Instead, the teacher was playing sysadmin for java installations on Windows boxen. It's a shame that so many schools teach Java as a first language. I think there's probably a lot of people with aptitude and interest in programming that might get into the industry, but who are put of by all the initial overhead associated with java and sys admin stuff. I think he's up against a bug in the curriculum and not just people's limitations.
- stcredzero 18y agoI taught Comp Sci 101/102 as a TA at a state university in the US. Yes, there are students who just don't get it. There was one student of mine who seemed to think as if the machine contained some weird little fussy creature, and if you somehow made nice to it in its unusual language, it would decide to like you and do you a favor and run your program correctly. Seriously. He couldn't comprehend: X = X + 1 To be fair, that might seem paradoxical, but I would break it down for him, going step by step with cards and boxes labeled by the variable names. He just couldn't comprehend. He had a hard time with variables. Heck, I think he had a hard time with anything but social interaction. What was disturbing to me, was the amount of energy he devoted to sucking up to me and trying to scam me by mimicking the "Ah-HA!" moment. Other disturbing observations: many of my fellow grad students didn't get it either. To them, the C compiler was just magic. No understanding of how things were marshaled on the stack or how operations were implemented in machine language. Surprisingly, they were often about as bad as the local community-college students who got employed by a local corporate body-shop. At one point, one fellow grad student got exasperated at me in a study session and said, "I don't care about the principles, just give me the answer so I can get an A on the test!" She later told me she was just planning to go into management anyhow. (In a way, that was really disappointing. She was one of the few women in the program, and pretty cute.)
- tokipin 18y agoi think it's a matter of perspective. people's perspectives can be very different. it didn't hit me until i got really smashed one night and my vision became many times more detailed. the world looked beautiful. no doubt there are people that can see that clearly all the time, people who live in the world, as opposed to outside of it which is how it feels i am. those people are probably the ones who can "get" drawing, and who might wonder why it is that others don't get it when it comes to programming however, i bet these people can confuse the letters on the screen for the program itself, or it might not be clear to them that the semantics of the language are rich and are more important for understanding it than its syntax is, and other fundamental misconceptions like that i can see better if i put a lot of focus on it, but it would take practice to make it something i could readily call forth or sustain, and even then i don't know if i could see as clearly as when i'm drunk, or as clearly as someone for whom it is natural. going the other way, how do you show people what to look at when programming? i can give myself visual tasks like "try to perceive all of the individual blades of grass on the lawn at the same time," but what is an equivalent exercise for someone who finds programming difficult?
- kragen 18y agoMaybe this is missing the point, but have you gotten your vision tested? Maybe you're farsighted or nearsighted. I think the world looks a lot more beautiful when it's in sharp focus.
- tokipin 18y agoi'm very nearsighted, and use glasses. however the kind of detail i see when i'm very drunk is on a different level, regardless of whether i'm wearing glasses or not (like looking at things up close.) it might seem strange that you can see better than 20/20 (or whatever 'perfect' vision is,) but this is something that is independent of the apparatus of the eye. it's deeper, like the cognitive management of attention/focus i'm sure part of it is that i don't actually use my eyes much from day to day... which might be the reason i'm nearsighted to begin with. but even that much wasn't apparent to me before. though the same could be said of those who have trouble programming. maybe there is something they don't use a lot, and it atrophies over time? let me be clear. when i say i don't use my eyes much from day to day, i mean i spend most of my energy in my head and i don't really focus on my sight at all. it doesn't take much ocular prowess or precision to parse some text on a screen but who knows, maybe i'm loony. koo koo
- spc476 18y agoI can sympathize with the author. I "got" programming and generally found it rather easy (in college, I would look at some random student's code and just point out each bug; used to drive the random student crazy when I did that). But there was one class I took, Unix Systems Programming (all in C). It was a higher level course with prerequisites of data structures (by that time in college, taught in C) and compiler writing (undergrad version). We were sitting there as the professor was going over the memory layout of a running Unix process ("the text segment is where the code is stored, the data segment were all pre-initialized code goes, yada yada"). One student raises her hand. The professor stops and asks if she has a question. "Yes, where do the comments go?" I think it took a full thirty seconds for the professor to reboot. I do have to wonder how that student got through compiler writing.
- kragen 18y agoYou know, most ELF executables do have a .comment section, and IIRC Java includes comment text in its *.class files, and comments are included in the HTML and XML DOMs. So it's not a completely insane question.
- elviejo 18y ago"A change of context is worth 60 IQ points" (Alan kay) So, I think that the first step towards requing the last third of the group will be to teach them LOGO… yes LOGO once people “get” for loops drawing squares and stars and circles etc. etc. making the shift to other programming languages is easy. If the curse requires OOP then start with Smalltalk and Etoys. They are intended for kids… but you are trying to build fundamental concepts here. best of luck..
- tolmasky 18y agoWhat I think is somewhat particular about the challenge of teaching programming is that there quickly develops two distinct levels or types of thinking it's "difficult". I don't see "programming" as difficult in the same way that I don't see "writing papers" as difficult: it's a piece of cake to get words on the screen that make sense. Of course, writing a paper can be quite hard depending on the ideas you are trying to express. Similarly, I think everyone believes programming to be difficult depending on the underlying problem you are trying to solve (for example, no one thinks its easy to solve NP-Complete problems in NP time or to write fast games on slow devices). However, what trips teachers up is that with some students the problem is that they can't even get past the first hump: getting meaningful things on the screen in the first place. It would be as frustrating as having a student in a college level writing course that always puts the words in his sentences in random order, and expects the reader to "know" what order to read them. Such a teacher would on the one hand be teaching tone and proper structure to one set of students, and basic rules of semantics to another. I recall many students in my CS classes just rearranging the syntax in their programs hoping the compiler would finally accept it. Clearly these students are having much different problems than the ones who simply get a little confused when they have a hard bug in their programs or find the idea of pointers unintuitive.
- axod 18y agoLearning programming in classes like this just seems a terrible idea to me.
- rbanffy 18y agoI used to start my courses with the following: "This course has as much chances of turning any of any given person into a programmer as a swimming class can turn you into a fish. Some of you have it, some of you don't. Some of you will find it easy, and some will find it utterly incomprehensible. The fact you are here holds, at least, some, but not much, promise. Live with it."
- nradov 18y agoIt's not surprising at all to see a huge variation in student ability for an introductory class. The variation is just as big in other areas. My wife has been attending a large public university and from helping her edit group project papers I've seen samples of numerous other students' writing. Some of them do pretty well, but others are borderline illiterate (seriously).
- mattmcknight 18y agoA couple of suggestions… Start with a visual programming language for the noobs- maybe something for kids like Scratch and then something where you can make real apps quickly like VB6. My 5 yr old can do programs in Scratch. She hasn’t learned recursion yet, but loops and events are clear to her. She did learn about the shift key in preschool computer class this year though, so she’s probably ahead of some of your students. Grade people based on how far they get, don’t make them go forward with the rest of the class if they don’t grasp week one. Let them keep iterating on those concepts until they get it. The tragedy of group education is that you are forced to move and it is very hard to ever catch up. I would computerize the whole class and make it self-paced if there is that much variability. For the non noobs, the Java 2D stuff is useless. It’s completely useless to learn that API. Make them write programs they can use in their life. Do a simple data model for their budget and use Ruby on Rails to turn it into a web app. PASCAL, Ada, and Modula-2 suck. I hated programming when I was using those and thought it was useless BS. When I was a student, I liked learning c and asm because you learned about how computers work and I liked learning high level languages with easy graphics libs because you could make useful things quickly. I liked Matlab too, because I could use it to check my math problem sets.
- zaidf 18y agoA lot of it is about motivation. I took AP Comp. Science. A in freshman year of high school. I got a 5 on the exam. An A in the class. I'd be so excited each day as I went to class. This was the peak of my new found love with programming. Then in senior year I took AP Comp. Science AB. I did just-okay in the class. And bombed the AP exam. More telling was how little I cared about the poor grades.