views:

911

answers:

19

I'm one year away from finishing my bachelor's degree in Computer Science, and I'm not about to give up or anything.

However, I've also spent time working in the field, developing software that people actually use, and I've absolutely loved it.

I do understand the importance of learning theory, and I have been doing so for the past 3+ years. Data structures, algorithms, Big O notation, and Boolean logic to name a few topics.

Although more painful(ly boring), I also see the importance of learning:

  • building functionality from logic gates (arithmetic, comparison)
  • building memory from logic gates (flip-flops)
  • programming in x86 assembly
  • how assembly language instructions map to binary, machine language instructions

And that lays a foundation for understanding the basics of what a computer can do, and then everything else you design is building on top of that.

All of that adds up to maybe 1 to 1.5 years of study. But now I'm stuck learning about propositional logic, how to calculate voltages and currents at arbitrary points in circuit diagrams, and which pin is the 3rd address line on an 8086 processor!

I'd so much rather be doing actual work, that actual people will use. What am I missing? Am I looking at this in the wrong way?

If you've finished a degree in Computer Science, what would have liked to know at the time that may have made it easier or more enjoyable to power through the coursework?

What "pearls of wisdom" can you share that bring the importance of a Computer Science degree into focus?


EDIT:
Thanks to all who answered!

Yes, I'm sure my major is Computer Science - it's just that there's some overlap between degrees (more overlap than I would like or think is necessary). For instance, Electrical Engineering students have to take a C++/Java/C# (I forget which language) programming course or two, and the one on assembly language. Sorry if I didn't make that clear enough.

No, I guess there's no one right answer. I like a lot of the suggestions you all gave, both the actions I can take (work on an open source project, read about software development) and the different ways I could look at the coursework I'm wading through right now. On top of all of that, it is nice to know I'm not the only one who's faced this sort of thing.

A: 

Get a blog... use it... this isn't a programming question.

Rob Conery
Not programming, but it is programming related.
Chris Pietschmann
You're coming across a bit rude.
epochwolf
Read Rob's blog. Rob is rude, but in a nice way.
Even Mien
Hrrmph - so hard to know with SO what are serious questions! This one seemed so... fluffy for some reason. Oh well... me being my rude self :)
Rob Conery
I totally agree. I know the true intent if SO is a little debatable, but in terms of cutting the fat and getting a better signal-to-noise ration (the whole idea of SO??), these kinds of questions aren't helpful. Go do it on reddit where it's been asked 5000 times already.
CarmineSantini
+4  A: 

All of that adds up to maybe 1 to 1.5 years of study. But now I'm stuck learning about propositional logic, how to calculate voltages and currents at arbitrary points in circuit diagrams, and which pin is the 3rd address line on an 8086 processor!

Are you sure you're in a computer science degree program? That sounds far more like computer engineering or electrical engineering; computer science in my experience rarely gets more low level than assembly, compiler design, operating systems, and processor structure; what you've described sounds exactly like the few EE classes I've taken.

Dark Shikari
A: 

I've got my CS degree. The courses were boring. I had a real coding job while in school, so that helped.

Another thing to perhaps consider is the simple fact that CS degrees don't really mean much. 4 years SE career experience means a lot more in this market than a CS degree. I'm not trying to tell you to drop out... but I know plenty of rock star devs that never even started...

aaronjensen
Aaron, I wonder what you mean by "rock star devs that never even started...". You mean they aren't in the IT industry right now?
Jon Limjap
I meant never even started college... they went straight to industry.
aaronjensen
+1  A: 

Are you sure that's Computer Science and not Computer Engineering? You should be learning about algorithms, operating systems, compilers, programming languages, databases, etc in Computer Science, not logic gates and pins on processors (though there's usually is one course on that). In other words, you will be dealing more with abstract concepts and mathematics than you will be with manipulating silicon.

As Dijkstra said

Computer science is no more about computers than astronomy is about telescopes.

If you are a coder at heart and you are accidentally in a Computer Engineering program, you better let somebody switch you before it's too late.

Kyle Cronin
+1  A: 

Most employers really want you to have a degree, and a lot wont even look at your resume if you don't have a degree no matter your experience.

Besides, if you're only 1 year away, just go for it and get it done. Once finished you wont have to do it again.

Chris Pietschmann
+1  A: 

Definitely sounds like computer engineering to me. Personally, I took software engineering, and found almost all my courses extremely useful. Especially in 3rd and 4th year.

Kibbee
+1  A: 

@Chris Pietschmann

Most employers really want you to have a degree, and a lot wont even look at your resume if you don't have a degree no matter your experience.

