Slashdot Mirror


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."

51 of 99 comments (clear)

  1. Here you go by Henry+V+.009 · · Score: 2, Insightful

    Here is the advice to give a struggler:
    Have you considered a major in psychology?

    Now stop trolling about the honor systems CS departments put in place to reduce cheating. It's not like there is anything you actually learn in four years of CS education that you can't learn in 3 months with a pile of books.

    1. Re:Here you go by GMontag451 · · Score: 2
      It's not like there is anything you actually learn in four years of CS education that you can't learn in 3 months with a pile of books.

      Here's a clue for everyone who thinks that teachers are useless, some people simply cannot learn from a book!!!!

      There is a reason why teachers exist, and that is because the vast majority of people have a hard time learning material on their own with only a dry text book to guide them.

    2. Re:Here you go by Jose · · Score: 4, Insightful

      It's not like there is anything you actually learn in four years of CS education that you can't learn in 3 months with a pile of books.

      I'd disagree. Going through those x years of higher education teaches you quite a bit. You may not remember half the stuff that prof tells you, but it is the other things that you learn that are _way_ more important.

      Like how to teach others. You may be really strong in some aspect of a course that you are taking, so some of the other students ask you how it works/how to do it. The easiest way is to just give them the answer. The problem with that is that those people keep coming back looking for the easy answer, but if you spend 5-10 minutes initially explaining how/why something works, that student will (hopefully) understand how to do it, and won't come back. When you first start doing things like, you'll probably stumble a bit, and it'll take a while to explain things, but once you get the hang of it, then your teaching becomes much quicker, and much more effective. (a very strong asset for you to have)

      Another thing that you will learn is how to ask questions, as above, you may just start out asking for the answer directly, then you start asking why, then (hopefully) after a while, you will be able to succinctly be able to describe a situation, the problem you are having, and what you have tried in a short order of time. (again a very good asset for you)

      You learn how to deal with prick collegues, superiors, and aquaintances.

      A lot of people will think that these are things that you can pick up in high school, or that you already know these things (they are pretty obvious), and yes that is true. But the concentration of these factors, coupled with the pressures of higher education really drive home these qualities, and it should be just second nature to you. So that it is just a reflex, not really something you have to think about.

      yea, you could probably learn some or even all of the technical details in 3 months with a stack of books, 2 pencils (37 erasers!), and a couple computers...but you'd miss the whole point of University.

      --
      The basic sleazeware produced in a drunken fury by a bunch of UCBerkeley grad students was still the core of BIND. --PV
    3. Re:Here you go by Henry+V+.009 · · Score: 5, Interesting

      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.

    4. Re:Here you go by Ellen+Ripley · · Score: 2, Troll

      ... some people simply cannot learn from a book!!!! ... the vast majority of people have a hard time learning material on their own with only a dry text book to guide them.

      Tough. Being unable to learn from a book is like being unable to write on paper with a pen. It's a basic and required literacy skill and if you don't have it, you need to get it.

      Your statement is the learning equivalent of saying "some people simply cannot drive with a gas pedal... they need someone to ride with them and operate the gas". Wrong. You can't drive a car without knowing how to use the gas pedal, and you can't learn without being able to pull information from a book.

      It may not be the student's fault. Some secondary schools are tax-funded day care centers, and issue diplomas for attendance. I feel for those who've been short-changed this way, but that doesn't help the students. The driver's licence doesn't enable you to drive, it just certifies that you can. You still can't actually drive a car if you don't understand the basic operation of the gas pedal. You can sit down and wait to be magically transported to your destination, but you're not going anywhere if you don't know how to use the pedal.

      Likewise, you can't learn if you don't know how to absorb the accumulated knowledge of those who came before you. The job of the person at the front of the classroom is not to digest knowledge for students, because it can't be done. The learning process involves exactly one person, the student. The only one who can teach you is you.

      If a teacher is able to make the learning process easier, that's a nice bonus. In the end, though, the student must be responsible for learning, or never learn. That includes the responsibility of picking up the basic tools of the trade, and one of them is learning by reading a book.

      Ellen

    5. Re:Here you go by GMontag451 · · Score: 3, Insightful
      Your statement is the learning equivalent of saying "some people simply cannot drive with a gas pedal... they need someone to ride with them and operate the gas". Wrong. You can't drive a car without knowing how to use the gas pedal, and you can't learn without being able to pull information from a book.

      No, its the equivalent of saying "some people simply cannot learn to drive without someone showing them how and riding along with them at first" which if you ask me if perfectly reasonable.

      I wasn't suggesting that it should be alright for people to not be able to learn from a book at all, but rather that there are quite a few people that cannot learn from only a book. The value of a good teacher cannot be underestimated.

      The job of the person at the front of the classroom is not to digest knowledge for students, because it can't be done.

      No, their job is to figure out how a student best learns, and translate the material to be learned into a form digestable by the student. Whether or not the student actually digests the material is a function of how much he/she wants to learn it.

      The learning process involves exactly one person, the student. The only one who can teach you is you.

      The learning process invovles two people, the student and the teacher. You need both a motivated student, and a good teacher in order to learn.

    6. Re:Here you go by (trb001) · · Score: 2

      It's not like there is anything you actually learn in four years of CS education that you can't learn in 3 months with a pile of books.

      I don't disagree with you, per se, but I don't agree either. There's a certain amount of appreciation for the subject you have to have coming in and, if you don't have that, CS will not be a good career (lifestyle?) choice for you. However, there's a great deal of theory and a definite style that you pick up from some of the really talented professors.

      My favorite course in my undergrad CS courses (I was a CpE so please, don't flame me too much) was my operating systems class. That one class taught me more about system dataflow than any book ever has. True, I could probably have gone out and bought a "Theory of Operating Systems" and learned why deadlock occurs, how to resolve it, how to order processes by priority and handle them, but my professor gave her own unique theories that were much more impressive then reading something out of a book.

      That being said, let me take the other route and say that I really didn't learn too terribly much in my classes that I didn't already know. The 2-3 semesters of data objects was a bit much but definitely helped to raise my GPA and weed out the incompetent students who would NEVER make it in CS. I thought it was kind of a shame that my curriculum was so filled with mandatory engineering classes I didn't get the time to take a nice graphics or advanced OS class, but that's the tradeoff I made for my microprocessor design classes (which were excellent, btw...I advise any CS student to find a few good hardware classes at their university and learn lots from them...understanding hardware and how assembly code interfaces with it will give you a greater appreciation of systems as a whole, IMHO)

      --trb

  2. Well... by dh003i · · Score: 4, Insightful

    You can always take the approach that has a very strong heritage in the Linux community, and has recently been catching on in some certain colleges: RTFM! READ THE FUCKING MANUAL!

    Seriously, that is what some colleges are doing. You can be expelled for helping a struggling student; it falls under the same class as cheating or plaguarism. The idea is that they want to weed out all those who can't hack it on their own, so as to save them from wasting years of work. After all, programmers need to be able to get stuff done on their own, without asking for help every 5 minutes, right?

    Well, I can understand this approach: programmers need to have some degree of independence. But everyone struggles with some things, and maybe this person has really great ideas for programs/algorithms, but just has problems putting them into computer language. It'd be a shame to waste such a person because (s)he couldn't get it right by rtfm'ing.

    Also, in the real programming world, though much is done independently, no programmer is an island unto himself. No one can do everything, and the wise programmer seeks the advice of specialists in particular areas.

    Personally, I think that you can only help other people understand something/solve something if you know how you do. You might solve a problem lickety-split. How? If you don't know how, you can't really help anyone. But if you can analyze your thought process and come up with exactly how you solved that problem, you can help other people think in the way you do about the problems (which is obviously a good way to think, since you solved it quickly). It might be a rigorous logical thought process, or a highly innovative one. Even if you are really good, you can benefit from this type of thing by understanding the thought processes of others who are really good, thus adding to your own thought processes.

    1. Re:Well... by aminorex · · Score: 2

      Aye! The relationship between industry practice
      and academic instruction is sooooo tenuous that
      many a 4.0 CSci grad has opted to fall back to his
      garage band, and many a high-school drop-out has
      taken up dreamweaver only to gradually slide into
      EJB. I qualified to graduate Summa Cum Laude with
      High Distinction from the upper-tier college of my
      university, and I feel confident in saying, despite
      my later success in science and industry, that the
      work I undertook at each stage in my career was so
      radically different from that undertaken in previous
      stages that I can easily understand how a substantial
      percentage of persons who were wildly successful
      in one of those domains might be a total failure
      in another.

      Grades suck. They are a disincentive to learning,
      training the student to earn grades instead of
      learning. While there is a strong positive
      correlation with success in business, industry,
      professional life, and grade performance, it is
      foolhardy, as any HR person will confirm, to
      over-interpret that correlation as a
      correspondence. I could have learned 2-3x as
      much at university if no grades were issued.
      But I wouldn't have gotten the plum jobs after.

      --
      -I like my women like I like my tea: green-
  3. Suggestions by Lando · · Score: 3, Informative

    First most colleges offer courses in how to organize and prepare for tests. Most students should take this course or class if they can... No reason for your organization to bear the brunt of teaching someone how to study.

    Second, the students will need an idea on how mathmatics and logic work, consider sending them to the math and physic tutors for the basics.

    Third, how much of Java is about the fundamentals of OOP, more than likely if this is a basic programming class, the people learning it don't need to try to learn programming to start with, indeed they just need to get java to print and they need basic flow control... Trying to teach the oop and what it means at this stage of the game is a little premature... As long as they know how to get a basic program working, that's what they need to focus on at the moment... once they get the basics down, then they can move into thoery...

    Fourth, where are your senior classmen, tutoring is one of the jobs of the senior classmen. So get with the tutoring department and get some of your senior classmen paid for tutoring students. A one-on-one education with someone that has been through this will help you to tailor your training in the future... Just make sure the tutors are giving feedback as to what they find students need the most help in.

    --
    /* TODO: Spawn child process, interest child in technology, have child write a new sig */
  4. Weed out by lexarius · · Score: 2, Insightful

    If they can't get through a semester of Java and understand the basic concepts of OOP, they aren't likely to go far in the world of CS. Instead of giving them a crutch and producing more undertalented individuals, ask them if they want to try the course again or switch majors. Same goes for any major. There once was a time when a CS degree meant something.

  5. Should you? by gmhowell · · Score: 2

    If someone can't get through three intro courses, have they picked the correct major? If they have no study or note-taking skills, should they be in college?

    Traditionally, these intro type classes in various majors were meant to weed out folks that the admissions testing missed.

    --
    Jesus was all right but his disciples were thick and ordinary. -John Lennon
    1. Re:Should you? by jeffy124 · · Score: 2, Insightful

      I agree. At some point there are individuals who simply are not compenent to handle the world of programming, or college in general.

      Hearing heard stories from grad students who have TA'd the first year courses at my school, there tend to be four types of students: Those who get it, and those that dont; those that work, and those that dont. Treat as a 2x2 table, every student will fall into one of the four cells, maybe not distinctly, but they will. It should be clear what students in each cell should do, whether it be continue deeper into CS, change majors/tranfer, or drop out right away, drop out a year later.

      --
      The One Rule Of Chess You'll Ever Need: Don't play someone who carries a kit in their bookbag.
    2. Re:Should you? by gmhowell · · Score: 2

      Those not weeded out in the US will not amount to anything. If they can't grok java, they won't be able to grok what comes later. They are wasting the time and energy of the capable students and the instructor. If this much hand-holding is necessary for Java, how much will be necessary for operating systems, algorithms, etc.?

      BTW, your understanding of the term 'economic constraints' is apparantly (sp) flawed. All countries are under economic constraints. The difference is what is the shortage: money, physical capital, food, etc. At the very least, there is a shortage of time for all people. And when dealing with an ignoramus who is slowing down my education, I have to deal with insufficient patience.

      (Dear Lord, I think I might be turning into an objectivist)

      --
      Jesus was all right but his disciples were thick and ordinary. -John Lennon
  6. It's hard. Sorry. by WasterDave · · Score: 3, Insightful

    I recently read the first few pages of an introductory Java course taught at a University (too much wind, couldn't go snowboarding). It appeared to be the best introductory coding course ever written. It said, basically:

    * Coding is hard. We don't expect everyone to be able to do it.
    * You will only learn to code if you practice. It's like learning a musical instrument, there are no short cuts.
    * You will still be able to work in IT if you can't code.
    * Did we mention hard? Good.

    Dave

    --
    I write a blog now, you should be afraid.
  7. The cyncical (and elitist) point of view by Dr.+Bent · · Score: 5, Insightful

    Don't help these people. Let them fail. Seriously.

    1) There are already way, way too many bad programmers out there. Every profession has the standard bell curve of skilled vs. lame, but software is 10 times more skewed toward the lame end due to too many people dropping out of school to go work at a dotcom. Don't add fuel to the fire.

    2) Every good programmer I know learned 90% of his skills on his own. Yes, you can learn things at school that are difficult to learn on your own, but quite frankly, these things shouldn't require special help to pick up (outside of normal coursework). If you can't figure them out on your own, your chances of applying them correctly are pretty damn low.

    3) [and most important] Too many people go into Computer Science because the money's good, or because it seems like a better idea than the alternatives, or because they like playing Quake and they think that's what C.S. is all about. Then they get into their 3rd year and decide that they hate programming and switch majors. The sooner these people figure out what it is they REALLY want to do, the better, for them and us. It takes a special kind of person to actually ENJOY (not just tolerate) programming, and if you don't enjoy it you're going to regret making it your life's work.

    On the other hand...

    1. Re:The cyncical (and elitist) point of view by (trb001) · · Score: 4, Insightful

      Yes, yes, double YES!

      I got out of college pretty much at the height of the dotcom saga (May, 2000). I was/am no slouch when it comes to programming...I went to Virginia Tech and was on the school's ACM computer team (unfortunately, I graduated before they won 3rd place in the international finals, but I cheered for them :). When it came time for interviewing, I knew I wouldn't have a problem finding a job but I thought some of my peers might since many of the people I knew from class could barely write C code for their projects. I remember practically writing their code for them while I was in school and figured eventually this would catch up with them when it came time for the real world.

      Yeah, I was wrong.

      These people still managed to get 50k+ starting salaries with signing bonuses that were just sick. They weren't GOOD at what they did, they just knew what a computer was and how to program a little, but that was enough for most companies. And we wonder why those companies didn't do well...

      Anyways, back to the point. I was a computer engineer in college and I still remember the first day of orientation. All the engineers in our orientation group (you were a 'general engineer' until your sophmore year) were gathered in an auditorium to listen to the dean speak. One of the first things he said was "Take a look around...3 of the 5 people sitting near you won't be here when you graduate". I was PROUD of that fact, knowing that I would be one of the few engineers to make it through my 4 years at school.

      I wish CS were the same way. I wish people had a rough time and were forced to drop/fail out of of the major, then maybe we wouldn't have the glut of horrible programmers passing resumes around and making it very, very difficult to find a job these days even if you are an excellent developer. Please, don't help these people more than they deserve, it's doing them and the rest of us a great disservice.

      --trb

    2. Re:The cyncical (and elitist) point of view by irix · · Score: 2

      All the engineers in our orientation group ... were gathered in an auditorium to listen to the dean speak. One of the first things he said was "Take a look around...3 of the 5 people sitting near you won't be here when you graduate"

      Heh. I have an Engineering degree from a university in Canada, and they did the exact same thing. I wonder if it is a universal Engineering thing?

      I got the impression that they were trying to make a point - don't assume that becuase you got good grades in high school that you can graduate from Engineering.

      And you know what - I was proud when I graduated too, knowing that I had made it through those odds.

      --

      Do you even know anything about perl? -- AC Replying to Tom Christiansen post.
  8. Debugging by kill-hup · · Score: 2
    I think the hardest thing I ever had to show someone was debugging their own code. Sometimes those logic errors and typos don't stand out to the original coder, since s/he is "bridging the gap" in their mind (ie: they see what they thought they wrote).

    For people who hate/can't do debugging, the best advice I ever gave was to take a break. Sometimes, like solving a puzzle, the best move is to take your mind off the puzzle and come back later. Of course, tracing variables through the code and setting breakpoints in a debugger doesn't hurt either, but it was never as well-received ;)

    --
    Sinepaw.org: Grape Winos
    1. Re:Debugging by toast0 · · Score: 2

      It seems debugging is not taught very much... other than the 'cout school of debugging' (or printf, or whatever, i'm rather attached to c++ cause thats our primary language at my school :)

      for instance, using the built in debugger in visual studio amazes most of my classmates, and all i do is stepping watches and breakpoints. (granted, thats all i know how to do, but hey :)

      at my previous school (a community college), they also didn't teach debugging using the debugger, but i didn't go through the full curriculum (i took the first two courses, which was then pascal, and c, the next course was c++, then there was data structures and after that i don't know, they've changed their curriculum though)

      using the debugger can help a whole lot, i'd say i find 50% of my stupid bugs with that, and 90% of my more difficult bugs (i'm not sure weather to call them stupider or harder... but the ones that are more difficult to detect and find at any rate)

  9. Re:CS is supposed to be hard by kill-hup · · Score: 2
    Very true. You definitely see the numbers drop off in the sophomore-level classes. As they say, those intro classes help "separate the men from the boys".

    A lot of programming and Computer Science in general is not something you can learn easily. Certain skills like debugging and optimization can be a pain to pick up if you don't have the knack for them. I've known a bunch of intelligent people who could read the books and pass the tests, but application of ideas to those real-world scenarios that didn't always fit ever-so-neatly was their achilles' heel.

    --
    Sinepaw.org: Grape Winos
  10. And then when you want to be a real programmer... by Da+VinMan · · Score: 2

    ...go learn something else besides Java too. I mean, there's nothing wrong with Java, but if students leave school thinking "Java is it" and "nothing but Java", then I hope they can make a mean cappuccino; because there's no hope for them in the market.

    The same goes for OO think. Why stop there? Why not learn stuctured programming, etc? Students will certainly encounter plenty of both in today's market. Some functional background will help a lot too. Granted, there's only so much you can do with an undergrad, but one has to learn what the market needs, and the market needs all of the above.

    Anyone can be trained. Real education takes motivation. I can work with a motivated idiot; slacker geniuses are useless.

    --
    Please mod this post only if you think others should/n't read this. I have enough ego^H^H^Hkarma. Thanks!
  11. Yes, because... by Tom7 · · Score: 3, Insightful

    First of all, it's not clear that these are necessarily computer science majors. Many majors in my school, for instance, require their students to take the intro CS courses but nothing further.

    Second, you should probably learn some patience -- though this stuff may seem easy to you and me, just because someone doesn't "get it" immediately doesn't mean that they won't, eventually, and go on to be successful. I'm reminded of one of the hardest classes I've ever taken, an undergraduate course on functional programming and advanced programming techniques... I hated that class at the time, but now I do that kind of thing for my research, and it's totally comfortable for me. Sometimes it's just a matter of getting over that hump, and sometimes the inability to do that may be more a problem with the teaching method than the student.

    1. Re:Yes, because... by gmhowell · · Score: 2

      helping students get through the major's introductory courses

      To me, that certainly sounds like it is for people who are/will be CS majors. If not, the writer needs to take some time off from saving the world to take an English class.

      I have plenty of patience. For people who deserve it. I decided about halfway through college that I was tired of sitting around people who just didn't get it, and who were slowing me down. At that point, I decided that I would do whatever was in my power to make my professors my personal tutors. Everybody should have read the book and gotten something from it. If you can't do that much, there are several trade schools I can recommend. Funny, most professors agreed. So they indulged my tangents, my questions that touched on other disciplines, and questions that would be answered 'next semester'. My grades went up, and I became known throughout the department.

      This is college (or university). Not everyone belongs in college. Society is better served when each performs to their ability. Not when everyone is pulled to some average level, be they underachievers who will typically struggle, or overachievers who will be bored senseless.

      I'm glad things worked out for you. In my experience, you are the exception.

      FWIW (if you don't at this point think I'm a total halfwit) I'm glad that this is being done by a club of potential peers. If this must be done (and it's clear that we aren't of a singular opinion on that) this is the proper arena. If it works out well, students who are like you were can get through it and eventually propser. But they do nobody a favor by not telling some people 'you just aren't cut out for this'.

      Ehhh. I think I'm just being especially hardnosed about this for some reason. Not sure why. Let me try this:

      If it is done by peers, and if the students being helped are truly doing their best, and if the peers are willing to accept that not everyone is capable of this, it's a good thing. Some people will always need a helping hand. And I think that in some cases, that hand should guide them to something they are better suited to. Take my mother. You could do your best to get her to understand this stuff. But her lack of mathematical ability (well demonstrated for over 50 years:) would kill her later. She would be better served by being directed to the history department.

      Let me also add one more caveat: since you are in research, I assume you are at least 25 or so. Even as recently as 7 years ago, there were far fewer people going into CS. People going in were largely self-selected. Today, it is chock full of those who just saw the dot-com dollar signs.

      I'll end on this note: if you are correct that they are trying to help out people who are stuck in some BS class that is required for all students, I'm in total agreement with you. A Java class and intro to OOP techniques is total overkill for most college students. In that case, the CS club should get major help and funding from the University.

      --
      Jesus was all right but his disciples were thick and ordinary. -John Lennon
    2. Re:Yes, because... by Tom7 · · Score: 2

      I have been a teaching assistant (with teaching assignment) for 7 computer science classes over the last few years, so I am intimately familiar with the intro course scene. In fact, what you say about 7 years ago vs today is totally true: students arrive with less programming experience (but usually a strong background in something like math). This is all the more reason to be patient in the intro courses, because for many people programming is totally new. (And while programming is an important skill for computer science, one can also be a computer scientist without doing much programming at all. It's not as if being a mediocre programmer damns you to fail the rest of your upper-level classes, where you hardly touch computers!)

      I can tell you that many people you would apparently have given up on have gone on to become really good. Maybe this depends on the quality of the students, but it's definitely true at my school.

  12. My two bits (oh GAWD, no pun intended) by dlek · · Score: 3, Interesting

    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! :)

  13. Kernighan on debugging by devphil · · Score: 2


    Kernighan (the 'g' is silent) is the K in K&R C. He wrote,

    Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

    We would do well to remind students at every opportunity that "clever" may be a complement in back-room business deals, but it's usually spoken with heavy irony in programming.

    --
    You cannot apply a technological solution to a sociological problem. (Edwards' Law)
  14. Don't skip the basics! by no_such_user · · Score: 2

    I wasn't a CS major in college, but I did take a couple of programming courses. At the time, we're talking turbo pascal and borland C... nothing mind bending here. The school wasn't known for having a particularly strong CS department, but it was popular for "returning" students who were getting reimbursed by their employers for taking classes. So it had a number of both young and older students.

    Something which struck me as odd was the number of students in the class who could pick up the concepts of programming (we're not talking about OO here, or really anything above for..next/if..then/whatever), but at the same time couldn't figure out how to save the source to floppy. I thought that this was perhaps a problem only experienced by inexperienced undergrads or newbies, until I noticed that even CS and IS graduate students were not comfortable doing some of the most basic computer operations.

    I vivdly remember having a conversation where a number of the grad students were trying to convince me that the bitrate of our LAN was only slightly faster than a modem. This clearly wasn't MIT.

    Over the years since school, I've encountered many people like this. A friend's mom is a cobol programmer, and has been for years and years -- but she barely has any idea how to use a Windows PC.

    I'm about to pass out, so I'll make this quick: SOOOO many students don't make a connection between what they're coding and how the computer behind the code works. We should teach with things like 68000 CPU trainers and assembly; logic chips and homebrew circuits. I firmly believe that given this type of background, many of these strugglers will be able to better process the information they're receiving and make a connection between their code and how the CPU executes it.

    I know this isn't quite the answer you were looking for... but perhaps if it influences even one teaching plan somewhere...

    1. Re:Don't skip the basics! by irix · · Score: 2

      I took a computer Engineering degree in school, and I would have to agree with this sentiment. We learned the whole gambit: transististors -> digital logic -> computer architecture -> operating systems -> assembly progarmming -> C programming -> C++ programming.

      That kind of knowledge isn't in all of the "Learn [Foo] in 21 Days" books combined, and I really do think it makes you a better programmer.

      --

      Do you even know anything about perl? -- AC Replying to Tom Christiansen post.
  15. Don't forget... by Restil · · Score: 2

    Don't forget to include a section on how to properly solicit help from others without getting accused of cheating.

    -Restil

    --
    Play with my webcams and lights here
  16. Go to lectures by MyGirlFriendsBroken · · Score: 2, Insightful

    My Advice is to go to as many lectures as possible. It reduces the amount of work you have to do by 50%. I say this because you then know where to seek help when you have problems, you know what train of thought has been employed to arrive at a decision and you get to see your mates.

    I would say that seeing you mates is more important that people might think, these are guys and gals who have the same work as you, if you have a problem with some coursework then I doubt very much that you are alone, or the nobody from your course can offer a solution

    I have been employing these ideas for the past 2 years of my CS course at Newcaslte,UK. It has resulted in high marks for comparitivly little effort compared to some of my colegues who think I'm lazy because I don't work past 6 in the evining as I would rather spent the time with my girlfriend. They don't understant that if you start working at 9am, go to all lectures and do most of your work in the lab where there is an inexaustable source of help and experince that there is no need to work for more than about 7 hours a day.

    --
    If you read a speed reading book, does it take you less time to read the second half?
  17. Be very careful answering this... by tlambert · · Score: 2

    Be very careful answering this. The people who pass and obtain their degrees are the same people you will end up relying upon doing their jobs, correctly and well, in the future.

    If you would not want to work with this person based on the help you are required to give them, it's likely that they are just there for their "union card", and you would be doing yourself and any potential future coworkers a service if you convinced them that the real money was in some other field.

    -- Terry

    1. Re:Be very careful answering this... by Hast · · Score: 2

      I believe the idea is to make these people understans programming and other issues involved. The idea is not to "let them slide through". The idea is to make them understand programming.

  18. Hey, I struggled at CS by Fweeky · · Score: 2

    But my problems weren't a difficulty learning the course material; quite the opposite, the problem was the fact that in the 2 years I was there there was maybe 3 months of actual work.

    The problem was that the course was filled mainly with total newbies who truely didn't know anything, so the course was targeted at them. Never mind that I'd just got an A in my A-level Computing, I had to start from scratch, "learning to program in visual basic" (woo, event based programming with minimal looks at flow control and subroutines), learning C (three hours spent going over "Hello World", I shit you not, and that's without even breaking it down to assm, then two semesters of groups writing near-identical tsv readers and making 10 minute presentations (this was for 33% of the marks, 16% doing a presentation, and 16% marking a presentation out of A..D)), and so on.

    This, believe it or not, is supposed to be one of the better Uni's for computing in the region. And I dare say for the majority of students it was just right (seeing as half of them still didn't know what a variable was after the third semester). In the end I left in disgust. Boring students, boring course, and £3500 debt p.a. did not make for a happy time.

    Er, yeah, anyway, you can talk about how to help the lower end strugglers which presumably happen quite a lot in good Uni's, but what about all the crappy Uni's where the strugglers tend to be the bored to death top end ones?

  19. Open Book Project - Java Version by moonboy · · Score: 2



    For "clearly written books/articles about the concepts of Java and OOP"

    Check out the Open Book Project - Java Version a.k.a. "How to Think Like a Computer Scientist".

    --

    Co-founder and designer at Music Nearby: http://musicnearby.com
  20. OK: if not careful, then at least be honest... by tlambert · · Score: 2

    If you're not willing to be careful, then at least be honest.

    Not everyone has what it takes to be a software engineer, or even just a programmer, any more than everyone has what it takes to be an architect, CEO, fashion model, an Olympic swimmer, Pope, or president of the United States.

    People are different, and some are seriously lacking in the departments necessary -- though (to be politically correct), perhaps they are gifted in other areas, like the ability to interact easily in social situations.

    No matter how you slice it, there are a lot of people who have entered the CS field recently, and not because of any native ability, but because of some misguided notion that the Internet bubble never burst.

    These people would have been OK to work with, as long as they were never given really demanding assignments, or could be a junior member of a team led by someone with more natural ability. But not any more: the rewards necessary to make them tolerable to their coworkers just aren't there any more (money will make you put up with a lot, and it's amazing how uncivilized people get without its lubrication).

    Look no futher than the last "flamewar" on a volunteer project mailing list to see what I mean: the flames are how the people would act normally in a work situation, if they weren't being paid to be polite.

    -- Terry

  21. The way my college did it... by macemoneta · · Score: 3, Interesting

    ...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.

  22. I don't know - but the right person can help by CharlieG · · Score: 2

    I don't know the answer to this - I'm serious. You can teach people the syntax of the languages, you can teach them the basics, but how to SEE the algorithm? No Idea

    Now a confession - 20 years ago, when I was in college, I had NO problems with my general programming courses, but I could NOT figure out boolean algebra to save my life - I flunked it - not once, but twice (1st time doesn't really count, and isn't on my transcript - out of 500 students, 498 flunked that term). I just could NOT get it.

    Then that summer I was taking an electronics course that had about 2 classes in logic. I don't know what the teacher said, but whatever it was, boolean algebra just "clicked", I actually went home that night, and was able to get an A on the final (I took it by myself). Since that time, I usually have co-workers come to me for logic problems

    So sometimes, the right person, saying the right thing, at the right time, can make all the difference

    --
    -- 73 de KG2V For the Children - RKBA! "You are what you do when it counts" - the Masso
  23. Re:CS is Counter-Strike, stop making these subject by Eagle7 · · Score: 2

    Not to mention "dudes" that need a couple of English classes ASAP.

    --
    _sig_ is away
  24. My experience by John+Harrison · · Score: 3, Informative
    CS is a very popular major where I went to school. Now the reason for that isn't entirely that a bunch of people that go there knowing that it has a great program. The reason is that nearly all the undergrads hear that the intro course ( CS106a) is good by word of mouth and so lots of them take it. Since it really is a good course lots of people get turned on to CS by it. Seriously, there were people who had never used a computer before ending up as CS majors.

    Why is this course so popular? First of all they choose the best professors and lecturers to teach it. They are able to explain things clearly and they are very personable/funny/approachable.

    Second, the programming assignments are well designed. I always knew WHY I was doing a particular assignment. I have since helped people from other universities with their CS assignments and I can say that assignment design is a big deal. Some profs just throw some random problem at the kids without thinking about the purpose of it. They don't provide clear goals. They don't provide any libraries to use. The documentation provided with assignment needs to be clear and complete.

    The most important reason that these classes were both popular and productive was the section leaders. These were CS students in their senior or junior year that taught section once a week. The position was prestigious and it paid well. They got some of the best CS students that way. It is describe briefly in this article. (Search for CS198 if you don't want to read the whole thing.) The sections were very productive. You would write code to do some particular task and the section leader would help/critique. There was almost always a section leader "on call" in a cube in the lab that you could go to for help on an assignment. More than one near the due dates. They could find a bug in 2 seconds flat. But they would just show it to you, they would "help" you see it yourself. But the most important thing they did was "interactive grading". They would go through a printout of your code line by line and write comments both good and bad while grading your program. Then they would have a 20 minute one one one session with the student and explain what was good and what was bad about thier coding. Whether the program actually functioned or not was of secondary importance, especially early in the quarter. They made sure that your code made sense, was well documented, that you had variable names that made sense, etc.

    Many schools just give grades based on functionality and never even look at the code produced. This sink or swim attitude might bring to light a few naturally good coders. The mentoring aspects of the program at I just described produce a lot of great coders.

    In summary:
    1. Choose good instructors.
    2. Give assingments with a purpose. Document them.
    3. Give the students detailed feedback and lots of support early on whether they think they need it or not.

    1. Re:My experience by John+Harrison · · Score: 2

      By the way, it has already been mentioned, but deserves repeating: Bruce Eckel's Thinking in Java is a great book. And it is FREE! You can download it from his website. At one time I carried around a CD that had a copy of that plus the current JavaDocs from Sun. Anytime somebody had a question we would copy the entire CD over to their machine, show them the resources, and see if they could find the answer to their problem. This was at work and not in school. The temptation in school is to be too helpful too quickly. That majically goes away once you start working.

  25. Don't make a booklet, lobby to change the courses. by ivan256 · · Score: 3, Insightful

    Java is not an appropriate introductory language. There are basic concepts you should learn before you start to use java. You should learn to use simple data structures, and learn procedural programming and design before you get confused by the syntax of object orientation. You should be learning how the computer works at a low level before you are expected to understand high level concepts and where it is apropriate to use them. If you start the students out with java, which may seem simple to people who already know how to design programs, the students won't understand why and why not to do certain things. They will be forced to learn through trial and error what they should have been taught to begin with.

    Instead of putting your effort into helping people who have never programmed before to use java, spend your time convincing the school that the first two semesters should be basic programming with some C and some assembler (not as classes that teach the languages, but using the languages as necissary tools to demonstrate the concepts. In early courses, syntax should only be taught when it is necissary to implement a concept), and a data structures class where C pointers and structures should be introduced moving on to java towards the end. Guaranteed, after the students learn basic concepts well, they'll have no trouble picking up java. They'll also write better code for their entire career.

  26. Re:Hmmm. by CharlieG · · Score: 2

    OK, poorly phrased - I went home, pulled out the old final (on my own) and took it (for myself, NOT for the class - I wasn't taking the course at that time)

    --
    -- 73 de KG2V For the Children - RKBA! "You are what you do when it counts" - the Masso
  27. All Hail Bruce Eckel! by FortKnox · · Score: 2

    Want to learn Java through OOP concepts in easy to understand writing (not like reading a math book or reference guide)? On a budget?
    All hail Bruce Eckel's Book, Thinking In Java. This book teachs OOP and Java, and is written VERY VERY well. My wife (total non-techie) understands the book and finds it captivating. Best of all? It costs like $30 in a bookstore, but you can also D/L it for free from his website. Yeah, by free I mean as in beer. Perfect for the college kid to study for free (and pick himself up a paperback copy after he gets money and a job, cause its also a decent reference).

    --
    Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
  28. Re:And then when you want to be a real programmer. by pthisis · · Score: 2

    Well if you want to get snippy about it, a real _Computer Scientist_ shouldn't care one way or the other what language he's using. I like Java, I like C++, I'm even starting to like C#, but if I don't know how to use a stack, I'm not going to be able to do jack shit with any of them.

    True, though there is something to be said for exposure to several classes of programming languages. Especially strongly typed functional language (ML, Haskell, etc) makes demonstrating code proof and other important CS concepts easier, a pointer-driven language (C) is fairly fundamental, something hardware level, and a dynamic language with functional techniques (Lisp, Scheme, smalltalk, python).

    But yeah, it's more important to get exposure to algorithms and structures; at CMU, they did control structures and data structures up through linked lists and stacks first semester, fundamental structures and algorithms (memoizing, hashing, graphs, etc) second semester, and more advances algorithms and structures 3rd semester. That left you ready for all the advanced courses after 3 semesters, and ready for some of them after 2.

    First semester was offered in Pascal, C, C++, and Java at various points in my career; the others were in ML, Lisp, and a handful of other languages. Choice of language impacted the course contents very little.

    Sumner

    --
    rage, rage against the dying of the light
  29. Teach debugging by LoonXTall · · Score: 2
    • Don't procrastinate. Asking someone to debug an hour before the project's due won't help you on the job. Have time to learn how to do it.
    • Do the design on paper, and test a few cases on paper. Compilers can only check syntax.
    • Do sanity checking, especially for types and loop bounds.
    • Use the compiler's warning lights (-Wall, 'use warnings'...) Sometimes, they'll show that what you did is not what you meant.
    • Use print statements. They'll show what you did, not what you meant.
    • Use the debugger. It shows what you did, not what you meant.


    It's easy to write code that "should" work. It's much harder to make it really work. (One of my worst days was when I told someone I could "probably" write something so trivial with no bugs. We went through ~10 test&fix cycles on a program with about as many lines.)
    --

    ~~~LXT~~~
    Life is like a computer program: anything that can't happen, will.

  30. Abelson and Sussman by Animats · · Score: 2

    Smart students should read Structure and Interpretation of Computer Programs, used in the introductory programming course at MIT. Some students will see the elegance of that approach, and some won't. Those that don't get it should be directed to Visual Basic class without penalty.

  31. Don't bad programmers realize this? by ColGraff · · Score: 2

    For a couple years in high school, I really thought I might want to go into programming for a profession. I wasn't the best, but I did well in the intro-level class and part of the advanced class, but I hit a wall in the second semester, and as pink floyd would put it "The wall was too high/he could not break free". No worms ate into my brain, but I did decide that programming was not for me, and so I've decided on a major I've always known I'd be good at. (I'm a political science major, and I've always been a politics geek.)

    My point is, might most truly bad programmers be like me, and realize they shouldn't even be programmers? And if that's true, might not the "bad" programmers in college benefit from some extra help? If you're a senior and you can't code, that's one thing, but to automatically dismiss a freshman/sophomore with problems seems not entirely justified. Programming is hard, sometimes it takes a while for something to click. And sometimes *sigh* it never does click.

    --
    I'm the stranger...posting to /.
    1. Re:Don't bad programmers realize this? by (trb001) · · Score: 2

      I admit, not helping students because you want them to "sink or swim" is kinda harsh, but I wouldn't advocate that. There's a certain level of help that I would suggest giving someone, but they really have to understand the basic concepts for themselves. I knew loads of people in my 3rd/4th year classes that weren't too sure how to write a queue/stack/linked list implementation. And please, don't ask them to write one and then inherit it to other classes...the whole OOP approach was beyond them, and functional programming wasn't always good either.

      Absolutely you should help people, but do it in the form of answering questions, not providing them with a large amount of "here's how you do it" material. I had one professor (digital design, part II) who refused to answer questions in his office hours, citing the fact that "[He] went over this in class...if you didn't understand it then, too bad". That killed me, I couldn't stand it. But the opposite was just as bad, when someone would take a problem to a teacher and instead of answering questions they would draw out the headers for the classes and give them some actual code. The two extremes are equally bad.

      --trb

  32. Advice: by Alex+Belits · · Score: 2

    Never use OOP language as the first programming language that the student learns.

    --
    Contrary to the popular belief, there indeed is no God.
  33. Same thing here by xtal · · Score: 2

    UNB does the same thing, or did in 1994 when I started. It was hell, but I got through. I'm so glad I didn't do CS now - and that's one of the reasons, I feel all those all nighters and stress (my hair started turning white) was worth it in the end.

    The attrition rate I believe is higher than 3/5, too.

    --
    ..don't panic