Letter to an aspiring developer

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.



    • 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


  • 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!

    • http://www.linkedin.com/in/erictiyuchiang/ Eric Ti Yu Chiang

      Hi James, first off, lots of respect to you on taking up the challenge to be a developer. I can send you some material related to that if you are interested. I can be reached at eric.ti.yu.chiang at gmail

      • James MacIvor

        I would welcome that. Thank you

        • http://www.linkedin.com/in/erictiyuchiang/ Eric Ti Yu Chiang

          ok, do you have an email or email me first, so I can send back to you.

  • 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.

  • Pingback: @gSchool Week 17 | justKeepCoding()

  • Nikia

    This article and so many of the comments are such an inspiration. I’d come across this article before but was feeling down and decided to reread it. As I’m going through one of my low, ‘can I really do this?’, ‘am I learning the right language?’, ‘maybe I should just stick to front-end’ moments. Not to mention I’m 36 and only decided to dive into learning Web Development a couple of years ago. It just feels like it’s taking forever for me to ‘get it’.

    I’ve switched career paths more than I care to mention and am so glad I finally decided on this, but now I find myself wondering whether I’m on the right path within Web Development (I’m currently learning Ruby). I worry that I’m too old, etc. etc.

    Anyway when my mind starts filling with doubt it’s nice to find inspiring articles like this so thank you!

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

      Thank you so much for taking the time to say that. Reading your comment made my night.

      I’ll be 36 with ya in a few months. 4 years ago I was trying to learn HTML and CSS. 3 years ago I was hustling to get my first real programming job. Sometimes I feel like I’m the slowest learner I know but if you stop to give yourself credit once in a while you may be surprised at your own progress.

      I can relate to feeling stretched thin, worried I’ll never catch up to these kids who started programming when they were 10, or that my dreams were out of reach. While none of that is true, doing what you’re doing is tremendously challenging for anyone, so you deserve so many congratulations on sticking it through to this point.

      • Nikia

        Good you deserve it! But honestly, thanks for a great blog, for the encouragement, and for sharing that – hearing those similarities really helps.

  • Callie Brooks

    Thanks for the article! I am aspiring to break into software, and I have been studying for about a year now. I graduated from college in 2011, and have spent my time just wandering job to job. I started playing around with a few different programming languages, and really enjoyed the challenge. So I am currently working in a non-related field, but study every day and try to take steps towards being a software developer each day.

  • Abinaya

    I graduated recently in Electronics & Communication Engineering but I decided to switch domain to CS & took the plunge into Software development. Although, I have no hands on experience with app/product development, I managed to land a developer trainee job at a start-up. I start next week and the prospect of working on my first job didn’t excite me. It only made me more nervous. So, I decided to google about inspiration for aspiring developers and stumbled onto this article.I am glad it happened because this post shifted my perspective about being a developer! I still have some lingering questions like am I cut out for this? Am I making a mistake by switching domains? But, your article gives me the confidence to take the risk and not give up. Thank you for this powerful write up! If you could suggest me few books/websites which would help me with the basics of development and logical thinking in terms of programming, it would be great!
    Bookmarked for future reference because reading it once is not enough :)

  • Scott Hale

    Brandon, first of all, I’ve gotta thank you for your presentation last week at Keep Ruby Weird, and for bringing the guitar! I was skimming over the titles of your recent posts and knew I had to read this one, as I’m nearing completion on a book that I hope will serve the same audience as your letter. As someone with a somewhat similar pattern of job-switching, you begin to realize that each new experience and skill you collect add up to so much more than whatever or wherever you started out. If you’d tried to tell me when I was 20 that I was going to be a software developer someday, I would have laughed. Yet here I am and I’m very happy.

  • Travis

    This is just what I needed to read today. I’m in my early 40s and trying to make a career transition into software development. I’ve been working at it steadily for about a year and just need the confidence to feel like I can contribute to a team or an employer. It has been hard to stay focused and not fall down the rabbit hole of trying to learn every technology that comes across my path. I’ll heed your advice and put this letter in my pocket for the (hopefully few) challenging days ahead.