Developer by accident
I’ve been working as a web developer for ~4 years now, but unfortunately (or maybe not), I don’t share the same background of the majority of programmers. I didn’t start programming at age 8 and I’d say I was not intended to become one.
For this and other reasons, since the beginning of my career, I’ve always felt that kind of feeling you have when somebody tells you a joke you don’t get, and you start giggling for no reason while looking away from the other person, blushing and praying that he/she won’t ask you “Did you get it?”.
The Commodore 64 myth
As a kid I wasn’t so curious about technology. Super Mario and Nintendo had been around for few years when I was born in 1991. My brother, 8 years older than me, was into videogames and computers much more than I was, and way more than I would have been until my 20's. I used to play some games like Wolfenstein 3D, Pacman and almost anything by the glorious LucasArts. Our parents bought a Compaq Presario 5528 and that was some sort of milestone. My two brothers started to assemble/disassemble computers and pieces of hardware they found in flea markets. At that time, I still had not much interest in those things. I’ve had some consoles too, in my childhood. The SEGA Megadrive, my favourite, the Playstation 1, the Gamecube.
I wasn’t the kind of kid who unstoppably unmounted things to see how they worked. I was just OK knowing they worked. I never had a Commodore 64, and no, I never tried to program a game until I was 23.
Despite this, I was pretty good in computer-ish stuff during highschool. I knew how to find programs on the web, install games, setup wifi, and all the other things that sooner or later somebody will ask your help with. I also knew something about HTML and CSS, like changing colors of the page and setting the font size. I watched Hackers several times. It was good to feel like a part-time nerd. Me and some friends formed a band, and I was completely into music. In 2010 I graduated from highschool and started studying Modern Literature in college. I wanted to become a journalist, so it seemed like the best choice to me.
Getting the mask on
I quickly started skipping classes, spending my time at home sleeping, smoking cigarettes and watching tv series. My brother is a developer too, and he used to work at home at that time. His 27" iMac was always on, even at 4 in the morning, glowing in the room with an attractive light. People used to call him on Skype and I could hear conversations full of super-techish words like RESTful, HTTP, server, AJAX. For some months I looked at that screen with curiosity.
During the first year summer holidays, I got back to my hometown and started looking at iOS development. I had absolutely no clue about development whatsoever. But I had an iPhone 3G as a phone and I kept reading of people making tons of money out of crappy apps on the App store. I was sold. Installing Xcode, typing some esoteric commands in the terminal, reading files full of meaninglessness. It was AWESOME.
This was the second milestone, I guess. Two months in the “iOS development” and I had no clue whatsoever about anything, anymore. I started staying at home rather than going out for a beer, reading tons of documentation without even understanding some words, but it didn’t matter. I was (not) hacking. I was like those guys in Hackers.
Back to college, I talked with my brother about my new “skills” and started asking things about his work. Objective-C hit me so hard I dropped out of iOS. It was pretty frustrating. I was introduced to web development. PHP and JavaScript were the must-have tools, so I started writing an enormous amount of forms, writing 30-lines functions full of jQuery calls and copy-pasting code snippets from StackOverflow. I finally got my first internship as web developer. I got the first recognition after months of 14 hours of programming a day.
But I felt it came too early. I was not ready yet, but pretending to be so.
It was OK by the way, because I was in a friendly environment, and people there helped me a lot. I discovered GitHub and open source world, and it was amazing, because it felt like having hundreds of thousands of friends ready to help and provide you golden solutions to almost any possible programming problem.
I felt I owed something to those brilliant people who spent several hours a day on awesome projects that I used on a daily basis. It’s not about money. It’s all about progress and mutual help to bring something great and useful to this world. It doesn’t matter if you commit a fix for a typo in the README of an awesome project, or if your commitment is a concrete piece of history. People will thank you forever for that commitment.
Awesome people like TJ Holowaychuk, Aaron Patterson, Steve Klabnik, are great inspiration and look like heroes to me. I look at their projects and repositories like a kid in a candy shop. At the same time, I can’t help not feeling a bit of envy and frustration. They are maybe some of the kindest people in the world, but they’re also the goodlooking-extremely charming-football geniuses of this programming high school which is the open source world, while you are “that low and skinny guy” wearing dark hoodies.
Open source developers are one of the finest species, and maybe the least judgmental people on the web. But still, I sometimes feel ashamed of even thinking about committing to open source projects, because people maintaining those projects know what they’re doing, while I have a really vague idea of what I’m doing (in the best case scenario).
Why are they so good? They roll out projects I’m not even able to read properly, and fully understand. They solve problems that 90% of developers out there (me included) have to face everyday. And they do it in an elegant and perfectly conscious way. If a line in the codebase is written the way it is, there are tons of reasons for that single “count” instead of “size” method in that line. I don’t even know the difference, so I just give up and accept it.
The truth is, I shouldn’t give up when I don’t understand something. And actually, I don’t.
Am I the master or the slave?
Staying in my comfort zone (== not committing a single comma to any opensource project) is the best weapon I have to fight this fear. As long as you don’t mess anything up, people won’t think you are a newbie. As long as you don’t watch the other person in the eyes, he/she won’t ask you “Did you get it? (== lolwut dafuq bro can u progrem??)”.
I often prefer to look at the party from the outside, rather than being the drunk guy weirdly dancing in the center of the room.
The other weapon I have to fight this fear is the trust people have in my work. As long as people trusts you and what you’re doing, you’re in charge of fulfilling the expectation. You could be the least self-confident person in the world, but if you’re paid to do a job, you’d better find a solution and do it. I found out that sometimes (very often in my case) it’s easier to get trust from other people than from yourself. Self-confidence can be pretty hard to reach. You can find yourself thinking “I must be one of the luckiest bastards in the world, everything went ok, again.” several times in a row.
It’s hard to say you’re good at what you do if 80% of your codebase has been written from other people, the good people, the people who knows exactly what they’re doing.
The impostor syndrome is a fact. And I think it’s pretty common among programmers. We’re living in a period of great changes, especially in the job market. The huge switch from the analogic to the digital way of working in most of modern jobs brings a high level of competition. Recruiters can look up your GitHub profile to check your skills, and a green calendar is much more effective and appealing than a gray one. And if you get a good job as a developer, there’s a good chance that you start asking yourself if you deserve that job.
It’s a question I’ve been asking to myself way too many times. Having such good programmers in the opensource community doesn’t make any other developer a newbie or an incompetent.
When revolutions like the one we are experiencing occur, some men are inevitably in charge of inventing the wheel, while some others are in charge of making a good use of that wheel.
This is particularly true when you’re a developer: the process of making and crafting a product leads to an inevitable satisfaction.
Even if you haven’t created every single cog of an engine with your own hands, the final result is a working engine, and that’s the only thing that matters. And maybe, the engine works the way it does because you were in charge of creating it, as a whole or just a small part.
Getting used to this feeling was not easy when I started my career, and I still have some doubts about my actual skills when I sit at my desk. At the same time, a great lesson it taught me was to just accept that as long as people trust what I’m doing, I can and must be confident enough to build something good and unique, and bring something new to the world. Even if it’s not the wheel.
Learning to swim
The most effective way to come out of this situation, by the way, is to just face it. If you don’t know how to swim, the best way is to get thrown right into the water. You’ll find a way.
I recently heard Zach Holman talking about preparing and holding a speech at a conference a few weeks ago, and he said one of the finest and most simple truth.
People are just fine.
There are trolls, you can even find some among your audience. But most of the time, people are not douchebags, and they’re not eager to judge you.
The only thing I needed to do was to expose myself, and getting out of my comfort zone.
Once I started talking to people, without pretending I knew something I didn’t actually know, I found myself in some of the most exciting and friendly conversations I’ve ever had. Nobody ever made fun of me if I said “What the heck is that?”. Developers usually react to the question by just explaining what you don’t know. Talking to people around me was the first (and easiest) part of my “treatment”.
Throwing myself in very uncomfortable situations was the hardest part. Talking to people I don’t know, especially if they are developers, has always brought a high level of anxiety. That’s why I decided to send a call for paper for the RubyDay 2015 here in Italy. Forcing myself to face challenges like this is the best way I have to convince myself I’m not an impostor. Getting tangible recognitions and feedbacks from other human beings is the most effective way to stop thinking of myself as an impostor, and start thinking of my work as a valuable contribution.