First, I have already searched the site and read all the previous "self-taught vs. college" topics. The majority of the answers defended that going to college was the best choice, for two main reasons:
Going to college gives you the paper, which is essential to landing jobs, especially in tough economic times.
Going to college gives you a solid programming base, teaching you the principles that will be essential regardless of the language/path you take after.
Here comes my question: I am not worried about reason 1 at all, because I already have my own company (I build websites/ do affiliate marketing) and a stable financial situation, so I am pretty sure I won't need to look around for a job.
I am worried about reason 2 though. That is, I want to make sure I'll have as solid a programming foundation as anyone else out there, and I am wondering if that is possible with self-learning.
Suppose I take my time to study the very basics, like discrete maths, algorithm design, programming logic, computer architecture, Assembly, C programming, databases and data structures - mostly using books,online resources and lots of coding. Say I spend 1-2 years covering those basics.
Do you think my foundation would be solid, or still lack in comparison to someone who went to college?
( 6 months ago )
Absolutely definitely. Yes, it's possible. How do I know? Because I did it!
It's difficult. Don't have any illusions about this. With no tutor to go to when things don't work, you have to figure out problems yourself. There's a lot to learn and if you aren't self motivated or aren't dedicated enough, you won't be able to do it. For me, I find it difficult to be motivated about anything, but I enjoy learning and programming so much that I don't have to fight myself.
Learn by doing! Want to know how binary trees work? Make one.
Do by learning. Set yourself ambitious projects where you'll have to learn new things in order to complete them. Caution: If you set yourself projects that are too hard then it's easy to become disheartened, but if you set yourself projects that are too easy, then you won't learn very much. You're looking for a butter zone.
Start with C. High-level languages make you lazy. I'd never had learnt C if I'd learnt python first.
Wikipedia should be your first point of call for any concepts you need to learn.
It doesn't matter if you never finish a single project, (after all, what is finished). It's much more important that you learn new things. That doesn't mean to say that you should never try to finish a project. It can be a huge motivational boost to see something you made working. It's easy to get side-tracked, don't worry if you do.
How do you know when you are done? Well, the reason you undertake a degree is so that you will become proficient in programming. When you are sure you could write any software given a reasonable amount of time then you're a programmer, but that doesn't mean you should stop learning.
Incidentally, I'm now suffering from point one. Being far away from any software development companies doesn't help either.