You can learn programming all by yourself and get a coding job. Just you, your laptop and the internet. It's great! You don't have to pay thousands of dollars for a degree and you can work at your own pace.
There's a problem with this approach though: with no teacher or course to guide you it's not clear how much work you need to do every day. There are no professors giving weekly lectures or tutors setting homework.
You just do as much study as you're motivated to do. Are you doing enough? Could you do more? These questions can eat at you, creating guilt and anxiety when you spend time on non-programming activities. There's no clear line between work, study and play. There's no campus or workplace to go to and no-one is keeping you accountable.
In general my advice will be to pace yourself. Slow and steady - don't burn out. I can't pin down this quote exactly, but it goes something like:
You overestimate what you can do in a day, and underestimate what you can do in a year
Let's be specific though. I think you should aim for four hours a day of total study. That's what worked for me personally. It might not seem like much, but that's four hours every day. You might think that 8 hours of work per day is the golden standard, but learning is much harder than working.
That four hour figure was for people who are studying full time. Of course not everyone has the luxury to dedicate themselves to learning a new profession. If you're working a job as well then I'd aim for 1-2 hours a day at most.
Study some theory
Of those fours hours I recommend you spend 1-2 hours doing some sort of course work. This might be watching lectures, reasing a textbook or doing assigned coursework. I'm talking about courses from Coursera, Udemy, MIT OpenCourseWare, or even just good old YouTube videos. Passively reading and watching videos is very mentally draining and I doubt you can actively absorb information and take notes for more than two hours a day. You can sit infront of a video like a zombie for as many hours as you want, but I think most people only have a couple of hours of high quality passive learning in them every day. Maybe you're special (good for you!), but if you're not special that's OK.
Do some practice
I think you should spend the rest of your time on some sort of coding project, which I've described elsewhere. I suggest coding after some theory, because learning theory is harder. If you've found a project that you're interested in, then it shouldn't be hard to spend 2-3 hours writing code. Some days you'll get totally stuck and give up a little early - that's normal. Other days you'll be having fun and the next 10 hours will fly by. What's important is that you don't force yourself to sit and code for 8 hours a day when you're not having fun. If you find yourself repeatedly unably to spend 2-3 hours a day working on your code, then you need to take a step back and figure out what's blocking you:
- Do you hate the language you're using? Try a new language
- Is the project you chose for yourself too hard? Try something easier
In general you should be taking a meta perspective on your work. Don't try and just slog through your problems. If 2-3 hours of coding a day isn't fun, then figure out how to make it fun.
You can accumulate a lot of passive programming knowledge without doing a lot of work per-se. If you can find programming-related entertainment that you enjoy consuming, then it won't feel like you're studying. For example, I used to really enjoy reading Joel Spolosky's blog and listening to podcasts like Programming Throwdown and Software Engineering Daily. I'd just listen to these podcasts while I was walking around. It was just casual consumption, not a study thing: there were no weekly "podcast goals" that had to be met. Maybe blogs and podcasts aren't your thing, but there are also books and YouTube videos a-plently that are both entertaining and slightly informative. Hell, I even picked up lingo from being subbed to /r/programminghumor.
It's really hard to say how long it takes any given person to get a software job from scratch. There's a lot of variance involved including your local job market plus pure luck and coincidence. In general getting a job will probably take longer than you expect, so it's important to work consistently. You should be in it for the long haul: pace yourself.
If you have any feedback or questions email me at [email protected]