This past week I read Lowly Midwestern Engineer's article about finding a job in tech without any industry experience.
I sympathized with his narrative, and thought it would be interesting to share my thoughts on the same theme. There are no straight lines in nature and, for what it's worth, here's some info about the squiggly line that led me to where I am.
Life before tech
For nearly a decade after graduating from college, I wandered around working ignominious jobs that had nothing to do with programming software. My goals was to be a journalist, and I spent large amounts of time writing for alt weeklies, magazines, and digital news startups.
Since this work was intermittent and low-paying, I often had to supplement my income by taking on side gigs. I wrote descriptions of fiber optic products, worked as an ineffective mover, and, for a brief spell, made lattes and smoothies at a coffee bar embedded in a Williamsburg, Brooklyn Whole Foods.
Years of such activity served mostly to prove the economic in-viability of my ambitions.
I was 28 when I found myself abruptly fired from an awful job doing legal research and stymied in all other attempts to find gainful employment. Broke and disappointed, I demurred to the reality that I would be happier doing something else.
Faking it until you make it
I decided to pursue a programming career with limited knowledge of what I was getting into.
In college, I had taken an introductory class on web development. The instructor covered HTML and CSS, then spent a single day introducing Javascript, which he implied was an optional embellishment.
I enjoyed the class. The process of building something and seeing it pop up on my computer monitor was rewarding, as was the air, still novel at that time, of being a secular wizard, capable of unlocking secrets popularly regarded as baffling.
Later, I worked as a reporter for a digital news startup in Bangkok (that's another blog post), where I sat close to several web developers and overheard them talking about building a website.
These experiences fixed me with the ideas that programming was a) something I could do, and b) significantly easier than it in fact turned out to be.
With my journalism career coughing out its dying breaths, I spent a couple months working through Code Academy courses and decided to commit to a career in tech.
Bootcamps for better and worse
There is a popular belief among developers that you can teach yourself to be an engineer. This is true, but with a couple caveats.
For one, every self-taught developer who I know has a natural affinity for processes and abstractions. These are the people who taught themselves shell scripting at 15 and refer to calculus as "easy".
These individuals have also taught themselves to program while enjoying few financial obligations and lots of free time. Whether that means they were living with their parents, relying on a generous girlfriend, or sitting on a chunk of money from the GI Bill, they were all in a position to spend 8 uninterrupted hours per day hunched over their computers, trying to code.
When I decided to become a developer, I had neither the mental disposition nor the finances necessary to pursue the self-teaching route, so I went to a bootcamp.
Bootcamps have sullied their reputation over the past five years by trying to con students with unrealistic expectations, and employers with half-baked graduates. Nevertheless, I doubt I would be a developer today were it not for coding bootcamps.
A word of advice: if you're going to attend a bootcamp, spend the smallest amount of money on it that you possibly can.
For-profit bootcamps will saddle you with as much as $17k in non-dischargable debt, which is crazy, especially when you consider another of my core theses:
Upon completing a bootcamp, you will not be ready to work a programming job
Bootcamps are great starting points, but after graduating from a 3-month software development course, you're still looking at 6-to-12 months worth of work before you're hire-able. In total, I'd say it takes about a year to go from "not a developer" to "developer"; and that's a year in which your full-time, 40-hour-a-week occupation is learning to code.
I didn't know this going in, so it was pure luck that led me to pick the Full Stack Web Development program at CUNY Brooklyn over a number of pricier bootcamps.
The program at CUNY provided a less robust background than some of the private bootcamps, but its sticker price was $2,500. General Assembly, by contrast, was around that time charging $13,000 for its fullstack course.
To my mind, the biggest advantage of attending a bootcamp is having someone around who can help you get past the brick-wall frustrations you run into as a junior developer. I'm certain that had I not attended a bootcamp, I would have given up on web development completely when I got to server-side scripting. Instead, a jovial man named Julio explained to me that PHP executes on a different machine than Javascript, and with that knowledge I was able to keep going.
I've heard about people having negative experiences of bootcamps, and there are a couple things particular to my experience that made it worthwhile. For one, I worked while attending that class. Not only did I do weeks worth of prep work, but I pushed myself to turn in ridiculously ambitious projects during the course.
I was also prepared to continue studying after I graduated. I held myself to a comically high standard when starting out, and pushed myself to keep working until my projects resembled something professional.
Success, in software development as in other things, is more often a result of effort than of talent.
Actually getting a job
Since I had never worked in tech, I concocted a scheme to use my existing skills as a bridge into the industry.
This plan worked pretty well. Shortly after graduating from the bootcamp, I was offered a job with a publishing house that consisted of 50% content writing and 50% development work on a couple of Wordpress sites.
The publishing house, I soon discovered, had entered dire financial straits; a sale was eminent. Working for a failing company, however, turned out to be a good deal. Management gave me free reign to pursue whichever development projects I pleased, and when the ship sank in earnest, I received a sizeable "sorry for giving you the sack" bonus, which kept me happy and healthy while I traded up into a full-time development job.
Though the journey since has involved a couple twists, it's fair to summarize the trajectory as upward-facing, with each chapter bringing more complex technical responsibilities and more Scrooge McDuck-ian amounts of compensation.
Once you're in, as they say, you're in.
The secret(s) of my success
Both in my bootcamp cohort and among my acquaintances, I've seen people struggle to find tech jobs, or else wash out of the industry entirely.
My relative success owes in my opinion to the fact that I simply enjoy making things with code.
Banging my head for hours against a difficult coding problem, then breaking through that difficulty, is intensely satisfying to me. I can spend 6 or 8 or 10 hours working in this mode and feel good about it at the end of the day.
Programming has never been intuitive for me, nor has any other activity involving high levels of abstraction. In high school, I barely passed trigonometry and bowed out of calculus entirely; I majored in English Literature in college, and only passed the required Intro to Statistics course on the strength of an essay I turned in for extra credit.
That I have had meager success as a software engineer owes largely to the fact that I enjoy doing it.
Because I get so much enjoyment from writing software, I've spent a huge number of hours doing so, and, despite myself, developed competency in the discipline.
I'm not among the world's programming elite, nor will I ever be; in order to develop that kind of talent, you have to start when you're a teenager. I began programming in earnest shortly before I turned 30, and suffer from the natural handicap of a mind most comfortable with stories and feelings.
However, with moderate intelligence, tenacity, and a propitious job market, I've managed to make it work.
Code switching
Tech workers generally hail from well-to-do suburbs, from which they graduate to good colleges, then move directly from those colleges into lucrative professions.
I grew up in a place where the parents expected similar career paths for their children. Kids were expected to grow up and become doctors or lawyers or engineers; to take ski vacations and have visited Europe.
I spent a large part of my adult life recoiling from this group of people, but when I decided to start working as a developer, I nonetheless benefited from my familiarity. I "get" this tribe, for better and worse. To sit in on a negotiation where several million dollars are at stake and listen to the principal parties refer to each other as "dude" should perhaps make one's head explode, but it's a situation I can live with.
For people who did not grow up in the comfort of American wealth, the social milieu at a tech company can be bizarre and alienating. I don't believe this owes to discourtesy on the part of tech workers, who will generally trip over themselves to avoid an implication of conscious prejudice. Rather, it's a matter of feeling that one has sneaked into a clubhouse where one doesn't belong, no matter how many times the vetted members insist otherwise.
More often than technical challenge, I've seen this sense of wrongfootedness end developers' careers before they had a chance to properly begin.
The work itself
Shortly before I started programming professionally, I worked a part-time job making lattes and smoothies. This work was physically demanding, low-paying, and, on occasion, emotionally abusive.
I will every so often hear colleagues in the technology business complain about the demanding nature of their work, but they are mistaken — their work is not demanding. Making 15 coconut milk lattes for someone who scarcely regards you as human, or carrying a sea trunk up five flights of stairs in the July heat, is demanding. Sitting in a comfortable chair solving little logic puzzles is not.
Sometimes, while working programming jobs, I might miss Bangkok or scratch my head as to why I threw in my lot with this-or-that group of fiends. My worst day programming, however, is better than my best day making smoothies. Programming pays well, commands the respect of my peers, and, crucially, allows me to pick up stakes and find a different job anytime I want.
It's good work, or at least it will be until the bottom falls out of the tech economy and you find me writing an essay about my transition to a career treating and selling beaver pelts.
In the meantime, I wish you luck. Let me know if you're ever in the market for a well-treated beaver pelt.