views:

104

answers:

6

I am in my fourth year of college, and I realize a little too late that I enjoy programming more than the major I was previously enrolled. The minute I found this out I finished all the necessary lower division for a computer science undergraduate within the previous two quarters. I am now at a crossroad and in need of some serious advice because due to my inexperience in the field, I do not know which specific branch of study I should take.

I just need to know what topics are particularly useful for any undergraduate student to know when later he/she is trying to find a job. For example: concurrency, database, user interface design... I do not have the option of exploring them (because of the tight budget I am in) although if I had the choice I would take it.

I know what I am asking is perhaps broad, and I do try to make it as specific as I can. So I am very thankful for any feedback that you can give to me.

+1  A: 

I don't think it matters much. The university is going to teach you only so much, what really counts is what you learn on the job.

of the top three there, I would say that UI is probably the most important, and something that many developers do poorly.

Aaron M
A: 

While some of the most prestigious jobs may look at that, from the people I've met it wont make THAT big of difference. Most jobs will look at the fact that you graduated, give you a skill evaluation, and look at your programming history. Experience is usually the best thing to have.

You can experiment in your spare time to see which discipline you like the most, and once you decide, you can start working at getting some experience in that area.

Gordon Tucker
+2  A: 

IMO: theory of computation, database design, algorithm analysis, compiler design.

You can also do some googling of SO for advice here - ther'es a lot of these questions.

Paul Nathan
A: 

Others have mentioned database design, which is really helpful, but there's something even higher level that you should learn: software engineering. You need to learn the process of developing software. From gathering requirements, to analysis, to design, to implementation, to testing, to deployment and to maintenance. You need to grasp the bigger picture and how you fit into it as a developer. You might very well be called into playing a part in those other tasks I mentioned. And you want to be. That's how you grow and become more valuable and how you move up in an organization.

I know there's not a lot of universities that offer that type of curriculum, but if you find some individual courses that offer those type of classes, take them.

Furthermore, join the ACM or some other computing organizations. I'll be going to OOPSLA in October and you might want to go as well. They offer student discounts. OOPSLA is more about general programming than say about one particular language. Very good stuff there. You can learn things that you won't be able to learn at a university. It's also a very good social networking opportunity.

Gary Kephart
A: 

I think you'll find the topics you're most interested you can learn on your own without class. Class can be more valuable for things that require a lab, or resources you won't have on your own. Or for those subjects that you wouldn't study otherwise.

I think you might want to focus more on who the professor is then the particular subject. Find the professors that have a reputation for being good teachers, find the ones that have you actually write a significant amount of code.

Frank Schwieterman
A: 

Systems Development Life Cycle a.k.a. Software Development Life Cycle may also be useful.

OSI Model is another topic to take into account.

I'd suggest being aware of how you learn, how quickly can you use something, and possibly looking up a few different development methodologies like Waterfall and Agile.

Keep in mind what kind of programming you want to do, e.g. web applications, back-end systems, mobile applications, etc. along with what tools you want, e.g. what for source control, on what O/S to develop, using which IDE, etc.

JB King