My background is not typical of a Systems Administrator. I started my life in IT as a marketing intern, the some time doing basic server administration and Desktop support; to now find myself working fully on Linux Servers. It's a long way from the Psychology and Business degree that I graduated with back in June '07.
I've never been a bedroom hacker, despite very much wanting to be. The majority of my time spent learning has been during waking hours, in the office. I've had a few projects that I've taken home with me, but due to my limited background, I found myself limited to fixing things other people had written, rather than writing stuff from scratch. I'd mostly learnt how it shouldn't be done, rather than how it should be done.
Ironically, this has meant that until now I've been fixing other people's problems, tidying up others designs, and adding my voice to conversations pointing out logical discrepancies and extending other people's ideas. This is one of the great freedoms that Open Source software has given me - I don't have to write anything from scratch - someone else has already done it for me.
However, I'm acutely aware that sooner or later my weaknesses are going to land me in hot water. It may be a casual observation, but most of the time I come across something that completely baffles me, I'll come back to it in a couple of weeks after either doing a bit of research on it or playing with something similar - and I get to understand it. There have been a few moments when I've looked back at decisions I've made and in the meantime have new knowledge that would have made the decision a "no-brainer", when at the time it seemed like a 50/50 split.
The more I experience these moments though, the more I realise that it's all about growth, and experience. I'm sure there are many CS graduates or other programmers out there who have got certain gaps in their knowledge that get filled over time. I'm sure there are many who are going through the same angst that I am, wondering "am I good enough to be doing this.. have I missed something?" In hindsight I'd say that's a brilliant attitude to have, because being overconfident about one's ability is likely to end you up in an even bigger spot of bother.
I guess the key is to never fool yourself into thinking that you've learnt enough. I've got a couple of books in the post, covering 'Pragmatic Programming' and 'Design Patterns' - I'm sure they'll provide me with the material I need to keep plugging my gaps, and improving my technical thinking, whether I end up moving into programming rather than Systems Administration, or some other field entirely.