Everything I Wish My Coding Bootcamp Had Taught Me
Bootcamp buyer beware
What followed was the easiest job hunt of my life. I was inundated by requests from recruiters, loading my calendar with more interviews than I could practically attend. These were high-quality jobs, too: names like Thought Machine, Ocado Technology, and Starling Bank. Less than a fortnight after starting my searching, I’m happily employed.
So why do I feel so dissatisfied with what I learned? Part of that comes from the suspicion I got a lot of these interviews not on the strength of my abilities as a toddler-level developer but from my name-brand university education. I’m a Cambridge grad and a scientist to boot — in tech that opens doors.
Sadly, the skills the top jobs demand have pretty much nothing to do with being able to assemble a web app in the space of a week. A practical grounding in web development is a poor approximation of the huge theoretical knowledge required of true software engineers.
After three months at Flatiron School and an impressive succession of out-of-my-league job interviews, here’s everything I wish my coding bootcamp had taught me.
1. Data Structures
How does a hash work? What are the advantages of B-trees over arrays? How would you identify which points in 2D space fall within the bounds of a given rectangle?
To write quality, performant code, it’s imperative to understand the data structures it relies upon. It’s the difference between a program that chugs as you iterate through nested loops and one that sings as it dips in and out of hashes in constant time.
In technical interviews, you’ll be asked to optimise your solutions. You can’t do that unless you understand how the code you’re writing works under the hood. At the bare minimum, you should wrap your head around singly and doubly linked lists, balanced trees (particularly AVL trees), hashes (or maps/dictionaries, as they’re known in languages beyond Ruby), queues, stacks, and graphs.
You should understand how to access their elements and the computing costs associated with doing so. This is nonnegotiable.
How you do work on your data structures is as important as the structure itself. The two are inseparable. If you don’t know what it means to run in log n as opposed to n² time, you need to sink your teeth into algorithms, pronto. It’s the difference between a well-tuned program and, in some circumstances, a laggy, staggering mess.
As a starting point, understand how the default methods of your preferred language execute searching and sorting. Understand the circumstances in which these approaches make sense and when a different algorithm would do a better job. Once you’ve wrapped your head around graphlike data structures, learn how pathfinding algorithms navigate routes between points.
The gold standard for learning is Thomas H. Cormen’s “Introduction to Algorithms,” but it’s a beast. For a less intimidating entry point, simply google “essential sorting algorithms.” Once the headache passes, you won’t regret investing the time.
Flatiron School teaches Ruby on Rails, complete with its quasi-magical object relational mapper (ORM), Active Record. Active Record takes simple, user-friendly method calls in Ruby and does all the heavy lifting required to put data into your DBMS of choice and get it back again.
Most bootcamp students will neglect to learn SQL. Real developers need SQL. More specifically, they need to understand how the database processes their queries and use that knowledge to optimise their requests. Database access is a performance bottleneck, and understanding how to speed things up will put you well ahead of the curve.
More than anything else, you should understand how your preferred DBMS (PostgreSQL, MySQL, Oracle, etc.) implements indexes — and when to use them yourself. The data structures underpinning indexes are the reason we don’t feel ourselves ageing while we wait for queries to return.
Use The Index, Luke tells you everything you could ever want to know.
AWS, Docker, Kubernetes — these are skills employers demand, but you’re unlikely to learn the first thing about deployment if you attend a bootcamp.
For my final project at Flatiron School, I set out to teach myself a little about Docker and AWS to help me stand out from the crowd at am interview. It worked. It also made me aware of how vast a topic deployment is in its own right. Alongside writing the code itself, this is a second, equally important skill set software developers can’t be without. And it’s something that needs to be taught in context.
You might question when a bootcamp would have time to teach deployment on top of getting rookies coding for the first time, but I’d counter by asking what good is a web app if you can’t get it online?
Start exploring the user-friendly AWS alternative, Heroku. Once you’re comfortable, Docker, Kubernetes, and AWS each have a huge number of high-quality tutorials to work through. I recommend doing it methodically, step by tiny step. The slow progress might be frustrating, but a solid foundation is essential.
5. Static Typing
OK, this one’s personal preference, and arguably not for the true beginner. On graduating Flatiron School, I set out to teach myself Java, a statically typed, compiled language with strong support for concurrency, particularly parallelism.
I can confidently say it’s made me a better programmer. Not because I’m working on anything complex enough to require the full extent of Java’s powerful features, but because working within a type system, where you must declare the types of the inputs and return value of your functions, forces you to consider your code more carefully.
Programming becomes — in the best way — slower, more considered, and deliberate. The emphasis shifts onto how your code works, not just what it does.
At an early stage in your career, there’s no overstating the value of broad experience — exploring and getting a feel for as many ways of coding as you can.
If you’re interested in exploring Java yourself, I recommend Cay S. Horstmann’s “Core Java SE9 for the Impatient.” However, from my experience in my recent job hunt, demand for Go programmers is rising rapidly. It’s still statically typed, but it’s arguably more pleasant to learn.
That’s everything I wish my bootcamp had taught me. But isn’t that the beauty of software development? That no matter how good you get, how many avenues you explore, or how many killer apps you build, there’s always more to learn?