After a burst of ranting about homework, the applicability of the classes I'm taking, and my computer science teacher, I have some questions concerning education for my career path as a developer.

I taught myself everything I know about programming. I've been thinking lately about the advantages of teaching myself vs. learning from a teacher. I feel I might miss some things I would normally learn. I might learn some concepts wrong, or something. After all, computer science eduction has been around longer than I have.

The problem is, I'm not learning anything new about computer science in my programming class. I put the computer programming 2 course on my schedule (it was labeled as Computer Science when I signed up for it). It turns out that it's just learning C++ and of course OOP. In fact, the CP2 students are in the same classroom at the same time as the CP2 students, except the CP1 course is a half-year class instead of full year. I thought we'd do something like data structures (other than arrays), or something I'm less experienced in. The teacher had me change my schedule to CP1, but he "lets me loose" to work on projects with the CP2 students while he teaches the CP1 students.

I usually end up helping the CP2 students with build errors and things like that after I'm done. I certainly don't mind helping them, but I'm not learning anything new, and I likely won't, seeing that AFAIK linked lists will be the most advanced concept taught (for the CP2 students; The class ends this semester for CP1, including me). Frankly, I'm not interested in copying source code from paper to screen, which is 90% of what the CP2 students do.

I want to be learning something computer science related. I'd hate to sit around waiting for my options to catch up. I want to take classes not offered by my high school, like discrete mathematics, algorithms and data structures, or something like that.

So my question is, where can I take classes which aren't offered by my high school? Can I take college classes? (keep in mind there isn't any concurrent, AP, or distance-ed classes concerning computer science offered by my high school besides the CP1/CP2 class I'm in). Do you know any online classes I could take?

Thanks,
Danny Shields

P.S: I talk about my programming experience on my StackExchange profile if it helps.

This question appears to be off-topic. The users who voted to close gave this specific reason:

"Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – MichaelT, GlenH7, gnat, jwenting, Bart van Ingen Schenau

3 Answers
3

The problem is, I'm not learning anything new about computer science in my programming class.

Even in Germany, you don't get the "CS" stuff (data structures, algorithms, turing model, automatons, proofs, complexity, etc.) until grade 11. In fact, only few select schools offer CS at grade 11(-13). If you are out of luck, university (basically "grade 14+" in our system) is the first institution you will get real CS from.

Before that, what schools do is just applied practice. Internet technologies like HTML and Javascript to make your own web page. Programming with QBASIC to drive some LEDs hooked up to the LPT port. Stuff you can get done without CS theory.

That's for where to take classes. But that is usually not the place where the most proficient programmers emerge from. The B.Sc.s have theory, but the programs they write usually suck because they lack familiarity with pretty much all languages. Even people that just moved from M.Sc. to PhD have the problem, less, but noticable.

What programmers should at best have is experience, and a lot of that. That does not mean they should not also have an understanding about CS concepts (the more the better), but in contrast to university exams, it is not so strictly necessary to understand everything.

And as I see it, the programmers being able to churn code has more practical (industrial) weight than a scientist being able to churn theory. (Conversely, a clever business that has to deal with internals of algorithms employs one of each type of person and utilizes twin programming, a.k.a. pair programming.)

I have that very same book, actually. I definitely agree that knowing different programming paradigms and design patterns is important. Generic programming is a much more applicable paradigm to data structures than to, say, a renderer. Same for design patterns.
–
vedosityDec 9 '10 at 3:26

Reading your question I thought you were a college student. So I'm impresed that your highschool offers as much as it does. My kids were able to take one or two courses from the local community college. The Opencourseware stuff is pretty decent -although a bit spotty. I tried
to learn garduate level Chemical Kinetics this way (for work), but was afraid I might be
missing some fundamentals, so I recommended my employer hire someone with an actual degree in the subject, rather than risking that I might program things wrongly, due do missing something fundamental. So not having a knowledgeable teacher/mentor has its problems. And I don't know how you can obtain official credit for learning. But I think it can at least get you a leg up learning wise.
here is the URL for MITs CS course notes:
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/

Personally, I think math would be a great background. The real CS stuff contains a lot of it. I was always great at the analytic stuff, but never got graph theory, which can be important for some branches of CS. Also if you can wrangle some sort of paid programming project that would be great. In college I volunteered for a paid programming job one of the professors offered, so
I both learned, and earned at the same time.

If I had college to do over again, I'd spend five years, and take as much applied math as I could stand. As it was, AP credits let we whizz through in three, but I was both underprepared and burned out for grad school.

Yeah, I've heard from other people that my highschool has one of the best CS programs in the state (or maybe it was district...). The impressive part is the teacher is mostly blind (it depends on the day). I have caught him teaching concepts incorrectly though, like inline functions. In my free time I have been working with topology, which I'm pretty sure graph theory is a subset of. Halfedge Data Structures can represent graphs.
–
vedosityDec 9 '10 at 4:12

I know exactly how you feel.

I want to be learning something computer science related. I'd hate to sit around waiting for my options to catch up. I want to take classes not offered by my high school, like discrete mathematics, algorithms and data structures, or something like that.

Sure! Lots of high schools have programs to pay for college or correspondence courses that the school doesn't offer. Even if they don't that's no reason you can't use some of the many available online tutorials, white papers, specification guides, and code to increase your knowledge outside of a classroom. Now you have practical applicable experience for when you do end up taking courses.

So my question is, where can I take classes which aren't offered by my high school? Can I take college classes? (keep in mind there isn't any concurrent, AP, or distance-ed classes concerning computer science offered by my high school besides the CP1/CP2 class I'm in). Do you know any online classes I could take?

My high school had Intro to Computer Science (Visual Basic) and AP Computer Science (Java). Considering I took AP Comp. Sci in 8th grade it wasn't much help to take either. This doesn't restrict you. What stops you from learning outside the classroom? I was brutally efficient in completing coursework to increase the amount of time I could spend learning on my own. When you get stuck you have an instructor that's probably as bored as you are teaching about Arrays vs. Linked Lists. They (normally) love to see students excel outside the course parameters.