views:

557

answers:

16

I have been a programmer for about 3 and a half years. I took a few computer science courses in college ( specifically C and Java), but recently feel like there's a number of things I wish I knew. Real nuts and bolts computer science type things. Stack versus heap. Design patterns, good database design.

I am reluctant to go back to school since I have a Master's in math, and I still feel like I have had my fill. However, is there something that I could have learned in classes that I won't have already learned in the real world? If so, that could outweigh my hesitancy.

+4  A: 

look at a good university curriculum, go thumb through their textbooks, then google whatever you want to know that you don't know already

Steven A. Lowe
Alternatively, I could just ask everyone on SO since everyone seems to know everything around here.
Anthony Potts
@[Anthony Potts]: LOL - we **do** know everything around here, but we don't know what **you** don't know ;-)
Steven A. Lowe
Not until I ask and sometimes right before then.
Anthony Potts
+2  A: 

You also have also University lectures published online you can try listening to different podcasts and/or reading slides and the literature that the professor gave to the students.

milot
The old MIT lectures on Lisp are very enlightening...
rmeador
I've listened to the MIT OCW for the Computer Language Engineering and the professor was great!
milot
A: 

It's always fun to learn new stuff. If you're working at a university currently, you might be able to audit classes for free. If you're not at a university, your choices are fewer... if you can afford to take a class for fun in a decent CS department, then choose a cool one and do it. On the other hand, if you're relegated to the local community college, I doubt you'd find much value in the courses offered there.

Chris Farmer
A: 

i'm in a very similar spot... i guess you should ask yourself do you NEED to go back to school, and if you are going back, what are you going to do with the new knowledge you gain? is there anything you don't know that you couldn't get from a book or online research?

Jason
+1  A: 

What harm can come from taking a few classes. I did that and it was money (my employers monye) well spent. The social aspect is also importent. Getting to know some people is usefull so go ahead and sign up.

Kasper
+9  A: 

If you have a Masters in Math, you'll probably dig a lot of algorithmic stuff that's unfortunately rare in the real world. Big O, graph theory, algorithmic design and validation, etc. You probably don't need a lot of introductory stuff, though. If I were you, I'd check out lectures online from places like MIT and CMU.

The specific things you mentioned, though such as design patterns and stack vs. heap -- I'd advise good books. "Design Patterns" by Gamma et al triggered that wave. For stack vs. heap, if you're interested in the hardware architecture, maybe "Inside the Machine" by Stokes or "Code" by Petzold. If you're interested in the software aspects, maybe "Compilers" by Aho et al., "Programming Language Pragmatics," by Scott, or "Design Concepts in Programming Languages" by Turbak et al.

Larry OBrien
i gave you an upvote for mentioning cmu and not stanford :)
Alex Gartrell
+2  A: 

Getting a degree in Computer Science would probably be a good idea if you plan to continue in the field.

Honestly, you may not learn a lot that you don't already know. But, that piece of paper in the end will put you ahead of people that don't have one when it comes to getting raises and a better job.

Plus, many companies will pay for your tuition, books, and other costs.

BoltBait
I already have a Master's and experience. I'm not so much wanting to pad a resume as just be a better developer all around.
Anthony Potts
I think you'd be surprised what you'd learn. The real benefit is the hands-on projects (also known as 'homework') that you get to do. Remember, we learn best by doing.
BoltBait
+2  A: 

Taking a few classes wouldn't be a bad idea. You could probably just get by on MIT Opencourseware since you already have a math background though.

Totally up to you.

Justin Bozonier
This is a great answer. I didn't know about opencourseware.
Anthony Potts
So many people don't! I don't have a degree and it's the only reason why getting one isn't the obvious right thing to do.
Justin Bozonier
+4  A: 

Having a graduate degree in Math, you more than many, will know the rigor which accompanies formal study. There will inevitably be topics discussed which may have theoretic importance, but almost no real-world application.

...but these are the conceptual gems which brings cohesion to the discipline.

There's a reason CS college grads need a bit of on-the-job experience to flow with the industry; they are different worlds. If you've got an intellectual-itch, audit a couple classes! It sounds as if you really would want to take an algorithms and an architecture course.

But if you're hoping to have some major epiphany to relate back to your day-to-day (real-world) coding, I'd say courses may be a waste of your time.

MikeHerrera
+1  A: 

You answered your own question. You said there were things you felt you didn't have enough in depth knowledge of (Stack versus heap. Design patterns, good database design."). If you feel that way, then yes I would go back and take a few classes, Since you aren't going for a degree, you can take only the ones that fill in the gaps in your knowledge. I'd also look at online classes as they fit most IT people's schedules better,

HLGEM
A: 

Yes. There's more out there than just writing code; there's the theory that makes it make sense.

Paul Nathan
A: 

As someone who took Computer Science classes at a university (Math major, CS minor), I definitely see the difference in code between those who are self-trained vs. school trained (generally). Primarily because self-trained programmers learn how to accomplish a task, and avoid the C.S. aspects of programming which lead to better designs.

If you do not have an adversion to learning via text book, then I don't think you need to take classes as there are some excellent books which cover the same topics.

I think the most important lesson I learned (which I use on a daily basis) is when to create reusable code. That is where Design Patterns and Refactoring come in. Start with Head First Design Patterns. It is the best way to learn Design Patterns I have seen. Then get Refactoring by Martin Fowler which will show you how to take old code and change (refactor) it into better designed code (that use Design Patterns).

Paul Osterhout
A: 

Whether or not you decide to take some additional classes is up to you, but if you're only going for the knowledge and not for credit, you should look into auditing the classes. I don't know if it's the case in all colleges or universities, but I'm fairly certain that the schools I went to allowed you to audit classes for considerably less money than taking them for credit. However, if money isn't an issue, why not take them for credit?

VirtuosiMedia
+1  A: 

If you want to just learn a little more you may want to have a look at MIT's Open Courseware.

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/

Donnie H
+2  A: 

As someone who has attempted to fill the holes in their learning I suggest you do the following:

  1. Crawl through various university curriculum's for Computer Science, find out what students there will be learning throughout their three/four years (depending on where you go to university), and make your own. Pick those that are recurring and fundamental, like Computer Systems Architecture, Algorithms, etc.
  2. Hit the reading lists. There are several thousand Blog's that will provide undergraduate Computer Science reading lists, so do a quick Google search and find the books you'll need for your 'course'. Better yet, get the reading lists from the universities you've already looked through.
  3. Find a community that's willing to help. More than anything I think you'll get a ton of help from this community. However, there is little guarantee that you'll get the exact answer for your question. I would personally recommend IRC, as it has helped me loads with Java questions.
  4. Once your knowledge has built up well, work on a substantial project. Apply your knowledge to something that any developer would be proud of. At least that way you'll have something to show for your new-found knowledge.

Of course, this isn't the only way to get results. It may just be easier to take another Masters degree in Computer Science. A few universities have top-up Masters degrees in Computer Science for those that didn't study Computer Science at undergraduate level, and these generally cover a large chunk of fundamental material in one semester, leaving you to apply your ability in a decent-sized project in your second.

EnderMB
+2  A: 

Stanford Engineering has some computer science lectures that you can view for free. Maybe watching them would help you get a feel for what you might learn: http://see.stanford.edu/see/courses.aspx

Slapout