Before the internet was pervasive, a self-study of Programming was for the curious tinkerer. Now that it is incredibly mainstream, we are seeing more people who are approaching programming as a means to an end, for whom the solitary pursuit of arcane knowledge is not an end unto itself.
For people who are not auto-didacts, a little more structure is needed. From a (Vygotskian) pedagogical perspective, most learners require an Expert to create "scaffolding" (support structures) that allow the learner to increase their "zone of proximal development" -- that is, they require someone else who has mastery to provide a little help or guidance in order to help the to tackle tasks the learner does not yet fully master. the completion of tasks with help then increases the learner's level of mastery and they can then take on ever-more-challenging tasks.
Tl;Dr: most people prefer to not teach themselves hard things.
for a direct example, compare the README.md in many GitHub projects to the pages on SourceForge.
We used to take for granted that you'd know how to get cvs, configure make and install for your system (and would understand architecture flags and so forth...) nowadays library authors (who in many ways are the "first educators" for their tech) are putting in more effort to make things as easy as "copy and paste this into your terminal to install."
That all said, it is kind of terrifying how many people are developing networked applications with only the most rudimentary understanding of networking...
I've been hacking on rails for a while but only after I joined a company where they had guys with 4 years of professional rails experience did I come to know of all my bad habits and also learned how to do things in a neater faster way.
Basically being around people who are good at what they do will make you good at that skill.
The book "The Talent Code" explains this in detail. Read this book - it'll significantly help you understand what you need to do get good at a skill fast.
Venkatesh Rao wrote a blog post on this as well which is a very worthy read. He called it "The Crucible Effect". http://www.ribbonfarm.com/2009/07/21/the-crucible-effect-and...
And this goes for any skill from windsurfing, soccer to coding to running a startup.
Thanks for this comment. I started coding about 8 months ago and am enjoying it thoroughly (I just turned 30 and have a background in business). I was actually thinking about doing the same thing this guy's done - get a developer intern position somewhere since reading this post earlier this morning. I'm sure I would learn tons that I wouldn't otherwise learn (I'm thinking specifically architectural and security type stuff, among other stuff) but am also learning tons on my own.
Just last night I was talking with a good friend that has been coding for 15 years and he suggested something kind of similar: fix the bugs and maintain some code that a more experienced developer can check - run errands so to speak. That way I'm not breaking something or pushing insecure, buggy code into production. I think a combination of the two would be optimal.
Why is it a difficult rut to get out of? Because when people build teams to build systems from scratch, they look for other people who have built things from scratch. Then when they need someone to maintain it, they look for someone who has maintained other piles of buggy crap.
Then share your experiences with HN!
1) Environment. Having the right people and drive around you striving for the same goal has a positive impact on your own actions. Makes you more motivated to do stuff (at least for me)
2) Make less mistakes. I made a ton of mistakes the last couple of years and I am now VERY receptive to not learning things the hard way.
In the event that I did not, the plan was to get a regular 9-5 job and devote nights and weekends to improve my technical chops.
There are many ways to do this but having a mentor or a right environment to do it certainly helps an already difficult journey.
When we were formally taught Java at university, there were 10 hours of tutored labs available. I certainly didn't need any help to do the coursework, yet I went. I soon found some real hackers, who happily ripped my coding attempts to pieces (in a good way, mind).
When I started work on my first attempt at architecture, I got some guidance from some of the same people. Whilst design patterns were around, these people helped me understand which ones to look at, why, and what overkill was.
When I graduated and started working, I was already a "better" programmer than some of my peers, as I had been shown GDB (and hence JDB) by my mentors. However two years in I worked on a project with some talented developers, and again I learned about IOC etc.
Mentors save you a lot of time and energy. They are present in almost all trades where you have apprenticeships, and I for one know I thrive in that sort of situation - the one where I am challenged by someone who has been there before, who forces me to back up my designs/arguments by reading directed texts.
If I hadn't had them, I'd have found my own path. But I'd have spent a lot of time wondering somewhat aimlessly, reading semi-useful books cover to cover (yawn), and screwing up projects...
Now we're seeing more HR/management training people teaching that mentoring and coaching new hires (esp. those just out of school) is a better way to go. It gets them up and running faster and you can brainwash^H^H^H^H I mean teach them they way you want them to do things.
Personally, I think it's a good thing.
-- They help weed out the bad and the WTF to bring forward the good (in my case, okay) stuff.
-- Their discussion of design issues can help you figure out your framework, and show directions you hadn't known.
-- They give you some sense of what you've accomplished, what you haven't and what you must improve.
Look up Google Summer of Code. You won't get into the program if you're not a student, but it's a great jumping-off point for finding communities that are willing to nurture newbies.
This isn't meant to be a personal attack on you by any means. I've noticed a huge movement toward "mentorship" lately, and I'm just not seeing the purpose. Even worse, those who do not get these critical mentorships wither away and blame others for their shortcomings and failures. Obviously you were fortunate enough to find a group who "took you in", but what would happen if you didn't?
Downvote if you want, but I'm honestly curious as to what's going on with this mentorship trend.