Okay, so this is probably true of all professions or skills. But one thing that's struck me over the past few years, as a programmer. The more I know about programming, and software engineering, the less sure of myself I've become.
I remember my first job as a back-end engineer, I started out as a front-end developer, very basic markup, css and some basic level jQuery. In my spare time, I taught myself some PHP, I learnt CodeIgniter and started making small web apps.
I remember making a task manager for work, which, looking back was incredibly crude, but it worked! A very small team I managed used it fairly consistently. It felt amazing having built something useful.
I realised that this was what I wanted to do. So I started applying for jobs as a programmer, thinking I was pretty much ready to take on the world. Sure enough I got a job, the lead developer there sent me a list of concepts and libraries I needed to be familiar.
I was overwhelmed, I'd heard of a few of them, but I hadn't really used any of them. Some of the concepts were completely alien to me. But how had all this escaped me? I'd been playing around with PHP for almost a year... in my spare time.
I took the job hoping I'd pick it up as I went. I didn't. Although I picked up a hell of a lot in a short space of time, it wasn't enough. I failed my probation, and was kindly given another month to catch-up. But I suddenly realised I was a long way off and already felt like a burden, I felt like a disruption on a very patient, but small team. So I left, sensing I probably wouldn't make another month.
It was a sad time for me, I'd met some really cool people, some of whom I still talk to today. But I learnt a very valuable lesson: I know f*ck all about programming.
I went away with my tail between my legs, determined to fill in the gaps. As the months passed in my newer, somewhat easier Wordpress role. Where I learnt a hell of a lot also. I continued to work on those areas and within about a year, I knew just about everything I'd have needed to have known, to have kept my head above the water in my last job. But something from that stuck with me, never, ever assume that I know enough, or that I'm wise enough about a subject to claim any great level of confidence.
But then I found I had the opposite problem, I became to worried about putting my neck on the line. I stopped blogging because I took criticism (which the internet is absolutely full of, fair or not, polite or otherwise) badly. I took it personally and felt as though I wasn't qualified to write about the subject.
Still today I grapple with raising my voice, and defending my positions, some of which I'm passionate about, have studied and used in great detail, yet still unsure in my own level of understanding.
Knowledge is humbling, knowledge allows you to see the vastness of your own lack of knowledge, simply because it introduces more and more concepts. It's exponential, you learn one concept, and it introduces you to two more you don't know, and then 2 more, and so on. Until you stand back and see almost nothing but 'stuff' you don't understand.
I think Betrand Russell summed this up perfectly.
I was very much in the 'fool' category, and often still am.
Another more recent example. I've been learning Go in quite some depth over the past year, it's my language of choice now, I fell in love with it pretty quickly. One reason was Go's concurrency model, it was simple, yet incredibly powerful. I wanted to understand it more, I came across the adage "Share Memory By Communicating". So after some digging into that phrase, I came across a somewhat legendary computer science paper from 1978 'communicating sequential processes' by Hoare. I bought the corresponding, more detailed book from Amazon.
Not a word of it made any sense, it was written in some strange, alien language. Which turned out to be 'calculus'. After about an hour of Googling, I found myself on a GCSE maths revision website, with the sudden, sinking feeling 'oh my god, I don't even understand the level of maths taught to 14 year olds!'.
Previously, this would have been a big knock to my confidence. But what I've learnt to do, is to embrace the new experience to learn something which will better my understanding. Okay, so it's a little embarrassing to admit that, as a 27 year old Software Engineer, I probably couldn't get my GCSE maths (still). But instead of shame and embarrassment, I saw it as a whole new approach and area of knowledge, there, waiting to help me.
In other words, seeing missing knowledge as potential, not failure, is the difference between turning ignorance into a success and not a set-back.
P.S. I actually understand some of that book now, and am 50% on whether or not I could pass a GCSE maths exam.