Or, our hero's story so far, and how I got a job at a startup after repeatedly failing.
This is a long story about how I got where I am right now. If you're interested in concrete advice to improve your own career situation, feel free to read the whole thing for context, or just jump to the advice section.
As I am fond of telling people, I majored in Computer Science because I wanted to know how computers work. I was deeply fascinated and curious as to just how a lump of plastic and metal could do math and run programs (you know, compute). Unlike many of my brother and sister CS students, I did not have dreams of creating video games, working for the government or a defense contractor, or getting a job at Microsoft / Google / Intel / etc. I tried to take as many different CS classes as I could, unsure of what exactly I wanted to do. I spent my last semester of college applying for everything I was remotely qualified and interested in, from developing software at mining companies to systems integration for Navy ships to corporate IT.
I had no idea what I would do next, and wasn't very optimistic about it was going to be. I had finally figured out how to do well and have fun at college, had tons of friends and amazingly great activities like college marching band, how on earth could my first job be remotely enjoyable in comparison?
Shortly after graduation, I applied for and accepted an IT job at a large corporation (large as in many thousands of people and computers). As first jobs after college go, I'm sure there are much worse, and I learned a lot, about business, about the specific scientific domain of my corporation, and about troubleshooting. But, it wasn't really working for me, and here's why:
- Not enough work. Our tasks did not come in at a constant rate, and I was one of the faster people at getting things done. Once I finished, there usually wasn't anything else to do, other than read or sit there. This made me really worried about looking professional when people stopped by, whether or not I would be laid off, as there wasn't always enough work and I was the newest, and just generally took away from any feeling of fulfillment I might have had.
- Being isolated. My office was a cubicle in a huge windowless basement, I was pretty much the only recent graduate, and I generally worked by myself. Not fun.
- I wasn't really using my skills or degree. I didn't feel like I got to make decisions, help improve things, or even interact with the decision makers. I was just implementing plans made by people several levels above me.
On top of disliking my job, I was struggling to make the adjustment from college to work, and suffering from serious depression. (It turns out right after college is a fairly common time to become depressed.) I wanted something better, and I kept reading about how the tech job market was booming. So, I gave notice that I was leaving, planning to jump right into a much better job (as soon as I, um, found another job.)
Having heard nothing but good things about the shortage of people with my skills and interests on the job market, I applied to lots of different jobs, and optimistically sought out the freelancing gigs that would build up my portfolio and give me more professional experience. And... it didn't work. I had a few very small freelancing jobs here and there, and was invited to interview at corporations and startups all over the east coast, but I basically got to stay at my parents house and watch my savings ebb from living expenses and student loans, as well as lose boatloads of confidence in myself. Not fun.
Nearing the end of my savings and the ability to deal with staying with my parents, I began staying at a friend's place, and with their help, obtained an entry level job as a loader at a large hardware store chain. On one level, this job was really rough, involving work starting at 7am, hot and cold weather, rain, moving heavy things, dealing with insane and angry customers, and tedium. But at the same time, I worked with a lot of genuinely great people, who took their jobs seriously, and tried to treat everyone there like family. I also got ridiculously strong from moving lumber, 80lb concrete bags, drywall, and anything else you can think of. In the evenings, I was still job-searching, trying to improve myself, working on side projects such as my website or coding challenges. Eventually, a web startup was interested enough in me to invite me out to Los Angeles to work with them for a week, to see if it would be a mutually good fit. Unfortunately, I turned out not to be quite experienced enough for their still small and scrappy team. However, this experience gave me the courage and drive to commit to traveling to San Francisco and Silicon Valley and finding work as a designer or developer.
Some Really Crappy Interviews
My first week of interviews and searching went pretty terribly.
- Front end developer at a travel startup. Was grilled on algorithmic problems by two different programmers, who were nice, but had very thick accents which made it difficult to understand the problem in the first place. Got rejected the next day.
- Interview with a social gaming company, for a front end web developer. Despite the position description, they were apparently actually looking for someone with desktop application UX/UI experience exclusively. Awesome.
I felt like complete crap, and really really wanted to give up, but I somehow decided to spend the weekend pouring my negative feelings into preparing for other interviews, brushing up on different things I had worked on, and making sure I would not be nervous or surprised in any other interviews. I repeatedly filled the chalkboard in the room I was staying in with code, until it was as natural coding on the computer. I had two more interviews scheduled, one Monday evening, and one more later in the week, and I was determined to do well.
A Better Interview
As soon as I got off the train in San Mateo, I felt better. It was warmer and cleaner than San Francisco, and I was feeling positive. When I got to the interview, I liked the office and the people I talked to. They took me through some technical Ruby on Rails questions, asked me about different projects I had worked on, asked me to explain things and give opinions on design, had me code and plan things on the white board, and even work on a sample Rails app for them. I left feeling pretty good about the interview, and the next night I got a phone call with a job offer. I later found out that they were impressed that even though I hadn't had a job with Rails before, I had taught myself a lot about it, and they liked my energy and attitude.
An Awesome Job with an Awesome Team
So now I have an awesome job with a team of cool people. I feel very lucky to have extremely flexible work hours, plenty of vacation time, free snacks and drinks, and good computer equipment to work with. Not having to worry about exactly when I will get to work, or taking an hour for an appointment as long as I get my assigned work done is really amazing. The work I do is interesting, challenging, and makes our product better. Every time I interact with our customers, I find out how much they like our product, and how much it improves their jobs and helps their companies.
So, if you're struggling like I was, here is the best advice and info I can give you:
Learn and build whatever interests you, and whatever you can.
It's almost a cliche by this point, but keep building things. Try a new framework in a new language. Rebuild your website. Do some graphics or animation programming. Pick a popular site and try to make an improved design (but, please don't post it publicly, unless you really want flamed). Design things for yourself, and look for opportunities to build sites for friends and other contacts.
Craft your own website
If you're interested in working on the web, how can you not have your own website??? It is vitally important to be able to present your competence and taste on the web. Put up examples of things you've built.
Design an awesome resume
I don't like the concept of resumes as a mandatorily ugly and boring document. Make your resume reflect you. If you have design skills, put them on display. If not, at least use consistent formatting and a tasteful font. Be honest, and don't exaggerate your experience. My resume in particular aims for a conversational style. I spent a long time editing and re-editing my previous job descriptions, to get to the core of what I did there. I say how I got started in web development, and discuss how and what I like to work on. Since I was looking for design and development roles, I built my resume as a responsive HTML5 document, and hosted it on my website. It was a lot more fun than wrestling with a word processor, and I got very positive feedback on it when interviewing.
Work with a recruiter, or several
People have mixed opinions about recruiters, but if you are having trouble, it's great to have someone with an actual incentive and experience to find you a good position, and to broaden your search. I would never have found out about the company I ended up at without a recruiter sending me their way.
Get to your target city
One way to demonstrate your initiative is to be there, in person. Save up and get out to San Francisco / Silicon Valley / New York / Raleigh-Durham / Austin / Los Angeles to meet people in person, attend tech meet-ups, and get a feel for the area.
You studied for college exams, why would you not study for the even higher pressure situation of a job interview? Would you rather say in an interview "well I think I used that once but I don't remember most of the details", or have your experience and knowledge be in the forefront because you can actually give an in-depth explanation, nail the details, and show your energy?
Write code on a whiteboard, design on paper
Coding on a whiteboard can be awkward and uncomfortable for even an experienced coder. We typically don't have the best hand-writing, and it can very a very nerve-wracking way to answer a coding question. So, practice until it is familiar. If you're looking for UX or design gigs, be prepared to sketch a widget or interface on paper.
Use your connections
Talk to friends and friends-of-friends and anyone else who will help to get informal recommendation, job leads, or even a place to crash while you are interviewing.
Ask for help
If you see blog posts or comments from people who have made it to where you want to be, it usually doesn't hurt to send an email asking for advice or specific questions. It's nice to know that your goals are entirely possible.
Don't quit 'till it's over
Halfway through my two weeks in San Francisco looking for a few jobs, after a few bad interviews, jet lag, bad weather, and constant culture shock, I was extremely close to saying "f### it" and grabbing the first flight home I could. After calming down a little, I put my energy and bad feelings into preparing myself for my interviews, studying and resting through the weekend, in time for the Monday evening interview with the company where I ended up getting a job.
Getting here was not easy. I had no guarantees anything I was trying would work. As I found out the hard way, a lot of the competition and demand for developers and designers is for mid-level and up, and not so much for junior and entry level workers. This is almost never said, but it is true. I took a big gamble when leaving my job and dropping the majority on my savings on a speculative trip cross country to an expensive city. Your best bet, in my opinion, is to get as good as you can at something specific and in-demand, and demonstrate that you're a person who will learn quickly and be enjoyable and productive to have on the team.
Lots of people helped me, so I am very up for helping you, aspiring hacker or engineer. Feel free to email me at email@example.com with any getting-a-tech-job related questions.