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? "
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.
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);
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.