Meet Jeff Johnson, one of Microsoft’s finest. While Jeff agrees that you don’t necessarily need a degree to gain your footing as a software engineer, a bit of formal education can sometimes do wonders. An education, while important, is but one way to immerse yourself in the world of technology. There are so many other ways to engage in unique learning experiences as well. Many of these can be found online in your spare time like podcasts, conferences, blogs, and more. Join us for episode 15 and give a listen to Jeff’s words of wisdom as Arsalan quizzes him on the many aspects of engaging in software engineering.
Jeff Johnson is a Seattle based engineer passionate about the craft and the end user. He has been a startup CTO, Program Manager, and most recently Software Engineer working on Microsoft Office Graphics. Originally from Ohio and earning a degree in Electrical and Computer Engineering at Illinois Tech in Chicago, Jeff has been working his way out west to enjoy the vibrant tech community and amazing landscapes.
You can find Jeff’s work on Github.
Episode Highlights and Show Notes:
Arsalan: I know Jeff from a long time ago and I mentored him and now he’s off to really good things. Who is Jeff Johnson? Jeff, please describe yourself.
Jeff: I am a computer guy by day/night and hike guy by weekends. I’ve been passionate about engineering since childhood. Now, I’m able to do it professionally as a software engineer at Microsoft.
Arsalan: I know you have done different things at Microsoft. Please tell us a little about what you’ve done.
Jeff: I began as a program manager. Fresh out of college, I joined the charting team: Data Visualizations. We are responsible for visualizations throughout Office. Our platform runs in Word, Excel, and Powerpoint. It was a great experience. We would actually go to people’s houses and watch them use Excel. It was great having that kind of interaction.
Arsalan: You’ve been on both sides. You’ve been a manager and you’ve also been a hardcore developer. From my own experience working with you, I know that you are a top-notch developer. It’s very interesting that you are interested in managing because a lot of developers are not.
Jeff: It was something that I was interested in, but it was really hard to get away from engineering. I’ve had some startup experience and see myself doing something similar in the long-term. Whether as part of a large corporation or on my own, part of my interest is finding out what kind of problems people need solved, whether they know about it or not. I’m looking for ways to make their work or their lives better. It was very attractive to me.
Arsalan: For someone thinking about going into programming, they might be unsure what it is going to be like. I think it would be helpful for them if you could walk through your first encounter in programming so that other people can get inspired by it.
Jeff: My first experience would have been in 5th or 6th grade and starting out in PHP. I was playing video games at the time. I wanted to make a website for our clan. I started out chugging through tutorials online, which at the time were pretty fragmented. It was hard to hold together some of those resources. I started with copying and pasting things and watched what just a few lines will do to stuff right on my computer. It was amazing to me having that kind of control and ability to make something work like that on my own.
Arsalan: The feeling of creativity is very exciting.
Jeff: One of the things that I love about programming is that you are building upon either what you have built or something that others have built. There are very little instances of throwing something away and starting something fresh. It’s more incremental progress. Everyday you’ve moved the needle a little more because maybe one day you started at zero, but the next day you started somewhere else. I think that’s one of the things that are truly unique about the field itself. It’s because you are building bigger and bigger progress.
Arsalan: A lot of people think that software development can be a vehicle for change in society. People talk about making a dent in the universe. They want to bring about changes and they think that is the way to do it.
Jeff: Computers are able to be duplicated because once you build it once; you can put it in so many places. Anyone can have influence on a local sphere, but with programming you can distribute it to so many people. That is world changing right there.
Arsalan: Did you study computer programming in some kind of formal environment?
Jeff: I studied electrical and computer engineering. We touched a bit on computer science. Computer engineering is kind of halfway between electrical and computer science. It was really cool because I got to pick and choose which computer science courses I wanted to take. I did have a good chunk of formal teaching, but previous to that I had done a lot of training on my own. That’s how I’m continuing to grow as a developer too. There are a lot of resources out there for programming. With the right kind of desire, you can test the waters a bit and I think it’s also easy to get that kind of desire out of the classroom as well.
Arsalan: How did the classes go? How did it go while getting the computer engineering degree? Now that you’ve worked in the industry for a few years, do you think it was worth it? If you hadn’t have done that, would you have been the same person or do you think that it made a difference?
Jeff: The experience was awesome. I remember one of my first days in my first computer science courses, which would’ve been Intro to Objective Programming. I was blown away that we were going to talk about this all day. It was the first time when I found it to be exciting. A good deal of it has shown useful since I’ve switched over to software engineering, especially the lower level stuff. Learning about how the computer functions and the assembly and things underneath that has helped. That’s particularly true since I’m working with C++. The most valuable piece was learning the engineering process. I also think the grueling labs where you’re taking a problem, chunking it up and then going after it was a good take away from my undergrad. It’s also something that you get in a professional environment. You’re really focused and devoted to learning how to become an engineer and you have the resources around you to do that. So, I think it was very valuable. It was a good four years well spent.
Arsalan: If you were considering taking computer science or engineering as a major, but then you rethink your plan and you it to a minor instead. Do you think it’s important to become a software engineer to be immersed in computer science as a major in college, or do you think you can get away with it as a minor or maybe just take a couple of courses here and there on the side?
Jeff: I think if you want to be a programmer, regardless of which path you take, there’s always a way to do that. I think for someone who is passionate about computer programming, the most beneficial thing you can do is immerse yourself in it. Being able to buckle down and focus on that specific area has huge returns in skills, velocity, and how fast you can come out of that and perform in a real environment. Immersing yourself in it is the best way to hit the ground running.
Arsalan: It’s important to immerse yourself. It’s important to show some intent as well, but does it help you get your first job? Once you have your first job, you have a couple of years’ experience, and maybe your degree doesn’t matter as much as your experience at that point. Do you think the degree helped you get your first job?
Jeff: Yes. I think that was a tremendous foot in the door. I think it came down to the filter of making the interview. I don’t think it was the premier hiring decision. Having the degree is not enough, but having the degree in a relevant field allowed me to get past the first filter of candidates to reach the interview phase. It’s still possible to get your foot in the door without the degree, but I imagine it’s more challenging.
Arsalan: How did you get your first job as a software developer?
Jeff: I met Microsoft at the career fair in November 2012. I introduced myself to the recruiters and had some discussions with them. I was able to make some personal contacts with them and provided them with my information. From there it was a pretty quick process. I received my job offer that same day.
Arsalan: You applied for the program manager position. Did you have to go through technical or programming interviews as well?
Jeff: I did a mix. There were a few interviews where we discussed design, team, and how I do things. There were also one or two interviews where we discussed my technical background as well, but it was very light compared to some of the software engineering interviews that I had done in the past. But, they wanted to make sure I knew what I was talking about.
Arsalan: You mentioned you applied for this job through an academic job fair. That was probably organized through your university, correct?
Jeff: That is correct.
Arsalan: That’s another benefit of going to college.
Jeff: I benefited tremendously from our career center. I was able to have a good relationship with some important folks. One of them was and still is a mentor to me. That was a huge resource for me in learning how to pursue companies and opportunities directly that interested me. But, it was also nice to have a host of companies at the job fair at the school as well.
Arsalan: What are some of the challenges that you face day to day in your first Microsoft job? When I worked with you, you were an intern. You worked a couple of positions as an intern. Tell me about your challenges in those positions. Was keeping your skills one of them, or did you have more challenges keeping up with the corporate environment?
Jeff: It depends from area to area. Working professionally on a team was a bit of a challenge. Learning how to structure your questions and when to go get feedback, those soft skills that are learned on the job were more challenging to me than the technical piece. We spent a great part of a month just learning the technical part of the job, working on some pet projects. It was grooming us to be more comfortable with the job, language, and the tools. With that under our belts, it was really easy to get going on the actual work at hand.
Arsalan: I want to talk to you about the mentorship program there that I instituted there and we had the one month that we talked about. Every week there was a set of objectives that you needed to achieve some coding, some projects, and some readings. The goal was to give the apprentice or new developer a better handle on things. They’re not going to be experts, but they’re also not going to be overwhelmed or make some common mistakes. Do you think that was a good approach? There are two approaches to mentorship. The other one is to shadow a more senior employee and work on the same projects for a couple of months and learn by being around that person. Which do you think is better?
Jeff: For the purpose of getting started, I think a more structured approach was better because you really need to get your feet wet in a lot of areas. The bigger the project, the more errors there are. By getting your feet wet and knowing the very basics of where to look, what to ask, who to ask is a great approach to get going. In the longer term, having someone to shadow has tons of value for your career as well, but those discussions you’re not ready for right off the bat. You really need to get moving first to learn how to feel out the team and the culture more. There’s no better way to get moving than having that structured buildup.
Arsalan: That’s interesting. I think you’re suggesting a hybrid approach. Initially when people come in, let them have the structured classroom environment to learn certain skills and do certain projects. Then, having assigned mentors for once they graduate from that initial training. That way, you have someone assigned to you for questions if they come up so that you don’t make a mistake. That hybrid approach is brilliant.
Arsalan: Have you found anyone having struggles as a new developer? Perhaps not yourself, but do you know of other people who have struggled as new developers?
Jeff: Absolutely. I’ve had some struggles myself, but I’ve seen it as well to varying degrees in others.
Arsalan: Can you describe a couple of those?
Jeff: One individual was taking the task at hand and really getting himself bothered about his velocity and ability to solve the problems on his own. This was an internship setting where everyone has their own stuff to do. You can really see someone’s frustration when they struggle. It’s really visible. I didn’t know what to do at the time, although now I could be a little more helpful. I think what would’ve really helped him out would have been asking for help sooner rather than waiting until the deadline is slipping. It would’ve helped him by seeking help sooner and communicating that he was going to be behind on something and why. Not being able to communicate that is detrimental and a lot of junior developers face that.
Arsalan: I think what you’re saying is absolutely true, but I wonder if the person who is not coming out and asking for help is doing that due to a fear of being judged. There could be a lack of confidence because they don’t have the experience. There could also be this imposter syndrome where they don’t feel like they belong and they don’t want to be found out. There are a lot of fears and emotions going through a person. As an organization, it would be great if we could say that it’s okay to say that you don’t know how to do something or that you are stuck.
Arsalan: For someone who is thinking about software development as a career, but is a little intimidated, how would you rate software development as a career on a scale of 1 to 10?
Jeff: It’s got to be an 8 or a 9 to me. I only say that because there’s always room. There’s always something magical out there that I don’t know. The nature of the problems and keeping your mind engaged, coming into the office and solving unique problems pretty regularly is not something you get at a lot of desk jobs. It’s a desk job. I’m sitting at my computer, but my mind is flowing. It also provides a lot of flexibility too, I think. That is a differentiator in my mind. I want to keep my mind going. That’s something that software engineers really thrive on, I think.
Arsalan: If you could start over, now that you know something that you didn’t know, what would you do differently as a new developer?
Jeff: I would have spent more time on my tools, learning them, customizing them, and making them work for me. I have recently begun investing in my own scripts, or learning other peoples’ stuff and talking to other developers about their productivity. If you want to talk to a developer for eight hours, just talk to them about their text editor stuff. I’ve realized the time that I can save in a day by having efficient tools. I can also save on frustration as well by doing that and having the computer work for me. It pays off so much. That free time means that I’m getting something else done, working on another project, or maybe I’m going home. It’s a win-win. The tools and the more I put into learning them and improving them just dividends.
Arsalan: Do you think it’s important for new developers to promote themselves? Is it important to talk about what you have done in addition to doing good work? I’m asking because most developers are introverts and they don’t really like to socialize, but there is a growing movement for self-promotion and I want to know what your opinion is.
Jeff: Any work that you do, that you can have in the public and open to others to see, stumble upon, or use gives you some of that self-promotion. It also makes you a better engineer. Lead with your projects. Produce things and get them out there in front of people. That’s the best promotion you can have. It’s not just you saying that you know this great technology. It’s you proving it. It’s you putting it out there and helping out other people in the community. That’s a win-win.
Arsalan: That’s a good answer. I was wondering if there were other ways of promoting your work. You could do open source work and you could put your code up on GitHub. But, you could also do other things. You could write about it. Even if it’s proprietary and you can’t open source, you could perhaps write a blog post about it or maintain a regular blog. You could talk about what you’re working on as a way to promote yourself and your work. Or, you could give talks in user groups and conferences. Is that something that’s important that has value or is it too much work and not enough bang for the buck?
Jeff: Those are activities that I have in my head that I should do, but are not ones that I’ve approached. Some of that is the fear of not being ready to do that. From a consumer of a lot of that content, it’s always been worthwhile for me to be on the other end reading those blog articles. I can only imagine that it’s good for the presenter as well.
Arsalan: Do you think you’re not ready because you don’t have anything to share? Or, you’re not ready because you’re a little shy?
Jeff: I’d say it’s a bit of both. I think the shyness is definitely a factor. It’s tough to get in front of a room. It’s funny that it’s tough because the audience is there because they really want to hear what you have to say. They want you to do a good job and it can be tough to overcome that. I do hope to be able to do that at some point, though.
Arsalan: Do you listen to podcasts?
Jeff: Not much lately. I have been listening to as much of This American Life as I can because I only read tech things. So I need to see something else out there, but I do plan on listening to this podcast. I’ll tell you this much.
Arsalan: That’s good to know. Everyone should be listening to Mentoring Developers. What about screencasts? Some people don’t like to go to conferences for various reasons, but they do like to watch recorded conference presentations.
Jeff: Absolutely. I learned and built an entire product just by watching Rails casts. Brian Bates does an amazing screencast. I think it’s a very consumable medium. The conference is a bit of a different experience. But, purely for consuming technical information, I love the screencasts.
Arsalan: What’s the best advice you can give to software shops that are looking to hire new developers?
Jeff: Be clear that you’re hiring them to teach them and to grow. Be focused on explicitly saying that you are there to help them become a better engineer and we know that we are going to be a better team and a better company because of it.
Arsalan: What’s your best advice for new and aspiring developers?
Jeff: Immerse yourself in the technology. Focus on the aspects that you’re passionate about…and you’ll find your way over there. Ask as many questions as you can reasonably get out. Try to find those resources that will be really valuable to you in the long run.
Arsalan: That’s an all-encompassing answer. Ask questions. Look for answers and don’t be afraid. You will succeed if you persevere. It’s been fun talking to you especially since I know you personally. It’s been really good to see your journey from intern to starting your own company and being a founder, and then going to Microsoft and doing program managing and software development. I think it’s amazing. People are really going to benefit from this interview.
Jeff: Thank you. I’ve really appreciated the opportunity to talk to you today. The mentoring that you’ve provided for me was really helpful in that journey and getting started and things like that.
Arsalan: Thank you. Before we go, are there any things that you’d like to promote and how our listeners can get in touch with you?
Jeff: I am working on a Rails gem right now to do a progressive loading. If that sounds interesting to you, check me out at johnsonjeff.com. It’s got a link to my GitHub and a few other things. Aspiring developers feel free to reach out to me and we can always talk tech. I’m always happy to point stuff out.
- [Progressive Load]
- [OpenSource] 43:24
- [GitHub] 43.29
- [This American Life] 45:24
- [Rails Casts] 45:59
- [Hand Drawn Hero] 46:56
- [Jeff Johnson’s Website] 52:57
Thanks for Listening!
If you found this episode useful, please go ahead and share it with your friends and family. You can do that easily using the social media buttons at the bottom of this page.