views:

952

answers:

6

Duplicate:

I am currently a senior in high school and will be attending college (Cornell University) next year.

Cornell happens to have a very highly regarded computer science department. From what I understand from current students and perusing the computer science website many of the classes are highly theoretical and provide little "practical" skills. I completely understand the value of learning theory.

I find it interesting and it can better help you understand the more "practical" stuff. However, I am primarily interested in being able to produce "real world quality" software; i have no interest in being a professor or someone else who simply deals with the theoretical. Currently I am learning C,Cocoa, Ruby on my own own. I learned Java in school.

Here is my question...I will only be able to take a limited amount of Computer Science courses at school next year because of natural time restrictions and other interests. Should i try to maximize the number of Computer Science courses i take or should i more focus on honing my programming skills on my own?

+8  A: 

Specifically to your question: Make sure you take as many CS courses in the next 4 years, while also maximizing the amount of courses that are incredibly easy to score As on (every school has them, befriend some upperclassmen). Most companies only care about your GPA and the exact courses you took, so maximize and balance more. You don't have to do it in your first year, you may want to get the non-CS out of the way, and some departments have a clear path that you have to take. Figure out what years people start getting internships (get as many as you can), and aim all the important CS courses in time for their recruitment.

More generally:

You are going to college for Computer Science not for practical skills, which you can learn from a book, and, well, from practicing, but to learn the theory and fundamentals of Computer Science. You'd be surprised at how important and practical that basic material is. In the long run, having that background may make the difference between having engineering skills that require your work and coding skills that can be outsourced offshore. Your interviews in most companies will also not focus on practice but rather on theory.

Rest assured that you will find it useful; not immediately, but in the long run. In addition, a college degree from a good school is a requirement for many jobs, and the Cornell career fair is a shortcut for getting into good companies.

Also, as someone who has done several graduate degrees in Computer Science, I can promise you that there is a lot beyond what you will study in school, and that really will only matter if you choose to do research in that field (and some people do! you can't tell in advance, I never thought that I would).

College looks like a lot of time when you are done with high school, but it really passes fast. And most of the time you would be having fun and taking girls to Watkins Glen :) So congratulate yourself for getting into a top school, and rest assured that once you go to Microsoft or Google or some other top company you'll learn all the practical real-world stuff you really need for that specific job. Whatever you think you have learned to code by yourself doesn't compare to what's really going on in top companies. It's scary but also exciting.

Uri
Exactly. If you're still worried about the lack of practical skills, consider doing some minor occasional programming gigs besides college (like web stuff). You will get the experience, the reference _and_ you will get paid.
DrJokepu
@DrJokepu: Saw your profile and couldn't resist: why would a Londoner watch as horrible a show as the Americanized version of The Office?
Uri
The "practical skills" for programming you can learn on your own time. I find that the "theoretical skills" ends up being the skills you would rather not learn at first but then you learn that they are actually useful.
Unknown
@Unknown: if you've used computability theory since school, then I think you're in the minority. What other highly theoretical stuff have you ever actually used?
John Saunders
@John: Computability often comes with Automata and Formal languages, so if you thought about parsers and grammers, or how to recognize certain patterns, you've used it. P and NP issues are often used. I actually had to deal with program decidability in the past.
Uri
@uri: It is (IMHO) actually funnier than the original BBC version. Matter of taste, I suppose.
DrJokepu
@John: Maybe it's just my job, but things like linear algebra (Fast Fourier Transformations particularly), first-order logic, parsers and compilers come up all the time. _All_ _the_ _time_, in totally unexpected scenarios.
DrJokepu
+2  A: 

What often happens is people learn fancy theory but never put it into practice. By just creating a small tool or some throwaway program that puts this into practice helps in both improving practical skills and puts things into perspective.

Ólafur Waage
+1  A: 

I do not know what I may appear to the world; but to myself I seem to have been only like a boy playing on the seashore, and diverting myself in now and then finding a smoother pebble or prettier shell than ordinary, whilst the great ocean of truth lay all undiscovered before me. -- Isaac Newton (in 1727 shortly before his death)

Self teaching is great. It works to some degree pretty well. The major draw back to it is (speaking from personal experience) you are hesitant to expose yourself to too much new material at once. In a school, you have no choice. You will actually learn faster in a school than in self teaching everything because of this. The ideal combination is to go to school, perform well in school, AND self-teach yourself more on the subjects you are interested in.

This is all from my experience. You will probably have your own experiences, and I suggest you direct your studies to that which interests you most and do not fear for your grades.

I can't say I agree with Uri who says to take courses just to boost your GPA. If you consider yourself an intellectual you will quickly bore yourself and adopt a mark "whore" attitude. Challenge yourself. Find the courses where you find the material to be incredibly hard and leap in.

ldog
+3  A: 

Congratulations on being accepted at Cornell. The theory that you will learn will not be about solving any one specific application problem, and every once in a while the homework assignments will appear to be wildly disconnected from the theory. But you will be learning to solve classes of problems, and seeing how to compare different solutions of a problem to each other. I think you'll see lots of practical applications very quickly, be able to spot the pathetic and lame implementations, and then become depressed about how woeful and inadequate most software is out in the real world...ok, maybe not that last bit in your freshman year!

Lots of people can cook good food with a simple knife, yet chefs have many knives, and each one has a purpose. Learn all the knives and you'll fillet the competition!

Oh, and take the time to enjoy everything else that interests you, don't crush yourself with Comp Sci courses. There will be plenty of time to develop your programming chops, and you may find yourself blending programming with other fields. There are internships too, so you can sometimes get course work credit and paid for work that has practical, real-world impact, and these are open source projects to boot.

There are SO fans at Cornell too, and not just on the academic side... heh... :-)

Joel
+3  A: 

Its invaluable to have a degree in Computer Science. You will definitely learn a lot. Some of it you may not use. Regardless of the skills you acquire, you will get passed over again and again for not having a college degree. In any University, they focus more on theory than practice. Ivy Leagues tend to do so more than state schools. As you go through the theoretical coursework, be sure to join a project and do some sort of work with a faculty member or two. I will no only look good on an application, but the professional relationships you get out of doing so will give you a GIGANTIC edge over other individuals.

In short, get the CS degree, and do programming stuff that is not part of the curriculum with faculty.

Derrick
+1  A: 

My advice (as someone currently enrolled in one), stay away from padding your GPA. Honestly, challenge yourself and take as many course(s) in your field of study as possible. You would be surprised how many recruiters look right past your GPA and focus on your applied studies. Don't make this mistake!

Rev316