This Director of Software Engineering on coding without a CS degree
Joe Stetch is a professional Software Developer who has made the Compelling Python course to help coders learn this in-demand backend language. I talked to him about learning to code, getting hired and lots more!
Hey, so can you give us a short introduction for people who want to know more about you?
Hi! My name is Joe and I'm currently a director of software engineering at a clean energy analytics company in Boulder, Colorado. I live in the suburbs with my wife and baby daughter. I really love this place - I've been here since college 15 years ago. Back in 2008 I got a degree in Biochemistry from the University of Colorado at Boulder, and I've never left the area. The people are great, and it's a wonderful place if you're into indoor/outdoor rock climbing, camping, hiking, biking, etc.
If you don’t have a CS degree, how did you learn coding? Did you do any particular courses or bootcamps?
I was working in a biochemistry lab while studying for my undergraduate degree, and I noticed that all the researchers in the lab were doing tedious manual spreadsheet calculations every week (related to calculating ion concentrations in various parts of cells). I figured it was a waste of time to do the same thing manually every week, so I learned a little VBA and automated it. After that I was hooked, and decided I needed to learn more.
How did you get your first programming job/ freelance work?
After graduating and realizing that I wanted to create software, I thought the best way to do that would be to get a master's degree in computer science. I didn't have the prerequisites for that, so I worked construction for a summer and then in the fall I took two cheap semesters at a local college near my grandparents' house (UCCS in Colorado Springs). This was back in the pit of the great recession, so very few people were hiring (and even if you got a job, it didn't pay well).
Those two semesters gave me enough credits to be accepted to the CS graduate program at the School of Mines in Golden, CO, but the summer before I was going to matriculate I interviewed for a local company who gave me a trial internship. I worked hard and after two weeks they offered me a full-time job as a firmware engineer. I figured it was better to learn on the job and make some money than taking loans for grad school, so I accepted their offer! I ended up working for that company for 3 years, gaining valuable experience.
Did you have any specific people that inspired you to learn coding?
For me it was more about solving problems than being inspired by other programmers. I saw problems that I could automate in the lab, and it worked out -- after that I started thinking about all the other types of problems I could solve with software. If you get a hammer, you start noticing nails everywhere 😀
The thing I love about programming is that you can jump in to almost any field and be immediately useful, since your whole skillset is about offloading work from humans to computers.
How has your life changed since becoming a professional programmer?
I'm certainly more financially secure than I used to be. More than that, though, it's given me the tools and confidence to solve most problems I encounter. There's a rigorousness that's required when thinking about software - the computer only does what you tell it to do. If your program doesn't behave correctly, it's because you didn't give it the right instructions. This can be frustrating in the beginning, but over time it really sharpens your logical thinking skills.
Sure, problems aren't always directly caused by you - there's occasionally unexpected behavior in a library or ASIC chip that you're using, or a coworker gives you incorrect information. In the end, though, you can always dig deep enough to figure out why an application isn't behaving the way you'd expect.
Has anyone ever asked about your coding qualifications when you have been talking to clients? Do you think a CS degree is unnecessary now?
Past experience is really the only thing I've ever been asked about. If you can articulate how you've solved problems in the past, and you can solve algorithms on a whiteboard, you can get a great job.
That being said, degrees can still be useful - I've talked with managers who hold Ph.Ds that have told me in no uncertain terms that they always give greater weight to candidates who have more academic experience. In practice, though, there are enough programming jobs out there that you can avoid those types of managers.
Prepare for technical interviews with Algo Expert- "NOCS" gets you 15% off.
What advice do you have for someone who wants to get their first programming job but they don’t have the time or money for a CS degree?
Find a project you want to complete that requires programming. This is by FAR the most effective way to learn programming - nothing else even comes close. Sitting here, I can't think of a single person I've met who is self-taught who didn't go this route. If you don't have a goal to accomplish, then maintaining motivation to keep learning is very difficult.
Think about things you want to do (fan website? Generating silly images with neural networks? Automating your co-worker's spreadsheets? A game you've been wanting to build?) and use that as a starting point on your journey. Google around and figure out what the best languages are for your use case, and what the minimum you need to learn is to accomplish it. I guarantee you'll have the skills to be hired as a junior engineer if you figure out how to build your hobby project all by yourself.
Can you tell us what an average day looks like for you just now? What are you working on and what is your lifestyle like?
These days I manage a small team, so I code less than I used to. Right now my team is building a new data analysis product that will help the electric grid use more renewable energy. The product consists of a big data pipeline, batch analytics, and a SaaS API to serve the analysis results. It's a really fun mix of problems to solve.
I'd say about 20% of my day is devoted to design, 20% is spent actually implementing things, another 20% is spent gathering and understanding requirements from stakeholders (including email back-and-forth), and 40% is spent answering questions, assigning work, and just generally making sure everyone on the team is aligned and the project is on track.
My lifestyle is centered around my family - I generally wake up and feed my daughter breakfast before heading to work. We live out in the suburbs so I drive into Boulder every morning. I'll generally go for a walk at some point during the day to get the blood flowing and get some fresh air. When I get home in the evening I'll generally lift some weights and then spend time with my wife and daughter until my daughter goes to sleep at 8:30pm. Most nights I'll spend some time either writing or programming a personal project.
Have you ever had imposter syndrome and if so, how have you dealt with it?
Every once in a while there's a voice in the back of my head that will say "they're going to find out that you have big gaps in your knowledge!" It's an unpleasant feeling. The best way I've found to push through when I have doubts is to just learn more and improve my skills. Also, the more things you try, the more successes you'll eventually have.
Being able to look back and say to yourself, "I've done all these things" is a great way to keep yourself moving forward. Keep trying things and failing, and eventually you'll succeed. The only sure-fire way to not accomplish anything is to stop trying.
Can you tell us about your Compelling Python project?
I've been a huge fan of the Python programming language for about 10 years, and I wanted to share some of the hard lessons I've learned, so I created Compelling Python to start writing about them! The first guide I wrote is a complete tutorial on how to build cheap Python websites quickly and easily. For several years now I've used AWS Lambda functions to host 'serverless' sites that don't require servers that are up all the time.
I just pay a few cents (or dollars, depending on traffic) for the number of seconds that people are actively using my sites. When nobody is using them, I pay nothing and never have to maintain infrastructure. It's really nice, and there's an open-source package that makes deployment as easy as a single command. Compelling Python itself is built using this paradigm.
I'm planning on adding more guides (some free, some not) as time goes on.
Thanks for chatting with me, and take care!