Slashdot Mirror


Getting the Most Out of a CS Curriculum?

Henry asks: "In September I start on a CS-type degree course. I am probably a fairly typical newbie programmer, in that most of my knowledge centers around scripting and high to very high level programming. There's much to choose from: languages, concepts, mathematics, and so on. From previous stories, I know that many readers have strong opinions on the failings and weaknesses of university courses and students. Apart from all of the coding that I will do, what can I do in the coming months to maximize what I get out of this? "

9 of 124 comments (clear)

  1. Programming skills have a small half-life by bheer · · Score: 5, Insightful

    Get as much math as you can. The analytical skills you pick up will stand you in good stead throughout your career. If math isn't your thing, try to get as many courses that are important to businesses, like systems analysis, the practice of software engineering, control systems -- it'll help you work effectively in the wider world beyond programmers. And if you actually like CS, do look at (my biases) distributed virtual worlds, robotics and pattern recognition ... lots and lots to do in those areas. However (as I mentioned) a basic grounding in math, logic and the usual basic engineering subjects will stand you in good stead in all these areas.

  2. CS-type degree course? by vivaoporto · · Score: 4, Informative

    What's that? There is no such thing as "Computer Science alike". Either it is Computer Science, a degree that originally has nothing to do with using (or even programming) computers, but with the theoretical science involved in computation processes (disciplines like automata theory, Computability theory, Analysis of algorithms, Artificial intelligence, Formal language, etc., or in the math realm, linear algebra, Graph theory, etc.), or it is not. If studying the inner theories of computation processes is not for you, but you want to become a ready to market programmer, I advise you to choose a Technology Information degree or something more related. It is all up to what you are really aiming to.

    Back in the day I was getting my CS degree in Brazil, where you are required to choose your major *before* you are admitted to the university, the dropout rate in the first 2 semesters was something like 20% (8 out of 40), because students choose CS thinking they would learn programming and advanced hackeries, and game programming when the truth was that they would have to go deep in calculus, algebra, data structures and everything "boring" first, in order to have the scientific basis to progress in the course. People just didn't understand that CS goal is not to produce developers to the market but researchers that have the necessary skill to learn everything they will eventually need to use. IT is a fast moving field, but the foundations of it are mostly static. Learn the foundations once, and keep in pace with the zeitgeist and you will be successful.

  3. A note about the editing by linvir · · Score: 4, Funny

    Before the usual spelling bitchslap about the editing, I want to get this in: Cliff actually did a decent bit of editing on my submission here. He's moved around some of what I typed and tweaked the wording slightly to improve the style. He also changed "CS degree" to "CS Cirriculum", which is unfortunately a bit of an own goal.

  4. What you should do... by EveryNickIsTaken · · Score: 4, Funny

    Learn Chinese and Hindi. That way, you'll be able to understand the professors.

  5. Maybe not such a newbie... by mysidia · · Score: 5, Insightful

    In that most of my knowledge centers around scripting and high to very high level programming.

    That's not the mark of a newbie programmer, there are many expert Java programmers out there; just because some of them haven't touched the assembly, doesn't mean they are newbie. Having most knowledge center around high-level language is smart, and it is the mark of a programmer that's realistic, as in actual practice high-level language is used the most (and most sophisticated and desirable to know).

    Probably if you have any prior knowledge at all of the language that will be used for the curriculum, you will be an "expert". Figure out which language will be used and read up on it in advance, look at examples, and bookmark useful URLs.

    You can be a master of x86 assembly and still be considered somewhat of a newbie in a Java programming curriculum. But in case you already know Java, you will start ahead, and have a better chance at mastering the much more important higher-level, language-neutral concepts such as proper design, understanding of algorithms, data structures, etc.

    I suspect many CS programs nowadays may cover low-level language details barely if at all, that may be up to you to study independently.

    Many students start with knowing no language at all. Knowing a little of just one language is what I consider the mark of a newbie. Advanced programmers know multiple languages, usually of different types -- not necessarily a lot of the low-level details, unless they choose to be low-level programmers, or they need some assembly code to solve a performance or to be able to understand their debugger's assembly dump.

    A non-newbie should be able to find good reference material and read from the platform manual and learn parts of the language on the fly, as needed for the problem at hand, and that's about enough. :)

  6. Dudes by matt+me · · Score: 4, Funny

    I hate to tell you guys, there is no such thing as a Counter-Strike curriculum. Some of you take that game *way* too seriously.

  7. As someone who teaches undergraduates in CS... by Anonymous Coward · · Score: 5, Insightful

    1. Remember you are not at school. Really. If we could get this into the heads of our student son day one it would be so much easier. Many still act like they're in school when they're in their 3rd year. You are doing the degree for you and what you will gain will be proportional to the amount of effort you put in.

    2. Ask questions of your TAs and lecturers (when appropriate of course). Getting students to ask questions is difficult; especially when they don't understand. If you don't get what's going on, chances are that lots of other people don't, and they will be greatful when you ask the question they were to timid to ask. If you don't understand the answer say so and get the person to walk you through it. See point 1, it's your degree and it's for you, asking questions might make you look silly (in fact, having been on both sides of this, it doesn't; students just think it makes them look silly - see not being at school, in general asking questions makes you look smart) but which is more important you learning or what people who think they are still at school think of you? See the ESR guide on how to ask smart questions. You may not agree with the writing style but the points are valid.

    3. Program. Lots. Anything and everything. In a variety of languages on a variety of topics. The *only* way to become a really good programmer is be experience and hard graft. Not only will this make your coursework easier and faster to do and help you pass your programming courses, it will improve your CV, but most important of all - it will help you understand what you are doing. Learn to use a variety of languages and tools like version control, symbolic debugging, static analysis, etc. Think of each language as a tool; the more tools you have the more likely you are to have the one you need. This applies to special purpose tools as well - SAT solvers, linear programming systems, machine learning, GAs, etc. A tap wrench can easily dismissed as 'useless' because you can't hammer things in or pry thing like you can with a claw hammer; but if the problem you are facing is removing a tap - they are invaluable.

    4. The right attitude is vitally important. Classic wrong attitudes:

    Spoilt - "It doesn't compile"
    (Tempting flippant response - "That must really suck", Actual response - "Have you read what the error messages say?")

    Defeatist - "I can't do this"
    (Tempting flippant response - "and I can't be bothered to help you", Actual response - "What seems to be the problem")

    Bigot - "Why do we have to do this with technology X, technology Y is so much better"
    (Tempting flippant response - *sigh*, Actual response - "We're trying to teach ideas, not technologies")

    World-owes-me-a-degree - "It's too hard"
    (Tempting flippant response - "Well as the course is supposed to be obvious I guess we should drop this part", Actual response - "What seems to be the problem")

    Too-busy-socialising - "I don't have time"
    (Tempting flippant response - "That's too bad then isn't it", Actual response - "How long have you spent on it so far")

    Right attitudes:

    "Can you help me find why I'm getting a segmentation fault on line ... when I ..."
    "I'm not getting on well with this course; where is a good place to start?"
    "I've done all of the exercises but I still don't feel confident with technology X. Can you recommend any good books."
    "I've re-read my notes and gone through the examples; could you help explain why Z is needed when ..."
    "I've spent 10 hours practising this since last week's tutorial; could you check I'm going in the right direction?"

    5. Work. Actually do the recommended reading (it's their for a reason) and the exercises. To get most of of your degree you should be doing at least 40 hours a week (including lectures, labs, etc.), less than 20 is poor and you will find the later years harder beacuse of it. Time invested in getting the foundations solid is never wasted.

    1. Re:As someone who teaches undergraduates in CS... by Geno+Z+Heinlein · · Score: 5, Insightful

      5. Work. Actually do the recommended reading... and the exercises.

      I went from being a C student to getting 98 out of 100 on calculus exams from this approach to things. It sounds like someone's old man saying stuff like "In my day..." but the fact is, you just have to cowboy up and then it's easy.

      And once you've done this for a hard course like calculus, everything else is downhill. I discovered that the first half of lots of teachers' lectures was a paraphrase of the chapter you were assigned to read. When I went into class having read it already, I found that (1) I understood it much better because of multiple sensory methods (a trite but true method), (2) I was able to ask intelligent and useful questions about things that were vague on first reading, and (3) teachers noticed this.

      The benefits of (3) are both gross and subtle. One semester, I had 60 migraine headaches in about two months (I didn't know about aspartame then), and scored 55 out of 100 on a calculus exam. The teacher had known me for 2-and-a-half semesters though, and threw that exam out, because he knew it was not due to me screwing around. He knew I wanted to do well.

      The real benefit, though, was better instruction. The teachers would talk to me. They'd say things it would never occur to them to say to more passive students. I converesed with them, instead of being just lectured to. There was a richness to my education that I got because I was involved. In short -- cliche alert -- you get out of life what you put into it.

  8. Enjoy It by ggKimmieGal · · Score: 4, Insightful

    I used to respond to these questions with a whole course list, but you know what, just enjoy college. Play Dungeons and Dragons, go to LAN parties, eat pizza at 2 am. You have the rest of your adult life to become an amazing programmer. You don't have to walk off with your degree saying, "I'm the next Bill Gates. My programming skillza are similar to those of a ninja." You should be good at what you do. Doing a few side projects won't hurt. Finding a summer internship won't hurt. But most importantly, enjoy these four years because they go by fast.