For sufficiently generous interpretations of "Daily"

Letter to an aspiring developer

Posted: April 5th, 2014 | Author: | Filed under: Career advice, Programming | 21 Comments »

Nearly 18 months ago, a person emailed me out of the blue asking for advice on breaking into software development.

He was full-time student, trying to start a career in software development, but was paralyzed with worry of making the wrong choice.

My response was applicable, I think, to anyone trying to get into software, and I’m going to leave it largely unaltered.


I want to offer some thoughts based on what I see as main themes:

1. Getting your foot in the door in software development

I had to spend 2 years taking non-dev jobs, with the express understanding that my goals were to become a software developer, before I was able to assert my role in one job as a developer (after a pretty fierce battle to do so).

Just about any dev job you get is going to be just fine. Seriously, you can relax about that. The first couple are supposed to suck. If they don’t, you won’t know what you don’t want in your own company someday.

That’s not to say you should necessarily take the job in front of you, I’ll address that in a bit.

2. Setting long-term goals

You know how you have no idea right now which direction to go in? Get used to that feeling. Right now, a bunch of Rubyists are nervously looking around as they watch their platform stabilize while JavaScript takes off like a rocket. Nothing is set, nothing is guaranteed, and the notion of long-term goals is flat-out stupid.

It’s crazy. Eleven years ago my job was to get lunch for people, and I decided I wanted to be a graphic designer. So I got a Mac and got really good at photoshop and illustrator. Then I got a video camera, learned Final Cut Pro, and decided to be a video editor. Then I got MCSE certified and decided to be a sysadmin. Then I started writing website copy and got into marketing for 5 or 6 years. Then I decided to try to learn to program and here we are. I defy anyone to look at that and determine a pattern that could tell me what I should do next.

So no, none of us know where we are in 5 years. But what you do want is a platform. You want to have a set of internally-consistent values that, when followed, add up to the kind of person you want to be, doing the kind of things that make you happy.

Maybe, at your age, all you can hope for is to have lots of different experiences so you can observe yourself in lots of different situations to learn the things that excite and motivate you. I don’t know what that translates to when some douchebag asks where you see yourself in 5 years, but that question is dumb.

The only thing I know for sure is that 5 years from now there’s basically no chance I’m working for someone else. And I know I like helping other people understand their own capability. And I like building things. And I like technology. So advancing those things help me build my platform. At some point in the future, these things will converge in surprising and unforeseeable ways.

3. The role education plays in your career and future opportunities

I am SO the wrong guy to trust on this topic, but here are my thoughts. I dropped out of community college. It has closed the door on exactly zero things I want to do with my life. YMMV.

I work for a CEO who wants to only hire CS-grad developers. If you want to do hardcore shit, a CS degree is often the first hurdle hiring managers will set up. But here I am, college dropout, contributing alongside my CS-educated teammates. I’ve not run into a situation where someone has said “you have all the right experience, if only you had a degree”, while grads actually are likely to hear the opposite from time to time.

If I need to tell you why a bubble sort is inefficient or implement a binary tree search algorithm, I’ll just keep borrowing that knowledge from people who paid good money to go get it.

I’ve got a real problem with formal education in today’s world, and I’m sad to say that when it does matter, it’s about the piece of paper. Schools are no longer the institutions that push the boundaries of what is possible (they can no longer keep up)… that’s going to happen at your workplace.

Here’s what’s crazy to me: You’re becoming book-smart at school and street-smart on your own time. How in the world does that not make you completely unstoppable? (Hint: it does make you completely unstoppable).

4. The type of culture to select for

The underlying question is: how “you” can you be? You’re always going to deal with cultural values that don’t match your own in various degrees, but my time at my last employer felt extremely constrictive in that regard. It was like wearing a cultural straitjacket.

And you know what? It was totally fine. Glad for the experience. Wouldn’t do it again, but I have no regrets.

But developers are a lucky bunch, and get to pick the kind of places they want to work. You’ll soon be in a position to say “no” to a lot of places, and I’d recommend you evaluate culture on this alone: How comfortable are you being exactly yourself in this space? There’s stuff you value and do automatically, is it rewarded here? Or do you have to sort of pretend to be something you’re not?

