Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm a student considering the possibility of studying computer science. I've picked up programming indie games and websites as a hobby and I really enjoy it. Despite my fairly positive experience, I somehow get the feeling that computer science in the business world will be completely different than do-it-for-fun game making.

Since I'm interested in the field and I'd like to study well, I want to prepare myself for the onslaught. (If that’s even possible) What are some of the most important principals I need to know if I decide to study computer science? What will I need to know about computer science that a University probably won't teach me? Is there any way I can get hands on experience before or while I'm at a University?

What am I getting myself into?

share|improve this question

closed as off-topic by MichaelT, gnat, GlenH7, Dan Pichelman, Kilian Foth Sep 25 '13 at 12:10

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – MichaelT, gnat, GlenH7, Dan Pichelman, Kilian Foth
If this question can be reworded to fit the rules in the help center, please edit the question.

    
Yes, this is the correct Stack Exchange site. –  Jonathan Khoo Feb 18 '11 at 5:04
add comment

4 Answers

up vote 3 down vote accepted

Well, depending on the university/college you attend, and the focus of their coursework, here are some things you may encounter in your studies:

  1. Math -- lots of this :) You'll cover a variety of areas within Computational theory: discrete math, language theory, finite state machines, algorithms and data structures, the list goes on.
  2. Software Engineering: functional, procedural, and OO programming; software design and (hopefully) quality; collaboration and programming practices
  3. Computer Engineering: basic circuit design; logic gates, assembly language design and implementation
  4. Study of compilers and interpreters

In response to your question (What am I getting myself into?), I would say don't worry overmuch. If you enjoy programming, continue to do so, and leave the stress of school for when you get there. Regardless of the prep work you put in, you'll still likely find challenges in your college career, and if you don't, consider yourself blessed to breeze on through :) Go into school prepared to study and work hard, and make your learning count.

Life is too short to stress what you'll come across in your studies; cross that bridge when you get there.

share|improve this answer
    
Thanks for the encouragement! I guess I'll have to get ahead in math now to save on pain later. :) –  clankercrusher Feb 18 '11 at 5:10
    
@clankercrusher, you're very welcome. Math is a great thing to jump into -- just don't forget to enjoy life with the time you have :) –  bedwyr Feb 18 '11 at 5:12
add comment

During your university studies, really take advantage of the education and try to do well in the foundation of computer science:

Discrete Mathematics 
Data structures & Algorithms
Computer Architecture
Operating Systems
Theory of Computation & Compilers

Also learn a high level language like Java and low level language like C. If your school offers a course on something like scheme jump on it.

If you come out of the university with a solid grounding in the above, nothing will stop you.

Some skills you might miss in school are how to use source control, write unit tests, work on a project team, and read other people's code. You will definitely learn all this in your professional career, however contributing to an open source project would expose you to some of this.

share|improve this answer
    
I've been looking into taking a C course at a local tech college, for now my hobby c++ knowledge is limited. How might I get involved in open source projects? –  clankercrusher Feb 18 '11 at 5:10
    
One idea is to check out sourceforge.net/people and look through the help wanted. Another is just find an open source project and contact the owner. Really though, even if you just started out by creating a project of your own and working by yourself, that would be a great start. Set yourself up with source control and go at it. –  rreeverb Feb 18 '11 at 5:20
    
This is a good point - the list above is the type of stuff you're only likely to pick up in an academic situation, so take the time out to learn it well and you'll have a solid foundation for the other things you need to learn in the real world. –  glenatron Feb 18 '11 at 10:32
add comment

If you go the CS route, prepare for many surprises - mostly good! A non-exhaustive list not taught in schools might include:

  • Understanding libraries is more important than algorithm design. You accomplish more by not writing code. See if a library will work before rolling your own.
  • Too often, people are the limitation, not the technology. No matter how good you are at programming, you still need to be good with people.
  • The learning never stops. I love this! I hope you love it too!
  • Integration with external systems is huge. Don't treat this as something you do when everything else is finished.
  • Security, security, security.
  • Most people don't understand what you do for a living. Get used to it.
  • People will sometimes judge you by the way you dress or your car. Don't sweat this one. The important people will see through the shallow waters.
  • If you have to give someone a technical smack-down, never do it in front of their peers.
share|improve this answer
2  
One of the most important things my CSE academic career taught me: "Computer science" and "software development" are not even close to being the same thing. You need to be good at both and they'll only teach you one. –  Andrew Arnold Feb 18 '11 at 6:29
1  
I think Software Engineering is a part of Computer Science. –  systemovich Feb 18 '11 at 10:47
1  
Algorithms are the bread and butter of a CS curriculum. Understanding how to design algorithms is of utmost importance in CS. –  mipadi Feb 18 '11 at 15:25
    
Hi mipadi. I was thinking of MIT switching from Scheme to Python as a teaching language and other trends. I absolutely agree that algorithms and data structures are essential. But now, on top of that, you have to gracefully handle other people's libraries. I haven't sorted a collection by hand for years... Kind regards. –  Scant Roger Feb 20 '11 at 2:11
add comment

What are some of the most important principals I need to know if I decide to study computer science?
Nothing is as simple as you look. Always keep on asking why, and only stop when you have reach the root.

What will I need to know about computer science that a University probably won't teach me?
Most probably debugging. You will learn everything about the theory but you will keep wondering what are the practical applications of this. Simple example I never took those dry software engineering subject seriously, thinking who will do all these stuffs. Turns out that this is the first thing you will do when you join in job. Also university will not teach you how to work in team.

Is there any way I can get hands on experience before or while I'm at a University?
I guess there are intern programs everywhere, where when you are in last year you can do some projects in the relative company. That will be your best shot.

share|improve this answer
    
Thanks for the tips. I guess I'll have to keep hunting on stack exchange and keep working on indie projects to help develop those skills. –  clankercrusher Feb 18 '11 at 15:04
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.