I Am a Bad Software Developer
The last four months of my life have been spent in the pursuit of getting to know myself better. It all started about seven months ago when I was working at a job I didn't hate but I wasn't happy at. I couldn't put my finger on exactly why I felt the way I did so when a friend came to me with a job that offered twice what I was making and the opportunity to work on open source software I jumped at the chance. This is what I learned:
I am a bad software developer.
I walked away from that awesome gig after three months. It was a contract-to-hire situation and I got wind of some sort of internal political struggle at the company that I wasn't invested in battling. I wasn't any happier and I still wasn't unhappy. flygresor till hong kong I just didn't find anything particularly challenging or interesting anymore. So I decided to take some time off and get it together.
I planned my sabbatical carefully so as to not risk my family's financial outlook. I had paid off my debts and had enough money to take 4-5 months off of work. I created the cash-flow spreadsheet, budget, and came up with a plan to take two months off completely, one month to interview, and the fourth month would be a buffer in case interviewing would take longer than I had anticipated.
I am now in the buffer zone and have interviewed with close to ten companies to date. I have not been offered a single job and have not made it past the technical interview in most cases. I am a programmer. Until recently I had believed I was a good programmer. However in an industry where hiring practices have adjusted to filter out the plethora of bad, unqualified candidates I've found it rather difficult to consider myself a good programmer any longer.
When I started expressing my anxieties to my friends and colleagues (most of whom I consider more experienced and intelligent than myself) they assured me that I was reducing the problem to terms that were far too simple to express the complicated reality I found myself in. These are people who have personally reviewed my code, hired me for previous jobs, and have a good idea of what it was like working with me. They had nothing bad to say about my work history, the quality of my work, or my skills as a programmer. I wasn't a bad developer, they would say, I was perhaps just bad at interviews.
If I was only faced with a handful of rejections I might have believed them. However I have received nothing but rejections so far. And only twice have I made it past the first technical interview. If I had at least one or two offers I might believe them but can the system be so wrong as to consistently overlook a good developer even if they are bad at interviews? Conversely isn't it possible that the system does work well and I am a bad developer being kept from taking good jobs away from qualified candidates?
For the record I'm not one of those people who complains that they're not good at something and does nothing about it. I practice code-kata every day before I get down to work. I have a few solutions to some problems on Rosetta Code in exotic languages just for fun. I contribute to open source software regularly. And I've even tried practicing speaking to people and learning how to sell myself better in conversation. The latter I find most challenging as I find it rather difficult to relate to people until I've been around them for a while. The moral of the story here is that you don't get anywhere unless you try.
The problem is that I'm not getting anywhere and it's wearing me down. This is the last month that I can afford to pay the rent and bills without going back into debt and I still don't have any offers on the table. I wanted to move my family out of this rented apartment in an aging condo and into a house with a yard. But it seems like I won't be able to work in this industry again. And I'm afraid that I don't know how to do anything else.
So what does a bad developer look like?
Well my bookshelf is stocked with the classics: SICP, On Lisp, TAOCP, Expert C Programming, Effective C++, and textbooks on algorithms, distributed computing, security, graphics, and maths of various branches. I've read most of them (I'm still digesting TAOCP a chunk at a time). I also frequently read papers and magazines from the likes of the ACM, IEEE, and various PhD's. If you were to judge me just by my reading list you'd think I was university-trained but I'm not. I just like programming and want to know everything that I can.
I contribute to a plethora of open source projects in a range of languages such as C++, Perl, Python, and even various Lisp-like languages. Some of these projects are bits of software that I've used that don't have the functionality I required, were new projects that needed developers to fix bugs or add missing features, or were otherwise ideas for libraries or applications I've found myself needing.
I'm concerned with improving my craft. As I mentioned previously I practice code-kata. At many organizations I've worked at I championed automated testing. I read plenty of books, papers, and articles. I write and try to teach others what I know.
I enjoy mathematics. After reading all that I could about information theory after coming across Shannon Entropy I started delving into Order theory. I really like joint semi-lattices, sets, relational algebra, sentential databases. I don't remember the particulars but I know that for every recursive form there is an iterative solution. If I need to know I have my journals and text books.
And for all of this I still blunder my way through an exercise to write a function which returns a boolean in response to the question of whether sequence A is a sub-sequence of sequence B. I still draw a blank when asked what the magnitude of complexity is for the guests function I just wrote (damnit, of course calculating the permutations of a list is n-squared, but this is an interrogation of the random trivia I can manage to recall and I feel like a deer in the headlights). Any shred of confidence I had has been beaten out of me with every mistake, blunder, and rejection.
At the end of my journey I find that I am depressed, desperate, and fear that I will let my family down. My daughter is going to ask me what I do for a living some day and I will have to bite my lip and tell her that I program computers. And I will have to dodge her probing questions as she gets older and avoid telling her that I do whatever I can to put food on the table. I never achieved much and there's nothing I have done that I'm especially proud of. I just got by as best I could even when the world decided I wasn't good enough anymore.
I am a bad software developer and this is my life.