From self-taught developer to CTO without a CS degree
Here's an interview with Karl, a self-taught web developer who rose to the position of CTO before deciding to work on his own startup. Karl goes through how he learned to code without a CS degree, choosing a learning style that works for you and the benefits of learning to code.
Hey, so can you introduce yourself?
My name is Karl and I’m a self-taught software developer, former engineering manager and CTO, and currently running a small technical writing business (Draft.dev). I live in Chicago where I spend my free time hanging out with my family and running along the lakefront.
How did you learn coding?
I learned largely through trial and error, Google searches, and reading existing code. There are so many good resources available now that weren’t around 11 years ago though, so I wouldn’t necessarily recommend my path to others.
What I will say is that you should figure out how you best learn. I’ve always been a “learn by doing” person, so I didn’t do particularly well in traditional course-style learning. Others prefer books, group classes, bootcamps, online classes, etc. No one way is perfect for everyone, so find your own path.
Why did you learn to code?
I studied mechanical engineering in college because like many engineers, I liked to build things. After doing a couple of internships with big companies, I realized that the day-to-day work at a large organization was mostly boring, tedious, and unfulfilling. So, I started learning about startups.
At the time (2010/11), internet businesses were really taking off, so I decided I would try to start my own company to get a taste of what running a startup was like. I didn’t know how to code at the time, so I started hacking around on WordPress until I could build something workable. I launched a college news site in 2011 and ran it for a couple of years with some friends. We pitched it to business competitions, sold advertisements, and I wrote all the custom plugins and themes we used.
On the side, I paid my bills by taking on contract web development jobs. I would take on projects that I had no idea how to complete and then work as long as I needed to figure them out. I charged clients a fixed fee, so they only paid for results, but I got to learn as I went.
I don’t necessarily recommend this approach as it’s pretty tough to pull off, but it forced me to learn quickly. Back then there weren’t bootcamps or many cheap online courses, so I mostly learned by searching Google and Stack Overflow and piecing together solutions from blog posts.
What job were you doing before software development?
Like most college students, I didn’t really know what I wanted to do, but you have to pick a major at some point, so I went with mechanical engineering. I had family members in the field and I really liked physics in high school.
I was never an especially good student. I worked odd jobs and internships throughout college and after the first two years, didn’t take a “full-time” course load. I’ve always learned better by getting my hands dirty and doing things, so as I started to learn software development, I got really engaged. It was self-paced, interesting, and I could skip most of the boring parts that I didn’t need.
How has your life changed since learning to code?
I learned to code around 2010. After my college startup idea eventually fizzled out, I spent the next ten years working in early-stage tech startups. I was really lucky to break into one company just as they started growing, so I got put into a leadership role really early on. From there, I was able to hire a team, sit in on fundraising meetings, make important architectural decisions, and learn a ton about running a business.
Having a specialized technical skillset is a huge advantage when you look for jobs with startups. Small companies can’t afford to hire a lot of administrators, so you really have to know how to solve hands-on problems.
As an engineer at an early stage startup, you might not get paid quite as well as those at large companies, but you get a lot more creative freedom and responsibility. I’ve never been someone who’s highly motivated by money, but the opportunity to build things from scratch is incredibly rewarding. I never would have gotten this much freedom or impact if I had staying in mechanical engineering.
What does a typical day as a software developer look like for you?
I’ve had a variety of roles over the past decade, some involving more code than others, so it depends.
When I started my career, I probably spent 4-5 hours per day writing code and the rest of my time planning projects and sitting in on meetings.
Once I got promoted to an engineering management role, I spent about a third of my time on technical problems (mostly reviewing code and helping people get “unstuck”), a third of my time hiring, evaluating, and solving people problems, and a third of my time on outreach and administrative tasks.
Since starting my own business last year, my time breakdown has shifted dramatically again. Now, I spend most of my time on sales calls, answering questions for clients and employees, and planning big picture moves for the business.
I’ve found that I like a lot of variety in my day-to-day. Like a lot of entrepreneurs, I tend to get bored quickly, so I’ll probably make big career changes every few years for as long as I’m working. One of the great things about knowing how to code is that it doesn’t force you down a single, fixed career path. There is a ton you can do with a background in coding that doesn’t involve coding every day if you want a change of pace!
What was the interview process like for your first developer job?
Being a self-taught developer, I didn’t really even know what you were “supposed” to do to get a job as an engineer. So, as I got close to finishing college and started looking for a real job, I started emailing and calling startups that I thought were interesting.
One of the few that got back to me was called Uloop, and they happened to want someone to help them build up a college news website. It was perfect because I just spent the last two years at school trying to make a startup that did college news. There wasn’t even an interview - Uloop just hired me as a contractor and when I graduated, I went full-time right away.
Even after that first job, I always do a “trial contract” at any new company before I take a job. This has allowed me to skip the traditional interview process and see what it’s like working with them before I make a big commitment.
Do you have tips for people who want to learn to code without doing a degree?
Learn how you learn best.
Bootcamps are great if you need other people around you to stay motivated, but they’re expensive (although, still cheaper than a college degree).
Online courses are usually cheaper, but you might not have people to help you when you get stuck.
Learning by doing can be frustrating but rewarding. It took me a lot longer to learn the “right” way to code things than those who take traditional paths, but I had a lot of fun along the way.
What are your career goals for the future?
Last year, I left my job as a startup CTO to become a full-time technical writer. It’s gone really well, and now I run a company called Draft.dev where I manage a team of 50+ software developers who write blog posts for clients all over the world. It’s different from what I’ve done for the past 10 years as a developer, but my experience as a dev gave me a unique perspective and skillset to start this business.
If you ever want to talk about software, writing, or startups you can find me on Twitter @karllhughes.