5. Building your mentorship

I’ve received a bunch of advice by asking one-off questions at local meetups. But it all pales in comparison to that first couple of jobs. You don’t have to announce that you need a mentor. You’ll just work with smart people and steal fire from the gods.

With dedication and patience, this will provide a mentorship to you that will rival anything you could have done by taking one of these bootcamp-style “become a developer” programs.

It’s up to you to stitch it together, but you’re doing all the right stuff.

6. Practice shipping

When I was just getting started, I felt like I had to know everything about everything, so I could ship something impressive. This is ego and it is folly.

I remember a meetup where a new developer demoed his first public work, and I had to stifle a chuckle, it was so naively built, simple, and unattractive. And then I bit my lip in shame when everyone heaped praise on him, because he showed up and shipped software.

If you don’t yet have all the skills you need to ship your idea, you’re thinking too big. Start smaller. Don’t worry about the design. Don’t worry about doing it perfectly. Don’t worry that it’s unoriginal, elementary, or even embarrassing.

You’re on the second rewrite of your sample app? Did the first one work at all? Ship it. Did it almost work but not quite? Ship it. Was it ugly? Ship it. Untested? Ship it. “If it doesn’t embarrass you, you shipped too late.”

That lesson, the ability to let go of perfection and get something into the world, scales up as you become more broadly skilled. Learning that is vastly more important than learning proper CSS technique or TDD. True story.

7. College degrees are not for job applications

I very, very rarely offer blanket-statement advice to people. But here is some: you should go to college to learn and do the things that fascinate you. Period.

As time marches on, when it’s time to wave your piece of paper in front of someone, it matters less and less what that paper is for. Most of my favorite developers are former designers and writers. These are people who approach code from a variety of philosophical angles, rather than a predetermined set of problems that need the right algorithm to be solved.

You’re obviously a sharp written communicator, and that bodes well for you as a developer, as they’re strikingly similar pursuits in many ways. More importantly, communication skills open doors for you in areas of software that are typically closed to engineers who prefer to let their code do all the talking for them.

College is not the networking opportunity that it once was. That’s all extracurricular now due to meetups, groups, Twitter, etc. If CS continues to fascinate you, go crazy, but if you’d rather go into the humanities, philosophy, accounting, whatever, please do what your heart dictates and don’t put your as-yet-undecided career goals in the driver’s seat.

Lastly, a note about tailoring your degree to get jobs:

HR people post jobs. HR is a relic. HR is a joke. HR speaks buzzwords, degrees, and checks off boxes. Prerequisites like years of experience, technology-specific requirements, and even college degree requirements are a lie.

You’ll get damn few jobs through the traditional Apply => HR Screen => Interview process. Maybe your first couple. But it’ll snowball from there and it’ll all be your existing body of work and your reputation, until the only people that hire you are people that want just exactly you in a role that they know will suit you perfectly. So it’s pretty shortsighted to tailor your expensive, multi-year, potentially mind-expanding educational experience to please some resume-shuffling HR rep at one or two companies you’ll only be at for a year.

8. Switching jobs

I think a given developer is 6-12 months from being proficient in any language/framework of their choosing. Don’t let 5-to-10-year veterans intimidate you: many of them have had the same year of experience, 5-10 times.

In fact to prevent this, you should plan right now to switch jobs frequently (every 18 months or so), at least at first. You’ll watch your experience diversify and your pay jump up ferociously. (But don’t get addicted to the money… it levels off after that and studies show over $75K actually decreases happiness.)

So in essence: Ignore money, and pick the place with smart, helpful coworkers and a technology stack that you want to develop your skills in.

A note on self-effacing honesty:

What people refer to as “honesty” or “humility” in your cover letter (and your telling people in no uncertain terms that you’re “junior” in need of “mentoring”) is actually pessimism. Pessimism is a precursor to depression. Many of my bouts of depression can be directly traced back to prolonged moments of pessimism, masked as “honesty”. Go buy the book Learned Optimism. Seriously. Do it now. The book won’t solve all your problems, but it will open your mind to the idea that you have the ability to change these thinking patterns.

