views:

485

answers:

5

Hello,

Entering my fourth year of university, I feel that I've stagnated as a computer scientist. I'm a fairly decent programmer as is - I've taken an array of courses on algorithms, formal languages, formal logic and the like (as well as a ton of math), but I feel like I'm not learning anything anymore. I'm certainly much more enamored with the theoretical side over the practical, but I don't mind hacking away in C for a few hours, although I'd prefer to spend most of my time away from the computer. So where can I turn? I'd like to be more than just a code monkey - research seems to be my thing. It's a big world out there, and surely there is something to excite me. I'm a bit intimidated to jump into an open source project, but perhaps that's the right move at this point? Is there a place in the open source world (or the closed source world for that matter) for people to design algorithms and such without having to do too much coding?

Thanks for any advice, Martin.

+2  A: 

This post maybe interesting for you.

Kozyarchuk
+2  A: 

System Analysis is an often undone part of the work in building or not building computer systems that integrate with the larger systems in play. Many projects wouldn't even be started if it was done, because the analysis reveals that a computerized system will not meet the goals or bring an acceptable return on investment.

I find most programmers want to solve problems with computer software. Natural, but engineers want to solve problems with devices they create and business consultants want to fix problems with human solutions. A system's analyst must be able to take a high enough level survey of the situation and know when any of those three are applicable, or perhaps something else entirely. I think people think I'm crazy when I suggest that a specific task is better performed by a customer services representative than an automated procedure, yet often it is the case.

Having a strong theoretical background should help you have a viewpoint such as this; I suggest learning about other fields and expanding your scope so you can approach problem solving from a systems perspective, and you will have skills that are desperately needed, but in short supply. Operate in as many fields as you can (I took a pledge early on that I would never take a second customer in the same industry as an existing customer: it is amazing how much domain knowledge turns out to be surprisingly useful in other contexts).

Godeke
+20  A: 

All I can say is your totally crazy ;) Lots of people feel like they "Know it all" or "can't learn anymore" when they are finishing their studies. But all I can say is that is a form of hubris (although based on ignorance mostly).

Once you get out in to the true professional, open source or academic circles you'll be practically back to zero. Oh and if you don't keep learning ALL the time as a programmer you can easily wind back up at zero in 2 years.

Just like the Red Queen said:

    "Well, in our country," said Alice, still panting a little, 
    "you'd generally get to somewhere else — if you run very fast for a long time, 
     as we've been doing."

    "A slow sort of country!" said the Queen. "Now, here, you see, 
    it takes all the running you can do, to keep in the same place. 
    If you want to get somewhere else, you must run at least twice as fast as that!"

Now Martin, good luck and get back to running!

Robert Gould
Amen on having to study all the time. Even after a decade of experience, I have to study as much now as a student would, just to keep up with all the new stuff.
DOK
I didn't mean to sound cocky (although re-reading my post does make me sound a bit proud). I think my problem can be summarized as knowing a lot of the basics of computer science, and not knowing exactly which road to run down.Thank you for the advice. I quite like the quote.
mdkess
+1 for quoting Lewis Carroll. Oh, and the part of the answer written by yourself is also good.
OregonGhost
+1 i also loved the quote
adi92
Your first paragraph is so true.
blizpasta
A: 

The only time a developer would reach a point of not having anything left to learn would be from either one of two things:

  • You chose the wrong career path.
  • Your funeral is scheduled for next Tuesday.

Seriously, though, you have a tough choice in front of you. You are getting to the point of asking what you want to do with the knowledge that you have gathered so far. The most important thing to keep in mind is that you have knowledge, but experience comes with time and is boring and tedious to attain at first.

I found myself questioning my major after two years. I started off in civil engineering and kept finding myself wanting to code instead of study. Changing my major helped considerably. I was a lot like you were. I became very bored with the coursework and kept thinking that they were trying to fill four years with a lot of repetition. After jumping in to the job market, I realized how little I really knew. There is nothing that will prepare you for real-world deadlines, fixing defects in legacy code, and actually manning the helm of new development. It is intimidating, even frightening, at first.

The paychecks definitely make it tolerable once you land a job. But until that time, contribute to an open-source project or try to work on some small freelance projects to get your feet wet. A big part of the theoretical side of the coin is that a theory needs to be applicable and practical so that it can be applied. You will eventually start to gather your bearings and know what direction you want to take. Development is great launching board into other areas, such as project management, architecture, team leadership, etc. Of course, all of those things are going to require that you spend the time to get there. In my opinion, it sounds like you would enjoy the architecture side of the equation, as well as working closely with business requirements to turn descriptions of problems into practical solutions.

Best of luck to you!

joseph.ferris
A: 

There are lots of interesting subjects to turn to: bioinformatics, proteomics, cluster computing for scientific applications, taking advantage of multicore computers (2, 4, 8, ... 128), wavelet methods for feature extraction, multivariate data analysis in practice, etc.

I could certainly use someone on my open source project (for proteomics) to design algorithms! (contact information)

Peter Mortensen