This video has a talk with Adam Geitgey, a software engineer, machine learning consultant, and an author of LinkedIn Learning content. Previously he worked as a software engineering director for Groupon.
- Hey there, this is Ray Villalobos and this week we're talking to Adam Geitgey, a Software Engineer and Machine Learning Consultant as well as a fellow LinkedIn author. So, previously he worked as a Software Engineering Director for Groupon. How's it going Adam? - It's going great. Nice to talk to you. - [Ray] Yeah, good to have you here. So, first thing I know about you is you've really had some fantastic gigs in your career. So, can you go over about your background and sort of how you were able to chart your path to getting there. - Sure, yeah, I've been programming since I was a kid.
You know, when I was like seven, my dad bought a computer and ever since, I just, that's what I wanted to do. So, when I went to college, it was pretty much obvious I wanted to do Computer Science because it was the thing I did all the time anyway so I thought, hey I might as well do that thing. After I got out of college, I got a job working for a company that did engineering software, CAD software. And, when I was there, they said, hey we need someone to go to our new China office and check that out and see how they're doing and, I was like hey, you can send me. - Wow.
- I didn't think they'd really send me because I'm the newest person who doesn't know anything. But, they did and I ended up living there for a couple of years working, which was great, which was a really great experience, and-- - So, I'm sure people want to know, did you know any Chinese then, or did you just sort of-- - Not at all. - Oh, wow. - I grew up in the Southeast of the U.S. I had never traveled really, except like a little bit in college. I didn't know anything about China. So, it was a really great experience. I grew up in a city of a couple hundred thousand people and moved to a city of 18 million people, Shanghai. So, it was, it was great.
After that I moved back to the U.S. and I worked the small private company that did software for government agencies and when I was there we were able to start a spinoff company that sold a new type of software to these same government agencies. So, I got to be a CTO and learn about growing a small company and those kinds of things which was really exciting. And, after that company was sold, I ended up working at Groupon when they were still, before they went public and they were a lot smaller. And, I worked at Groupon for five and a half years or so.
And, that was another great experience because I got to learn what it was like to build a website that works for a hundred million people and works in thirty countries and all that kind of stuff, which I'd never really done before. - So, pause for a second. I know a lot of people know what Groupon is. How did that happen for you? Like, how did you find that job? What was kind of, what brought you into the company? - Yeah, I had friends that worked there which is always really helpful. You know, it's always great to network and meet other people that work in other companies because, like in that case, I was really qualified for the job. They really wanted to hire me once they met me.
Once I interviewed, they actually wouldn't let me leave the interview until they had made me an offer because they didn't want me to leave and go somewhere else. - [Ray] Right, right, wow. - But, if my friend hadn't bugged them to get me an interview, they probably would have never gotten around to it, you know. - And that's a really good point because that's super important for people who are just getting started to know. Like, a lot of the way that you get in the door is by somebody knowing you because the people who are hiring you are going to be trusting you a little bit better if they trust that person, so that's, that's a really good point.
- Yeah, especially if you're doing something slightly different than what you've done before. Even if you know you can do it and it's obvious you can do it. If you haven't done that on paper, it's hard for them to know. So, it's always great to have friends who can kind of point you towards things that might be a good fit for you. And, after I worked at Groupon, more recently I've become a consultant and now I help small startups kind of figure out how machine learning fits into what these startups are doing. And, I also build classes for Lynda which is super fun. - Super. So, how would you define machine learning just in case somebody's not familiar with that aspect of development and how does it fit into that sort of development construct that, you know, right now people are getting very specialized on different things.
So, how does that fit in? - Yeah, I would describe machine learning as, you know, when you write a typical program, you're telling the computer, do A, B, C, D in the order exactly and hopefully at the end it achieves what you wanted. With machine learning, it's kind of flips on it's head and you say, I have this data and I want to reproduce the output from this data. You figure out how to turn A into B. Like, I don't write the individual steps. I just say, make this result from this data set. You figure out how to do it. It's really interesting because you can solve the kinds of problems with machine learning that you can't really easily solve with regular programming like, looking at a picture and saying, oh is this a cat or not because it would be too hard to write thousands of lines of code that would say, like, if pixel three is red then this is a cat and if it, you know.
Where computers can kind of work out those rules for themselves. But, it's not a fit for every single problem. There's still lots of things where you just have to write the code yourself. So, it's a new area of computing or at least new in the sense that it's being used more and more even though the technology's been around for decades and it's just been in improving. But, to me, it's really exciting. It's a really exciting area. Something new in Computer Science we haven't really used before - Yeah, it definitely sounds very cutting edge. Like, I, how is it different, you know, what sort of maybe languages do you use to sort of work in that field that is different from regular, say, web development.
- Yeah, so it's a lot more math heavy, so, you'll like, Python is a really popular language. But, you're not using just Python itself. You're using add ons like NumPy to Python to let you work as data with big arrays that you can apply operations to the whole array at once. So, you're learning not just a language, but some of the tools and libraries that go with that language. That they're kind of the bread and butter of working with large data sets. And, then, on top of that use machine learning frameworks like Scikit-learn and TensorFlow and Keras and other things. And, of course, if you want to know more check out Lynda because we'll classes on all these things.
- Yes, definitely. You have a couple of really good courses. So, I'll make sure I add links to those. So, Adam, let's rewind back a little bit and think about what you would say to yourself if you were just getting going even before going through any type of formal education. A lot of people are trying to figure out in school what they should be learning. And, so what are your recommendations for somebody who hasn't even maybe picked a college or picked a career. What kind of things should they know so that they understand how to do well in the field. - Yeah, I would say, to start off with, you know, find, like, start building stuff yourself that you think is interesting.
Or, start trying stuff yourself that's interesting. Like, if you interested in computer games, find out how they work. If you're interested in websites, try and you know, try and use that as a launching point to kind of see what the world of computing is and that might guide you towards things that are more interesting. And, then, from there, learn how to find answers to questions, like, learn how to search for stuff on Google, how to, find answers to either programming questions or just how things work. Because that skill will be very helpful once you start learning frameworks and learning programming languages to help you find answers to your own questions, and then, because that's something you'll be doing your whole career in computers.
- Yeah, that's a really good point because I think a lot of people see development as a career starting with the dollar signs. They see that wow, that people in this field do pretty well, but, if you start out thinking about, maybe, the money, that's not a good sort of long term plan. Like, you really need to make it something that you love or really focus on the things that you love. And, it's so broad now. I mean, look at what you were talking about, machine learning. I mean, that wasn't even a thing when I was growing up. So, perhaps, if you really enjoy working with that type of technology versus, like you're saying, programming a video game.
Just getting more into that sort of aspect of the field and trying to specialize. That's a really good, you know, really good opportunity for a lot people. - Yeah, I mean, anything you can do to kind of learn about all the things that exist, you're more likely to find the things that are interesting to you. And, it's so important to find and work on stuff that's interesting to you because, like you said, you can't just learn one thing and that be your whole career. - Right. - Like, you can't learn one programming language and your done. So, if you're working on interesting stuff, you'll be motivated to always be learning about it and learning the new versions of it and new things about it because it's always going to be changing.
So, it's really important to find something you're interested in to work on. - Definitely. So, you've had the opportunity to actually lead a lot of teams and I think that that aspect of working in a team environment isn't as important, necessarily, to somebody who's just getting started, self-taught person, or, you know, when you go through a traditional degree, a lot of times you sort of avoid the group projects because you don't know what kind of people you're going to get. Whereas, you know, when you go into, sort of, a traditional field, the team environment is actually one of the most important things because that's how you do all your work.
So, how is that team environment different than coding solo? - Yeah, I mean, I think it's totally different. Like, you can be a fantastic coder. You can be the best coder in the world and do very badly in a team environment and vice versa. Like, I think when you get your first job and you go into a team of people and some of the people, no matter what, they're going to know more than you or are going to be better at things than you. It can be very intimidating. It can be very, you know, like it's scary to get involved because you don't know as much as everybody. But, I think the things you can work on that are very helpful are learning how to communicate really well.
Like, learning how to be really clear with your ideas and being able to communicate when you have questions, ask like a really clear question and talk about what you've already tried. And that will help a lot when you work on a team. That's skills you can't really learn in a college environment. And also-- - I kind of feel, I'm sorry, I kind of feel like a lot of, you know, people like me who are naturally introverts get into this field because they think, great. Machine learning. I never have to talk to people. (laughs) And maybe that's a misconception. - Yeah, it definitely is.
Like, when you're on the team, you're like, in the company you're going to do things like code reviews of other peoples code and that's scary for the other person and its easy to go in there and say, hey you did this wrong and that wrong and change this and, but, when you're on the other side of that it feels like someone's attacking you or feels like people are criticizing your ideas. And, if you can get really good about being empathetic about what other people with experience when you communicate something and kind of, thinking ahead of how this is going to impact somebody else and communicating in ways that will make people understand what you're saying.
And, it will make other people want to work with you because you're the kind of person they would want to work with themselves, you know. And I think that's-- - Yeah, yeah. - Yeah, like, that's the key to working in groups is trying to be empathetic to what other people would feel and trying to incorporate that in what you do and then that will naturally help your whole career. Yeah, and I think this relates a little bit to the traditional sort of debate about, you know, having a regular education or a traditional education and you have a traditional Computer Science degree so, let's talk about what you learn in school that was really useful that, perhaps, wasn't programming related, but some of the things that kind of, you thought, well, you know, why am I taking this? And then, you actually get into a job and go, wow, that was actually pretty useful.
- Yeah, I would say, I think maybe sometimes people are scared of, you know, Computer Science as a thing. If they didn't have a degree in it they think of like, it's all math or it's all like all this stuff that I don't really use in day to day life, you know? It's kind of like when you're in middle school and you're like, why do I need to know algebra? I'm never going to use this. - That's crazy. - But, I think, you know, in college you learn, you know, you know, the cliches, you learn how to learn, but, I think things you learn in a Computer Science education are, like, a couple of fundamental basics that you use all the time.
If you're working on the internet, learn the basics of how the internet works. Like, learn how http works. Learn, just like, how one machine connects to another. How to set up cables in a SQL database. You don't have to be an expert on it. You don't have to be able to code it. You don't have to know everything. But, if you know what happens when you say, make a call from your front end webpage to a server and know how to debug that, no matter what framework you're using or what technology you're using that will be very helpful and will help you understand why the frameworks work the way they do.
And, you know, you don't have to go to school to learn that. Like, just read a few articles, read a few blog posts, and look in your browser and see what's happening when you connect to a website. I think that's, those are the kinds of things that are really helpful and will really pay off. - Yeah, and I think you mentioned learning to learn. And, in terms of school, I think that's really something that's underrated and valuable about the school experience. That you are given a bunch of assignments. You have, you know, add a lot of pressure. It's almost like, you know, what I think of like the Navy Seals being. They put them under a lot of pressure so that when they're in the real world, you know, pressure is not as big a deal because they've experienced it a lot.
And, I think that when you're in school, school needs to be a learning tool. You are there and you can do the minimum amount of work to do well or you can really take it as, hey I'm going to do my best here to make sure that I'm successful so that when I go into my career I'm going to be successful, no matter what. Because, as you mentioned, in this industry, when you go into, you know, A, B, C field, you're only going to know the current sort of way of doing things and that is always changing.
So, if you don't understand how to learn and how to look things up and, you know, the things that were sort of drilled into in school, sort of like the school skills. Then, maybe you're not going to do as well if you don't have that discipline that I think is really critical. - Yeah, and I think that discipline can come from school. It can come from you. If can come from you're experiences. Like, don't let, if you don't have a traditional education, don't let that stop you. Some of the best developers that I've ever worked with are people who don't have traditional educations.
- [Ray] Definitely. - But, they're people who always want to learn, you know, always want to try new stuff. Always want to test out that new thing and see if it's something that's going to work for them or not. Like, I think they're always asking questions. That's really the key. - Yeah, great. Actually, that brings me to the next question which is, this field is getting super popular and you see more and more people kind of trying to get into it, but perhaps that isn't for everyone. So, what do you think, like in your experience, makes a developer great? Like, what sort of qualities? I know something that I mention sometimes is the ability to overcome problems.
Like when a developer to me you know, goes into a problem, they understand that it's a problem and it's something that they need to overcome. So, it's actually a fun thing to run into a problem. And, you understand that, you know, a lot of times we get shocked when we run a program and it's perfectly fine, like, the first time you do it. It's not supposed to be like that at all. Most of the time it's sort of a feel, a series of, being able to overcome failure which is not what you would sort of expect in a traditional job. So, what kind of things do you think, maybe, when you look at, when you're interviewing developers, you see that this person is going to be really good at working with others or debugging or that type of stuff.
- Yeah, I think like it always comes down to can they ask the question affectively and can they find the answers to their questions. And, what I mean by that is, like, I work on a lot of open source software where people will post issues and say, like, I have this problem and, you know, can you help me solve my problem. And, I'll get emails from PhD students, who are very smart people, who will say things like, I ran the thing and it didn't work, please help. And, that would be the entire email. (laughter) And, that's not going to get them their answer. It's going to make me frustrated and all that.
But, like, that means they're not going to be able to learn quickly. If they could, the people who maybe don't have their educational background, but can go out and say, hey I tried this. Here's what I thought would happen. Here's what didn't happen. What do you think I should do next? Where should I look? And you build up that skill set to be able to quickly find your own answers. That means you're always learning new things. You're always experimenting with new things. And, before you know it, you've amassed, like, all this knowledge of how all these different things work that then help you solve other problems and get better and better. So, you want someone who's inquisitive or is interested to dig in and, you know, debug, and try things, and break things and learn.
And, that's really the key. - And I think even how they ask the question. Like, are they, you know, documenting the question enough so, that somebody else can figure out what the problem is. You know, do they know how to ask questions properly? A lot of times I'll run into students and they'll say something like, oh I spent two hours on this issue and it didn't work. And, I'm like, well I've spent two days on a problem (laughter) so, two hours is amazing (laughter) that you were able to figure it out. So, you really need to kind of change your mind, you know, your mindset about how you approach problems.
So, when I somebody that asks a question, like in the proper way, or is really excited about finding the proper answer, I think that that person does really well versus a lot of times a meet people who are super frustrated when they encounter a problem and they want everything to be perfect and perhaps they get sort of angry whenever they can't figure something out. You know, if you're going to get angry at problems then maybe this isn't the thing for you. (laughter) Problems are actually why you're, why you're doing this.
So, let's talk about coding interviews, specifically. So, what do you try to get out of a developer who's applying for a job? And, what kind of questions do you ask them? - Yeah, it's really tricky because, you know, in most big companies, you might have 45 minutes, maybe an hour with a candidate if you're lucky. And, in that time, you have to, you know, try to decide is this person, someone a person I want to hire or not? Which is hard all the way around because, you know, you can't possibly know everything they know. You can't possibly, you can't just look inside their brain and be like but they'd be good at this job, you know? So, what I try to do is I'm trying to find out one, do they know how to program? Like, or how much they know about programming? How much have they learned? How much experience do they have? What tools are they good and bad with? Are they able to learn to use new tools? That kind of stuff.
And then second, you know, are they going to be able to work on a team? Like, are they going to add to this team or take away from this team? Because, sometimes, you know, one bad person on a team could, kind of, destroy the whole team's productivity. So you're looking for things like you know, are they friendly? Are they open to new ideas? If I ask you a coding question and you get on the wrong path and I make a suggestion, are you able to respond to that suggestion and maybe redirect. Or, do you kind of say, no that's stupid. I'm going to do my own way. You know, like, those kinds of things. And there's no perfect way to evaluate that.
But, you do your best, you know. And then, for the coding side, I try to like look at what the candidate says they know. You know, like look at the resume and try to ask things that they would know because ultimately, I want to see them demonstrate that they know stuff and what they're good at. It doesn't help me to say, to find out, to stump you. Like, I'm not trying to, I don't want you to not know any answers because then I don't learn anything about how good of a programmer you are. So, I'll try to ask questions that, you know, starting simple like can you take this string and pull this data out of it? And, the question seems really simple and maybe it's simple to write a version that works.
But, then, if they do that really quickly, which is what you hope, then you can say well what if the data you passed in, the string was really big or what if it was corrected? What would happen then? Or what would you do if this was on the website? That anybody could put in any information. Maybe hackers could break into it. You can keep expanding the question and making the question harder and harder. And then you find the point where they kind of don't know the answer anymore and that tells you how much they know. And you've asked this question of a hundred people, so you kind of know all the different ways it could go.
You kind of have an unfair advantage so you kind of can measure them against, you know, how other people do on the question and get an idea of what their skillset is. So, that's what I try to do is kind of, you know, find out can they code? If they can code, can they handle unexpected things? If they handle unexpected things, can they adapt it to real world situations where things aren't perfect and data's not perfect? And just keep making the questions harder that way. - That's really good and during that whole time, as you mentioned, you're probably also looking at their personality-- - [Adam] Yeah.
- You know, are they losing patience? You know, are they really frustrated? Do they throw the mouse or something like that? - Yeah and anybody who's interviewed a lot of people, like I used to be at Groupon I was part of a group that we get pulled into all the interview cycles to kind of like meet everybody and, you know, crazy things have happened. Like, things have gone horribly wrong. People have said horrible stuff. You know, you just never know what you are going to get. But, most of the time it goes fine. But, the real secret, if you're going in for an interview, just be yourself. Treat it like you're really doing something on you're own.
Don't treat this as like a fake, like, interview. That's like a library or a school you're going to and there's special rules. Just be yourself and say like, if they ask you a question and you don't know like anything, just say like I don't know and ask a follow up question and say, well what about this? Is this the kind of thing you're getting at? Or, if you know how to do it, but you don't remember the right function to call say, I don't remember the function to call, but, here's exactly what it would do. Normally, I would just Google the function name. Can you tell me the function name? Or, if you can't, you know, let me at least try to solve it by telling you the process by which it would go through.
You know, that kind of stuff. Because, you want to work with people who will try to solve the problem. You don't want to work with people who just shut down and say I don't know, you know? - So, what point do you take a look at sort of their existing body of work and what kind of things do you like to see? Say, for example, maybe a GitHub Repo or a some, do you like to see some sort of existing work that they have done and kind of gauge them on that? Yeah, it's, sometimes you have that benefit and sometimes you don't. And, it's tricky because you don't want to, like, bias against people who don't have time to work on lots of open source projects or, you know.
But, I always treat it as additional evidence they know what they're doing. So, if they say, hey, I worked on this project, it's really cool. I'll say, great! Let's talk about that. Maybe I can ask a question about that project. And, then, I'll go take a look at the code afterwards. And, that's always better. You know, like, like, the more you've done, the more evidence they have the better. But, don't feel like you need to go create a GitHub account to put some sample code on that's not interesting because it doesn't help me at all. You know, like, just because you learned how to sign in to GitHub doesn't tell me about how good a programmer you are.
So, use it to experiment. Like, use it to contribute to other projects if you have time or if you're interested. Write some projects if you're interested. But, it's not a minimum requirement but, it's usually helpful. - So, I think that as somebody who's coming in, you're job is perhaps to provide you with enough evidence that you sort of know what you're doing, so, that you can make an assessment of whether or not you're ready for, you know, this job and then, also, remembering that I think it is real important to figure out how that person fits in with the team.
I know that's really crucial. And, that's why recommendations are so important sometimes because somebody who already knows this person they know what type of person they are. They're really helpful. They're friendly, you know. They'll get along great with the rest of the team. - Yeah, like, the secret is if you, if you're at a big corporate like a top tech company or any kind of like Silicon Valley company, they kind of do things the same way. You talk to like four or five people and then those four or five people meet later and compare notes and say like, they did great on my question.
They didn't do great on my question. Whatever. Because, they don't want to let one person make the decision. Maybe one person asked a bad question. Or maybe, you know, you know. So, if everybody says it went terrible then, the person probably won't get hired and that's fine. If everybody says it went great then, they'll call the person immediately and try to hire them. But, like 85% of the time, it's somewhere in the middle. Where like even if they're a really good developer, they didn't do great on one question. Or the interviewer asked the question in a bad way and the candidate didn't understand it or something. So, we're trying to figure out together what's best for the company.
Is this someone that would be good to bring on? And, that's the times when, you know, being able to point to a GitHub Repo and say, oh they did bomb this question, but actually they show they can code in this GitHub Repo. That will push them over the line. That kind of thing. So, whether you interacted really well, like as a person, and projected that you can work well on a team. Or you've got some other work you've done. Or you're really good at asking questions and following up. That's the kind of stuff that will get you hired over not getting hired, you know. - Awesome. So, that's everything I have Adam. Thank you so much for you're time.
And, I'm going to add some links to your contact info. As I normally say, if you have a question that you've been asked or have asked during an interview and you'd like to share, please get ahold of me at LinkedIn or through almost any social media network at planet of the web. Thanks a lot, Adam. - [Adam] Thank you. Appreciate it.
Skill Level Intermediate
Q: Why can't I earn a Certificate of Completion for this course?
A: We publish a new tutorial or tutorials for this course on a regular basis. We are unable to offer a Certificate of Completion because it is an ever-evolving course that is not designed to be completed. Check back often for new movies.