Most Useful CS Classes?

One thing that’s clear about my quest for higher education is that I’m going to need some undergraduate level classes to fill in the holes of my self-taught education. I’ve been looking through course catalogs for various programs to get an idea of what I’m missing, but it’s hard to tell what would be valuable and what’s just filler.

For folks who got viagra online without prescription an undergraduate degree in computer science, what classes / topics did you actually find useful? I know I need to brush up on my math, I haven’t done anything resembling a proof in about a decade. Most of the programming I’ve done has been for the web. Lots of figuring out when to access and how to store various bits of data, but not much recursion. I’m used to speed being a factor of how often you hit the database, not how you’re manipulating the data.

I’ve found a community college locally where I can pick up some classes on the cheap, including one called “Language Independent Design Tools” which covers problem solving techniques, modular design, how to perform a proper trace, subroutines, etc. It could be either really useful or entirely too general, it’s hard to tell from the course description. It requires “Intro to C#” as a co requisite, which sounds like a lot of “this is a variable, this is a function.” Bleh.

Speaking of classes!

I’m teaching Intro to PHP at NYC Resistor in December. It covers the basics of the language, and doesn’t require any previous programming experience. Working knowledge of HTML is a big help, but not strictly required. You can sign up online, the class is taught at the NYCR Hackerspace in Brooklyn.

I’m thinking of teaching the GD image class again, because it’s fun to draw graphs and calculate resizing, shifts, etc. But the last one wasn’t very well attended so I’m not sure.

Filed under: Programming

7 thoughts on “Most Useful CS Classes?

  1. Dave Cobb says:

    Data Structures was a useful class as it taught how how to sort and traverse various lists and other structures in a timely manner. Algorithms or something similar would be a good class as well. Anything that helps you recognize algorithmic inefficiencies is aces (they’ll talk a lot about “big-O” notation) since that is a real easy way to kill your program’s performance.

  2. Dan McKinley says:

    THEY ARE ALL USEFUL, but ok, I’ll give you a list of “things I use every day,” organized into levels of advancement.

    Entry level, courses covering:
    – Data structures (linked lists, trees, hash tables, etc). Super important.
    – Basic algorithms like sorting/searching, big-O notation, recursion. Not that you really write a sort or any big-O notation all that often (though I do write searches all the time), but a feel for what things cost is good to develop.

    Mid-level:
    – Take a class that involves functional programming. Sometimes these are found in math departments.

    Upper-level: operating systems, databases, advanced algorithms, compilers

    1. Kellbot says:

      Looking at a course list which includes titles like “Visual Basic for Technology” and “Introduction to Computer Networking” I’m going to beg to argue that they’re not all useful. To me at least.

      The community colleges I’ve been looking at seem to lump the IT / IS courses in the same broad “computer science” category. I’ve got nothing against IT, its just not super interesting to me. So unless there’s something I’m totally missing out on, I’ll probably skip those in favor of more programming / data structures.

      1. Dan McKinley says:

        Ok, the first one is definitely not. The second one might be but the mere fact that the first one exists casts doubts. My advice would be to learn concepts and not tools, so avoid anything called “Language X Programming” if you can.

  3. An assembly language course, even if you don’t use it directly, will help tons when working with little processors like those in microcontrollers. But I won’t recommend it too strongly because I liked it more because that’s what I was interested in.

    I found that the things that stuck with me were the tangential information I gained from taking courses in unusual languages. I can’t remember much of anything about Lisp, Smalltalk, or Prolog, but because they forced me to think differently about how to program, I learned a lot about what I was doing.

    Assembly language works too, but it can take you down the rabbit hole (i.e. I was coding recently and added two 8-bit values, but wanted them to stop at 255 rather than overflow; I had the space to do a 16-bit sum in C like the rest of the program, but instead I used the #asm macro to perform the add, then checked the carry bit of the processor.)

    And the course I took on software testing and quality assurance was useful for understanding how to analyze software for complete testing. Particularly for those finicky and critical routines that you want to guarantee to never fail.

  4. dad says:

    Analysis of Algorithms, or Algorithms and Data Structures. This is usually taught as a sophomore level undergraduate, but its always taught again in grad school (at least for CS, not so much for the softer “software management” type programs. But anything about Big Oh, is essentially calculus. So you need that refresher first. Note: CS classes have a different definition of “proof” when they use Calculus than a Math or Applied Math course would expect. The CS folks allow a lot less rigor.

  5. Mark says:

    I just graduated in December with a computer science degree. The most useful classes I took were Object-Oriented Programming, which was basically a Java class, a compiler class, one in operating systems, a networking class, which was mostly C# stuff, and one in graphics, which was mostly OpenGL. I also had classes in Data Structures and and Discrete Mathematics, which weren’t that interesting at the time, but now they seemed to be quite useful.

    Since I’ve graduated though, I’ve been looking for a job and learning things on my own that job seekers are looking for, such as PHP, MySQL, and been messing with Android programming quite a bit. As they told us in school, you don’t necessarily learn what you need to know for the real world while in school, you just learn how to learn. I’m just wondering now if grad school would even be worth it.

Leave a Reply

Your email address will not be published. Required fields are marked *