Well, it finally happened: I got a developer job. It’s not my dream job, but it pays well (more than I was expecting), will let me build some cool stuff, and is a stepping stone to an amazing future. It is an entry-level developer React Native developer in a large trucking company. The downside is that I have to move to Fayetteville, Arkansas. [sigh] I don’t know, I’m a “look on the bright side” kind of guy. The cost of living is amazingly low (about 1/3 of San Francisco), it’s beautiful country up in the Ozarks, and having fewer distractions will be good so I can focused on getting up to speed on my coding. Unfortunately this means I’ll be away from my wife for at least a year, but there’s skype and flights are cheap.
Some of you may remember my difficulties with this job some weeks ago, an unexpected hair test for drugs. Being from California where weed is legal, this presented a problem. The company is very conservative and would not budge. But the manager and the recruiter worked out a scheme where I work as a contractor through the recruiter for three months (when I’ll be clean) and then I can get hired on officially. The contractor only requires a urine test, which I passed. I lose some of the benefits for the three months, but they gave me a slight pay boost to offset that. I still think this is BS (again, I have no problem being clean while I work for them, but don’t think it’s fair for legal activities I did before I even knew they existed.) But still, it was nice of them to find a solution – it would have been much easier for them to go to the next guy on the list.
It’s been an amazing struggle. I have some semi-pro coding experience in C for 6 years from 20 years ago, and began FCC at the beginning of 2017.
For this particular job I was contacted by a recruiter. I did a phone interview with the recruiter, then a coding test on Hacker Rank. The test was a few not too tough JS algorithm challenges, and some general internet questions (like HTTP, etc.) I aced the JS stuff and did pretty well on the internet stuff. There was also a section on some low level Android stuff and SQL. I guessed at that stuff and got a few. Amazingly I got one of the SQL scripts right.
About an hour later the recruiter called me saying that they were considering a 6-month contract-to-hire. I said probably but I’d have to check with my wife first, because that was outside the parameters of what we’d discussed. (It’s a bit of a risk because I have to quit my job and move.) And then I got a call back from the recruiter an hour after that saying that they were now prepared to offer me a direct hire, the original things discussed. I accepted. Then that mishigas with the hair test. On reading the offer letter, there was mention of a drug screening, but being from California, it didn’t even occur to me that anyone would care that much about a little weed for a programming job. But it’s an old, conservative company and their drivers have to do a hair test so I think they just apply that to everyone.
Some thoughts on the hiring process in general.
- Get a portfolio site. A lot of people liked that I had projects they could see.
- Work on your resume. This is probably the part I did the least well.
- Have a cover letter. It would be best to custom tailor the cover letter for each employer, but in reality, when you’re applying to 10 places a day, this isn’t possible. At least have a nice, generic cover letter. If you have a job you really, really want and think you have a shot at, then you can customize it.
- Have three copies of each – pdf, Word (docx), and plain text. There will be sites/people that specifically only want one.
- Build lots of projects. Practice talking about them with enthusiasm.
Other things would be the usual:
- Nurture relationships. A lot of jobs come from people you know. The more developers you know, the more opportunities.
- Build, build, build. Learn to do open source. Work on algorithms.
- Practice answering questions and talking about yourself. I got several compliments about me being able to talk and be personable on the phone. One recruiter interviewer even called me back to let me know they would be hiring someone else but complimented me on the path I was on and said it was so nice to talk to someone that wasn’t “like talking to a piece of wood”. When you’re on the phone, your voice and tone are doing a lot of the selling. I have a few standard jokes. Like when I’m coding for them and I make a stupid mistake, when I find it, I chuckle and say, “You know, the problem with computers is that they always do exactly what you tell them to.” This always gets a little laugh and it lets them know that I can laugh at myself. My goal is to convince them that I would be a fun guy to work with – sometimes that can be the deciding factor.
- Keep expanding your knowledge. In that last month, I had three interviews that got to the late stages. Each one was for React Native. They were impressed that I’d taught myself and had an app on the Google Play Store. For this place, I originally applied for a React position, but when they saw React Native on my resume, they steered me towards that.
- Wear rejection with pride. The only people not getting rejected are the people not taking chances. Most people are going to get rejected a lot before they get accepted.
- Be confident. Too many people get to worried and feel inadequate. I never lied about what I know and don’t know, but I let them know that I was looking forward to the challenge of new techs. Find a balance between confidence and humility.
On confidence: The other day I overheard my managers talking about an interview they just did. They explicitly didn’t like that he didn’t sound confident. They admitted that he probably had the skill for the entry level position, but his lack of confidence was a concern. Think about that – the thing keeping him from the job isn’t his skill, but his lack of confidence in the skill he has. Lesson: Don’t be too self-deprecating. Be confident in what you can do. Don’t lie about what you can do and be willing to admit what you haven’t learned, but also be confident about what you’ve learned and be confident that you can learn what you need to. Don’t just be confident that you can learn new things, be eager to learn new things.
A word on recruiters: I break them down into three categories.
- Recruiters that work directly for the company or have a special relationship. These are the best. This is the one that got me the job.
- Recruiters that are hustling lots of different positions for lots of different companies, but kind of know what they are talking about. These guys can be a little bit of a pain but can’t be completely discounted.
I just finished my first week. They were really nice and let me spend the first week just getting ready. They gave me a new Macbook (which I’ve never used before) and had to spend a day getting it set up with all the software I needed. I spent most of the rest of the week doing tutorials and research about some of the new techs I needed. They gave me my first assignment this week for the next sprint, but it’s a pretty straight forward one and they made it clear that I shouldn’t feel too pressured. They’ve been very supportive. I have a nice little cubicle with two large monitors. I have to learn some new thinsgs (Redux Saga, Jenkins, etc.) Eventually I’ll get to learn the rest of their stack – Java and SQL – but they’re patient. It’s scary, but they know where I am as a coder and selected me anyway, so I’ll put faith in that. I still don’t have a place to live – I’m in a hotel at the moment.
A few things that I wish that I’d realized when I started – things that are obvious to experienced devs but took a while to sink into this old man’s brain:
- This is not a sprint, it is a marathon. I came into this expecting to work hard for three months and land an entry level job. That was of course, ridiculous, but there are a lot of people on the internet saying exactly this.
- There is no direct path. I thought it was a simple thing, like a checklist, learn this seven things and you’re good to go. Nope. It’s a complex mosaic of complementary and overlapping techs. Every time you think you can see the scope of what you need to learn, there are another three techs you need. FCC offers a pretty good path to the MERN stack, but it won’t be enough – there will be other things you need to learn.
- Just learn. Don’t focus on getting the job, focus on learning. If you keep learning, eventually your skill will catch up with the job market.
- Don’t just learn code. Also learn about ancillary ideas. Read a book on agile. Find a book a book on UI. Take one of the free introductory CS courses. Find out about startup culture. Even having a basic knowledge on things like this will make you seem more knowledgeable and confident.
Well, that’s my story. I’ll probably be a little incommunicado for a few months while I get up to speed but hope to be back to share more of what I learn.