Going back to school?



  • Hi folks.  Long time lurker, first time poster here....

    I've been thinking about going back to school for a computer science degree, and am hoping you wise people could give me a bit of guidance.

    Some background:  

    I took 4 or 5 CS classes as an undergrad, and I'm finding that programming is the part of my current job (web development) that I like best.  I've learned a lot from experience, books, and other people's code (both what to do and what not to do), but seem to have hit a point where I need some sort of direct instruction and guidance in order to continue growing.  I understand the concepts behind OOP, DRY, MVC, but I'm never sure whether I'm really getting them right in practice.  I don't know anything about systematically gathering and describing requirements, about architecting systems of any scale, about testing.... etc.

    My questions are:

    • Are these things I'd learn in a classroom?
    • Should I be looking at graduate or undergrad degrees, or something else entirely?  Would a graduate degree be too theoretical or require more prerequisites than I have?  Are there continuing education classes that would do a good job of bringing me up to speed instead?
    • Any other recommendations?

     

    Thanks for reading this, and for any advice you can offer!



  • @sprained said:

    • Are these things I'd learn in a classroom?
    • Should I be looking at graduate or undergrad degrees, or something else entirely?  Would a graduate degree be too theoretical or require more prerequisites than I have?  Are there continuing education classes that would do a good job of bringing me up to speed instead?
    • Any other recommendations?

     

    Yes, these are things that you will learn in a classroom.  You will learn things such as Algorithm analysis and design, Design patterns, Requirements Analysis / Elicitation, Object Orient Programming and Design, Operating Systems, and for some unknown reason of torture Scheme and ML (I mean seriously, why the fuck did I spend a whole semester on recursion?).  At least you will get all of this if you go to the school that I did.  I think that most programs offer similar instruction / courses though.

     

    You should be looking at Undergrad if you do not have a degree in CS.  You will learn more, and besides: you will have to take most of the undergrad courses for a MS if you are coming from a different dicipline anyway. 

     

    Personally continuing ed classes are good for practical reasons.  Most of the people teaching them are those like us working in the field as oposed to a professor witha PHD that may not have even ever worked a real job outside of the educational setting.  A lot of times you get somebody who will not just show you theory, like most instructors do, but actually show you practical real world examples.  So IMO these classes are not bad at all.

     



  • Thanks, amischiefr -- that's really very helpful. 

    @amischiefr said:

    Personally continuing ed classes are good for practical reasons.  Most of the people teaching them are those like us working in the field as oposed to a professor witha PHD that may not have even ever worked a real job outside of the educational setting.  A lot of times you get somebody who will not just show you theory, like most instructors do, but actually show you practical real world examples.  So IMO these classes are not bad at all.
     

    Most of the continuing ed classes I'm seeing in my vicinity seem to be geared towards teaching specific technologies rather than theory and techniques. Are there online courses that are worth looking into?

     Thanks again!



  • While a little drastic, you might want to consider getting a new job, at a larger company if possible.  The bigger the company, the more systems and technologies you could have a chance to get "down and dirty" with (not to mention the possibility of formal training courses you don't have to pay for)

    Slightly less drastic - have you asked your employer about training?  Maybe they have a "we've always wanted X, but nobody's had the motivation to learn how to make it work" sitution you'd fit right into.



  • University (or college depending on your location) is good for teaching you the basics. That and having all night Quake deathmatches, but that's another story. If you want to be serious about programming you should really pay attention to the low-level stuff like for example what's going in the memory. All the things that high level languages obfuscate. For example PHP's carefree style is nice, but when you don't understand the bugs in your java program because you don't know how java deals with copying stuff, or why your C/C++ program keeps eating up memory, then you're in trouble.

    Of course they may also teach you stuff you don't really need, technologies that are on their way out or antiquated practices, but with your hands-on experience you shouldn't have a problem telling apart the crap from the useful stuff.

    And last but not least you get a nice degree you can wave in the face of potential employers. 



  • I wish training were an option.  I'm currently freelancing, though, and reluctant to return the the corporate world.  (And at my last job they preferred replacing people to training them.  Yay.)

    @DOA said:

    University (or college depending on your location) is good for teaching you the basics. That and having all night Quake deathmatches, but that's another story. If you want to be serious about programming you should really pay attention to the low-level stuff like for example what's going in the memory. All the things that high level languages obfuscate. For example PHP's carefree style is nice, but when you don't understand the bugs in your java program because you don't know how java deals with copying stuff, or why your C/C++ program keeps eating up memory, then you're in trouble.

     

    The good news is that I have already learned the basics.  The few courses I did takeway back when were taught using plain-vanilla C (with brief forays into Java and a toy assembly language), so I understand pointers, why memory leaks occur, the evil of buffer overflows, and why strings are processor-intensive.  I learned data structures, search and sort algorithms... and have barely used any of it since graduation, since I work almost exclusively with PHP, Python, and Javascript.  But I'm willing to wade through all of that again if it's what it takes to get to the higher-level topics.

    Thanks again! 



  • @sprained said:

    I don't know anything about systematically gathering and describing requirements, about architecting systems of any scale, about testing.... etc.
     

    What you're talking about here is software engineering.  That would be covered in most any degree program, but I only had a one semester course on it when I was in college.

    Before enrolling in an expensive and time consuming program, pick up a couple books on software engineering and see if they answer your questions.  You might also pick up a book on algorithms and database design/optimization, which become very important as scale increases.



  • Thanks for the suggestions, everyone! 


Log in to reply