6 ms·
I 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 t
by mdasen 18y ago
I 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.
- Xichekolas 18y agoI have to wonder if a language with less syntax would be easier to pick up. Start people that are totally new to programming with something like Scheme or Ruby (surely there are even better ones than these) that requires less arcane punctuation to do things like hello world, then once they get the hang of things, slowly introduce them to more structured languages.
- qqq 18y agoruby syntax can be a little confusing. e.g. you can usually leave out parenthesis, but not always, and sometimes you get warnings but it works anyway.
- Xichekolas 18y agoWell with any language you have to teach a little bit of convention to go along with the rules, and the convention on when to use parens in ruby is mostly standardized from the code I see. But yeah, I'm sure there has to be a better language for learning out there, I just don't personally know it. I originally learned with C++, and I remember the terror that were pointers at first. When I had a class that taught me Scheme, I remember thinking: "hey, I could write this code on paper without even testing it out if I wanted", which was the polar opposite of my C++ experience.
- gommm 18y agoMy university started the introductory course (for all majors, courses were common for the first 2 years) with scheme and most student seemed to understand it fairly well. We still had the 20% that were extremely fast because of having programming experience before (but learning scheme was a nice change compared to what they used to do) but the numbers of students completely lost seemed rather small. So I think scheme is a very good choice for an introductory course... Ruby is very nice (I'm mainly programming in it nowadays) but I'm not sure it's such a good choice for beginners, there are a lot of small details that could trip up beginners I think (block vs procs vs lambda vs method(:name_of_method), the eigenclass...)
- 18y ago
- mynameishere 18y agoIn 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. LOL. In what language does array assignment result in a new copy of that data structure rather than a reference of it? http://en.wikipedia.org/wiki/Array http://en.wikipedia.org/wiki/Array In computer science an array[1] is a data structure consisting of a group of elements that are accessed by indexing. Answer: None. You'll get tripped up on a type mismatch error Every real language has types. Java catches most errors at compile time. That's an advantage for students.
- mynameishere 18y agoI don't mind downmods on political subjects (too much), which are matters of opinion to a degree. But when I correct somebody's laughable mistakes, please either correct me in writing or leave it alone. Thanks.
- dcurtis 18y agoI am pretty sure it was your tone.
- mynameishere 18y agoJava is a whipping boy, and I also have my problems with it, but one of its minor strengths is that it is clean enough for a teaching language (especially for total neophytes). Here is the much lambasted manner of outputting: System.out.println("Hello world"); ...in fact, this is well organized. "System" is a namespace. "out" is a static variable. "println" is a static function. "Hello world" is a String. These things all exist in an orderly world. A professor could explain a lot of key elements of language design with that one line. What's this: print("Hello world") ...it's shorthand for much the same. Easier? Yep. But it's glossing over a lot of details that students need to know. So when you come at it from a teaching angle, you're maybe making a mistake. Python/Ruby/LISP all have their WTFs that will throw off students, even if they're all better languages than Java.
- mixmax 18y agoI think that programming is indeed something that you either get or don't. I had an interesting expereience a while ago where I helped a friend doing a website. There was a backend involved where he would have to type some numbers into a table (how much of x, y, x... do you need when you are a certain age). I spent hours trying to explain to him why he couldn't just draw a graph on the screen, like he would on a piece of paper, and let the computer find out what the values were. He simply didn't get the basic concepts behind it and thought that the computer should easily be able to see the graph and decide what to do. He thought that is should be just as easy to draw a graph on screen and get the numbers from there as entering numbers manually. It became apparent that he just didn't think sequentially and logically. Notions like if x is larger than y and y is larger than z then x is larger than z were extremely difficult for him to grasp. He isn't stupid by any means, he simply thinks about the world differently. And he would never get even a simple program to run no matter how much he tried.
- dmaclay 18y agoTo hire sufficient good TAs, schools would have to pay much more than they do, as they are competing with a lucrative commercial industry. However academic hierarchies won't tolerate paying elevated salaries to people with lesser paper qualifications just because they are talented. So every year you get the people who want a bit of cash on the side, but aren't yet good enough to do part-time contracting.
- jd 18y ago> regular variable because Java works by reference, not by copy I haven't read the other replies, so somebody else may have pointed this out already but Java is a by-copy language, like C and C++. Not by-reference like you claim.