3 years for a junior position?
The 6 month success stories likely know people willing to take the risk of a 6 month programmer, but 3 years seems excessive for a junior position.
3 years for a junior position?
The 6 month success stories likely know people willing to take the risk of a 6 month programmer, but 3 years seems excessive for a junior position.
In a year or two you should be ready to intern.
A more likely timespan, if you want to produce good developers, is five years with four years of study and one year of internships (in 3 month chunks). This is the co-op model adopted by Waterloo and it produces excellent entry-level developers.
If you want to be a reasonable developer, you cannot get away without being expert at least one low-level language (C or C++), one high-level language (Python, Ruby, LISP, etc), some knowledge of OS fundamentals (threads, processes, filesystems), some knowledge of concurrency (threads, locks, message passing), understand how to design your own language and build a compiler or interpreter (Flex/Bison, lex/yacc, etc), and a good base in discrete math (at the minimum, ideally some knowledge of numerical analysis and probability would be very useful as well).
This is exactly what you'd learn in four years of full-time study at a good university.
Why do you expect to become a good developer in 6 months by yourself when extremely intelligent people need four years of being taught (and being taught by a good teacher will normally accelerate your learning by 10x) to reach the entry-level stage?
You are being too hard on yourself. A year is nothing. Give yourself a few more years if you really love it and can afford to do so.
Okay, so I think when the OP was talking about 3-6 months for a developer job, they were referring to web dev. That is where I have seen the most "6 months to a position" stories. You certainly don't need all of that knowledge to put together a crud app or a front end with all of the frameworks and templates available.
You do need that knowledge when your app/site suddenly explodes with millions of users and your backend has gone thermonuclear due to being unoptimized.
In this case, the body of knowledge for a web developer is much smaller: HTML/CSS/JavaScript/A few frameworks. This is much more appropriate for the 1-3 year span.
Some quick google searches:
http://learnwithjeff.com/blog/2012/08/21/how-to-get-a-job-as...
http://www.codeconquest.com/what-is-coding/programmer-6-mont...
http://freelancefolder.com/how-to-become-a-freelance-web-dev...
Note: I know these are basically blogs with probably zero credibility here, but I've had a few conversations which basically said the same thing + 6 months extra time to be conservative.
If OP is serious about learning to program, then he should give himself more time and learn those other more valuable skills which will make the change of career worthwhile, and not worry so much about mastering the latest fad technologies, demand for which will almost certainly evaporate within a few years.
Demand for computing is going to skyrocket, and if want computing to be a field of genuine professionals, its time we start holding ourselves and other engineers to a higher standard.
But the point of the 6-month web developer as I've seen is to take the quickest route to nearly any paying job (some $10/hr "web dev" jobs aren't worth it) to A) cover bills, B) start on the experience record, C) surround yourself with people that at least know of programming. They may not be Dennis Ritchies or Guido van Rossums, but believe me when I say your motivation to learn more and stick with it skyrockets when you can carry on everyday conversations that pertain to your field of interest.
Anyone's who been programming only 6months or less, you don't know $Hit about programming yet.
Please. Many of my colleagues, and myself to an extent, have spent many many years since childhood preparing just to get into a reputable engineering school. Then it's 5 yrs of constant workload get the degree, whilst hustling doing coop. Then you get out in the real world, and life smacks you in the face, and you realize its only getting started and you're about at the bottom of the rung as can be.
To be honest, I get a little offended when someone goes through a couple tutorials, reads couple blogs, and suddenly they call themselves an engineer. I have friends who've been grinding out code since they were 10yrs old (now works for google), people have to realize programming and engineering takes a lot of hard work, it's not something you master over the course of a few weeks/months.
Most of the time, but by understanding those core concepts, you're mind looks at programming and solving problems in a different way. Similar to math, you may never use a differential equation, but by understanding it, you look at the physical world and interpret it in a different way.
Not my intent to look down on anyone. My point is simply that software engineering is huge, you don't learn it in 2 months. Done traditionally or independently, my hats off to you. It's no easy task.
Even if their title is not "junior", that's just to compensate for bad salary with ego inflation. In a corporate environment, I have never met someone with <3 years exp whom I would not consider junior.
I wrote off the people doing it in 6 months, but a year or two seemed much more reasonable. Previously I've read that a year or two is doable, but now I have to write those people off. So now 3 years is the minimum for any sort of job?
What if I run into someone who says 5 years is the minimum for a position?
Keep in mind that because of the constant job-hopping society seems to be forcing on most developers (either stand still in your career, or job-hop), you should treat this as a single isolated game of prisoner's dilemma with participants that will never play again. In other words, there's only one winning strategy : always betray the company. In this case that would mean say whatever needs to be said to get you hired/an offer. Also this works reasonably well in normal situations as well, if you're negotiating about anything, make it clear that your default first play in the prisoner's dilemma is to betray, but it's up for negotiation. If you don't do this, any sales/management drone worth his salt will immediately exploit this.
If you don't know yourself, and have attempted and failed to look this up, why do you assume the other person knows, really ? Either the other person is competent or not (ask a really difficult but slightly wrong question to find out, in a roundabout way, like "I can't get my head wrapped around how 'static' affects global versus local variables. It makes global variables no longer stack allocated, but what does it do to local variables ?". It's a nice obvious error that shouldn't make a capable person think worse of you, because it gives the perfect explanation, just assigns it to the opposite concept it should be assigned to).
If they don't catch the error, assume they don't know anything, because they're a manager or HR drone checking boxes. The only thing to do is get past them. For the love of God, don't tell them they missed the error. Frankly, you'll be doing both yourself and your future team a favor by inaccurately checking their boxes. Also, getting past them is a good exercise in corporate skills, if you get hired, it won't be the last time you need to get past them. If you feel like honesty is a value, I would advise you to save your perfect honesty for obviously technical people, not for management. Don't outright lie, but absolutely try to avoid saying "no" because of technicalities. "Do you have experience with windows vista ?" -> "I have experience with windows".
Keep in mind that the interviewer may be trying to do the same, stating an obviously wrong fact and asking you to check that box. "Do you know java 9 ?" is way too obvious, but something along the lines might be asked. Best answer to this is to inquire, not directly state it doesn't exist. E.g. "I'm following the java 8 updates, and there are some proposals that have been decided to be beyond java 8, but to my knowledge there is no java 9 software existing outside of Oracle. Can you clarify ?"