> "which turns out to be a social process."
I used to agree with this 100%, particularly as I was teaching myself to program. Now I don't. Not even a little bit.
I learned to program, almost entirely, on my own, in a vacuum. I started learning to program just before I was pulled into my second military deployment, years on the job at Travelocity, and then refined my skills during my third military deployment.
It wasn't completely a vacuum as I could talk to people online. I learned most of my early architectural concepts from practicing against the recommendations of Douglas Crockford. I had nobody in the real world I talked to about my programming. In reflection this made me a substantially better programmer, and I never realized it until somebody in the military explained why.
I am a JavaScript developer. I first started learning to program just before abstraction libraries became the religious dogma that nobody could live without and ultimately coalesced around jQuery. This was not a technology phenomenon it was a social phenomenon. I largely missed the insanity that was so popular in the social business world as I was bouncing around various FOBs in Afghanistan without an internet connection. I learned to write against the vanilla DOM and optimize my code to perform quickly, cross browser, with simplified logic. I didn't an abstraction library and a bunch of dependencies to slow me down.
When I came back to Travelocity my ability to write fast code in the browser that just always seemed to work earned me a promotion and I became a senior developer and the A/B test experiment guy for the company.
When I started my second deployment I taught myself to program by writing an open source code beautification tool that worked in the browser. Node.js was just invented and I wasn't aware of it just yet, so my tool was limited to the browser. I taught myself language parsing for various different kinds of grammars. Much of this code mostly worked but it was poorly constructed and certainly not 100%.
When I was sucked into my third deployment I wasn't skilled enough to be a software architect. I had more learning to do, but a few months in I really learned to refine my approach to architecture and wrote some new language parsers from scratch that turned out to be solid and extensible. At this time while I was again out of the mix from the corporate world large MVC frameworks became the rave that suddenly became the thing developers could not live without. I learned to live without them and continued programming on my own refining and extending my little open source application. I was easily able to apply the architectural concepts I taught myself in place of large generic MVC frameworks to produce code that is significantly smaller and generally executes much faster.
Late into my third deployment I overheard a conversation about the origins of Best Buy. The key guy, Richard Schulze, never went to industry trade conventions or focused on common industry practices for doing business of his new "Best Buy" store model. He had found the concept by accident and refined it over time into a more retail without commission concept that allowed his stores to out sell the competition. This was a process of refinement and reward over time by practice and experimentation. The concept was successful because it discard the social process of industry peers!
The social process is a means of validation. It lets you know how you fare against the median population you are competing against. If your goal is to be average the social process is your guide. If you want to be more than that you have to be willing to step back from what is popular.