John Carmichael, Senior Software Engineer at hiring partner WeSpire and instructor in our Boston web development course, knows that hands-on coding experience puts aspiring web developers ahead of the curve. John’s lessons focus first and foremost on practicality. He knows that our web dev students want to find great jobs out of our program, so he’s designed his sessions to target the skills they need to get past the technical interview and hit the ground running from day one. John’s experiential approach and dedication have made him a long-time favorite among the students in our Boston web dev course, who voted him the Student Choice Award winner for outstanding teaching this past fall.
Says VP and Boston program director Allan Telio,
John has many of the qualities that I love about Boston's tech ecosystem. He's smart. He's generous. He cares. Simply put, he is a giver and we're lucky to have him be part of this community. I'm lucky to call him a friend.
We caught up with John to learn about his award-winning sessions, the difference between coding bootcamp grads and computer science grads, and how bootcamp grads can take their careers to the next level:
Q: Congratulations on winning the Student Choice Award. Tell us about the session you taught.
A: I typically teach two sessions. The first one is Intro to Web Security and it’s an unplanned-on-purpose kind of course.
The session pulls from my experience as a security engineer—how to write good code from a security perspective. We cover a lot of the things that web devs need to know. It’s not about becoming a security expert in two hours by any stretch, but there is a baseline knowledge that devs should have an understanding of. Knowing the terminology allows them to be able follow-up on the job and say, “I know I’m not an expert in something like cross-site scripting, but I know it is a thing that I need to be careful about. Even if I’m not an expert in it, I can at least be aware enough to know I’m covering my bases.”
In industry, I’ve seen a lot of devs who’ve never been exposed to any of this. I want my students to have at least a high-level understanding. A large number of your major data breaches are security errors in the code. If you can patch those up, you’re doing your business good.
Q: Great. What other session do you teach?
A: The other session is on creating APIs (application program interfaces) and Node.js.
It’s really an API-centric dev world right now. API is a way for a machine to interact with a program, rather than a user. I might write something that links in some functionality from Uber to my event website, and my website will say “I’m hosting an event on Thursday. Click 'here' to order an Uber.” That back channel stuff is all API-driven.[bctt tweet="It's really an API-centric world right now, says @JohnnyC115 #webdevelopment #programming"]
Understanding how APIs work, whether you’re a front-end or a back-end developer, is hugely important because most apps are written that way. Every time a user does something, your code will make a call back to an API that someone else has written. It’s important to know the rules of the game as far as APIs are concerned. I’ve seen some really poorly implemented ones.
I try to make that session as hands-on as possible. I want the students writing code during our entire session. At the end of the session, everyone has a mini API, but a working API that has the basic functionality that you would see in an API in the wild.
Q: And understanding the logic behind the language enables you to do that?
A: Exactly. If you know how to build software in one language you can easily move from framework to framework. It’s similar to learning a musical instrument or studying foreign languages: some are easier jumps than others. If you know Spanish, moving to French might be easier than moving to Japanese. It’s the same thing in code. If you know C++, jumping to Rails is not going to be easy. It’s doable, but it’s not as easy as if you’d been writing web apps, in Django or Python. That jump is easier because the logic is closer.[bctt tweet="Learning to code is like learning an instrument. Learn 1 + you can learn others, says @JohnnyC115"]
Q: What do you think makes your sessions so effective?
A: I focus on what they’re looking to know and make sure that it’s as hands-on as possible. I try to give them the feel of what it’s like to be in the real world of coding. I go for a hackathon kind of vibe, where you have a bunch of people in a room working on a problem together. It involves paired programming, which is very common in the real world, as well—we pair up all the time as developers. I try to mimic that vibe.
They write working code. The example I give them is small enough for them to get it done in the session. They are starting from blank file and building out something that works by the end of the class. I think it gives them a sense of that accomplishment, which is very cool.[bctt tweet="I focus on making my #webdevelopment lessons as hands-on as possible, says @JohnnyC115"]
Q: As a hiring partner, do you scout talent while you’re teaching? What are you looking for in new hires on WeSpire’s dev team?
A: I do and I don’t scout. I don’t do anything specific because I don’t want it to feel like an interview. However, it is a great opportunity to get to know these people throughout the eight-weeks. By the end of the program, if we’re in a position to bring somebody on, I usually have a name or two in mind to join the team. But, even if I know we’ll be hiring, I keep it low-key. I feel that if there were a conscious recruiting intention, it would change the interactions. It could very quickly become staged and I don’t want that.
Still, teaching is an easy primer for me. The folks in the program are the types of people we’re looking for. They are willing to put themselves out there, they’re willing to take risks, they know they want to learn, they have a passion for this. Anybody willing to take a leap of faith and do an eight-week full-time program to develop their career clearly has those qualities. They have that drive and the initiative to self-educate that makes junior devs successful.[bctt tweet="The students @StartupInst are the kind of people we want at @goWeSpire, says @JohnnyC115" via="no"]
You’re not going to get the answers, you know. Even after you graduate the program and you’re in a full-time role, you’re constantly going to have to push yourself to get better and learn things. I recently moved into a senior dev role after being in a director position for years, and I’m realizing just how much I have to learn. There is just so much information coming at you constantly; you need to have the right mindset to not get overwhelmed. You need be excited by that amount of learning.[bctt tweet="As a #webdeveloper, you need to constantly push yourself to learn new things, says @JohnnyC115"]
Q: You’ve hired a handful of our alumni. What is your impression of coding bootcamp grads getting up to speed? Are coding bootcamps worth it?
A: A coding bootcamp is not going to make you an amazing developer. Even if you’re coding for twelve hours a day, or for ten weeks instead of eight, the improvement is going to be negligible.
More important for our junior dev is, can they learn? Can they ask questions? Can they work on a team?
We often put junior devs on QA because we know that that they won’t be able to come in on day one and contribute code. We recently hired Liz, who is a Startup Institute alumna. She has that willingness to learn and the desire to pick the brain of every developer on the team. She also has the technical acumen. As a QA developer, some of her learning is directed and other parts self-directed. She is able to pick up bug fixes and pair up with developers to get into the code base. This model means she’s adding value and we can ramp her up at the same time, without it being a huge distraction for all of the other devs.
As a junior developer, it doesn’t really matter what education model she went through. We have another junior dev on our team who didn’t do a bootcamp and is finishing up a software engineering degree. He has the same kind of learning curve as Liz, and he’s in a degree program.[bctt tweet="#CS grads and #bootcamp grads have similar learning curves, says @JohnnyC115"]
Q: So, a computer science degree doesn’t make you better prepared for a junior dev role?
A: No. A computer science degree gives you a lot of background and a lot of context to lean on, but I have yet to see a college that is teaching modern languages. You’re not going to have a course in building web apps on Rails in a software engineering degree.
Q: Do you have a CS degree?
A: I do. Doing a CS degree, you don’t learn the languages that you’re going use in your job. It’s a lot of theory, and that theory is helpful later as you’re learning more advanced topics. From a junior dev perspective, the bootcamp grads and the CS grads have similar learning curves. The difference is that when our junior dev with the CS degree joined us he knew nothing about Rails. He had to start from scratch, while Liz coming from Startup Institute at least had experience with Rails. She understands the syntax already. It’s not hard to learn, but she’s one step ahead.
Q: If someone learns to code at a bootcamp, will they need to go back for a degree in order to progress to a senior level?
A: I don’t think that they have to go back for a degree, necessarily, but there are skills that these programs teach that they will have to learn. As you get more senior, there is a lot of value in a CS background—truly understanding algorithms, truly understanding how a lot of that stuff works.
For some people, doing a degree might be a horrible idea—it’s not the right setting for their learning style. You don’t have to go back to college to learn these things. One of the best resources I’ve seen is a book called Cracking the Coding Interview. This book makes it very easy to understand where your deficits are, where algorithmic complexity matters, and where it doesn’t. Most of the time it doesn’t matter, but there are a few times where it does. If you didn’t go through a traditional education program, this resource can help you answer questions like, “How do I know what I don’t know?” or “I have no idea even where to start with this question.” It’s a great primer for a junior dev who wants to transition into a senior dev role.[bctt tweet="Want to be a senior dev? Read Cracking the #CodingInterview by @gayle, says @JohnnyC115"]
Q: What are the skills that you need in order to make the transition to senior dev?
A: In a lot of ways, we’re still defining this as an industry. Teamwork is a big part of being a dev, so being able to take feedback is huge. I’ve seen a lot of junior devs struggle with that, whether it’s a matter of ego or trying to run before they can walk.
You have to be able to understand that when other people are looking at your code, you’re going to be critiqued. There isn’t a line of code that any of our devs write that doesn’t get reviewed by someone else before it goes forward. I’ve seen junior devs struggle with this as they start doing more feature work. They can sometimes be dismissive of feedback. Being able to take feedback for your work is a huge piece of becoming a senior dev.[bctt tweet="Being able to accept #feedback is a huge piece of advancing as a #dev, says @JohnnyC115"]
Asking the right questions is also a skill set. One of our more senior devs sits across from me, and it’s very easy for me to constantly ask questions. That’s not productive. The other day, I wanted to ask something and I stopped myself—“That’s actually about standard Rails functionality. Google will tell me that in two seconds.” On the other hand, there are some stylistic or historic questions about our code base that I won’t be able to find an answer to online. I’ll need another dev to explain those to me. Our dev team is really good at pushing back on some of this. If you ask someone a question, the first thing we’ll say is “What do you think? What have you tried?” We try to be good about fostering this. We don’t give answers.
Testing is another element that separates a junior dev from a senior dev. Knowing what a good test looks like and how to design and structure it is key. The junior dev is going to have to hack at it to get it to work and, while it might work, it’s not the right way to do it. The more you do, the more naturally it comes. I think that’s when you start to realize that you’re making that transition.[bctt tweet="The dev team @goWeSpire fosters self-directed learning. We don't give answers—@JohnnyC115"]
Q: You mentioned that you recently moved from a director position to a senior dev role. Why?
A: For a while I was just climbing the ladder. I was progressing, taking on more responsibility, but I got to the point where the things I was doing day-to-day weren’t fulfilling to me at all. I didn’t feel productive. I felt like I had to do exponentially more work to move the ball forward because there were so many moving pieces involved. It started to wear on me.
In reflecting on the past year, I realized that I hadn’t really been prioritizing happiness and I wanted to change that. I asked myself “When am I at my happiest?”
Because I had been doing a lot more side projects at work, sometimes I could disappear for six hours to write a ton of code, and feel really accomplished. I think that flow is a great way of understanding what makes you happy because you’re not going to get into flow doing something you hate. Look at the things that you can disappear into it without noticing time passing. Those are the things you’re passionate about. Those are the things you should chase. I was in a role where I was never doing the things that made me my happiest.
After a lot of conversations with different people, I realized that I wanted to be writing more code. Everyone at WeSpire was super supportive about my decision. We had to redistribute some responsibilities, but we made it work, and now I feel happy and productive again.[bctt tweet="I think #flow is a great way of understanding what makes you happy, says @JohnnyC115"]
Q: That’s a profound self-realization. Was it hard to let go of the director role as a definition of success?
A: There are parts of my management role from a mentorship perspective that I really enjoyed, but I can still do this. I still teach the junior devs; I’m pairing with Liz next week. I’m able to do all the things that make me happy and none of the things that don’t. Well, meetings make me crazy, but that’s life.
It would have been very hard for me a few years ago to do that. But now, I’ve been at the top. I’ve run an organization. I’ve sold a company. I don’t need to prove anything. I don’t need to climb the ladder anymore. As much as I pushed for those things in the past, I realize that they aren’t what I want anymore, and that’s okay.
My secret now is to look for the flow. People have this “work is work for a reason” mentality, but you don’t have to be miserable at your job. It can be fun, it can be fulfilling, it can be joy.[bctt tweet="You don’t have to be miserable at your job. It can be fulfilling, it can be joy—@JohnnyC115"]
I understand the pressure to chase other definitions of success. But, at the end of the day, you need to ask “Do I feel fulfilled? Can I say this was a good day, by my own definition?” If you can’t say that then there probably needs to be a change.
I need to feel that I’m moving forward, and I had stopped feeling like that. I was in a position where I was able to make that change without a massive upheaval. But, I believe that anyone can find fulfillment in their career if they think about the flow. Maybe you have to do a program like Startup Institute to find it, or maybe there are changes you can make at your current job. Just don’t be afraid to chase that flow, because it feels amazing.[bctt tweet="Anyone can find fulfillment in their career if they think about the flow, says @JohnnyC115"]