And some see the value of real experience over people whom came out of a computer science degree and had their mind wasted on stuff they don't need to know for the job like the 3rd pin line on an 8086 and wish they could find somebody with practical skills they could actually use instead of having to adopt a novice and train them up.

My suggestion is don't rely on uni to teach you everything you'll need to know for the job. They teach concepts and structures. Its up to you to apply them and learn the specifics and increase your own value.

FWIW, I gave up on uni. And now I telecommute with the other side of the world and love it. And the irony is what I'm working with I was never taught. ( I may apply concepts I learnt in other languages / classes but still )

Kent Fredric
+1  A: 

Just think about how much sooner you'll be able to retire. Really. Stick it out for another year and get your fancy piece of paper, then get back to business.

Kevin Conner
A: 

As well as learning the basics, a computer science degree is about learning from the people around you and making the most of the social environment you are in.

I recommend starting a group for passionate students to get together and either attempt to create something yourselves (game, framework, program etc) or just to discuss issues and be geeks! Not only will you benefit in the short term by learning from each other but it is great to make and retain contacts for the future when you may be looking around for employment.

waquin
+3  A: 

Well, most of the software development products and software development work out there are bound to be enterprise applications -- that is, simple applications that require neither esoteric algorithms nor design elegance. Those are jobs for, well, not computer scientists, but for software engineers.

The "useless stuff" that you have learned are applicable to a small (yet lucrative) subset of the current IT industry. These are things that, say, allow you to create Google. Sergey Brin and Larry Page used precisely the knowledge that you are learning now to put up the world's.best.search.engine.ever. They customized their own hardware. They wrote their own OS. They wrote their own hard disk drivers. They optimized the power consumption of their PCs.

They succeeded.

That being said, what are your career plans for yourself? If you want to go into mainstream enterprise application development, be my guest; you can even do it right now.

But if you have aspirations of putting up your own startup with this high-falutin ultra-scalable ultra-efficient application, that's where you will see the fruits of your current labors.

Jon Limjap
+1  A: 

Do what microsoft does.

Embrace and extend.

While you may not see the value in some of these classes, with a little effort you'll find, for instance, that programming an Arduino is ton's of fun, and you now have enough experience to do it.

Also, you're learning an important lesson about perseverance - beyond this there will be many points in your life where you'll be wondering what the heck you're doing what you're doing. Push through these, get the work done, and you'll often pop out on the other side improved.

Adam Davis
On the other hand, it's important to ask "why am I learning this?". In this case, he may have the wrong major. It's not enough to be able to persevere if you're not learning what you'll need to know in the process.
Kyle Cronin
You forgot the third part of that expression: Embrace, Extend, and Extinguish. :)
Jason Baker
+4  A: 

You sound just like me. I graduated with a B.S. and M.S. in Comp Sci in May. I had co-ops in The Industry and I loved them. I was so much happier at work than at school. And now that I'm out of school and working, I am a much happier person.

It seems like your problem is not the lack of programming/design exercise, but the fact that they are trivial assignments that no one will use. This sounds like a pre-disposition to software engineering.

If that is the case, one thing you can try is to start a blog, which I did too, and post about software engineering, which deals with the creation of software for every day use. If that is too boring, you can start a side project -- ask a friend or search online for an example project with a set of basic requirements. Fill in the blanks yourself, crank out a design, and implement with an eye towards more requirements coming down the pike. Write a test plan, practice TDD, do rigorous testing, documentation, etc, etc. Basically, simulate a real project to get your fix.

One thing about my CS curriculum that I'd change is to have more software engineering courses earlier. They are interesting and useful courses. They tend to introduce them to students who are nearing or entering their senior year, like you, so I'd check it out.

moffdub
I did create a project on SourceForge, a clone of a game they had on the computers at school when I was in junior High. I think I'll do some more work on that. Not sure if I'll start my own blog, but I'm definitely going to check out yours now.
Matt Blaine
+1  A: 

I agree with the general sentiment -- it sounds like you are in a Computer or Electrical Engineering program rather than computer science. The focus on the hardware is a sure sign it is engineering (plus it sounds like my 2 yrs of EE course work, before I dropped that part of my double major).