This self-effacing form of pessimism is one of my big downfalls, even up to this very day and minute. If you want to get a 10-year jump on me, start projecting an undeserved air of confidence, because you deserve it more than you currently know.

This advice is for me as much as it is for you: Stop apologizing for what you don’t yet know, and take some damn credit for being bright and hardworking enough to know it in the future.

I’d suggest trying to load that into your brain and taking another crack at your cover letter. You’re a startlingly bright dude, and I’m delighted that you don’t yet see your absolutely limitless potential, because I’ll get to steal some credit when you’re a big famous programmer.

There’s a lot more I’m sure I could say, but I’m too tired to think straight right now. I’m glad to know you and excited for your prospects.


To him, these choices were life-altering. Choosing one job over another, being rejected by potential employers, pursuing higher education… all these seem like life-or-death situations in the moment, but with the benefit of time & an external perspective, a person can relax about most of it.

This person I barely knew at the time is now one of my closest friends, and I think the advice was helpful. With the benefit of 18 months of additional hindsight, I’ll doubly endorse the words above for any aspiring or new software developer.

If you’re looking to break into software, hit me up here or on Twitter, I’m curious to gather people’s experiences and questions for a proper blog post in the future.


  • Pingback: 152 RR The New York Times and Ruby with Jacqui Maher

  • thatrubylove

    Excellent read. As a high school dropout who has been coding since I was 13…. I am older than 36 now, I can relate to doing a lot of these things myself when I was young.

    I spent 2 years at Intel for instance. It was not fun, but I was surrounded by smart people that I learned a lot from.

    Thanks for writing this up!

  • http://briandouglas.me Brian Douglas

    This article is a big boost of encouragement. I have spent the last 6 months learning Ruby on Rails and completed 2 interviews this week. I look forward to eventually landing my first dev job and thank you for writing this.

    • http://brandonhays.com/blog Brandon Hays

      The “blowing the interview” post is for another day, but I hope you get to experience an interview that is much a nuclear meltdown as my first couple were… it’s a rite of passage.

      Congrats on getting out there, it’s very much within your grasp. Thanks for caring enough to comment.

  • Kiy-Hong Tang

    Hi Brandon,

    Thank you for writing such a great piece. I myself began learning to code since August 2013 and have been thoroughly enjoying the challenges and puzzles it brings each day. My partner has recently began dipping her toes into graphic design and she asks whether if you could recommend on any Photoshop/Illustrator reference materials.

    Very much looking forward to you future posts.

    Thanks

    Kiy

    • http://brandonhays.com/blog Brandon Hays

      Thanks Kiy! Congrats on learning to code, sticking with it this long is tough and means you’re well on your way to building cool stuff to share with others. I learned Illustrator by accident in college (long story) and learned Photoshop by just messing around with things and reading blog tutorials 10 years ago, so I sadly don’t have much input on picking it up. I do like picking up techniques from Smashing Magazine from time to time.

      Thanks for checking it out, and happy coding :)

      • Kiy-Hong Tang

        Thank you for the useful information- Keep up the fantastic work!

  • http://www.thehopefulwebdev.com zkay11

    As Brian said, this is a great confidence booster for those of us who have not followed the traditional education/career paths. Thank you for writing it, Brandon.

  • Amit Lamba

    Hey Brandon, on Amazon you mentioned that Practical Object-Oriented Design in Ruby was one of your top 5 books. Since we’re talking about becoming a developer, what would be your other 4 books that complete your top 5? Thanks!

    • http://brandonhays.com/blog Brandon Hays

      I loved Learn to Program by Chris Pine, Beginning Ruby by Peter Cooper, Eloquent Ruby by Russ Olsen, and Agile Web Development with Rails. If you can’t tell, I’m pretty Ruby-centric ;)

      • Amit Lamba

        Thanks Brandon! Will definitely look into those books even though I haven’t taken the plunge into Ruby and Rails yet. :)

    • Jesus Bejarano

      OMG, i cannot belive that this book is mentioned here, is my favorite book about OOP and software design of all times, i read it about 3 times already :D.

  • Saeed

    Amazing!
    thanks.

  • Jason S.

    The project gap is the biggest hurdle, IMO. The degree sort of compensates for that, especially if you have internship experience.

    By project gap, I mean learning all of the language words and grammars and then figuring out what to put together. Some people (me) are inspired and audacious enough to try to build an entire user auth system for a video game that has a lot of spying and IT warfare behind the scenes. Projects like that knock you down a few notches, but you get over it and press on (and occasionally go back to it after a few beers to get a chuckle). I hate the idea of spending a lot of time reinventing the wheel as a resume project when there are tons of solutions already. I would much rather modify an existing solution or do something that I know will have some value.

    For instance, do I really need to write a text editor just to see how it might work programmatically? Probably not, because it’s not likely I’ll have an original idea to really make a better text editor. Now, if you want to do a long-term project that already has solutions just for fun, this argument goes right out the window. That’s fine and awesome and working on something like that can often lead to unique inspirations even when rebuilding the wheel.

    My situation sucks though because I have a job that I hate. I keep it because it keeps me fed, but it does not grant much savings, so I cannot take 6 months off and still survive. Because of this, my goal has been to find the quickest vector towards software/web development employment. It doubly sucks because it’s a physically demanding job, and after 8 hours of taxing work, you can be pretty foggy when trying to code/learn for an additional 4 hours before sleep. So I also want a quick vector so I can stop feeling so taxed and be more productive.

    This additional workload is why I avoid ‘fun projects’ except in the very short term to unwind and clear my mental registers/cache. I imagine there are others with jobs that they hate, and are trying to change, but because of the market/economics/president/russian spies/C’thulu, it becomes much more difficult to work through things. There’s also not a lot of technology use at my job (they’re still on WinXP and <IE8 for chrissake), but I've taken on a pair of projects that will be good contributions to the quick vector.

    Friends in the industry would help, but since I work 12pm to 8:30pm, that kind of kills most lunch/afternoon meetups in the area. To top things off, it's not exactly the most tech-progressive city, so compared to a larger metro area (like nearby Atlanta or Miami), there's less work overall. Thank goodness for the internet!

    • Jason S.

      Oh lawd.

      Last paragraph:

      There’s also not a lot of technology use at my job (they’re still on WinXP and IE8 for chrissake), but I’ve taken on a pair of projects that will be good contributions to the quick vector.

      Friends in the industry would help, but since I work 12pm to 8:30pm, that kind of kills most lunch/afternoon meetups in the area. To top things off, it’s not exactly the most tech-progressive city, so compared to a larger metro area (like nearby Atlanta or Miami), there’s less work overall. Thank goodness for the internet!

  • James MacIvor

    Thank you for this. I’m 33 and I aspire to be a developer. I have a job already that I enjoy, but ultimately I want to build applications. I enjoy programming. However, lately I have been depressed because there is so much to learn and so little time. Thank you for this encouragement.

    • http://brandonhays.com/blog Brandon Hays

      Keep at it James! I didn’t start until I was nearly 30, and you’re closer than you think. It looks like a big giant wall, but you realize later it’s more like a long hike… Part of the point is enjoying the journey step by step. Finding the local dev community (Ruby in my case) gave me the social support I needed to keep going. Best of luck, and remember to have fun!

    • Pratik Kulkarni

      Best of luck!

  • Anthony fletcher

    Being 26 and having shifted from being a chef for many years into a business degree, and then realizing all I want to do is my hobby – playing with technology and code, I was so worried I would be behind – and never quite able to catch – those who found the CS/programming path earlier in life.

    I now feel silly.

    The next few years of study will be difficult. But it’s stories and advice like this that will keep me going.

    Bookmarked for future inspiration and guidance.

    Cheers Brandon!

  • JoeShep

    Great advice. I got into development as a mid-career change in my mid-40′s. A 6-month software bootcamp was what helped launch me into this new career. I’m working my way up from the bottom, but even the bottom of the dev world is better than the middle of some other industries, as far as I’m concerned. I love being in demand and being a part of such a dynamic, growing field.

  • mony1