Funny, I’ve wondered about the same thing over the years. I started out not knowing what I wanted to do with my life, and eventually studied Electrical Engineering at a technical college just because my brother did that, and I had to study something, so it seemed as good an option as anything else. I never found it interesting though, and it never even dawned on me that my only enjoyment there was when I got my HP calculator, and it became my mission to write the best possible program for it – one that could solve a mother of an equation for any given operands. (I don’t remember the details now.) Also, I bought my calculator on a Friday, and by the Monday that followed, I was explaining to a couple of guys (who’d had their calculators for six months already) how to write better programs.
I forgot all about those days, then ended up working for a company with a software division as well, and somehow slipped into a programming role years later, almost by accident, after convincing somebody that I could code in Delphi, having bought one of the “Mastering Delphi” books and written some (actually very little) code for a whole two days. It was at that time I realized that I can somehow grasp abstract concepts rapidly, and within a year I was a fully-fledged programmer, loving it, competing with people who already had 10 years experience, and supremely confident.
Only after a couple of years did the doubts start to set in. I realized that my peers often had Computer Science degrees, while I had none. I started to doubt myself. I started to question whether I was really good enough, and felt like maybe I’d just been lucky.
I’ve never had the issue of being a copy-and-paster, even at the beginning, despite the fact that I am the most lazy person I know. The fun in programming is in figuring out how to solve whatever problem is at hand, with the tools that you have. I wouldn’t do it otherwise. So I normally first write my own code – then Google it afterwards to confirm that I went down the right road – and I almost always get it right; often writing better code than the SO solutions I find for people asking the same questions – otherwise I learn and adapt my style accordingly.
So after much thought on this subject, I’ve concluded that my own self-doubt is perfectly normal, especially for somebody who used to be awfully shy. And questioning your code is healthy – it forces you to hold yourself to high standards. Thus I’ve decided to share my thoughts on this subject, since they are largely positive. (For a change… I share my negative thoughts as jokes, like the previous post.)
Although I know there are a large number of developers who should be doing something else, especially here in Johannesburg (and I know this mainly because of job interviews where they have had to dumb down their programming assessments due to all the applicants failing, such that I could score 100%), I believe that if you ask yourself that question (Am I really a programmer, or am I just lucky/a good Googler?), you probably are a decent developer – or at the very least you are pushing yourself; you are improving, and you are growing as a developer and in your career.
In Scott’s original post where he describes feeling like he is a phony, he goes on to write about a condition where people who are supremely confident are actually incompetent, and are unaware of their limitations. Actually this reminds me of a great video of John Cleese. (I can’t remember the URL, sorry.) He describes in his brilliant witty style how “truly stupid people will never know they are stupid”.
It’s kind of like the Idols TV show. People show up who can’t even conceive of what it might be like to hold a note (and are tone deaf anyway), thinking they can become popstars.
To summarize, if you question your design and your code, you are probably worth your weight in gold as a developer. If you think you’re the greatest developer ever to walk the Earth, you’re almost certainly a fucking moron.