In general, you sound like a pragmatist, so here's what you will learn from a CS degree (not a CE/EE degree!) that will be of benefit: Finite State Automaton (and its various incarnations), Operating systems, AI (if it avoids Lisp and predicate logic you'll probably learn more practical stuff), Compiler Construction (that course has been foundational for my 10 yrs of software development, even though I don't make compilers :-)), Network Communications and so on. Also, Software Engineering courses (which will focus on many practical non-coding aspects of software development) are of great value.

Also -- something that will help guide you into what optional courses you should take are what did you enjoy or hate in your "real life" work? You can shore up your "hates", or you can develop a specialty in the area you love.

Also -- for your personal edification, pick up Code Complete and the Pragmatic Programmer books to get you through the darker times (e.g. hardware classes).

Personally, I recommend transfering to a CS or Software Engineering curriculum as that seems more where your heart is than EE or CE.

torial
Yeah, I'm actually making my way through Code Complete right now.
Matt Blaine
+2  A: 

To echo what a lot of comments have already said, it does indeed sound more like Computer Engineering than Computer Science. I just got my CS degree from Georgia Tech this past August (it was a great 5.5 year run :P), and the most CE-related stuff I did was summed up in the bulleted list of your question.

As for pearls of wisdom, I've found the CS degree by itself is incredibly vague. There are so many different areas you can go into, and because of this, the curriculum itself varies extensively from university to university. The pattern at the higher-tier CS schools is pretty clear, though: they focus on theory to prepare you for an MS program in a specialized field of CS research.

If nothing else, though, what I got most of it was how to learn. Yes, CS by itself is broad and only broadening as the months - to say nothing of years - go by. It is an incredibly fast-paced field and those who are on top today may very well not even be in the tabloids tomorrow. Yes, linear algebra is great. Yes, algorithm analysis is great. Yes, programming in x86 assembly is great. All of these are classics that form a solid foundation for just about anything. But the technology that utilizes these classics is changing more rapidly than a politician's platform, so the ability to learn new materials and concepts is absolutely crucial. And I think a CS degree does that to the point of absurdity.

It would have indeed been nice to know all that earlier, back when I still believed Computer Science = Software Engineering.

Magsol
+1  A: 

I'm two years out from graduating my BSc(Computer Science). I had a similar experience towards the end of my third year at uni. Work was teaching me more about software development than university and I needed to justify staying through the fourth year.

After talking to a people who had recently graduated and a few employment companies I came to the conclusion that it was worth staying at uni for the doors that the degree will open numerous employers (including my current one) won't take you on without the degree.

The other piece of advice I was given was to use the (huge amount) of spare time to fill in blank spots on your resume. Join some (worthwhile) student organisations, enter some programming competitions. Generally do what it takes to make your resume look better than the your peers once your finished. The number of opportunities afforded to you by the university is huge once you start asking around.

Everyone walking out of a university can code you need to stand out.

Troyzor
+1  A: 

Take some classes in topics/areas that will be of practical use to you in the future, and that have nuances that might not as readily picked up by just working on projects on your own or at a job.

A few examples from the last year of my CS degree (back in 1999) which I still find useful regularly:

  • Operating Systems / Multithreading
  • Database theory
  • User interface design / human factors
Jon Schneider
Matt Blaine
Matt, you're welcome!
Jon Schneider
+3  A: 

This hits especially close to home as I am supposed to be in my 3rd year of my CS degree. I could not stand how trivial everything was and became completely unmotivated. I've been working "out there" part time for a relatively long time and I absolutely love doing it, I just really dislike the classes and how I've been taught.

I ended up taking this semester off and doing full time web work and I'm loving it so far. I will go back in the Spring to get that piece of paper but it's definitely helped me.

Paolo Bergantino
Yeah, I've been able to take semesters (3 total so far) and work "out there". It's actually required. What I'm facing now though, a whole year straight, including the summer, of classes. But yeah, knowing I'm not the only one seeing things this way makes me feel a lot better.
Matt Blaine
If you absolutely don't enjoy Computer Science.. it isn't impossible to get a job without the degree.
Simucal
+1  A: 

propositional logic rules!

that was one of the only college classes that i actually enjoyed

the point of the degree sometimes is: do you finish what you start?

Steven A. Lowe
A: 

Granted this is an old question and my answer is also going to be somewhat dated but here is how my 4 years of university broke down when it came to CS courses:

1 - Introduction to programming and various principles like Divide and Conquer, using Abstract Data Types like Stacks and Queues, etc.

2 - Object-oriented programming, linkers, parsers and more of a breakdown in the SDLC and how compilers work.

3 - Broad-based touching on various topics. Exposure to hardware and using breadboards, operating systems, concurrent programming, numerical analysis, finite automata theory, etc. At this point there were 6 courses to take rather than just 2 which was the case for the first couple of years where I went to university.

4 - Choices amongst which of 3 one wants to take further. In my case this would be a mix of Algorithm Design and Analysis, Computation Complexity Theory, Symbolic Computation, and Introduction to Artificial Intelligence.

My university years were 1993-1997, so the program has probably changed a lot since those days, but I remember some of it pretty well. Hopefully you've graduated by now and are working instead of studying so much.

JB King