CS Students Want Advice on Helping Strugglers?
geekgirl21 asks: "My university's Computer Science Society (a student organization) wants to create a booklet about helping students get through the major's introductory courses (3 semesters of Java). The focus of this booklet is toward the people who work hard but still struggle with the courses. Specifically, we'd would like some advice about where to get the following: clearly written books/articles about the concepts of Java and OOP, how to prepare for tests, how to take notes in class, how to productively complete a coding assignment, and how to write good, documented code. Also, organization is not our group's strong point. So how do you recommend splitting up the work to complete this seemingly intimidating task? Thanks in advance about any advice you can provide."
I have tutored any number of impressionable young girls in High School algebra and calculus--and I've come to some conclusions.
1) Choosing the right textbook isn't just important, it's damn important.
2) I could have been replaced by a tape recoder with these phrases in a loop: Well, what do you think the answer is? I know that you don't think that will work--but you can't know until you try. See, you are a very smart girl when it comes to mathematics, I hope you consider it as your college major.
3) A dry textbook is worse than a lively teacher and a lively textbook is better than a dry teacher. It's about motivation, not intelligence. In my experience, confidence in your ability to tackle problems (not necessarily confidence in your solutions, though) is the surest mark of genius. And motivation, unlike intelligence, is under your control.
Here's a clue for people who think college makes you a better employee.
College (and High School even) prove nothing more than your ability to put up with 4 - 6 years of crap. Most of which you will never need to know. Of course, a Java monkey is fine and good but a programmer who brings not only ability but experience and knowledge about my business is worth so much more to me.
College is important. Books are, IMO, only useful for reference material. Experience is most crucial to your success.
First, I don't agree with those who said "sink or swim", but I don't completely disagree either. I'd say the same about any discipline. I sucked at biology (I am really bad at memorizing stuff) so I got out of that. I have seen many people really struggle, and some of them made it, some of them didn't. Some of those who didn't might have if they'd had help. It's up to them to ask, it's up to you to offer, but frankly if they are willing to put in the effort, nobody loses from helping them out.
I can't really help with the OOP stuff, because when I took CSc our introductory stuff was on procedural programming using Pascal (I started a four-year CSc program in 1992). I would say anybody who hasn't spent their teenagerhood dicking around with computers and teaching themselves rudimentary programming will have some difficulties in any case, but there's nothing like a first-year course to get you up to speed! There are plenty of online tutorials, some of them might even be useful, and I have heard good things about the Eckels book mentioned by others here.
To prepare for tests: same as any other course! Do your assignments, ask questions in class, and stay on top of things. In a well-structured course the labs will follow the lectures fairly closely but there's generally no hope of the lab giving you first-hand experience at all of the theory you will be studying. The best thing to do with unpracticed theory is to ask questions. It's the only way I remember theory I don't use immediately--think of questions and ask them. If you can think of an intelligent question, and it's answered well, I personally have a much better chance at remembering the context.
Also, when you're actually taking the test, do everything they say: read it over first, check the number of pages, have a bottle of water or something, take a handkerchief if you have a cold (heh), do the stuff you're confident with first to build momentum and just do it, double-check, but don't double-think, your answers.
Taking notes is something I never mastered. But if you read the text in advance, if there is one, you only need to note the differences. But I found most profs handed out overheads or printouts or whatever. And in first-year CSc, I don't think you'll need much note-taking anyway--you need to do the lab work more than anything else.
How to productively complete a programming assignment? Do the absolute requirements and unless it's a multimedia course don't bother with fancies. It'll be marked by senior undergrads or grad students who will be bored with 100 assignments demonstrating recursion to solve a Fibonacci sequence. By the time you get to larger projects, hopefully you'll have a good idea of how to productively complete assignments, but at first it'll be your first skate on a frozen pond.
To write good, documented code, I would think any first-year program at a half-decent university would teach this. But, if they don't, I'd recommend starting by commenting every single line of code you write. It's better to start with too much than too little--you're less likely to get dinged for it and that way you'll get used to commenting code as part of the process. You might want to use tools like JavaDoc or Doxygen, but never EVER forget to document the code itself, because if somebody wants you to update legacy code later on, that might be all that's left.
Good luck with your booklet! :)
non-sequitor and a rather poor troll.
If you're going to use your +1 to troll, learn to do it properly. Sheesh. Reminds me of the days I spent on Usenet, listening to those morons in alt.flame. I mean, you could have at least picked an analogy that had some semblance of working. Even if you had said something about on the job training, it might have worked.
...Was to have a mandatory 1 credit course for the seniors in the Computer Science degreee program, that required students to provide tutoring to others. Twice a week for two hours I sat with people that were having problems. Everything from teaching them to debug their coding assignments (not doing them for them), to explaining concepts covered in class.
Frequently, the problem was just a small missing piece in their understanding. It was great to see the light come on in their expressions when they got it.
I enjoyed the experience a great deal, and now 25 years later, I still find it very rewarding and mutually educational.
Can You Say Linux? I Knew That You Could.