I figured this board would be a pretty good place to ask.
I've done the university thing, and due to some poor decisions and bad foresight, ended up doing something I don't want to be doing for the rest of my life. So, I've been thinking of going back to school. During my program I didn't get too much exposure to any sorts of computer science other than a C++ programming course; I really liked it however, and I think this is something I could be happy doing.
So my questions are: what sort of education path is best to get into this? There's a technical school nearby that does a 2 year diploma program that can be extended to a 4 year degree if you want. Should I be looking more at a BSc. in computer science from a university? Is there a regular secondary education "path" most people follow to get into this kind of work?
Secondly, and maybe more importantly, am I being the kid who plays Gran Turismo and decides he's going to be a race car driver? Is one course enough exposure to really judge what the programming/IT side of things is like? Probably not, but that's why I'm asking. Browsing around a few different university/tech school websites, it seems like there's more than just programming involved, but that's what piqued my interest. I enjoyed the logic and thinking behind writing good, (though admittedly simple), programs.
TLDR: I want to learn how to develop software/maybe other IT stuff. How?
Posts
I like astronomy too. And geology. And biology.
You get the picture.
You're correct that having fun in one programming class doesn't mean that you will love it as a long-term hobby or career. However, I have known plenty of would-be computer scientists for whom it only took one class to know they'd hate it badly.
Programming, by itself, is really a vocational skill. It is very difficult, but alone it's just a tool. There's demand for this skill, and so if you become proficient at it, you can probably be employed doing it. Just as in building construction, however, there is a distinction between being an architect and being a construction worker. Knowing how to program means that you may be an adequate construction worker, but there's quite a bit more involved if you want to be an architect. That is, there's a difference between programming and designing and engineering software. Granted, the architect-construction worker analogy is a bit strained because the line is quite a bit blurrier in computing, but it's adequate.
People with University training in computer science and software engineering do learn to program as part of their education. The purpose of this training is not to prepare you to become a programmer, however. It prepares you to learn to solve different kinds of problems using computing. This is why a decent education in CS or SE doesn't focus much on programming beyond the first year.
Computer Science focuses on a broad spectrum of computing-related topics. Algorithms, data structures, AI, programming languages, compilers, operating systems, human-computer interaction, user interfaces, digital logic design, software engineering, and so on. Software engineering used to be primarily treated as a subspecialty of computer science, but as software has grown in importance while the need for knowledge in, e.g., AI has diminished, SE has begun to split off as a discipline. SE is focused on the organizational, managerial, and technical challenges of constructing large software-intensive systems.
The point I'm trying to make is that computer science, software engineering, and programming are overlapping disciplines; it is not a subset relationship. One is not strictly subordinate to the others. Many well-respected computer scientists and software engineers are mediocre programmers at best. Many excellent programmers cannot design software. Many famous computer scientists have only tangential interest in software issues.
If you're interested in learning and practicing programming as a vocational skill, then get a vocational education in it. If you're interested in learning how to use it as a tool to solve problems, however, I strongly suggest a formal course of study in computer science or software engineering at a real university.
As to urahonky's post above, the level of math required in a CS program really varies from program to program. I'm a firm believer that the relationship between mathematics and computing, particularly in software engineering, is highly overblown. Doing math is nothing at all like programming. Furthermore, it's not just any math that's important - it's weird branches of mathematics like discrete math (combinatorics, linear algebra, Boolean algebra), group theory and category theory, that really have practical applications in computing. Trigonometry comes in handy sometimes too. Calculus, however, is nearly worthless.
If you do decide to return to the University, pick one with a decent program at least. Here's a hint: if the official names of the classes include the name of any programming language or specific technology (e.g., "Visual Basic" or ".NET" or "J2EE"), run.
I'd argue the opposite. The specific techniques gained by a math-heavy program may not be directly applicable but learning advanced mathematics trains your brain in a way that is eminently useful when designing and writing software.
Sure, it won't help if you're just hammering out GUIs or following a design document but it certainly will if you have to do any real problem solving (which is, conservatively, seventy percent of programming). I know I wouldn't be a tenth the coder I am now if I hadn't busted my ass in math classes both in undergrad and grad school.
Can you elaborate? I'm genuinely curious as to what other developers think about this particular connection. I'm particularly interested to know how you feel the mental processes used in doing mathematics are related to the mental processes you use in developing software.
I'm terrible at Maths, but I do OK for myself at programming. Programming isn't as much a case of mathematical prowess (although you will need it if you are designing algorithms) but just being able to look at a problem as a representation of a large set of small problems. If you can't Divide and Conquer, you can't program. As far as I am concerned, that is the most important mindset programmers need to have, otherwise you'll just get super-depressed from day to day trying to climb mountains rather than molehills. Computer Science has programming as just one element of course, and that's why Computer Science degrees come with the maths; you need to know it in order to do effective "science" (as in research and development) on a computer, but you don't really need it for the majority of computing jobs in The Real World.
Software Engineering really doesn't involve any mathematics. It needs you to understand designs, what is good programming and what is bad programming, and the ability to effectively communicate those things. Communication is the key, and many more jobs will hire you because you can effectively communicate your ideas than code trigonometric solutions.
I'm a bit of a noob software engineer so I won't get into those aspects too much deeper, but my main background in college was math so I can talk about that a bit more. Math, of varying types, can be exceedingly useful in software, however not all software development requires more than basic understanding of certain aspects (like different bases like binary and hexidecimal, extended arithmetic). Algorithms tend to intersect with math, linear algebra is useful because a lot of things use matrices (especially computer graphics), prob-stat and combinatorics are fairly common applications of software, and numerical analysis can be a lifesafer if you deal with floating point a lot.