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

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

    1. Re:Programming skills have a small half-life by Bloke+down+the+pub · · Score: 2, Insightful

      Nah, transfer to law ASAP.

      --
      It's true I tell you, feller at work's next door neighbour read it in the paper.
  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.

    1. Re:CS-type degree course? by tomstdenis · · Score: 2, Insightful

      I disagree with the notion that a CS degree should have no programming aspects to it.

      Yes, I agree the fundamentals (algorithms, data structures, numerical analysis, compiler theory, graph theory, calculus, etc) are more important than say a class on C... But at the end of the day, if you can't develop software you're not a very useful computer scientist (aside from working at the uni).

      I do agree, however, that many CS degrees tend to focus too much on programming languages/tools (things that competent developers really ought to learn on their own anyways).

      Tom

      --
      Someday, I'll have a real sig.
    2. Re:CS-type degree course? by TheRaven64 · · Score: 2, Interesting

      Computer science is no more about computers than astronomy is about telescopes. --Edsger Dijkstra I think you are reading this quote the wrong way. How many of the famous astronomers from history didn't build their own telescopes? Very few. Even these days, astronomers have to know a lot about telescopes; how they work, how they are built, how to effectively use them. I learned most of the optics I know via astronomy.

      Computers are not the be-all and end-all of computer science, but they are the basic, fundamental tool. If you can't write software, then you are as much use as a computer scientist as an astronomer who couldn't build their own telescope. Even if you don't actually end up writing software (or building telescopes), the ability to is still important.

      --
      I am TheRaven on Soylent News
    3. Re:CS-type degree course? by Hotawa+Hawk-eye · · Score: 2, Insightful

      I mean you take English writing and other courses during a CS degree. What does English grammar have to do with sorting or searching or ?

      English grammar doesn't necessarily have anything to do with sorting or searching or the like. However, when you're working on a specification for a program you're writing, or when you're trying to explain how your program works or will work to someone else (in QA, documentation, technical support, upper management, etc.) being able to write well comes in handy.
    4. Re:CS-type degree course? by honkycat · · Score: 2, Interesting

      I think the solution then is to not offer what you types call a "pure" comp.sci degree. Because no other science is purely book work.
      Almost any science program focuses on the science itself, not the huge variety of practical engineering-type yak-shaving techniques that you may end up spending most of your time actually doing. There's so much actual science to be learned that you just can't fit in specific classes to cover all the practical details you may need experience in. I don't see that computer science needs to be treated differently in this regard.

      For example, even a physics undergrad degree program doesn't typically include the engineering training that you'd need to design a cryostat or a particle detector. It includes the background science on these, but when it comes time in your career to actually do this, there's still a lot of specifics left to learn. There are so many different specifics that you may need, depending on what area of physics you go into, it's just not reasonable to include them in the degree.

      What you get instead are lab classes and undergraduate thesis projects. The former expose you to a random smattering of specific techniques, but typically no actual instrument design. These usually try to cover a broad range of techniques, but there's still only time to do a few. Your undergrad thesis project probably concerns an area you're likely to go into, so it's a good opportunity to learn some specific techniques in more depth, but even that is usually a very limited project.

      I don't see why "computer science" should be treated much differently from other sciences. It has the same issue with squeezing both the theoretical background and practical issues into a reasonable program. There is such a huge number of technologies / languages / code management tools / etc out there, that no matter what subset they choose, it's going to be the wrong set for a large number of graduates.

      I agree with whoever it was who suggested having separate degrees for CS and software engineering. What's the problem with a computer science degree aimed at those who really want the background and a software engineering degree that offers a mix of computer science courses and specific practical issues? The world needs both programmers and computer scientists, and they have pretty different educational needs.
  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. Start an OSS project by tomstdenis · · Score: 2, Interesting

    Find a problem that isn't adequately solved and do it. Nothing says serious developer more than someone who can develop, maintain, document, and support a useful OSS project. Bonus points: Your future employer may be a user (worked out for me :-)).

    People who coast through uni without really taking the initiative are a dime a dozen. If you want to stand out you have to get yourself organized and build a portfolio of public projects that demonstrate you're a competent fellow.

    Tom

    --
    Someday, I'll have a real sig.
    1. Re:Start an OSS project by kestasjk · · Score: 2, Informative

      Or, if you're good enough, do some freelance coding. Places like rentacoder are good because people hire you based on your skills and price, and not your qualifications.

      The obvious added bonus is that if you're prolific enough you can actually earn your uni fees as you go; it's working well for me so far. It's also a fairly good place to apply all the stuff you learn in your software engineering units.

      --
      // MD_Update(&m,buf,j);
  7. 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.

  8. *sigh* by Rocketship+Underpant · · Score: 2, Funny

    Well, at least the article isn't about getting the most out of an English "cirriculum".

    --
    He who lights his taper at mine, receives light without darkening me.
  9. From the start work on good programming habits!! by syn1kk · · Score: 2, Insightful

    Most programming problems that have been worth while to attack for me have been extremely vague. These vague problems require you to look at numerous different solutions that you won't be covered by in class material. Most CS students fear these kind of assignments and hesitate to attack them. I would urge you to instead train yourself to enjoy learning new things. Once you get good at that you will be a more fearless programmer who doesn't fear: learning a new programming language, getting handed someone's spaghetti code that is 10,000 lines long and has functions that are 1000 lines long. ---- The first priority of your coding should be that it is readable by humans (emphasis on maintainability). ---- Most likely you will start with java or something else high level. But don't let that first language you use box you into only using it. Other languages have their uses. C is still the golden standard for embedded systems / DSP. Matlab is still the golden standard for prototyping / winning lots of million dollar DoD contracts.

  10. 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 Anonymous Coward · · Score: 2, Funny

      I suggest you try replacing the goto statement with something more maintainable in next revision of your comment.

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

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

  12. Learn the whole stack by rockmuelle · · Score: 2, Insightful

    As much as /.'ers like to advocate spending your CS undergrad time learning math and not computing, I think its equally, if not more important, to spend your time understanding how computers work. In addition to the standard math track (calculus, discrete math, numerical analysis, probability), a well rounded CS curriculm should expose the computer science student to the inner workings of computers and software.

    Do an architecture track that covers logic design and computer architecture. This will give you a solid understand of what is possible on modern hardwarend and teach you how to apply what you learned in discrete math.

    Next, take an operating systems course. This will show you how software interfaces with the hardware.

    Along the way, make sure to take at least two programming language courses, ideally one imperative/procedural and one functional. This will teach you there are multiple ways to solve the same problem. Once you're comfortable with languages, take a real algorithms course with a focus on analysis (not just design). If you have time, a compiler course will fill in the final gap between hardware-os-language-program.

    Fill out your electives with things that interest you - graphics, HCI, databases, AI, languages, etc. Be sure to have fun in these courses and apply what you're learning in the other courses.

    In the end, a good understanding of the whole stack - hardware, software, and theory - will give you the foundations to build a solid career in computer science, in industry or academia. If you want to specialize more, consider a Masters or Ph.D.

    I've learned from experience in both industry and academia that a solid foundation gives you an advantge over people who specalized too early in their careers. A strong theory focus as an undergrad makes it difficult to understand what's practical, too much focus on the hardware side makes it difficult to understand what's possible, and only learning the latest trends makes it impossible to design an debug real systems. Strive for balance and breadth early, specialize later.

    -Chris

  13. Some general advice by Anonymous+Brave+Guy · · Score: 2, Interesting

    I wrote a post in a recent Slashdot discussion on computer science that might be of interest. Short version: read around your subject, try to gain a breadth of experience using the resources available at your university, and never stop learning. The linked post is the long version with specific examples. HTH...

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  14. Re:Programming skills get you jobs by j-pimp · · Score: 2, Insightful

    Seriously if you leave a CS program knowing more about math than programming you are fucked. Have fun learning on the job while making 2/3 what you would otherwise be worth.

    And have fun being out of a job when your language of choice falls out of favor. Part of learning a lot of math in a CS degree is also learning a lot of CS theory. Understanding linked lists, stacks, queues, binary trees, and the like will help you to switch between programming languages. Sometimes you will realize that you need to represent data in a way that your language does not have a standard library for. Usually that means you're not looking hard enough for someone else's solution to your problem. But sometimes it means that you have to implement a binary tree yourself. That is becoming less and less the case these days, but just being able to phrase a SQL question in terms of tuples calculus can help you abstract the question in your mind and solve it better.

    --
    --- Justin Dearing http://www.justaprogrammer.net/ We're just programmers.
  15. Re:Programming skills get you jobs by bheer · · Score: 2, Funny

    > And have fun being out of a job when your language of choice falls out of favor.

    Oh he doesn't even have to wait until it falls out of favor. If the language becomes really popular (e.g. Java), there'll be hundreds of drones in Bangalore or Saigon who'll do the job for a tenth of his asking rate. He'll then spend all his time unemployed and bitching about f*king Indians on Slashdot.

  16. Re:Programming skills get you jobs by dkf · · Score: 2, Insightful

    Better option: Become an expert at SQL and the language of your choice. I would choose something popular.
    What, like the thousands of other identikit drones doing exactly the same thing?

    But it's worse than that. While knowing about databases and transactions is a good thing (and has some really nice CS depth to it) just knowing how to hack up SQL isn't the same thing at all. It's a road to anonymous skill-less poverty, and a total waste of a higher education.

    My advice is to always push yourself. Do the assignments and labs set, but don't just do that. Try to find the most elegant or the most "oh wow!" ways of solving things. Look at how other people solve problems and try to think for yourself why their solutions are good ones or bad. Got a problem? Try to solve it yourself first. Then ask for help, and try to solve it again for yourself after having had the help. Take as many different courses within CS as you can; you never know when you'll need what you learned in them. (Oh, and don't be tempted to plagiarize; if your tutors wanted someone random's solution off the 'net, they'd google it themselves, OK?) Last of all, pay at least some attention to what other disciplines are doing too; for example, I find the various physical sciences, standard engineering, business, contract law and psychology all to be relevant to the area of CS where I now work. The bigger and more diverse your skill-set, the easier it is to find a useful technique for a particular problem, and it's easier to learn principles and fundamental theories across a broad spectrum than it is to do the "SQL and Ruby" approach of just learning specifics across that spectrum...
    --
    "Little does he know, but there is no 'I' in 'Idiot'!"
  17. Re:Programming skills get you jobs by j-pimp · · Score: 2, Insightful

    Are you even out of college yet?

    Out without a degree, but making "real money". Did it set me back a few years? Yes. Would I recommend it to anyone? I'm not sure, give me another 10 years of hindsite. I know I'm making 2k less than a a friend I started college with that graduated, 3k more than another that graduated and is now a manager, and 17k less than another friend without a degree that was doing ASP programming while he was in college.

    What makes me sound like I'm in college? Do I stress theory to much? I like to program in C as a hobby and write my own linked lists. Tutorials I read to learn postgres threw around the phrase tuples calculus a lot so I do the same. I don't go writing binary trees in something like C# or Java when there are classes that can sort a list of numbers and find duplicates for me. However, its nice to know how everything works under the hood.

    --
    --- Justin Dearing http://www.justaprogrammer.net/ We're just programmers.
  18. Re:Get out while you still can... by CptPicard · · Score: 2, Informative

    That's bullshit. The "intense algorithms" part is exactly where a proper CS education shines, if you're not one of those losers who skip on the theory classes ... so that they can get to program the UI. Of course CS is cross-discipline in the sense that you need to have some understanding of your problem domain, but once the problem domain is modelled in mathematical terms, a properly educated CS guy will be able to try a variety of solutions to come to a satisfactory solution.

    You certainly need to have a solid working knowledge of math to communicate with the math majors who do the theoretical modelling and characterization of the problem, or the engineer types who give you the physical parameters and boundaries your solution needs to respect. But they are not the ones who are well-versed in actual implementation strategies (algorithms), and they don't need to be.

    --
    I want to play Free Market with a drowning Libertarian.