An EA who’s going to be attending a bootcamp in a few months emailed me a few days ago asking for advice. Here is an edited version of our conversation.

TL;DR:

  • When you are not yet employed as a programmer, you should focus intensely on getting a job, because it is a lot better to be a programmer than unemployed.
  • To get a job faster, you should try to become a better programmer.
  • To become a better programmer, you should do whatever programming practice is most entertaining and compelling to you.

Here’s his email to me:

I'm curious about what you find to be the main (important) skills lacked by bootcamp graduates, and whether you have any advice on which one can acquire outside of a work environment. Also, I'm wondering, as I will no longer be aiming to work at somewhere like Google, Slack, etc., should I put less emphasis on studying algorithms than I had been planning to?

I'll be attending [a top coding bootcamp in a few months], and want to spend wisely the huge amount of free time I have before then.

Should I shift some of the time I intended to spend on algorithm textbooks on general business books, books about design, and general books on problem solving and development, do you think? Or is there something else that would be a better use of the next couple of months?

I'm also curious whether you think it would be a waste at this point to spend a bunch of time learning about blockchains (after seeing whether I have an aptitude for this sort of work).

And here’s my response:


Hey there.

Here are some rough thoughts.

I’m curious about what you find to be the main (important) skills lacked by bootcamp graduates, and whether you have any advice on which one can acquire outside of a work environment.

Bootcamp grads don’t tend to totally lack important skills, they’re just very junior. The best thing to do is to try to learn more about everything about programming.

Also, I’m wondering, as I will no longer be aiming to work at somewhere like Google, Slack, etc., should I put less emphasis on studying algorithms than I had been planning to?

Algorithms are covered in interviews at a lot of companies, including lots of companies where the day-to-day work is very practical full stack development. And for many people, implementing algorithms is a good way of getting better at programming. So my advice is to study algorithms even if you don’t plan to take a Google job. (Here’s my advice on studying algorithms.)

(FWIW, it’s probably worth applying to Google even if you don’t want to work there. Companies will move much faster with you if you tell them that you have a Google onsite scheduled, and they’ll be much happier to negotiate.)

Should I shift some of the time I intended to spend on algorithm textbooks on general business books, books about design, and general books on problem solving and development, do you think? Or is there something else that would be a better use of the next couple of months?

Here’s what I think your plan should be. First, do whatever it takes to get a programming job. This mostly involves useful things like getting good at programming, but it probably also involves some less immediately useful things like learning about algorithms. Getting a programming job should be your top priority, because after you get a job, you’re getting paid and you can claim that you’ve worked as a professional software engineer, which makes every subsequent job enormously easier to get.

I think that at this point, getting better at programming is higher value than getting better at any of those other things. (I’m also somewhat skeptical that you can get much better at those other things by reading books.)

How do you get better at coding? I think you should code as much as possible, and I don’t think it really matters what you code. It’s easiest for me to be productive and hardworking when I’m working on something that excites me. If that’s true for you too, then the biggest priority for you is to find something you enjoy working on and then work on it a bunch.

I’m going to propose a bunch of different things you can do, all of which are worth your time. I think you should probably do whichever one you enjoy the most.

The first step is to get comfortable enough coding that you don’t get stuck all the time. (Analogously, I think that it’s really important when learning musical instruments to get good enough that playing the instruments is fun. Jeff Kaufman agrees.) If you want to improve your coding fluency, you can do beginner things like Codecademy, which is quite well built to give you practice at writing simple, syntactically correct code. You already got into App Academy, so you’re probably beyond the level taught there. But if you’re ever demoralized and want something easy, learning the basics of a new language on Codecademy is a decent use of time.

Then you want to work on some coding projects. Here are some ideas I wrote down on this topic once. Do whichever of those seems fun. If you want, you can send me code and I’ll comment on it for you. If you get stuck on weird bugs, take the opportunity to post on StackOverflow if that isn’t too stressful for you. Posting questions on StackOverflow is a great learning experience.

Here is a list of some other things you might be interested in doing. All of them are useful and you should do whichever one looks like the most fun. If you get stuck on one of these, email me or ask on StackOverflow about it.

  • Take a simple-ish project (eg Connect–4) and implement it in multiple programming languages
  • Learn to use Github Pages, and put a shitty personal website on it
    • Make little bits of Javascript and put them on your personal website.
    • Learn some HTML and CSS. Learn to use Bootstrap
  • Take a MOOC on algorithms. (I like the Roughgarden course).
  • Learn Sinatra, try to make a simple web application with it
  • Learn some C.
  • Learn Haskell (this one is especially good if you like math)
  • Read a textbook on algorithms. My favorite is Skiena’s Algorithm Design Manual, because I really enjoy the writing style.

After you have a coding job, start trying to learn whatever other stuff.

Re blockchain stuff: I think it’s worth your time to learn about it if and only if you find it interesting :) If learning about it gives you an excuse to practice more programming, so much the better.

Apologies for length; I wrote this partially because I wanted to take the opportunity to express all these ideas for myself, so that I can write them down for a larger audience at some point.

Buck