1 00:00:00,000 --> 00:00:00,270 2 00:00:00,270 --> 00:00:01,310 DAVID MALAN: All right. 3 00:00:01,310 --> 00:00:04,811 So welcome to CS500's third annual prep and practice for technical interviews. 4 00:00:04,811 --> 00:00:07,810 As you all know, the goal of the session is really to better prepare you 5 00:00:07,810 --> 00:00:11,239 as you go into maybe your first or your second year or third year of interviews 6 00:00:11,239 --> 00:00:13,780 just feeling more comfortable, more confident, and more aware 7 00:00:13,780 --> 00:00:16,071 of what kinds of questions you might get asked and also 8 00:00:16,071 --> 00:00:19,480 to get you some feedback and some thoughts on how best to structure 9 00:00:19,480 --> 00:00:21,550 resumes, things to do, and not to do. 10 00:00:21,550 --> 00:00:24,640 And we're super excited to have two of our friends from Quora here, 11 00:00:24,640 --> 00:00:25,900 Ryan and Tommy. 12 00:00:25,900 --> 00:00:28,526 Tommy, of whom was one of CS50's head TFs just a few years ago. 13 00:00:28,526 --> 00:00:30,316 And if you took CS50 a couple of years ago, 14 00:00:30,316 --> 00:00:33,400 odds are you were using a lot of the software that Tommy himself wrote. 15 00:00:33,400 --> 00:00:37,360 He's been at Quora since doing amazing things in mobile and software 16 00:00:37,360 --> 00:00:38,570 engineering, more generally. 17 00:00:38,570 --> 00:00:42,620 And so we'll now turn it over to them to take us away thanks. 18 00:00:42,620 --> 00:00:45,792 [APPLAUSE] 19 00:00:45,792 --> 00:00:47,750 TOMMY: So as David mentioned, my name is Tommy. 20 00:00:47,750 --> 00:00:50,810 I used to be one of the head TFs CS50. 21 00:00:50,810 --> 00:00:52,280 And since then I've been at Quora. 22 00:00:52,280 --> 00:00:53,360 I've been on a bunch of different teams. 23 00:00:53,360 --> 00:00:54,500 I've worked on mobile. 24 00:00:54,500 --> 00:00:55,960 I worked on performance. 25 00:00:55,960 --> 00:00:57,887 I'm currently leading our platform teams. 26 00:00:57,887 --> 00:01:00,470 So platform you can think of as basically internal engineering 27 00:01:00,470 --> 00:01:01,380 and productivity. 28 00:01:01,380 --> 00:01:04,549 So we work on things like tools for full stack engineers 29 00:01:04,549 --> 00:01:07,340 and distributed systems for machine learning engineers-- basically, 30 00:01:07,340 --> 00:01:10,125 a lot of the foundational stuff that a lot of Quora is built on. 31 00:01:10,125 --> 00:01:11,791 I'll let Ryan introduce himself as well. 32 00:01:11,791 --> 00:01:13,080 RYAN: Yeah, hi, I'm Ryan. 33 00:01:13,080 --> 00:01:16,700 I'm a software engineer here at Quora, so I work on our machine learning team. 34 00:01:16,700 --> 00:01:19,640 So I kind of focus on those e-mails you might get 35 00:01:19,640 --> 00:01:22,040 from us, our digests, our main feed. 36 00:01:22,040 --> 00:01:25,290 So working on the ranking algorithms and the performance assistance that 37 00:01:25,290 --> 00:01:28,090 drive that at Quora. 38 00:01:28,090 --> 00:01:29,242 TOMMY: Awesome. 39 00:01:29,242 --> 00:01:30,950 So as David mentioned, today, we're going 40 00:01:30,950 --> 00:01:35,145 to go through a workshop focusing on all aspects of the technical interview. 41 00:01:35,145 --> 00:01:38,100 Technical interviewing can be really intimidating and scary. 42 00:01:38,100 --> 00:01:41,340 There's not a lot of sort of direction of what's going to happen. 43 00:01:41,340 --> 00:01:43,520 So really, the goal of this workshop is to help 44 00:01:43,520 --> 00:01:46,603 you understand all different parts of the process, what's going to happen, 45 00:01:46,603 --> 00:01:49,220 what you can expect, and then lots of strategies and tips 46 00:01:49,220 --> 00:01:51,080 and tricks along the way to help you prepare 47 00:01:51,080 --> 00:01:52,927 and be successful in those interviews. 48 00:01:52,927 --> 00:01:55,010 So this is what we're going to be covering today-- 49 00:01:55,010 --> 00:01:57,560 basically, sort of an end to end process for the interview. 50 00:01:57,560 --> 00:02:00,740 So things to do before the interview, how to prepare for the interview, 51 00:02:00,740 --> 00:02:03,350 during the interview itself, what to do after the interview, 52 00:02:03,350 --> 00:02:05,450 and then we'll have lots of time at the end for Q&A. If you 53 00:02:05,450 --> 00:02:07,616 have questions, anything specific to your situation, 54 00:02:07,616 --> 00:02:09,070 happy to answer those questions. 55 00:02:09,070 --> 00:02:12,750 We'll do a couple of mock interviews as well. 56 00:02:12,750 --> 00:02:15,650 So to start, let's talk about before the interview itself. 57 00:02:15,650 --> 00:02:19,220 So before interviewing, the first decision that you clearly have to make 58 00:02:19,220 --> 00:02:21,629 is choosing companies to interview with. 59 00:02:21,629 --> 00:02:24,670 You probably don't want to interview with every single company out there. 60 00:02:24,670 --> 00:02:25,490 You don't have the time. 61 00:02:25,490 --> 00:02:27,281 You're probably wasting their time as well. 62 00:02:27,281 --> 00:02:31,310 So this is sort of an important first step during the interviewing process. 63 00:02:31,310 --> 00:02:34,520 So I have here five questions that you probably 64 00:02:34,520 --> 00:02:38,390 want to ask yourself as you're choosing companies. 65 00:02:38,390 --> 00:02:41,540 So the first one is, what are you looking for? 66 00:02:41,540 --> 00:02:44,190 Whether it be an internship or a full-time job, 67 00:02:44,190 --> 00:02:46,890 I think everybody is looking for different things. 68 00:02:46,890 --> 00:02:50,360 So some people in their job really want to focus on impact 69 00:02:50,360 --> 00:02:52,430 and want to work at a company where they can 70 00:02:52,430 --> 00:02:54,680 have a really strong impact on the product, 71 00:02:54,680 --> 00:02:57,560 not just work on some small corner of some larger system 72 00:02:57,560 --> 00:03:00,710 but really take a lot of ownership, drive a lot of things themselves. 73 00:03:00,710 --> 00:03:02,630 Other people want to focus on learning. 74 00:03:02,630 --> 00:03:05,627 Maybe it's your first internship, and it might be hard 75 00:03:05,627 --> 00:03:07,460 for you to jump in and have a lot of impact. 76 00:03:07,460 --> 00:03:10,543 And you just really want to focus on learning a bunch about the industry-- 77 00:03:10,543 --> 00:03:13,010 sort of soaking up as much around you. 78 00:03:13,010 --> 00:03:15,110 Maybe you want to think about work-life balance. 79 00:03:15,110 --> 00:03:17,810 Maybe you want to go live in a new location for the first time. 80 00:03:17,810 --> 00:03:19,519 Maybe you're like me, you're from Boston. 81 00:03:19,519 --> 00:03:21,310 You've never been on the West Coast before. 82 00:03:21,310 --> 00:03:24,734 You want to try a West Coast internship, want to try a New York City internship. 83 00:03:24,734 --> 00:03:25,400 That's all fine. 84 00:03:25,400 --> 00:03:27,140 That's something that some people want. 85 00:03:27,140 --> 00:03:28,440 I know some people care about money. 86 00:03:28,440 --> 00:03:30,580 This is something that might matter to some people, not to other people. 87 00:03:30,580 --> 00:03:33,137 And none of these is really more important than the other. 88 00:03:33,137 --> 00:03:34,970 So a lot of times, when you're interviewing, 89 00:03:34,970 --> 00:03:37,400 you'll see a lot of sort of peer pressure from your friends of, 90 00:03:37,400 --> 00:03:40,316 oh, you've got to interview at this place, or you can't go work there. 91 00:03:40,316 --> 00:03:41,994 That's so lame. 92 00:03:41,994 --> 00:03:43,160 I wouldn't think about that. 93 00:03:43,160 --> 00:03:45,110 Everyone is really, really different and what 94 00:03:45,110 --> 00:03:47,750 everybody is looking for out of an internship or even 95 00:03:47,750 --> 00:03:49,880 their first job out of college is really different. 96 00:03:49,880 --> 00:03:52,700 And so recognize that and make sure you're asking yourself 97 00:03:52,700 --> 00:03:56,270 what it is that you're individually looking for. 98 00:03:56,270 --> 00:03:58,910 So second question you ask yourself is would you 99 00:03:58,910 --> 00:04:02,060 be excited to get up every day and work on this product 100 00:04:02,060 --> 00:04:04,460 since that is something you are going to be doing 101 00:04:04,460 --> 00:04:07,280 is getting up every day at 9:00 or 10:00 AM 102 00:04:07,280 --> 00:04:09,114 and working on this product for a long time. 103 00:04:09,114 --> 00:04:10,988 So you want to make sure that you're actually 104 00:04:10,988 --> 00:04:12,480 excited to work for this company. 105 00:04:12,480 --> 00:04:16,310 So in many consumer companies, it's really easy to just go use the product. 106 00:04:16,310 --> 00:04:18,019 If you enjoy it, it's something you could 107 00:04:18,019 --> 00:04:21,200 see yourself contributing to and being excited about working on, 108 00:04:21,200 --> 00:04:22,505 that's a great sign. 109 00:04:22,505 --> 00:04:24,380 Other companies, that their product might not 110 00:04:24,380 --> 00:04:25,880 be super available, especially if they're 111 00:04:25,880 --> 00:04:27,710 in the enterprise space or you're working 112 00:04:27,710 --> 00:04:29,690 on something that is a little hard to access, 113 00:04:29,690 --> 00:04:31,927 or you wouldn't use much as a student. 114 00:04:31,927 --> 00:04:32,760 That's totally fine. 115 00:04:32,760 --> 00:04:34,070 Just learning about the company's mission 116 00:04:34,070 --> 00:04:36,200 and what their high-level goals are as a company 117 00:04:36,200 --> 00:04:38,783 and what they're trying to do in the world also sort of paints 118 00:04:38,783 --> 00:04:40,950 a picture of what their day to day work is going 119 00:04:40,950 --> 00:04:42,740 to be like if you were to work there. 120 00:04:42,740 --> 00:04:46,610 So these are always super publicized online in their about page or whatever. 121 00:04:46,610 --> 00:04:48,800 Companies are pretty public about their mission 122 00:04:48,800 --> 00:04:52,560 and explaining what they're trying to do to the world. 123 00:04:52,560 --> 00:04:55,640 So the third is whether or not you'd be excited to get up every day 124 00:04:55,640 --> 00:04:57,620 and work with the people at that company. 125 00:04:57,620 --> 00:04:58,940 So that's another real thing. 126 00:04:58,940 --> 00:05:02,330 You could be working on your favorite product, 127 00:05:02,330 --> 00:05:03,810 your favorite product in the world. 128 00:05:03,810 --> 00:05:06,020 But if the people that you're working with you don't like 129 00:05:06,020 --> 00:05:07,970 or you don't collaborate well with, now that's 130 00:05:07,970 --> 00:05:09,886 not going to be a great experience-- so that's 131 00:05:09,886 --> 00:05:12,500 a really important part of the equation. 132 00:05:12,500 --> 00:05:16,520 And the best way to get signal on this is during the interview process itself. 133 00:05:16,520 --> 00:05:19,250 You're guaranteed to be meeting with several different people 134 00:05:19,250 --> 00:05:21,740 from that company during the interview process 135 00:05:21,740 --> 00:05:24,840 and so think about how those conversations are going. 136 00:05:24,840 --> 00:05:28,460 Every interviewer will say do you have any questions for me about the company 137 00:05:28,460 --> 00:05:30,110 or about my journey here? 138 00:05:30,110 --> 00:05:32,027 Really, really, really take advantage of that. 139 00:05:32,027 --> 00:05:34,860 I've had so many people when I say do you have any questions for me? 140 00:05:34,860 --> 00:05:36,620 They just say like, no, I'm tired-- 141 00:05:36,620 --> 00:05:39,379 not a great answer, one, from my perspective but also from theirs 142 00:05:39,379 --> 00:05:41,420 because they're really missing out an opportunity 143 00:05:41,420 --> 00:05:43,410 to understand what it's like to work at Quora 144 00:05:43,410 --> 00:05:46,330 or work with me with anyone else on the interview loop. 145 00:05:46,330 --> 00:05:48,330 So this is also a really important thing. 146 00:05:48,330 --> 00:05:50,663 This is the thing that's a lot harder to get a sense of. 147 00:05:50,663 --> 00:05:53,617 You can't just go to like quora.com/careers and suddenly 148 00:05:53,617 --> 00:05:55,950 understand what it's like to work with the people there. 149 00:05:55,950 --> 00:05:58,033 You only get this by interviewing so make sure you 150 00:05:58,033 --> 00:06:00,330 capitalize on that opportunity. 151 00:06:00,330 --> 00:06:03,600 Also once you have an offer, this is another really, really great 152 00:06:03,600 --> 00:06:06,474 opportunity to talk with a lot of people from the company. 153 00:06:06,474 --> 00:06:09,390 If a company gives you an offer, that means that they want you to join 154 00:06:09,390 --> 00:06:12,180 and they're going to put in a lot of effort to make sure that you join. 155 00:06:12,180 --> 00:06:14,720 You're probably and to have offers from three or four different companies 156 00:06:14,720 --> 00:06:17,142 who are sort of competing for you to join their company. 157 00:06:17,142 --> 00:06:20,100 So that means if you're in that situation, you've got a lot of leverage 158 00:06:20,100 --> 00:06:21,870 and you can just sort of ask like, hey, I am 159 00:06:21,870 --> 00:06:23,453 thinking about these different things. 160 00:06:23,453 --> 00:06:27,220 Do you mind if I talk to some PM or your head of business or someone 161 00:06:27,220 --> 00:06:30,275 on a design team or the head of engineering or something? 162 00:06:30,275 --> 00:06:32,150 If companies gave you an offer, they're going 163 00:06:32,150 --> 00:06:34,177 to be really willing to put in that time for you 164 00:06:34,177 --> 00:06:35,760 to meet other people from the company. 165 00:06:35,760 --> 00:06:38,460 You can ask them questions and learn about their role, how 166 00:06:38,460 --> 00:06:41,742 you'd fit in at the company, what that day to day is going to look like. 167 00:06:41,742 --> 00:06:43,450 Oftentimes, recruiters will ask like hey, 168 00:06:43,450 --> 00:06:44,310 is there anyone you want to talk to you? 169 00:06:44,310 --> 00:06:45,790 Can I set up these conversations? 170 00:06:45,790 --> 00:06:47,623 Some companies call them reverse interviews. 171 00:06:47,623 --> 00:06:51,480 Some companies call them sale chats, which is a little more direct. 172 00:06:51,480 --> 00:06:53,820 If a recruiter doesn't ask, just ask them. 173 00:06:53,820 --> 00:06:57,850 Chances are, they'll be really willing to do that for you. 174 00:06:57,850 --> 00:07:00,480 So fourth, you want to make sure that the things 175 00:07:00,480 --> 00:07:03,300 that you value align with things that the company values. 176 00:07:03,300 --> 00:07:05,970 So you can think of company values as basically 177 00:07:05,970 --> 00:07:09,870 what some company values more than other companies out there. 178 00:07:09,870 --> 00:07:12,870 So for example, probably a lot of companies value like 179 00:07:12,870 --> 00:07:14,640 don't steal stuff-- 180 00:07:14,640 --> 00:07:17,042 not all of them but probably most of them. 181 00:07:17,042 --> 00:07:20,250 And that's not really a value because like every company sort of values that. 182 00:07:20,250 --> 00:07:21,999 So when companies talk about their values, 183 00:07:21,999 --> 00:07:24,270 they're talking about what differentiates them 184 00:07:24,270 --> 00:07:25,990 from a lot of other companies out there. 185 00:07:25,990 --> 00:07:28,761 So again, these are really easy to find for basically any company. 186 00:07:28,761 --> 00:07:30,510 You're just looking at their careers page. 187 00:07:30,510 --> 00:07:32,940 They probably shove them in your face during the interview process, which 188 00:07:32,940 --> 00:07:35,050 is good because you know what they are. 189 00:07:35,050 --> 00:07:37,260 Here's an example-- so these are Quora's five values. 190 00:07:37,260 --> 00:07:39,840 So one, everybody at Quora is really mission first. 191 00:07:39,840 --> 00:07:43,359 We really believe in putting the team and the company over yourself, 192 00:07:43,359 --> 00:07:45,150 so the achievement of a team in the company 193 00:07:45,150 --> 00:07:47,820 is much more important than your own individual achievement. 194 00:07:47,820 --> 00:07:48,970 Second, we value drive. 195 00:07:48,970 --> 00:07:52,320 So people who take a lot of initiative, have a lot of autonomy, 196 00:07:52,320 --> 00:07:55,445 don't sort of sit around and wait for someone to tell them to do something. 197 00:07:55,445 --> 00:07:57,120 They go off and do things themselves. 198 00:07:57,120 --> 00:08:01,020 Value agility-- so the ability to quickly pivot and change our approach 199 00:08:01,020 --> 00:08:02,970 or direction to solving some problem. 200 00:08:02,970 --> 00:08:03,900 We value awareness. 201 00:08:03,900 --> 00:08:07,620 So we're a very data-driven company-- so being aware of different data, 202 00:08:07,620 --> 00:08:09,970 being able to make rigorous data-driven decisions. 203 00:08:09,970 --> 00:08:12,660 And finally, pragmatism-- so people here are not perfectionists. 204 00:08:12,660 --> 00:08:16,105 They're OK cutting corners, delivering something that's 80% as good, 205 00:08:16,105 --> 00:08:18,820 so they don't waste the remaining 20% of the time. 206 00:08:18,820 --> 00:08:20,400 So those are Quora's five values. 207 00:08:20,400 --> 00:08:23,550 It sort of paints a picture of the type of people who work at Quora 208 00:08:23,550 --> 00:08:26,190 and what it would be like to work there. 209 00:08:26,190 --> 00:08:27,990 These are not sort of objective truth. 210 00:08:27,990 --> 00:08:30,180 Like this is just this is how Quora works. 211 00:08:30,180 --> 00:08:32,461 Think about how you work, think about how you value, 212 00:08:32,461 --> 00:08:35,669 and see how much that aligns with each company that you're interviewing with. 213 00:08:35,669 --> 00:08:38,700 In some cases, you might see a values mismatch. 214 00:08:38,700 --> 00:08:41,909 You might, for example, really value transparency and understanding 215 00:08:41,909 --> 00:08:44,790 everything going at the company, and some other company might not 216 00:08:44,790 --> 00:08:46,530 value transparency at all because they're really big, 217 00:08:46,530 --> 00:08:48,580 and they know they can't share all that information. 218 00:08:48,580 --> 00:08:49,954 So that's just a values mismatch. 219 00:08:49,954 --> 00:08:51,550 That's totally fine. 220 00:08:51,550 --> 00:08:54,570 It's not a poor reflection on you or the company probably. 221 00:08:54,570 --> 00:08:57,240 So but the more you're asking yourself that question, 222 00:08:57,240 --> 00:09:01,790 you can sort of understand where you're going to fit at different companies. 223 00:09:01,790 --> 00:09:05,430 So finally, really easy question to ask is just how big 224 00:09:05,430 --> 00:09:08,820 is the company because your experience as an intern or a new grad 225 00:09:08,820 --> 00:09:12,370 is going to depend a lot on the size of the company. 226 00:09:12,370 --> 00:09:15,719 So this is a cool table that Dustin Moscovitch, who's the founder of Asana 227 00:09:15,719 --> 00:09:16,260 put together. 228 00:09:16,260 --> 00:09:18,960 So I can't claim to have created this, but it's really good. 229 00:09:18,960 --> 00:09:21,751 And you can basically think of a lot of companies in the tech space 230 00:09:21,751 --> 00:09:25,200 in the Bay Area, in particular as having categorized into one of three buckets. 231 00:09:25,200 --> 00:09:27,240 The first one is a really small company, so this 232 00:09:27,240 --> 00:09:33,430 is your seed series A, series B-ish company probably around 50 people. 233 00:09:33,430 --> 00:09:38,940 The second is the midsized company, so this is sort of series C or D-ish 234 00:09:38,940 --> 00:09:41,334 somewhere in the range of 50 to 500. 235 00:09:41,334 --> 00:09:42,250 It's sort of big here. 236 00:09:42,250 --> 00:09:44,749 It's like 50-300 ballpark. 237 00:09:44,749 --> 00:09:47,790 On the left is just everybody else-- so sort of like the large companies. 238 00:09:47,790 --> 00:09:50,580 This could range from some company like Square, 239 00:09:50,580 --> 00:09:53,010 which is like 2,000 to some companies like Google, which 240 00:09:53,010 --> 00:09:55,980 is like an order of magnitude more than that. 241 00:09:55,980 --> 00:09:57,900 And then here are sort of like the axes of how 242 00:09:57,900 --> 00:09:58,650 things are going to be different. 243 00:09:58,650 --> 00:10:01,290 I'm not going to walk you through this entire chart. 244 00:10:01,290 --> 00:10:03,330 So one good example is autonomy. 245 00:10:03,330 --> 00:10:04,830 So at a really small company-- 246 00:10:04,830 --> 00:10:07,060 this could be a company that's like three people-- 247 00:10:07,060 --> 00:10:08,830 you basically got to do whatever. 248 00:10:08,830 --> 00:10:11,880 Some companies you have to like go assemble your desk on the first day 249 00:10:11,880 --> 00:10:15,849 or like go be a salesperson one day and then be a PM the next day. 250 00:10:15,849 --> 00:10:17,640 And that's really appealing to some people. 251 00:10:17,640 --> 00:10:21,129 But if you're the type of person who just wants to go and learn, 252 00:10:21,129 --> 00:10:22,920 this isn't necessarily a great way to learn 253 00:10:22,920 --> 00:10:24,878 because you have to figure everything yourself, 254 00:10:24,878 --> 00:10:27,120 and you may or may not get feedback. 255 00:10:27,120 --> 00:10:31,810 At a mid-sized company, the autonomy is less than that but still not too small. 256 00:10:31,810 --> 00:10:34,440 So basically, teams are given some high-level mandate. 257 00:10:34,440 --> 00:10:36,267 So here your team's goals for the quarter. 258 00:10:36,267 --> 00:10:38,850 I'm not going to tell you how to achieve those goals because I 259 00:10:38,850 --> 00:10:40,641 got to go somewhere else, but it's your job 260 00:10:40,641 --> 00:10:44,630 to figure out how you're going to hit this metric or ship this product. 261 00:10:44,630 --> 00:10:48,110 But you know that you have to go hit that metric goal or ship that product. 262 00:10:48,110 --> 00:10:50,390 And then, finally, at a really big company, you have a lot less autonomy. 263 00:10:50,390 --> 00:10:52,820 You're just sort of given a to do list and say go. 264 00:10:52,820 --> 00:10:54,350 You have a very clear list of tasks. 265 00:10:54,350 --> 00:10:56,100 You can evaluate your success very easily. 266 00:10:56,100 --> 00:10:59,420 Did you do the tasks or not? 267 00:10:59,420 --> 00:11:01,710 There's a pretty big range there. 268 00:11:01,710 --> 00:11:05,150 I think another one is the mentorship one, 269 00:11:05,150 --> 00:11:07,797 so this is a lot of what new grads and interns look for. 270 00:11:07,797 --> 00:11:10,380 So a really small company, there's going to be basically none. 271 00:11:10,380 --> 00:11:11,900 You don't have time for that. 272 00:11:11,900 --> 00:11:13,650 When you're really small company trying to ship a product, 273 00:11:13,650 --> 00:11:14,900 you might not exist next week. 274 00:11:14,900 --> 00:11:17,330 You don't have time for a lot of mentorship-- 275 00:11:17,330 --> 00:11:18,910 maybe that's OK, maybe it's not. 276 00:11:18,910 --> 00:11:22,280 At a midsized company, there's some structured mentorship. 277 00:11:22,280 --> 00:11:24,380 On day one, you apply get assigned a mentor. 278 00:11:24,380 --> 00:11:26,410 Some companies have sort of a bootcamp process. 279 00:11:26,410 --> 00:11:29,270 You can try a bunch of different teams but ultimately, 280 00:11:29,270 --> 00:11:31,740 focus on delivering some project later. 281 00:11:31,740 --> 00:11:35,606 And then really large companies-- they have these really established programs. 282 00:11:35,606 --> 00:11:37,730 I think, for example, Facebook has a program called 283 00:11:37,730 --> 00:11:41,090 Facebook University that's a very structured learning process. 284 00:11:41,090 --> 00:11:43,930 It's explicitly learning driven, and these really big companies-- 285 00:11:43,930 --> 00:11:44,930 they have time for that. 286 00:11:44,930 --> 00:11:47,870 They can make that investment because they have many more resources, 287 00:11:47,870 --> 00:11:50,161 but a company that's at a different end of the spectrum 288 00:11:50,161 --> 00:11:52,897 can invest in various mentorship. 289 00:11:52,897 --> 00:11:54,230 Yeah, take a look at this chart. 290 00:11:54,230 --> 00:11:56,438 There's lots of other ones there, but those, I think, 291 00:11:56,438 --> 00:11:58,700 are two good ones to highlight. 292 00:11:58,700 --> 00:12:02,240 So let's jump into resumes first since this is sort of something 293 00:12:02,240 --> 00:12:07,140 before the interview process is you're going to be submitting your resume. 294 00:12:07,140 --> 00:12:09,724 So resumes are not that important. 295 00:12:09,724 --> 00:12:12,890 A lot of literature out there suggests that resumes are extremely important, 296 00:12:12,890 --> 00:12:15,848 and you've got to spend a ton of time getting the wording exactly right 297 00:12:15,848 --> 00:12:18,240 and make sure you use like a 12-point font size. 298 00:12:18,240 --> 00:12:20,240 It's probably because they're like 13.5-- 299 00:12:20,240 --> 00:12:21,047 whatever. 300 00:12:21,047 --> 00:12:22,380 So resume is not that important. 301 00:12:22,380 --> 00:12:26,240 So to start the question, who has a guess for how long 302 00:12:26,240 --> 00:12:30,610 me, as a hiring manager, is going to spend looking at your resume? 303 00:12:30,610 --> 00:12:31,720 Yeah, just shout it out. 304 00:12:31,720 --> 00:12:32,030 AUDIENCE: Five seconds. 305 00:12:32,030 --> 00:12:32,985 TOMMY: Five seconds? 306 00:12:32,985 --> 00:12:33,526 AUDIENCE: 10. 307 00:12:33,526 --> 00:12:35,300 TOMMY: 10. 308 00:12:35,300 --> 00:12:37,220 OK, people are a little aggressive. 309 00:12:37,220 --> 00:12:40,550 I'd say, on average, I spend like 30 seconds. 310 00:12:40,550 --> 00:12:45,360 Five seconds, I can say good font, but I can't actually read any words. 311 00:12:45,360 --> 00:12:46,620 So anyway, we're not that bad. 312 00:12:46,620 --> 00:12:48,860 We spent around 30 seconds on a resume. 313 00:12:48,860 --> 00:12:51,890 I think we'll spend more than that if something looks interesting, 314 00:12:51,890 --> 00:12:53,349 or we want to dive a little deeper. 315 00:12:53,349 --> 00:12:55,473 But we're not going to spend a ton of time on this. 316 00:12:55,473 --> 00:12:57,800 So keep that in mind as you're designing your resume. 317 00:12:57,800 --> 00:13:01,040 If you have a choice between practicing some new interview problem 318 00:13:01,040 --> 00:13:02,840 or like spending two hours on your resume, 319 00:13:02,840 --> 00:13:05,330 definitely don't pick the resume. 320 00:13:05,330 --> 00:13:08,960 So I have here 10 easy rules that if you follow them, 321 00:13:08,960 --> 00:13:11,930 your resume will probably not be bad. 322 00:13:11,930 --> 00:13:14,156 And again, that's your goal. 323 00:13:14,156 --> 00:13:14,780 So here you go. 324 00:13:14,780 --> 00:13:16,710 Rule number one-- one page. 325 00:13:16,710 --> 00:13:21,740 There are absolutely zero exceptions to this rule. 326 00:13:21,740 --> 00:13:23,615 Super senior engineers, people who have been 327 00:13:23,615 --> 00:13:27,620 in industry for 20 years, the inventor of Python, for example-- 328 00:13:27,620 --> 00:13:28,950 the resume is one page. 329 00:13:28,950 --> 00:13:32,210 If the inventor of Python can get it on one page, you can too. 330 00:13:32,210 --> 00:13:33,470 Do not break this rule. 331 00:13:33,470 --> 00:13:35,840 I'm not going to read past the first page. 332 00:13:35,840 --> 00:13:38,595 Second, make it really easy to skim. 333 00:13:38,595 --> 00:13:41,720 If I'm looking at your resume and I'm struggling to see where you've worked 334 00:13:41,720 --> 00:13:44,642 or where you've done or what you did, I'm just going to give up. 335 00:13:44,642 --> 00:13:46,100 I'm only spending 30 seconds on it. 336 00:13:46,100 --> 00:13:49,640 You've got to like maximize the efficiency of my 30 seconds reading 337 00:13:49,640 --> 00:13:52,880 your resume so just make it really easy to see where did you 338 00:13:52,880 --> 00:13:56,120 work, what you do, what year are you, ate you looking for an internship 339 00:13:56,120 --> 00:13:58,790 or new grad position, which I can just infer by graduation year. 340 00:13:58,790 --> 00:14:00,230 You don't need to tell me that. 341 00:14:00,230 --> 00:14:03,450 Just make it really easy for me to skim in 30 seconds. 342 00:14:03,450 --> 00:14:06,650 Third, your contact information should be the easiest thing 343 00:14:06,650 --> 00:14:08,060 to find on your resume. 344 00:14:08,060 --> 00:14:09,950 The whole point of giving me your resume is 345 00:14:09,950 --> 00:14:13,160 so that I can contact you later if we want to move forward with the process. 346 00:14:13,160 --> 00:14:15,680 Some people don't have any contact information on their resume. 347 00:14:15,680 --> 00:14:18,020 Some people put it in a really small font at the bottom, 348 00:14:18,020 --> 00:14:18,920 and I have to search for it. 349 00:14:18,920 --> 00:14:21,210 And then I get annoyed, and that's not good for you. 350 00:14:21,210 --> 00:14:23,960 So make it really easy to contact you from your resume 351 00:14:23,960 --> 00:14:26,510 because that's why I have your resume. 352 00:14:26,510 --> 00:14:29,550 So this is sort of the duh ones. 353 00:14:29,550 --> 00:14:33,260 So fourth, make sure you're highlighting specific accomplishments 354 00:14:33,260 --> 00:14:35,510 from past internships. 355 00:14:35,510 --> 00:14:37,560 Some people say, oh, I worked on this team. 356 00:14:37,560 --> 00:14:38,060 OK, great. 357 00:14:38,060 --> 00:14:39,170 I don't really know what you did. 358 00:14:39,170 --> 00:14:40,753 That doesn't really pique my interest. 359 00:14:40,753 --> 00:14:43,040 But if you say I worked on this internal tools team 360 00:14:43,040 --> 00:14:46,430 and shipped a new tool to a team of 50 that increased productivity 361 00:14:46,430 --> 00:14:49,830 by reducing this bottleneck by 30%, that's much better. 362 00:14:49,830 --> 00:14:51,110 So it's more specific. 363 00:14:51,110 --> 00:14:53,870 I can see what you're actually doing, and that's 364 00:14:53,870 --> 00:14:55,940 going to make me more interested. 365 00:14:55,940 --> 00:14:58,940 Obviously, some companies have confidentiality rules, 366 00:14:58,940 --> 00:15:01,620 or you sign an NDA that prevents you from doing this. 367 00:15:01,620 --> 00:15:04,400 So don't break any confidentiality rules here. 368 00:15:04,400 --> 00:15:06,500 But a lot of things like some high-level metric, 369 00:15:06,500 --> 00:15:08,840 you could say you know I 2x'ed the throughput of the system. 370 00:15:08,840 --> 00:15:10,756 If you don't say what it was before and after, 371 00:15:10,756 --> 00:15:14,450 you're not breaking any confidentiality metrics. 372 00:15:14,450 --> 00:15:17,351 So fifth, include interesting personal projects. 373 00:15:17,351 --> 00:15:19,100 So if you're working on some side project, 374 00:15:19,100 --> 00:15:20,780 maybe you're a member of a student group or something 375 00:15:20,780 --> 00:15:23,238 and you develop something on your own or with some friends, 376 00:15:23,238 --> 00:15:25,400 definitely include that on your resume. 377 00:15:25,400 --> 00:15:29,107 Do not include standard final projects. 378 00:15:29,107 --> 00:15:31,190 It's pretty common that we'll be at a career fair, 379 00:15:31,190 --> 00:15:33,981 and it's really clear what the final project for some in show class 380 00:15:33,981 --> 00:15:38,390 is because 50 people built like collaborative pong or something. 381 00:15:38,390 --> 00:15:40,194 That's not a side project, and it sort of 382 00:15:40,194 --> 00:15:43,110 looks lame because it's sort of introduced like what else did you even 383 00:15:43,110 --> 00:15:43,610 do? 384 00:15:43,610 --> 00:15:46,140 Probably nothing-- so I wouldn't advise doing that. 385 00:15:46,140 --> 00:15:48,470 But if you do have interesting personal projects-- 386 00:15:48,470 --> 00:15:49,880 maybe the final project is more open ended, 387 00:15:49,880 --> 00:15:51,920 and you could build something that wasn't just sort of the standard 388 00:15:51,920 --> 00:15:55,610 template thing-- include that but don't just include like had you'd like CS50 389 00:15:55,610 --> 00:15:59,490 problem set three, which some people do, so don't. 390 00:15:59,490 --> 00:16:02,330 And I know what problem set three is so definitely don't. 391 00:16:02,330 --> 00:16:07,070 So number six, do not have charts or ratings next to skills. 392 00:16:07,070 --> 00:16:09,910 This is egregiously common. 393 00:16:09,910 --> 00:16:12,380 There is absolutely no value in telling me 394 00:16:12,380 --> 00:16:15,240 that you are like a three out of five team player. 395 00:16:15,240 --> 00:16:19,540 So which again people do, so do not do that. 396 00:16:19,540 --> 00:16:22,040 Again, there's absolutely no exceptions to this rule either. 397 00:16:22,040 --> 00:16:23,040 I don't care what role-- 398 00:16:23,040 --> 00:16:24,690 just don't do this. 399 00:16:24,690 --> 00:16:27,421 Seventh, you don't need an objective. 400 00:16:27,421 --> 00:16:29,170 A lot of people at the top of their resume 401 00:16:29,170 --> 00:16:31,400 may say like my objective is to seek a challenging 402 00:16:31,400 --> 00:16:33,275 position in the field of software engineering 403 00:16:33,275 --> 00:16:34,460 where I can apply my skills. 404 00:16:34,460 --> 00:16:35,120 I don't care. 405 00:16:35,120 --> 00:16:36,020 I know. 406 00:16:36,020 --> 00:16:37,640 You're wasting space on resume. 407 00:16:37,640 --> 00:16:38,540 I don't read it. 408 00:16:38,540 --> 00:16:41,854 And if I am reading it, it's probably not because I'm interested in it. 409 00:16:41,854 --> 00:16:42,770 So don't include that. 410 00:16:42,770 --> 00:16:44,067 You're wasting space. 411 00:16:44,067 --> 00:16:45,900 Similarly, a lot of people put in the resume 412 00:16:45,900 --> 00:16:48,676 a somewhere like references available on request. 413 00:16:48,676 --> 00:16:50,300 Again, you're completely wasting space. 414 00:16:50,300 --> 00:16:52,400 I know-- if I want a reference, I'll get one. 415 00:16:52,400 --> 00:16:55,010 You don't need to tell me that they're available upon request. 416 00:16:55,010 --> 00:16:55,940 You're wasting space. 417 00:16:55,940 --> 00:16:57,620 You only got a page. 418 00:16:57,620 --> 00:17:01,550 So number nine, if you don't have a professional looking email address, 419 00:17:01,550 --> 00:17:02,900 just create one. 420 00:17:02,900 --> 00:17:06,589 I get a lot of ridiculous looking email addresses 421 00:17:06,589 --> 00:17:09,859 that people had like in high school very clearly 422 00:17:09,859 --> 00:17:13,520 or something just first initial, last name something. 423 00:17:13,520 --> 00:17:14,280 It's really easy. 424 00:17:14,280 --> 00:17:17,660 You look really silly if you don't do this-- so just do that. 425 00:17:17,660 --> 00:17:21,156 And then finally, if you have relevant links-- so maybe your LinkedIn 426 00:17:21,156 --> 00:17:22,530 that's filled out and looks good. 427 00:17:22,530 --> 00:17:25,859 If a GitHub contains some personal projects, those are great to include, 428 00:17:25,859 --> 00:17:30,057 especially 95% of resumes we're getting digitally, so we can click on links. 429 00:17:30,057 --> 00:17:33,140 If you're printing out a resume, links aren't that great but include them. 430 00:17:33,140 --> 00:17:35,060 It sort of allows me if I'm interested. 431 00:17:35,060 --> 00:17:37,440 Or maybe I'm interviewing you in five minutes, 432 00:17:37,440 --> 00:17:39,660 and I want to sort of get a sense of what you've been working on. 433 00:17:39,660 --> 00:17:41,440 I can click here to your GitHub, say, oh, this thing looks cool, 434 00:17:41,440 --> 00:17:42,860 and we can talk about that for a few minutes 435 00:17:42,860 --> 00:17:44,550 during a technical phone screen. 436 00:17:44,550 --> 00:17:47,520 So if you have them, include them. 437 00:17:47,520 --> 00:17:49,850 OK, so we have two example resumes. 438 00:17:49,850 --> 00:17:53,600 I want you to tell me based on those 10 rules what is good 439 00:17:53,600 --> 00:17:56,179 and what is bad about this resume. 440 00:17:56,179 --> 00:17:58,720 So if you raise your hand, if you have something good or bad. 441 00:17:58,720 --> 00:18:00,536 Yes? 442 00:18:00,536 --> 00:18:04,760 AUDIENCE: It's really clear where you worked before and [INAUDIBLE].. 443 00:18:04,760 --> 00:18:06,260 TOMMY: Yes, it is very easy to skim. 444 00:18:06,260 --> 00:18:07,650 You can see like clear headings. 445 00:18:07,650 --> 00:18:08,566 Here's the experience. 446 00:18:08,566 --> 00:18:09,830 He's the CEO of something. 447 00:18:09,830 --> 00:18:11,810 He's got a hell of a career path. 448 00:18:11,810 --> 00:18:12,970 You can see his education. 449 00:18:12,970 --> 00:18:15,680 It's really, really easy to skim so that's definitely good. 450 00:18:15,680 --> 00:18:16,382 Yeah? 451 00:18:16,382 --> 00:18:17,770 AUDIENCE: Contact information's right there. 452 00:18:17,770 --> 00:18:19,500 TOMMY: Yes, contact information-- very easy to find. 453 00:18:19,500 --> 00:18:21,458 He has these nice icons in case it wasn't clear 454 00:18:21,458 --> 00:18:24,560 that this string of numbers is a phone number, but it's really easy for me 455 00:18:24,560 --> 00:18:25,730 to find. 456 00:18:25,730 --> 00:18:26,499 Yes? 457 00:18:26,499 --> 00:18:27,290 AUDIENCE: One page? 458 00:18:27,290 --> 00:18:28,637 TOMMY: One page-- excellent. 459 00:18:28,637 --> 00:18:29,970 Did not break the one-page rule. 460 00:18:29,970 --> 00:18:31,640 That's the easiest one to not break. 461 00:18:31,640 --> 00:18:32,141 Yeah? 462 00:18:32,141 --> 00:18:33,639 AUDIENCE: Bad because of the skills. 463 00:18:33,639 --> 00:18:36,630 TOMMY: Yes, this is what I mean by skills, reading this is ridiculous. 464 00:18:36,630 --> 00:18:38,910 This person is a three out of five team player. 465 00:18:38,910 --> 00:18:41,610 It's a little blurry, but that is literally what it says. 466 00:18:41,610 --> 00:18:43,530 This is a complete waste of space. 467 00:18:43,530 --> 00:18:45,300 I'm not even sure I want to work with a three out of five team player. 468 00:18:45,300 --> 00:18:47,420 I think my bar is probably like a four. 469 00:18:47,420 --> 00:18:50,900 So this is totally, totally wasted space. 470 00:18:50,900 --> 00:18:54,180 Other stuff-- good or bad. 471 00:18:54,180 --> 00:18:54,680 Yeah? 472 00:18:54,680 --> 00:18:57,002 AUDIENCE: [INAUDIBLE] 473 00:18:57,002 --> 00:18:58,460 TOMMY: Yeah the photos are useless. 474 00:18:58,460 --> 00:19:02,360 Unless you're like an actor and trying to get an acting role. 475 00:19:02,360 --> 00:19:04,860 This is not going to have any bearing on my hiring decision. 476 00:19:04,860 --> 00:19:07,700 Again, wasting space. 477 00:19:07,700 --> 00:19:09,200 How about one more? 478 00:19:09,200 --> 00:19:09,870 Yeah? 479 00:19:09,870 --> 00:19:13,064 AUDIENCE: There's a lot of profile like there's a big paragraph. 480 00:19:13,064 --> 00:19:16,230 TOMMY: Yeah, so that's exactly what I mean by an objective, so I don't care. 481 00:19:16,230 --> 00:19:17,270 I didn't even read this. 482 00:19:17,270 --> 00:19:19,561 I could say well, [? I'm ?] [INAUDIBLE] for all I care. 483 00:19:19,561 --> 00:19:20,402 I don't read this. 484 00:19:20,402 --> 00:19:22,110 Do not do not include this on the resume. 485 00:19:22,110 --> 00:19:24,084 It's a total waste of space. 486 00:19:24,084 --> 00:19:25,250 So that's resume number one. 487 00:19:25,250 --> 00:19:26,416 How about resume number two? 488 00:19:26,416 --> 00:19:29,615 489 00:19:29,615 --> 00:19:30,605 Good or bad? 490 00:19:30,605 --> 00:19:36,300 491 00:19:36,300 --> 00:19:36,800 Yeah? 492 00:19:36,800 --> 00:19:38,216 AUDIENCE: We got some more skills. 493 00:19:38,216 --> 00:19:40,050 TOMMY: Yeah, this time, they're not stars. 494 00:19:40,050 --> 00:19:43,550 We got a continuous scale instead of a discrete scale this time. 495 00:19:43,550 --> 00:19:48,470 But again, really, negotiation is four out of five-- not great. 496 00:19:48,470 --> 00:19:53,210 497 00:19:53,210 --> 00:19:55,610 Other stuff-- good or bad? 498 00:19:55,610 --> 00:20:00,499 AUDIENCE: [INAUDIBLE] 499 00:20:00,499 --> 00:20:02,040 TOMMY: It's sort of similar, I think. 500 00:20:02,040 --> 00:20:04,740 This is like sort of easy to skim. 501 00:20:04,740 --> 00:20:07,170 You've got this weird like the content sort of flows 502 00:20:07,170 --> 00:20:09,820 like this, which you probably don't want. 503 00:20:09,820 --> 00:20:12,301 There's also this discrete scale down here, which is lame. 504 00:20:12,301 --> 00:20:13,800 Again, like the headshot, not great. 505 00:20:13,800 --> 00:20:16,499 Contact animation is very easy to find. 506 00:20:16,499 --> 00:20:18,540 The content here is that is actually pretty good. 507 00:20:18,540 --> 00:20:21,750 There's like very specific metrics like increased CSAT by 25%. 508 00:20:21,750 --> 00:20:23,200 So that's actually pretty good. 509 00:20:23,200 --> 00:20:26,280 But again, there's sort of a lot of unnecessary stuff on that resume that 510 00:20:26,280 --> 00:20:29,020 breaks the 10 simple rules. 511 00:20:29,020 --> 00:20:30,937 OK, so that's it for resumes because we're not 512 00:20:30,937 --> 00:20:33,145 going to spend a long time on it because, again, it's 513 00:20:33,145 --> 00:20:34,239 not that important. 514 00:20:34,239 --> 00:20:36,030 So let's move into the types of interviews. 515 00:20:36,030 --> 00:20:38,155 We'll have time for questions at the end, actually. 516 00:20:38,155 --> 00:20:40,620 We're saving a bunch of time for that. 517 00:20:40,620 --> 00:20:43,300 OK, so let's just talk through some logistics first. 518 00:20:43,300 --> 00:20:47,380 So with interviewing, start interviewing as early as you can. 519 00:20:47,380 --> 00:20:49,380 It's pretty common for interns and new grads 520 00:20:49,380 --> 00:20:54,300 to interview sort of like late summer, early fall-- so basically now. 521 00:20:54,300 --> 00:20:57,890 A lot of people will actually interview for like job I plus one 522 00:20:57,890 --> 00:21:00,260 or internship I plus one during internship I. 523 00:21:00,260 --> 00:21:02,760 So like over the past summer, we interviewed lots of interns 524 00:21:02,760 --> 00:21:05,580 for like the next summer, so they wouldn't have to like fly out. 525 00:21:05,580 --> 00:21:07,200 So some people do that. 526 00:21:07,200 --> 00:21:08,740 You don't have to. 527 00:21:08,740 --> 00:21:12,780 As long as you're sort of starting around now if you haven't yet, it's OK. 528 00:21:12,780 --> 00:21:15,300 You're not in trouble yet, but I wouldn't 529 00:21:15,300 --> 00:21:16,810 wait three or four months more. 530 00:21:16,810 --> 00:21:18,870 Just try to find an internship. 531 00:21:18,870 --> 00:21:23,070 Something else to do is plan interviewing into your schedule. 532 00:21:23,070 --> 00:21:26,170 Interviewing is basically another class. 533 00:21:26,170 --> 00:21:29,032 So I wouldn't advise taking like five classes, 534 00:21:29,032 --> 00:21:31,740 like two of which are really hard during the same semester you're 535 00:21:31,740 --> 00:21:33,870 trying to do your recruiting. 536 00:21:33,870 --> 00:21:36,420 You're going to have to make trade-offs against one of them, 537 00:21:36,420 --> 00:21:38,660 and you don't want to do that so just sort of plan it into your schedule. 538 00:21:38,660 --> 00:21:42,370 Be aware that this is going to take a lot of time, particularly in the fall. 539 00:21:42,370 --> 00:21:46,271 And also, look for programs that are targeted for your year, 540 00:21:46,271 --> 00:21:47,270 like I mentioned before. 541 00:21:47,270 --> 00:21:50,353 But a lot of these larger companies, like Google or Facebook or Microsoft, 542 00:21:50,353 --> 00:21:52,590 they have programs targeted at freshmen who 543 00:21:52,590 --> 00:21:54,540 have never had an internship before. 544 00:21:54,540 --> 00:21:57,450 If that's you, you've just taken a couple of CS classes. 545 00:21:57,450 --> 00:21:59,590 You haven't had an internship before. 546 00:21:59,590 --> 00:22:01,680 Those are the programs you should look for. 547 00:22:01,680 --> 00:22:03,570 If you don't and you try to apply to these other programs, 548 00:22:03,570 --> 00:22:05,278 you're going to be competing with juniors 549 00:22:05,278 --> 00:22:07,900 who just have two or three years more experience on you, 550 00:22:07,900 --> 00:22:09,899 and you're going to have a lot harder time being 551 00:22:09,899 --> 00:22:11,739 successful in those applications. 552 00:22:11,739 --> 00:22:13,530 At career fairs, try to talk to recruiters. 553 00:22:13,530 --> 00:22:15,270 Say, hey, I'm a sophomore. 554 00:22:15,270 --> 00:22:16,170 Here's my experience. 555 00:22:16,170 --> 00:22:18,030 What roles do you recommend I look into? 556 00:22:18,030 --> 00:22:20,730 Or even explicitly asking, do you have roles for freshmen? 557 00:22:20,730 --> 00:22:22,480 A lot of these big companies will say yes. 558 00:22:22,480 --> 00:22:24,188 A mid-sized company like us will probably 559 00:22:24,188 --> 00:22:26,260 say we don't have a role just for freshmen, 560 00:22:26,260 --> 00:22:28,640 but we also hire freshmen if they're great. 561 00:22:28,640 --> 00:22:30,456 A small company might just say no. 562 00:22:30,456 --> 00:22:32,580 So try to have that conversation with the recruiter 563 00:22:32,580 --> 00:22:36,280 early on, so you don't end up on the wrong track. 564 00:22:36,280 --> 00:22:39,150 So basically, what the process will look like from end to end-- 565 00:22:39,150 --> 00:22:41,550 many companies will start with a coding challenge. 566 00:22:41,550 --> 00:22:43,450 They'll sort of give you a technical problem. 567 00:22:43,450 --> 00:22:45,180 There's a lot of different products out there. 568 00:22:45,180 --> 00:22:47,370 You'll probably have like 30 minutes or so to write some code. 569 00:22:47,370 --> 00:22:50,328 You'll get sent into some auto-grader, which will notify the recruiting 570 00:22:50,328 --> 00:22:51,870 team if you did a good job. 571 00:22:51,870 --> 00:22:54,810 It will probably take around 30 minutes for these. 572 00:22:54,810 --> 00:23:00,109 Make sure you set aside a quiet space, and you can solve the problem. 573 00:23:00,109 --> 00:23:02,400 Some companies don't have this, and they'll go directly 574 00:23:02,400 --> 00:23:03,820 to a technical phone screen. 575 00:23:03,820 --> 00:23:07,380 So this will be 45 to 60-minute conversation-- 576 00:23:07,380 --> 00:23:08,710 usually, with an engineer. 577 00:23:08,710 --> 00:23:10,710 For a lot of new grads or interns, it could just 578 00:23:10,710 --> 00:23:12,060 be some random engineer at the company. 579 00:23:12,060 --> 00:23:13,740 It could be an engineer who actually works on the team 580 00:23:13,740 --> 00:23:14,781 that you're applying for. 581 00:23:14,781 --> 00:23:16,410 It sort of depends on those tracks. 582 00:23:16,410 --> 00:23:19,284 If that goes well, then some companies will do a second phone screen, 583 00:23:19,284 --> 00:23:22,120 and other companies will bring you directly to the on-site. 584 00:23:22,120 --> 00:23:24,570 The on-site portion, again, it's going to vary by company. 585 00:23:24,570 --> 00:23:28,300 You should expect around three to five different conversations. 586 00:23:28,300 --> 00:23:30,717 Again, each of those is going to be 45 to 60 minutes each. 587 00:23:30,717 --> 00:23:33,716 You'll meet with lots of engineers if you're applying for an engineering 588 00:23:33,716 --> 00:23:36,240 role, but you might also meet with someone like me, a hiring 589 00:23:36,240 --> 00:23:38,577 manager, maybe a designer, a PM. 590 00:23:38,577 --> 00:23:41,160 Again, it's really going to depend on the company and the team 591 00:23:41,160 --> 00:23:42,630 that you're applying for. 592 00:23:42,630 --> 00:23:45,390 But that's basically what you can expect for an interview process 593 00:23:45,390 --> 00:23:48,160 from end to end. 594 00:23:48,160 --> 00:23:51,060 So here are five types of interviews that you're probably 595 00:23:51,060 --> 00:23:53,310 going to encounter during this process, and I'm 596 00:23:53,310 --> 00:23:55,870 going to briefly walk through each of these. 597 00:23:55,870 --> 00:23:59,790 So the first one is my least favorite, which is the algorithms interview. 598 00:23:59,790 --> 00:24:02,190 It is unfortunately-- well, for me-- 599 00:24:02,190 --> 00:24:05,500 the most common for interns and new grads. 600 00:24:05,500 --> 00:24:08,824 So an algorithm algorithms interview is basically 601 00:24:08,824 --> 00:24:11,490 a technical problem where you're going to be given some problem. 602 00:24:11,490 --> 00:24:14,340 You have to write code for a solution, but the problem 603 00:24:14,340 --> 00:24:18,300 is more about discovering the algorithm and getting to that high-level solution 604 00:24:18,300 --> 00:24:19,757 than it is to actually code it up. 605 00:24:19,757 --> 00:24:22,215 So for example, we might ask a question where the algorithm 606 00:24:22,215 --> 00:24:23,660 is sort of hard to come up with. 607 00:24:23,660 --> 00:24:25,320 But once you come up with it, it's like trivial right out. 608 00:24:25,320 --> 00:24:28,530 It's maybe like five lines and some crazy like recursive cool thing. 609 00:24:28,530 --> 00:24:31,444 And the actual hard part is coming up with that algorithm. 610 00:24:31,444 --> 00:24:34,610 So if you find yourself in an interview taking a really long time to come up 611 00:24:34,610 --> 00:24:36,450 with the algorithm and you're sort of like stressed because you haven't 612 00:24:36,450 --> 00:24:38,760 got any code yet, it could be OK. 613 00:24:38,760 --> 00:24:40,170 That could be by design. 614 00:24:40,170 --> 00:24:42,940 The problem could be you are supposed to spend 20 minutes thinking of a solution 615 00:24:42,940 --> 00:24:45,090 and brainstorming and then just five minutes of writing it up 616 00:24:45,090 --> 00:24:46,290 and then it just works. 617 00:24:46,290 --> 00:24:48,325 So just be aware that that's sort of a class. 618 00:24:48,325 --> 00:24:50,200 When you're solving these types of problems-- 619 00:24:50,200 --> 00:24:53,370 and this is what we'll focus on the most today-- 620 00:24:53,370 --> 00:24:56,040 try to optimize for both time and space complexity. 621 00:24:56,040 --> 00:24:58,706 Something you shouldn't do, though, is right out of the gate try 622 00:24:58,706 --> 00:25:00,730 to find the absolute best solution. 623 00:25:00,730 --> 00:25:04,340 It's OK to start with maybe a naive solution, a quadratic runtime 624 00:25:04,340 --> 00:25:07,360 or exponential runtime that you know isn't like the optimal solution, 625 00:25:07,360 --> 00:25:09,193 but it's much, much, much better to come out 626 00:25:09,193 --> 00:25:12,700 of an interview having written something than struggled for 60 minutes trying 627 00:25:12,700 --> 00:25:15,158 to get this optimal solution and getting nowhere and ending 628 00:25:15,158 --> 00:25:17,170 the call with you not having written any code 629 00:25:17,170 --> 00:25:19,594 or gotten anywhere towards the solution. 630 00:25:19,594 --> 00:25:21,510 So spend some time trying to optimize upfront. 631 00:25:21,510 --> 00:25:24,670 But if you don't see it and then three or five minutes 632 00:25:24,670 --> 00:25:27,970 after you see the naive solution, just start there-- write it up and then go 633 00:25:27,970 --> 00:25:28,730 forward. 634 00:25:28,730 --> 00:25:30,820 Something you should especially do is tell the interviewer that. 635 00:25:30,820 --> 00:25:32,320 Say, hey, I've got the solution. 636 00:25:32,320 --> 00:25:33,695 I think this is a naive solution. 637 00:25:33,695 --> 00:25:35,770 But do you want me to just write this up first? 638 00:25:35,770 --> 00:25:37,980 95% of the time, they're going to say, yeah, let's write that first, 639 00:25:37,980 --> 00:25:39,370 and we'll try to optimize it later. 640 00:25:39,370 --> 00:25:41,140 Because as an interviewer, I want that signal too. 641 00:25:41,140 --> 00:25:43,030 You just sort of like sit there struggling for 60 minutes. 642 00:25:43,030 --> 00:25:46,280 It's hard for me to be confident whether or not we should move forward or not. 643 00:25:46,280 --> 00:25:49,310 So the more signal that you're giving, the better. 644 00:25:49,310 --> 00:25:53,316 Another thing with algorithms problem, the solution seems too complicated. 645 00:25:53,316 --> 00:25:56,440 There's like 50 different edge cases that you're trying to take to account. 646 00:25:56,440 --> 00:25:58,880 It probably is, and it's probably wrong. 647 00:25:58,880 --> 00:26:01,570 So try to think about creating the simplest solution possible. 648 00:26:01,570 --> 00:26:04,690 Look out for ways that you can remove edge cases 649 00:26:04,690 --> 00:26:07,352 or further generalize the solution that you come up with. 650 00:26:07,352 --> 00:26:10,060 So, again, we're going to have much more detail on this interview 651 00:26:10,060 --> 00:26:11,851 later since this is the bulk of what you're 652 00:26:11,851 --> 00:26:14,630 going to be doing in the process. 653 00:26:14,630 --> 00:26:17,770 So who can tell me some common classes of algorithms problems-- so 654 00:26:17,770 --> 00:26:19,990 sort of like categories these might fall into. 655 00:26:19,990 --> 00:26:22,560 656 00:26:22,560 --> 00:26:23,060 Yeah? 657 00:26:23,060 --> 00:26:23,950 AUDIENCE: Search 658 00:26:23,950 --> 00:26:26,533 TOMMY: Yeah, search problems-- so like a graph search problem. 659 00:26:26,533 --> 00:26:27,760 That's a good one. 660 00:26:27,760 --> 00:26:28,430 Yeah? 661 00:26:28,430 --> 00:26:29,555 AUDIENCE: Greedy algorithm. 662 00:26:29,555 --> 00:26:32,460 TOMMY: Yeah, greedy algorithm-- that's a good one. 663 00:26:32,460 --> 00:26:32,960 Yeah? 664 00:26:32,960 --> 00:26:34,080 AUDIENCE: Dynamic programming. 665 00:26:34,080 --> 00:26:36,371 TOMMY: Yeah, dynamic programming-- super, super common. 666 00:26:36,371 --> 00:26:38,601 667 00:26:38,601 --> 00:26:39,100 One more? 668 00:26:39,100 --> 00:26:44,510 669 00:26:44,510 --> 00:26:47,850 So here a couple that I came up with. 670 00:26:47,850 --> 00:26:50,720 So the first is string manipulation is super common. 671 00:26:50,720 --> 00:26:53,870 So sort of knowing how your language of choice works with strings, 672 00:26:53,870 --> 00:26:56,840 how to reverse a string, index, substring, blah, blah. 673 00:26:56,840 --> 00:27:00,170 Recursion, super common-- a lot of greedy stuff 674 00:27:00,170 --> 00:27:02,930 can be as formulated as a recursive problem. 675 00:27:02,930 --> 00:27:04,490 Dynamic programming-- talked about. 676 00:27:04,490 --> 00:27:07,050 Graphs and cheese, which basically the search problems. 677 00:27:07,050 --> 00:27:09,497 Now my least favorite categories, which basically math. 678 00:27:09,497 --> 00:27:11,330 We try to avoid these, but not all companies 679 00:27:11,330 --> 00:27:13,914 do where the solution just requires you to know some like math 680 00:27:13,914 --> 00:27:15,705 thing off the top of your head, and there's 681 00:27:15,705 --> 00:27:18,155 like some closed form solution you're supposed to get. 682 00:27:18,155 --> 00:27:20,280 They're unfortunate, but they definitely out there. 683 00:27:20,280 --> 00:27:25,400 And a lot of interview books will have a section dedicated to just this. 684 00:27:25,400 --> 00:27:28,280 So the tools for solving these problems that you should really 685 00:27:28,280 --> 00:27:32,420 have down off the top of your head going into this interview. 686 00:27:32,420 --> 00:27:34,490 The principle here is that the less time you 687 00:27:34,490 --> 00:27:38,420 have to think about how to create an array in your programming language, 688 00:27:38,420 --> 00:27:40,730 it's one less thing that you're like worrying about 689 00:27:40,730 --> 00:27:42,450 during the interview process. 690 00:27:42,450 --> 00:27:45,140 So tools you should be aware of for solving these problems-- 691 00:27:45,140 --> 00:27:47,889 how an array works, how to write up an array in your language, how 692 00:27:47,889 --> 00:27:49,544 linked lists work, hash tables. 693 00:27:49,544 --> 00:27:52,460 You want to know the built in string methods off the top of your head. 694 00:27:52,460 --> 00:27:55,580 You want to be familiar with memorization and basic caching 695 00:27:55,580 --> 00:27:59,526 abstractions within your language of choice. 696 00:27:59,526 --> 00:28:02,150 Know some sort of shortest path stuff off the top of your head. 697 00:28:02,150 --> 00:28:05,750 A lot of stuff you can generalize into just you can fit it into a graph 698 00:28:05,750 --> 00:28:08,041 and then just like run a search algorithm on that graph 699 00:28:08,041 --> 00:28:10,250 and knowing this fundamentals of the top of your head 700 00:28:10,250 --> 00:28:12,480 is really going to make your life a lot easier, 701 00:28:12,480 --> 00:28:14,355 and this is a really good list to start with. 702 00:28:14,355 --> 00:28:17,849 This is going to cover a lot of algorithms problems that you get. 703 00:28:17,849 --> 00:28:18,890 OK, so that's algorithms. 704 00:28:18,890 --> 00:28:22,410 So next is the coding problem, and it's basically 705 00:28:22,410 --> 00:28:24,350 the inverse of an algorithm problem where 706 00:28:24,350 --> 00:28:27,950 getting the algorithm is probably pretty simple but then coding it 707 00:28:27,950 --> 00:28:30,740 up might be a little more complex because there's a lot of nuances 708 00:28:30,740 --> 00:28:31,948 in the implementation detail. 709 00:28:31,948 --> 00:28:34,550 Maybe it's just a lot of code to write, but this 710 00:28:34,550 --> 00:28:37,160 is a problem where you might see the solution immediately. 711 00:28:37,160 --> 00:28:38,960 If you see a solution immediately, you should probably think to yourself, OK, 712 00:28:38,960 --> 00:28:41,001 I'm going to spend a lot of time writing code now 713 00:28:41,001 --> 00:28:42,974 to make sure I can cover everything. 714 00:28:42,974 --> 00:28:43,890 So a couple tips here. 715 00:28:43,890 --> 00:28:44,781 So the first thing-- 716 00:28:44,781 --> 00:28:47,030 you want to decompose the problem as much as possible. 717 00:28:47,030 --> 00:28:50,500 Something interviewers look for is the quality of the code you're writing. 718 00:28:50,500 --> 00:28:53,357 If you just like write a single function that has 200 lines, 719 00:28:53,357 --> 00:28:55,940 me, as an interviewer, I'm going to look at and say, OK, well, 720 00:28:55,940 --> 00:28:56,815 we hired this person. 721 00:28:56,815 --> 00:29:00,630 This is probably what they would do on the job, which we don't want. 722 00:29:00,630 --> 00:29:04,010 So really make sure that you're thinking a lot about code quality, not just 723 00:29:04,010 --> 00:29:07,910 the correctness of your code but the design and style as you CS50. 724 00:29:07,910 --> 00:29:10,490 So do things like create helper functions appropriately, 725 00:29:10,490 --> 00:29:12,962 think about how you can simplify the code even more. 726 00:29:12,962 --> 00:29:14,670 If an interviewer has to prompt you like, 727 00:29:14,670 --> 00:29:17,690 hey, do you see any bugs, that means we see a bug. 728 00:29:17,690 --> 00:29:19,610 Or do you see a way we could make it simpler? 729 00:29:19,610 --> 00:29:21,077 That means we can make it simpler. 730 00:29:21,077 --> 00:29:23,660 So try to get ahead of that and be proactive and look for bugs 731 00:29:23,660 --> 00:29:27,670 and look for those code quality improvements yourself. 732 00:29:27,670 --> 00:29:30,830 And again, familiarity with the language is going to help you a lot here. 733 00:29:30,830 --> 00:29:32,790 We'll cover that a bit later. 734 00:29:32,790 --> 00:29:36,530 So the third type of interview is the practical interview. 735 00:29:36,530 --> 00:29:39,800 So broadly, the interview is you'll be given an actual code base 736 00:29:39,800 --> 00:29:41,439 and, often, sort of a large code base. 737 00:29:41,439 --> 00:29:43,230 You'll be asked to make some changes to it. 738 00:29:43,230 --> 00:29:45,944 So you could be given some app that has a bug in it, 739 00:29:45,944 --> 00:29:48,860 and your job is to just like, never having seen this code base before, 740 00:29:48,860 --> 00:29:50,769 go and find the bug and fix it. 741 00:29:50,769 --> 00:29:53,810 This is really, really different than implementing something from scratch 742 00:29:53,810 --> 00:29:55,190 because what this interview is trying to get 743 00:29:55,190 --> 00:29:57,894 at is your ability to reason about an existing code base, 744 00:29:57,894 --> 00:29:59,810 your ability to navigate code base, understand 745 00:29:59,810 --> 00:30:02,592 how different pieces of the system fit together. 746 00:30:02,592 --> 00:30:04,550 This isn't super common, but a lot of companies 747 00:30:04,550 --> 00:30:08,060 will do this, particularly on the smaller end. 748 00:30:08,060 --> 00:30:09,957 So some tips for this one-- so really take 749 00:30:09,957 --> 00:30:13,040 the time to understand how different pieces of the code base fit together. 750 00:30:13,040 --> 00:30:15,620 So there could be three or four different modules that are used, 751 00:30:15,620 --> 00:30:17,130 and they're not all going to be relevant. 752 00:30:17,130 --> 00:30:18,350 But the three that they are relevant, try 753 00:30:18,350 --> 00:30:20,900 to understand sort of at a high level why they exist 754 00:30:20,900 --> 00:30:23,410 and how they interact with each other. 755 00:30:23,410 --> 00:30:26,750 That means you're going to spend more time reading than writing. 756 00:30:26,750 --> 00:30:30,170 In a 60-minute interview, you could just read code for like 40 minutes, 757 00:30:30,170 --> 00:30:34,900 find the bug, and fix it in two, and then that's your 45-minute interview. 758 00:30:34,900 --> 00:30:36,650 In order to be successful here, you should 759 00:30:36,650 --> 00:30:39,890 be familiar with some development environment. 760 00:30:39,890 --> 00:30:42,260 Some companies will say, hey, bring your laptop, 761 00:30:42,260 --> 00:30:44,510 get ready to code in whatever development environment you want. 762 00:30:44,510 --> 00:30:46,926 Some companies will say OK you're going to use our laptop, 763 00:30:46,926 --> 00:30:49,850 but we're going to give you these three or four different tools. 764 00:30:49,850 --> 00:30:53,370 Be familiar with something so that you don't have to worry about an interview, 765 00:30:53,370 --> 00:30:57,277 how do I set a breakpoint or what's the shortcut for doing this in the editor? 766 00:30:57,277 --> 00:30:58,610 Just be familiar with something. 767 00:30:58,610 --> 00:31:01,651 So again, it's one less thing you've got to worry about in the interview, 768 00:31:01,651 --> 00:31:04,465 so you can focus on the problem solving itself. 769 00:31:04,465 --> 00:31:06,840 A lot of these tools will have stack traces in the tools. 770 00:31:06,840 --> 00:31:09,500 So if you're ever wondering you're inside some function. 771 00:31:09,500 --> 00:31:11,530 You're wondering how did I even get here? 772 00:31:11,530 --> 00:31:13,250 A trick I like to do is just like throw an exception 773 00:31:13,250 --> 00:31:15,083 or just like divide by zero and then run it, 774 00:31:15,083 --> 00:31:18,440 and then you'll get a nice stack trace of how you got to that function. 775 00:31:18,440 --> 00:31:20,810 So that can be pretty useful in understanding 776 00:31:20,810 --> 00:31:24,680 how these pieces interact. 777 00:31:24,680 --> 00:31:27,385 The fifth is a systems design interview. 778 00:31:27,385 --> 00:31:30,510 Again, it's not as common for interns and new grads, but a lot of companies 779 00:31:30,510 --> 00:31:31,237 still ask it. 780 00:31:31,237 --> 00:31:33,570 You could basically think about these in two categories. 781 00:31:33,570 --> 00:31:35,550 The first is some technical system design. 782 00:31:35,550 --> 00:31:38,255 So someone might say how would you architect the Gmail app? 783 00:31:38,255 --> 00:31:40,130 What they're asking you is what classes would 784 00:31:40,130 --> 00:31:42,920 you create how those classes interact with each other. 785 00:31:42,920 --> 00:31:45,630 What are all the parts of the system that need to exist? 786 00:31:45,630 --> 00:31:47,380 Or it could be a product design question-- 787 00:31:47,380 --> 00:31:50,300 could say what feature is missing from Gmail? 788 00:31:50,300 --> 00:31:53,159 If you're applying to a product role or even an engineering role 789 00:31:53,159 --> 00:31:54,950 with a heavy product focus, you'll probably 790 00:31:54,950 --> 00:31:58,110 have to answer questions like this. 791 00:31:58,110 --> 00:31:58,970 So some tips there-- 792 00:31:58,970 --> 00:32:01,920 the first thing to do is understand the constraints of your system. 793 00:32:01,920 --> 00:32:04,391 So you should never start by going right into design. 794 00:32:04,391 --> 00:32:06,390 You should start by asking a bunch of questions. 795 00:32:06,390 --> 00:32:08,639 So if someone says how do you architect the Gmail app, 796 00:32:08,639 --> 00:32:10,700 start asking a bunch of questions like, OK, 797 00:32:10,700 --> 00:32:12,090 what constraints do we have to worry about? 798 00:32:12,090 --> 00:32:13,790 Do we have to worry about network latency? 799 00:32:13,790 --> 00:32:15,539 Do we have to worry about low-end devices? 800 00:32:15,539 --> 00:32:19,070 Do we have to worry about the enterprise use case or just focused on consumers? 801 00:32:19,070 --> 00:32:22,726 And just ask a bunch of questions like that to really narrow down the space 802 00:32:22,726 --> 00:32:23,850 that you're thinking about. 803 00:32:23,850 --> 00:32:26,308 So you if you try to think of a too big of a space at once, 804 00:32:26,308 --> 00:32:28,640 you're just not going to make a ton of progress. 805 00:32:28,640 --> 00:32:31,601 Second thing is be aware if any assumption you're making. 806 00:32:31,601 --> 00:32:33,350 So for example, especially if someone asks 807 00:32:33,350 --> 00:32:35,210 a question about some common product. 808 00:32:35,210 --> 00:32:36,590 You might have a bunch of assumptions because you 809 00:32:36,590 --> 00:32:38,750 might have used that product or had some ideas about it. 810 00:32:38,750 --> 00:32:40,190 Just sort of state those out loud. 811 00:32:40,190 --> 00:32:43,820 You could say like I'm assuming that we're working about the Gmail app 812 00:32:43,820 --> 00:32:44,330 on mobile. 813 00:32:44,330 --> 00:32:46,035 And by app, you don't mean desktop. 814 00:32:46,035 --> 00:32:47,660 So yeah, I'm just worried about mobile. 815 00:32:47,660 --> 00:32:50,320 But if you just go off and only think about one platform. 816 00:32:50,320 --> 00:32:52,940 Your interviewer actually wanted to do some sort of cross-platform thing, 817 00:32:52,940 --> 00:32:55,170 you just wasted a bunch of time going the wrong direction. 818 00:32:55,170 --> 00:32:56,810 So state any assumptions you're making out loud. 819 00:32:56,810 --> 00:32:58,070 Verify them with the interviewer. 820 00:32:58,070 --> 00:32:59,860 There's really no downside to doing this, 821 00:32:59,860 --> 00:33:02,850 and you really make sure you're on the right track. 822 00:33:02,850 --> 00:33:06,186 Then, next, think of the consequences of any decision you make. 823 00:33:06,186 --> 00:33:08,060 So you could say you know I want to introduce 824 00:33:08,060 --> 00:33:12,050 this class that does this think about what are the consequences of that? 825 00:33:12,050 --> 00:33:14,990 Does that mean that this other class is like suddenly harder to do? 826 00:33:14,990 --> 00:33:17,860 Does that mean that this other feature now can't be accomplished? 827 00:33:17,860 --> 00:33:19,942 So you don't just sort of propose one thing. 828 00:33:19,942 --> 00:33:22,400 Once you propose something, then think about one step ahead 829 00:33:22,400 --> 00:33:25,140 and the consequences of doing that because if you don't, your interviewer 830 00:33:25,140 --> 00:33:26,570 is just going to do it for you. 831 00:33:26,570 --> 00:33:28,569 You might sort of catch yourself making mistakes 832 00:33:28,569 --> 00:33:30,864 before your interviewer has to point them out. 833 00:33:30,864 --> 00:33:32,780 Along the same line, challenge your own ideas. 834 00:33:32,780 --> 00:33:34,490 Again, your interviewer is doing this every interview. 835 00:33:34,490 --> 00:33:36,890 Their job is to poke a bunch of holes in your system, 836 00:33:36,890 --> 00:33:39,050 and your job is to make sure that there aren't that many. 837 00:33:39,050 --> 00:33:40,966 So the more you're challenging your own ideas, 838 00:33:40,966 --> 00:33:44,829 you're going to discover weaknesses and limitations of your solution that 839 00:33:44,829 --> 00:33:47,870 sort of cover those proactively, which is much better than an interviewer 840 00:33:47,870 --> 00:33:50,009 just sort of telling you exactly what's wrong. 841 00:33:50,009 --> 00:33:51,800 And finally, just along the same line, just 842 00:33:51,800 --> 00:33:53,360 consider how future proof anything you're doing 843 00:33:53,360 --> 00:33:55,850 is, that you're not painting yourself into a corner 844 00:33:55,850 --> 00:33:57,650 because then an interviewer can introduce some new use 845 00:33:57,650 --> 00:33:58,550 case five minutes later. 846 00:33:58,550 --> 00:34:00,925 Then suddenly, you're in trouble because you didn't think 847 00:34:00,925 --> 00:34:03,560 about what could happen in the future. 848 00:34:03,560 --> 00:34:05,070 And the last one is culture. 849 00:34:05,070 --> 00:34:07,760 So this is often called the behavioral interview. 850 00:34:07,760 --> 00:34:10,850 Probably going to be happening towards the end of the loop with someone 851 00:34:10,850 --> 00:34:15,380 like me, who's a hiring manager and what we're trying to figure out here 852 00:34:15,380 --> 00:34:18,860 is essentially what are your values and do they 853 00:34:18,860 --> 00:34:21,130 align with the values of this company? 854 00:34:21,130 --> 00:34:22,751 Again, this isn't an objective thing. 855 00:34:22,751 --> 00:34:25,500 People have different values, and companies have different values. 856 00:34:25,500 --> 00:34:27,610 So we're just looking to see if there's going to be a fit. 857 00:34:27,610 --> 00:34:29,900 And ultimately, what I want to know is if we hire you 858 00:34:29,900 --> 00:34:32,300 as an intern for next summer, will you be successful? 859 00:34:32,300 --> 00:34:34,080 Because we want you to be successful. 860 00:34:34,080 --> 00:34:37,400 You also want to be successful, and so we want to try to match that up. 861 00:34:37,400 --> 00:34:41,929 So rarely will I say something like what are your five values 862 00:34:41,929 --> 00:34:44,070 because that's not a good question. 863 00:34:44,070 --> 00:34:47,130 So the way that we get this signal is a sort of two categories. 864 00:34:47,130 --> 00:34:50,090 The first is looking back, and the second is looking forward. 865 00:34:50,090 --> 00:34:51,840 So by looking back, that means we're going 866 00:34:51,840 --> 00:34:53,750 to talk about your past internships and projects. 867 00:34:53,750 --> 00:34:55,429 If you don't have any internships, that's fine. 868 00:34:55,429 --> 00:34:56,150 You've taken classes. 869 00:34:56,150 --> 00:34:57,680 We're probably going to talk about those. 870 00:34:57,680 --> 00:34:59,180 If you have taken internships, be prepared 871 00:34:59,180 --> 00:35:01,085 to talk about your most recent ones since that's probably 872 00:35:01,085 --> 00:35:03,260 the easiest for you and the most interesting for me. 873 00:35:03,260 --> 00:35:06,176 Some questions I might ask are what went well in your past internship? 874 00:35:06,176 --> 00:35:07,430 What didn't go well? 875 00:35:07,430 --> 00:35:10,547 If you tell me like nothing went well, it was the worst. 876 00:35:10,547 --> 00:35:12,630 Yeah, well, I'm a little worried about hiring you. 877 00:35:12,630 --> 00:35:13,570 If you said everything went well. 878 00:35:13,570 --> 00:35:14,420 It was perfect. 879 00:35:14,420 --> 00:35:15,840 I'm still a little worried because I bet it wasn't. 880 00:35:15,840 --> 00:35:18,240 There's five things you could have done better. 881 00:35:18,240 --> 00:35:20,580 I want to talk about the hardest challenges you faced. 882 00:35:20,580 --> 00:35:22,580 I also want to talk about how you overcame them, 883 00:35:22,580 --> 00:35:25,980 so we can see your approach to solving hard problems. 884 00:35:25,980 --> 00:35:28,870 So having an example off the top of your head is really great. 885 00:35:28,870 --> 00:35:30,830 What I really like is you know what would you have done differently now. 886 00:35:30,830 --> 00:35:32,450 So if you were to start this internship over today 887 00:35:32,450 --> 00:35:35,390 with the benefit of hindsight, what would you have done differently? 888 00:35:35,390 --> 00:35:38,098 We would like to see people who give us a lot of fire and reflect 889 00:35:38,098 --> 00:35:39,400 and can self improve. 890 00:35:39,400 --> 00:35:41,900 So these are the types of questions you should be ready for. 891 00:35:41,900 --> 00:35:46,440 Think about these in advance you don't have to think of something on the spot. 892 00:35:46,440 --> 00:35:48,500 These are easy to prep for. 893 00:35:48,500 --> 00:35:50,330 And then the other half is looking forward. 894 00:35:50,330 --> 00:35:54,200 So basically, this job or this role that you're interviewing for-- let's talk 895 00:35:54,200 --> 00:35:55,220 about that. 896 00:35:55,220 --> 00:35:58,310 So really easy question is what makes you interested in this company? 897 00:35:58,310 --> 00:36:00,080 If you say, well, I don't know. 898 00:36:00,080 --> 00:36:01,720 Like I live next door-- 899 00:36:01,720 --> 00:36:03,710 which someone has said to me in an interview-- 900 00:36:03,710 --> 00:36:05,912 not a great answer, and we're looking for something 901 00:36:05,912 --> 00:36:08,120 along the lines of maybe you really like the product, 902 00:36:08,120 --> 00:36:10,127 maybe you really like the people, maybe there's 903 00:36:10,127 --> 00:36:11,460 other things you're considering. 904 00:36:11,460 --> 00:36:12,830 So we want to hear about those. 905 00:36:12,830 --> 00:36:14,754 We want to hear your honest answers. 906 00:36:14,754 --> 00:36:15,920 What do you want to work on? 907 00:36:15,920 --> 00:36:18,500 Some people come in saying, I really just want to work on front end. 908 00:36:18,500 --> 00:36:19,125 That's my goal. 909 00:36:19,125 --> 00:36:21,230 Other people say, yeah, I don't really know. 910 00:36:21,230 --> 00:36:22,250 I'm sort of flexible. 911 00:36:22,250 --> 00:36:24,500 Again, we just want to hear this and hear that you've thought about it 912 00:36:24,500 --> 00:36:27,310 and make sure that there's a role and ask about your goals-- 913 00:36:27,310 --> 00:36:30,454 either for this internship or sort of your long-term career goals. 914 00:36:30,454 --> 00:36:33,120 And they might ask what are important aspects of culture to you, 915 00:36:33,120 --> 00:36:35,150 particularly if you worked at some past internship that 916 00:36:35,150 --> 00:36:36,620 maybe went well or didn't go well. 917 00:36:36,620 --> 00:36:41,600 I want to hear sort of organizationally what happened there. 918 00:36:41,600 --> 00:36:45,219 So in preparing for these, definitely take some time to reflect like I said, 919 00:36:45,219 --> 00:36:47,260 you don't have to come up with these on the spot. 920 00:36:47,260 --> 00:36:51,370 Think about them in advance, have some stuff ready. 921 00:36:51,370 --> 00:36:54,010 One framing I like to think about in preparing for these, just 922 00:36:54,010 --> 00:36:55,855 think about your ideal day. 923 00:36:55,855 --> 00:36:57,730 As an intern, what does your perfect day look 924 00:36:57,730 --> 00:36:59,590 like in terms of what you're doing, who you're working with, 925 00:36:59,590 --> 00:37:02,050 the types of projects you're working on, the environment around you-- 926 00:37:02,050 --> 00:37:03,008 all that kind of stuff. 927 00:37:03,008 --> 00:37:05,140 It is a really good jumping off point. 928 00:37:05,140 --> 00:37:08,710 Avoid being overly negative about the past, even if you did 929 00:37:08,710 --> 00:37:11,500 have a not so great internship experience, really 930 00:37:11,500 --> 00:37:14,909 not a good move to sort of rent about it in an interview. 931 00:37:14,909 --> 00:37:17,950 As an interviewer, if someone's ranting to me about some past internship, 932 00:37:17,950 --> 00:37:20,080 my first thought is, well, if they don't have a good time here, 933 00:37:20,080 --> 00:37:21,110 they're going to do the same thing. 934 00:37:21,110 --> 00:37:22,735 And that's not going to be good for us. 935 00:37:22,735 --> 00:37:25,170 So just don't-- it's OK to be honest and say, OK, 936 00:37:25,170 --> 00:37:25,960 here are some things that went well. 937 00:37:25,960 --> 00:37:27,584 Here's some things that didn't go well. 938 00:37:27,584 --> 00:37:29,929 But don't just sort of go off on a rant. 939 00:37:29,929 --> 00:37:31,720 And finally, if you're under an NDA and you 940 00:37:31,720 --> 00:37:35,920 can't talk about where you worked on, that's completely fine-- just say so. 941 00:37:35,920 --> 00:37:38,680 Some people don't say that they're under an NDA or just sorry, 942 00:37:38,680 --> 00:37:39,430 I can't talk about that. 943 00:37:39,430 --> 00:37:40,990 And I sort of like dance around it, and I'm just 944 00:37:40,990 --> 00:37:42,250 sort of like, well, I don't even know-- maybe you're 945 00:37:42,250 --> 00:37:43,610 just like a bad communicator. 946 00:37:43,610 --> 00:37:46,510 So if you have an NDA and you can't, a lot of people don't say that. 947 00:37:46,510 --> 00:37:47,710 So if you are, that's totally fine. 948 00:37:47,710 --> 00:37:48,550 I can't look down on you. 949 00:37:48,550 --> 00:37:50,230 It's not your fault. It's not a reflection on you. 950 00:37:50,230 --> 00:37:52,646 If you said, yeah, unfortunately, I can't talk about that, 951 00:37:52,646 --> 00:37:56,060 but I can talk about that this other thing. 952 00:37:56,060 --> 00:37:58,630 OK, so I'm going to hand it over to Ryan. 953 00:37:58,630 --> 00:38:01,130 RYAN: All right. 954 00:38:01,130 --> 00:38:01,630 So yeah. 955 00:38:01,630 --> 00:38:04,810 So now we're going to talk a bit about the interview itself, 956 00:38:04,810 --> 00:38:08,030 and we're really going to focus in on the technical interview, which 957 00:38:08,030 --> 00:38:10,900 is kind of I guess the thing that a lot of people 958 00:38:10,900 --> 00:38:14,560 get really stressed and intimidated by. 959 00:38:14,560 --> 00:38:17,360 So first, let's talk about how do you prepare for your interview? 960 00:38:17,360 --> 00:38:19,460 So there's two ways you can think about this. 961 00:38:19,460 --> 00:38:21,400 You can think about in the short term like you 962 00:38:21,400 --> 00:38:22,916 have an interview in a few weeks. 963 00:38:22,916 --> 00:38:24,790 What are you going to do to get ready for it? 964 00:38:24,790 --> 00:38:28,297 And you also kind of think about the long term like planning ahead. 965 00:38:28,297 --> 00:38:30,130 Like in the next few years, what do you want 966 00:38:30,130 --> 00:38:33,430 to do to make sure that you're going to have the best career opportunities when 967 00:38:33,430 --> 00:38:36,470 you graduate and for the next summer? 968 00:38:36,470 --> 00:38:38,210 So let's start with the short term. 969 00:38:38,210 --> 00:38:40,090 So I think one of the biggest things is just 970 00:38:40,090 --> 00:38:42,140 to get really solid in your basics. 971 00:38:42,140 --> 00:38:45,670 So if you're looking at some problems, you 972 00:38:45,670 --> 00:38:49,300 want to make sure that you have a language that you know really well. 973 00:38:49,300 --> 00:38:51,709 You know how to do everything-- 974 00:38:51,709 --> 00:38:52,750 all the basic operations. 975 00:38:52,750 --> 00:38:55,212 So say you want to know how to get the characters 976 00:38:55,212 --> 00:38:56,420 of a string in your language. 977 00:38:56,420 --> 00:39:00,120 You want to be able to let's say make a graph in this language 978 00:39:00,120 --> 00:39:04,150 and be able to define a class, an object, a node. 979 00:39:04,150 --> 00:39:06,985 You want to be able to sort some numbers. 980 00:39:06,985 --> 00:39:08,860 You want to be able to do that basic stuff so 981 00:39:08,860 --> 00:39:12,310 that when you're in the interview, you don't have to like fumble 982 00:39:12,310 --> 00:39:14,510 around and think, oh, how do I do this? 983 00:39:14,510 --> 00:39:15,940 How do I do that? 984 00:39:15,940 --> 00:39:18,640 You really want to just have as few concerns as possible 985 00:39:18,640 --> 00:39:21,670 so that you can really focus in on just what the interviewer is 986 00:39:21,670 --> 00:39:24,730 asking like looking at the algorithm, looking at your coding, 987 00:39:24,730 --> 00:39:26,920 looking at your style of your coding, as opposed 988 00:39:26,920 --> 00:39:30,850 to worrying about the basics and the syntax of the language. 989 00:39:30,850 --> 00:39:33,430 990 00:39:33,430 --> 00:39:36,430 So yeah, so few of the things I mentioned here 991 00:39:36,430 --> 00:39:39,340 you want to insert, remove things from linked lists, 992 00:39:39,340 --> 00:39:42,950 sort array, print stuff, BFS, DFS, know how 993 00:39:42,950 --> 00:39:48,630 to use a hash table, a dictionary in Python, for example. 994 00:39:48,630 --> 00:39:51,130 And I guess one thing I'd add onto here is try and pick 995 00:39:51,130 --> 00:39:53,710 a language where this is really easy. 996 00:39:53,710 --> 00:39:57,804 I have some people who try and interview in like C++, 997 00:39:57,804 --> 00:40:00,220 and they just take a really long time to write their code. 998 00:40:00,220 --> 00:40:01,810 They don't know C++ super well. 999 00:40:01,810 --> 00:40:03,760 They like did one class in it. 1000 00:40:03,760 --> 00:40:06,010 I really recommend, if possible, try and learn 1001 00:40:06,010 --> 00:40:10,430 like a nice interpretable language, something like Python, JavaScript. 1002 00:40:10,430 --> 00:40:13,570 You can really iterate quickly on a kind of interview well in. 1003 00:40:13,570 --> 00:40:18,640 1004 00:40:18,640 --> 00:40:23,290 So another really big thing is to do a lot of practice. 1005 00:40:23,290 --> 00:40:27,420 So you can do practice problems from the internet. 1006 00:40:27,420 --> 00:40:28,920 There is a lot of sites about this. 1007 00:40:28,920 --> 00:40:30,378 I'm sure you've all heard of like-- 1008 00:40:30,378 --> 00:40:33,600 I don't know-- there's like Hacker Rank and all these other things 1009 00:40:33,600 --> 00:40:36,670 where you can go on the site and just find a ton of problems. 1010 00:40:36,670 --> 00:40:38,474 I think this is a really good way to start. 1011 00:40:38,474 --> 00:40:41,640 I think we're giving out some Cracking the Coding Interview books at the end 1012 00:40:41,640 --> 00:40:42,450 too. 1013 00:40:42,450 --> 00:40:45,990 There's a lot of good problems in there, and you 1014 00:40:45,990 --> 00:40:49,110 want to kind of identify common patterns that you 1015 00:40:49,110 --> 00:40:52,529 see over and over in these problems. 1016 00:40:52,529 --> 00:40:54,570 And one thing I'd suggest when you're doing these 1017 00:40:54,570 --> 00:40:56,820 is to really practice efficiently. 1018 00:40:56,820 --> 00:41:02,670 So when you're doing the problems, don't just try it for like five minutes 1019 00:41:02,670 --> 00:41:06,344 and say like, oh, I have no idea what's going on. 1020 00:41:06,344 --> 00:41:08,010 I'm just going to go look at a solution. 1021 00:41:08,010 --> 00:41:09,852 I'm going to memorize the solution. 1022 00:41:09,852 --> 00:41:10,560 So don't do that. 1023 00:41:10,560 --> 00:41:12,890 I know a lot of people prepare like that. 1024 00:41:12,890 --> 00:41:16,016 I mean, it kind of just prepares you to do the same thing in the interview. 1025 00:41:16,016 --> 00:41:17,973 You run into something you haven't seen before. 1026 00:41:17,973 --> 00:41:19,830 You're like, oh, I don't know what to do. 1027 00:41:19,830 --> 00:41:20,910 I'm going to freeze. 1028 00:41:20,910 --> 00:41:22,352 I can't look up the solution now. 1029 00:41:22,352 --> 00:41:24,060 So you don't want to be in that position. 1030 00:41:24,060 --> 00:41:26,976 You really want to train for what you're going to do in the interview. 1031 00:41:26,976 --> 00:41:29,252 So I really suggest like taking maybe like 30 minutes 1032 00:41:29,252 --> 00:41:31,710 when you're doing these practice problems to try and really 1033 00:41:31,710 --> 00:41:36,900 focus in and figure out how you can learn from the problem 1034 00:41:36,900 --> 00:41:40,590 and learn how to do it better the next time and be kind of like retrospective 1035 00:41:40,590 --> 00:41:45,900 after you finish the problem and look into what you're going to do next time. 1036 00:41:45,900 --> 00:41:49,860 Another thing is make sure you're looking at a variety of problems. 1037 00:41:49,860 --> 00:41:52,980 Don't just focus on graphs or just focus on dynamic programming. 1038 00:41:52,980 --> 00:41:55,290 You want to get a very wide range because you really 1039 00:41:55,290 --> 00:41:59,447 don't know what companies are going to ask you ahead of time-- 1040 00:41:59,447 --> 00:42:01,530 all the things that Tommy mentioned about earlier. 1041 00:42:01,530 --> 00:42:04,140 1042 00:42:04,140 --> 00:42:08,670 There's also a lot of different data structures, you should know. 1043 00:42:08,670 --> 00:42:15,990 Mainly, I would say probably hash tables, graphs composed of nodes, 1044 00:42:15,990 --> 00:42:24,392 linked lists, maybe a tree of sorts. 1045 00:42:24,392 --> 00:42:26,100 So basically, when you look at a problem, 1046 00:42:26,100 --> 00:42:29,330 you kind of want to iterate over all the different things you can do 1047 00:42:29,330 --> 00:42:31,900 and figure out which one makes sense. 1048 00:42:31,900 --> 00:42:34,020 One thing I see that people sometimes kind of do 1049 00:42:34,020 --> 00:42:36,457 is they kind of go down one route really, 1050 00:42:36,457 --> 00:42:38,290 really deep at the beginning of the problem, 1051 00:42:38,290 --> 00:42:40,660 and they're kind of just going down the wrong route. 1052 00:42:40,660 --> 00:42:43,680 So when you look at a problem, you want to have 1053 00:42:43,680 --> 00:42:47,370 an idea of all the big variety of things that you 1054 00:42:47,370 --> 00:42:49,120 could be doing for this problem. 1055 00:42:49,120 --> 00:42:52,620 So you kind of want to start and think like, hey, does that make sense to you? 1056 00:42:52,620 --> 00:42:54,036 Does a hash table make sense here? 1057 00:42:54,036 --> 00:42:55,620 Does it make sense to make a tree? 1058 00:42:55,620 --> 00:42:57,420 What are the different options I have? 1059 00:42:57,420 --> 00:43:02,820 And I kind of like to start with kind of a breadth first approach 1060 00:43:02,820 --> 00:43:06,030 because, usually, when you have a problem, 1061 00:43:06,030 --> 00:43:07,950 it's not going be super complex. 1062 00:43:07,950 --> 00:43:11,880 We don't have time to write like a 400-line program. 1063 00:43:11,880 --> 00:43:15,040 Usually, the solutions aren't too complicated. 1064 00:43:15,040 --> 00:43:18,720 So if you try it and it's not working out too well, 1065 00:43:18,720 --> 00:43:21,300 it's a good idea to just try something else 1066 00:43:21,300 --> 00:43:23,367 and really look at all the different options 1067 00:43:23,367 --> 00:43:25,200 before really diving down into a single one. 1068 00:43:25,200 --> 00:43:28,672 1069 00:43:28,672 --> 00:43:31,380 And this is, I guess, I think it's just a lot of the things we've 1070 00:43:31,380 --> 00:43:33,950 talked about earlier. 1071 00:43:33,950 --> 00:43:38,910 I think it's actually a duplicate slide that maybe something went wrong here. 1072 00:43:38,910 --> 00:43:42,536 And lastly, you want to really be focusing 1073 00:43:42,536 --> 00:43:43,910 in on what you're not doing well. 1074 00:43:43,910 --> 00:43:48,530 So if you're [INAUDIBLE] probably don't do practice over and over. 1075 00:43:48,530 --> 00:43:50,330 You want to focus on what's not going well. 1076 00:43:50,330 --> 00:43:53,060 So if every time you do a dynamic programming 1077 00:43:53,060 --> 00:43:55,280 problem you don't feel like you can't get it, 1078 00:43:55,280 --> 00:43:57,980 just practicing a ton of dynamic learning problems, 1079 00:43:57,980 --> 00:44:01,374 and eventually, it'll start to make sense-- 1080 00:44:01,374 --> 00:44:01,874 cool. 1081 00:44:01,874 --> 00:44:04,790 1082 00:44:04,790 --> 00:44:08,450 Yep, and lastly, try to practice in a realistic setting. 1083 00:44:08,450 --> 00:44:14,930 So as much as possible, you can having your friends give you mock interviews. 1084 00:44:14,930 --> 00:44:17,710 There's some tools online, actually, where you can even go, 1085 00:44:17,710 --> 00:44:21,730 and real people will interview you. 1086 00:44:21,730 --> 00:44:23,790 I think it's like coding-- 1087 00:44:23,790 --> 00:44:25,880 I can't think of the name-- 1088 00:44:25,880 --> 00:44:27,350 interviewing.io, I think. 1089 00:44:27,350 --> 00:44:29,630 And you can kind of really practice with real people. 1090 00:44:29,630 --> 00:44:33,750 I think there's a lot that changes in a real coding environment. 1091 00:44:33,750 --> 00:44:35,985 You get nervous, and you kind of freeze. 1092 00:44:35,985 --> 00:44:38,110 And you kind of want to practice this ahead of time 1093 00:44:38,110 --> 00:44:40,150 so that when you go into a real interview, 1094 00:44:40,150 --> 00:44:43,555 you kind of feel at ease because you've done this so many times. 1095 00:44:43,555 --> 00:44:47,890 1096 00:44:47,890 --> 00:44:51,030 Yeah, and this is kind of what we talked about earlier. 1097 00:44:51,030 --> 00:44:53,750 You really want to try and take a long time on these problems. 1098 00:44:53,750 --> 00:44:57,380 Don't just look at the problem and get the solution, memorize the solution. 1099 00:44:57,380 --> 00:45:00,819 Focus on how to train yourself to how to problem solve because that's really 1100 00:45:00,819 --> 00:45:03,860 what we're going to be looking for later in the interview is your problem 1101 00:45:03,860 --> 00:45:08,390 solving ability, and it's not like have you memorize how to write Dijkstra 1102 00:45:08,390 --> 00:45:09,144 and C++. 1103 00:45:09,144 --> 00:45:10,560 That's not what we're looking for. 1104 00:45:10,560 --> 00:45:12,770 We're kind of looking for can you take a problem 1105 00:45:12,770 --> 00:45:17,060 and take it apart and know your toolbox and kind of solve the problem that way? 1106 00:45:17,060 --> 00:45:20,710 1107 00:45:20,710 --> 00:45:24,870 Yeah, so figure out what went well. 1108 00:45:24,870 --> 00:45:27,720 Ask your friends for feedback. 1109 00:45:27,720 --> 00:45:30,540 One small note here is sometimes people ask us 1110 00:45:30,540 --> 00:45:32,700 for feedback at the end of the interviews. 1111 00:45:32,700 --> 00:45:38,170 We usually cannot do this just because we are afraid of saying bad things 1112 00:45:38,170 --> 00:45:40,212 and getting sued for some reason. 1113 00:45:40,212 --> 00:45:42,420 So you'll have to ask your friends ahead of the time. 1114 00:45:42,420 --> 00:45:43,830 A lot of times, people ask in interviews. 1115 00:45:43,830 --> 00:45:44,300 I can't. 1116 00:45:44,300 --> 00:45:45,175 It's kind of awkward. 1117 00:45:45,175 --> 00:45:48,440 I can say like, oh, I think it went great. 1118 00:45:48,440 --> 00:45:50,320 The recruiter will get back to you later, 1119 00:45:50,320 --> 00:45:55,390 just because I can't tell you, unfortunately. 1120 00:45:55,390 --> 00:45:59,100 So I think another big thing is the long term. 1121 00:45:59,100 --> 00:46:02,310 So you can kind of cram a bit for your interviews 1122 00:46:02,310 --> 00:46:05,520 but what's really going to make you a really good candidate is actually 1123 00:46:05,520 --> 00:46:08,010 being really good at programming because that's 1124 00:46:08,010 --> 00:46:10,740 kind of what we're looking for in the end result. 1125 00:46:10,740 --> 00:46:12,630 The algorithms interview is kind of supposed 1126 00:46:12,630 --> 00:46:16,090 to be a proxy for how well you can do your job. 1127 00:46:16,090 --> 00:46:20,210 So the best thing you can do is just get a lot of experienced programming, 1128 00:46:20,210 --> 00:46:22,950 and this can come from a lot of different sources. 1129 00:46:22,950 --> 00:46:26,070 It can come from doing things like your practice problems. 1130 00:46:26,070 --> 00:46:28,800 It can also come from your classes-- 1131 00:46:28,800 --> 00:46:32,700 so taking a lot of data structures and algorithms classes, 1132 00:46:32,700 --> 00:46:36,480 doing these mock interviews, and really just 1133 00:46:36,480 --> 00:46:38,520 working on becoming a better programmer. 1134 00:46:38,520 --> 00:46:41,730 I think algorithms sometimes nowadays get 1135 00:46:41,730 --> 00:46:45,180 this bad rap of like being kind of this one-off thing 1136 00:46:45,180 --> 00:46:47,490 that you just prepare for the interview. 1137 00:46:47,490 --> 00:46:50,230 I think that's ideal if that's not the case. 1138 00:46:50,230 --> 00:46:52,260 I think for good companies, the interview 1139 00:46:52,260 --> 00:46:55,140 is really trying to judge how well you are at programming 1140 00:46:55,140 --> 00:46:58,429 so just get better at programming. 1141 00:46:58,429 --> 00:47:00,720 To a degree, you can think about it like if they're not 1142 00:47:00,720 --> 00:47:02,970 testing how well you are at programming, do you really 1143 00:47:02,970 --> 00:47:04,950 want to work there or those people that you 1144 00:47:04,950 --> 00:47:08,520 want to work with, if they're just like testing how well you can memorize? 1145 00:47:08,520 --> 00:47:14,520 So really focus on just getting better as a programmer in the long term. 1146 00:47:14,520 --> 00:47:18,360 Cool, so now we're going to talk specifically about how 1147 00:47:18,360 --> 00:47:20,760 does the technical interview work. 1148 00:47:20,760 --> 00:47:22,380 So what is the structure? 1149 00:47:22,380 --> 00:47:27,280 What can you expect in the algorithms interview? 1150 00:47:27,280 --> 00:47:29,730 So first, we have the preamble. 1151 00:47:29,730 --> 00:47:33,330 This is kind of often is kind of a shorter 1152 00:47:33,330 --> 00:47:36,840 version of what Tommy talked about earlier with the culture interview. 1153 00:47:36,840 --> 00:47:39,630 So we're going to ask you what have you worked on before. 1154 00:47:39,630 --> 00:47:44,040 We might ask you about like maybe you describe a challenge you've had 1155 00:47:44,040 --> 00:47:46,577 in the past and how you resolved it. 1156 00:47:46,577 --> 00:47:49,410 And in this case, we're really looking for the same things earlier-- 1157 00:47:49,410 --> 00:47:54,900 like how well do you work with a team, how well do you communicate. 1158 00:47:54,900 --> 00:48:00,077 So oftentimes, the way this will work is we'll just 1159 00:48:00,077 --> 00:48:01,910 ask you a bunch of things about your resume. 1160 00:48:01,910 --> 00:48:05,750 Like, hey, I see you've worked at Microsoft on their search team. 1161 00:48:05,750 --> 00:48:08,550 Can you tell me a bit about what you did on that team? 1162 00:48:08,550 --> 00:48:11,780 And you should be ready to really talk about what you've 1163 00:48:11,780 --> 00:48:14,710 done at your past products or your past internships 1164 00:48:14,710 --> 00:48:17,390 and prepare to give good answers. 1165 00:48:17,390 --> 00:48:19,490 One thing I would suggest this kind of thing 1166 00:48:19,490 --> 00:48:22,970 about why you did things that previous internships. 1167 00:48:22,970 --> 00:48:27,800 Sometimes I'll ask someone, hey, why did you decide to use 1168 00:48:27,800 --> 00:48:30,370 Redis in your internship project? 1169 00:48:30,370 --> 00:48:32,750 And I'll get an answer, it's like I don't know. 1170 00:48:32,750 --> 00:48:35,420 My mentor told me to use Redis, so I did. 1171 00:48:35,420 --> 00:48:36,690 So that's not a great answer. 1172 00:48:36,690 --> 00:48:39,731 You really want to try to have a solid understanding of everything you've 1173 00:48:39,731 --> 00:48:43,370 worked on and be able to have a good conversation with your interviewer 1174 00:48:43,370 --> 00:48:48,260 about the choices you made and how you thought about things, maybe 1175 00:48:48,260 --> 00:48:53,320 about how you asked on your other on your team on suggestions-- 1176 00:48:53,320 --> 00:48:55,590 all that sort of stuff. 1177 00:48:55,590 --> 00:48:58,520 One thing, though, do try to keep it short. 1178 00:48:58,520 --> 00:49:01,700 Something to remember here is that the main point of this interview 1179 00:49:01,700 --> 00:49:06,120 is to judge your algorithm skills and your cooking skills. 1180 00:49:06,120 --> 00:49:09,567 So if you stand like 20 minutes tell me about your previous internship 1181 00:49:09,567 --> 00:49:11,400 and I like keep trying to interrupt you say, 1182 00:49:11,400 --> 00:49:13,760 hey, we should start doing the algorithms and stuff. 1183 00:49:13,760 --> 00:49:16,010 And it's like keep talking. 1184 00:49:16,010 --> 00:49:20,707 I've had people that do this somewhat frequently. 1185 00:49:20,707 --> 00:49:23,540 You're not going to have as much time to do your algorithms section, 1186 00:49:23,540 --> 00:49:26,000 and it's going to reflect poorly on you because we're doing 1187 00:49:26,000 --> 00:49:27,624 our best to kind of normalize for this. 1188 00:49:27,624 --> 00:49:31,340 But at the end of the day, we can only see what you actually get to code. 1189 00:49:31,340 --> 00:49:35,120 1190 00:49:35,120 --> 00:49:37,670 Something that we'll get to, the main meat of the interview-- 1191 00:49:37,670 --> 00:49:40,550 the technical problems. 1192 00:49:40,550 --> 00:49:44,120 And specifically, I'm going to be talking about the algorithms section 1193 00:49:44,120 --> 00:49:47,690 that Tommy mentioned here, not so much the coding. 1194 00:49:47,690 --> 00:49:51,670 So I'm going to talk a little bit about why do we do algorithms interviews? 1195 00:49:51,670 --> 00:49:54,250 I think maybe if you read on the internet 1196 00:49:54,250 --> 00:49:58,300 that these interviews these areas get a fair amount of criticism 1197 00:49:58,300 --> 00:50:01,750 from people saying like, oh, these are like not reflective 1198 00:50:01,750 --> 00:50:04,056 of real-world coding. 1199 00:50:04,056 --> 00:50:05,680 So why do we give all these interviews? 1200 00:50:05,680 --> 00:50:09,670 Why is everyone in the industry giving algorithm interviews? 1201 00:50:09,670 --> 00:50:11,890 So I think the root of it is that we're really 1202 00:50:11,890 --> 00:50:17,980 looking for some common knowledge among all students. 1203 00:50:17,980 --> 00:50:21,490 So when we're looking for a new grad or an intern, 1204 00:50:21,490 --> 00:50:25,990 we're not looking for someone who can immediately start and like takeover 1205 00:50:25,990 --> 00:50:27,970 running our infrastructure. 1206 00:50:27,970 --> 00:50:32,200 We're really looking for someone who can work at the company for several years 1207 00:50:32,200 --> 00:50:36,830 and kind of learn and grow as an engineer. 1208 00:50:36,830 --> 00:50:43,790 So if we just go and we ask you like the details of how AWS EC2 instances works 1209 00:50:43,790 --> 00:50:46,690 in an interview, maybe that tests your knowledge, 1210 00:50:46,690 --> 00:50:50,630 but it's kind of like it's not going to be equal for all students. 1211 00:50:50,630 --> 00:50:53,740 It's not really going to predict how well you're going to learn and grow 1212 00:50:53,740 --> 00:50:56,760 as an engineer in the future. 1213 00:50:56,760 --> 00:50:59,850 So that's kind of why we kind of focus on this data structures 1214 00:50:59,850 --> 00:51:03,370 and algorithm because everyone takes a data structures and algorithms class. 1215 00:51:03,370 --> 00:51:09,190 So it's kind of this common expectation. 1216 00:51:09,190 --> 00:51:11,140 And so we're using it as this imperfect proxy. 1217 00:51:11,140 --> 00:51:14,447 We know it's imperfect, but we haven't found anything better. 1218 00:51:14,447 --> 00:51:15,780 So we're going to keep doing it. 1219 00:51:15,780 --> 00:51:18,790 1220 00:51:18,790 --> 00:51:21,740 So what can you expect? 1221 00:51:21,740 --> 00:51:24,780 There's at least one coding problem focusing 1222 00:51:24,780 --> 00:51:26,790 on data structures and algorithms. 1223 00:51:26,790 --> 00:51:29,550 You may get more in the interview. 1224 00:51:29,550 --> 00:51:32,400 You will never get less. 1225 00:51:32,400 --> 00:51:35,680 So there's five things you should really focus on here. 1226 00:51:35,680 --> 00:51:40,450 One of them is explain your algorithm, your approach, and its correctness. 1227 00:51:40,450 --> 00:51:44,820 So you should do this before you start writing your code. 1228 00:51:44,820 --> 00:51:48,860 So don't just start writing and then when you're done, 1229 00:51:48,860 --> 00:51:50,400 all I think this works. 1230 00:51:50,400 --> 00:51:52,230 Some people do this. 1231 00:51:52,230 --> 00:51:57,600 You should think about it, maybe even draw it on the whiteboard or something, 1232 00:51:57,600 --> 00:51:59,970 and talk to your interviewer and make sure they 1233 00:51:59,970 --> 00:52:03,120 understand that what you're saying. 1234 00:52:03,120 --> 00:52:06,460 You should be able to analyze the space and time complexity of your algorithm. 1235 00:52:06,460 --> 00:52:09,280 This is in terms of O notation. 1236 00:52:09,280 --> 00:52:13,920 So this is how much memory does it take in RAM? 1237 00:52:13,920 --> 00:52:19,740 How long does the program take to run as the input size grows? 1238 00:52:19,740 --> 00:52:23,830 You should be able to write clean code in the editor or on the whiteboard. 1239 00:52:23,830 --> 00:52:27,780 So some people don't realize that we're looking for this. 1240 00:52:27,780 --> 00:52:30,210 They think that we're just looking for the algorithm. 1241 00:52:30,210 --> 00:52:33,810 Even when it is an algorithms interview, you should still be writing thing code. 1242 00:52:33,810 --> 00:52:37,560 We'll talk a little bit more about this later. 1243 00:52:37,560 --> 00:52:41,340 On the whiteboard sometimes, you can shorten stuff 1244 00:52:41,340 --> 00:52:43,170 just because you don't have as much space 1245 00:52:43,170 --> 00:52:47,500 but still try to write as clean as possible. 1246 00:52:47,500 --> 00:52:50,250 And lastly, in some coding interviews, you also 1247 00:52:50,250 --> 00:52:52,320 may have to actually test your code. 1248 00:52:52,320 --> 00:52:54,220 I think it's becoming increasingly common, 1249 00:52:54,220 --> 00:52:56,670 especially with lot of phone interviews nowadays, 1250 00:52:56,670 --> 00:52:59,940 that you actually run your code in an environment 1251 00:52:59,940 --> 00:53:02,010 and verify that it's actually working. 1252 00:53:02,010 --> 00:53:05,770 1253 00:53:05,770 --> 00:53:08,470 And then lastly, we're going to have this closing, 1254 00:53:08,470 --> 00:53:11,590 and this is really time for you to ask questions [INAUDIBLE] I'm 1255 00:53:11,590 --> 00:53:13,360 talking about a lot of this stuff earlier 1256 00:53:13,360 --> 00:53:16,150 really just make sure that you're actually asking questions. 1257 00:53:16,150 --> 00:53:18,089 You're still being judged at this point. 1258 00:53:18,089 --> 00:53:19,380 Some people don't realize this. 1259 00:53:19,380 --> 00:53:21,088 They think it's all about the algorithms. 1260 00:53:21,088 --> 00:53:23,977 I think maybe it's perhaps overemphasized nowadays. 1261 00:53:23,977 --> 00:53:26,060 There's actually a huge portion of your interview, 1262 00:53:26,060 --> 00:53:28,870 which is really just focused on the culture and the culture fit 1263 00:53:28,870 --> 00:53:31,360 and similar. 1264 00:53:31,360 --> 00:53:33,290 So make sure you ask good questions here. 1265 00:53:33,290 --> 00:53:37,570 Don't ask like I've had someone ask me like is your office in the Bay Area? 1266 00:53:37,570 --> 00:53:39,520 Please do like basic research ahead of time. 1267 00:53:39,520 --> 00:53:44,700 You shouldn't be asking this stuff at the end of the interview. 1268 00:53:44,700 --> 00:53:48,690 Yes, so I think Tommy has covered this a bit, so we'll skip this for now-- 1269 00:53:48,690 --> 00:53:50,140 cool. 1270 00:53:50,140 --> 00:53:52,440 TOMMY: We're going to do our first mock interview. 1271 00:53:52,440 --> 00:53:54,970 We're going to do an interview where Ryan is going to interview me. 1272 00:53:54,970 --> 00:53:57,500 Then we're going to talk about what went well and what didn't. 1273 00:53:57,500 --> 00:54:00,166 And then after that, go into a bunch of sort of more formal tips 1274 00:54:00,166 --> 00:54:04,140 and tricks and strategies for the technical interview itself. 1275 00:54:04,140 --> 00:54:07,750 RYAN: So this is a tool called Coderpad. 1276 00:54:07,750 --> 00:54:11,580 I don't know why it put Python 3.6 a bunch of times, but it did. 1277 00:54:11,580 --> 00:54:15,394 It's a pretty common tool that people will use for technical phone screens. 1278 00:54:15,394 --> 00:54:18,310 You sort of login, and you'll get a shared link with your interviewer. 1279 00:54:18,310 --> 00:54:20,574 And they'll be on one end talking to you. 1280 00:54:20,574 --> 00:54:21,490 You'll be on this end. 1281 00:54:21,490 --> 00:54:23,406 You can both see the code that you're writing. 1282 00:54:23,406 --> 00:54:28,800 1283 00:54:28,800 --> 00:54:32,420 OK, so Ryan is going to interview me, and then we'll go from there. 1284 00:54:32,420 --> 00:54:33,222 TOMMY: Cool. 1285 00:54:33,222 --> 00:54:33,930 RYAN: Hey, Tommy. 1286 00:54:33,930 --> 00:54:36,430 How's it going? 1287 00:54:36,430 --> 00:54:38,240 TOMMY: I'm here. 1288 00:54:38,240 --> 00:54:40,240 RYAN: Actually, we're you skipping the preamble? 1289 00:54:40,240 --> 00:54:41,290 I think you did it last time. 1290 00:54:41,290 --> 00:54:41,790 TOMMY: Yeah, just go. 1291 00:54:41,790 --> 00:54:42,690 RYAN: OK, cool. 1292 00:54:42,690 --> 00:54:44,322 So we're going to skip the preamble. 1293 00:54:44,322 --> 00:54:47,030 So we also have like 10 minutes talking about Tommy's background. 1294 00:54:47,030 --> 00:54:47,960 All right, cool. 1295 00:54:47,960 --> 00:54:49,690 So let's get started with the problem. 1296 00:54:49,690 --> 00:54:55,810 So today, your task is to make a program that takes as an input an integer, 1297 00:54:55,810 --> 00:55:01,030 and then you want to use the n Fibonacci number in binary format. 1298 00:55:01,030 --> 00:55:02,020 Does that make sense? 1299 00:55:02,020 --> 00:55:02,520 TOMMY: Yep. 1300 00:55:02,520 --> 00:55:07,405 1301 00:55:07,405 --> 00:55:09,405 RYAN: So do you want to talk about your program? 1302 00:55:09,405 --> 00:55:10,656 TOMMY: No, no, no, no, no. 1303 00:55:10,656 --> 00:55:14,320 1304 00:55:14,320 --> 00:55:15,820 RYAN: All right. 1305 00:55:15,820 --> 00:55:17,450 TOMMY: Yeah, one second. 1306 00:55:17,450 --> 00:55:20,885 OK, that's the Fibonacci, and now let's do the binary. 1307 00:55:20,885 --> 00:55:37,192 1308 00:55:37,192 --> 00:55:38,400 Yeah, and that's the spinner. 1309 00:55:38,400 --> 00:55:41,180 1310 00:55:41,180 --> 00:55:44,810 RYAN: Do you want to test it maybe? 1311 00:55:44,810 --> 00:55:47,019 TOMMY: It's going to work it's like-- 1312 00:55:47,019 --> 00:55:47,560 that's right. 1313 00:55:47,560 --> 00:55:50,660 1314 00:55:50,660 --> 00:55:52,355 RYAN: Did it run? 1315 00:55:52,355 --> 00:55:54,040 TOMMY: Do you want that or no? 1316 00:55:54,040 --> 00:55:58,220 RYAN: Yeah, you can just try printing a sample test-- maybe like three. 1317 00:55:58,220 --> 00:56:01,321 1318 00:56:01,321 --> 00:56:01,820 TOMMY: Fine. 1319 00:56:01,820 --> 00:56:06,320 1320 00:56:06,320 --> 00:56:11,480 RYAN: You said three, but I'm going to do five because I like five better. 1321 00:56:11,480 --> 00:56:14,520 All right, that's a couple of ones, so that's binary. 1322 00:56:14,520 --> 00:56:18,710 So if I think about the fifth of the fifth Fibonacci number, 1323 00:56:18,710 --> 00:56:20,360 well, it's zero indexed. 1324 00:56:20,360 --> 00:56:25,914 Obviously, this for the fourth, so 0, 1, 1, 2, 3. 1325 00:56:25,914 --> 00:56:31,400 Well, I mean, 3 is 3 is 1 1 in binary, so that's it. 1326 00:56:31,400 --> 00:56:33,830 TOMMY: Let's try eight maybe? 1327 00:56:33,830 --> 00:56:35,150 RYAN: Why? 1328 00:56:35,150 --> 00:56:37,700 TOMMY: I think we should just try some other outputs. 1329 00:56:37,700 --> 00:56:42,650 1330 00:56:42,650 --> 00:56:46,070 RYAN: There you go. 1331 00:56:46,070 --> 00:56:48,350 TOMMY: That's not quite right, is it? 1332 00:56:48,350 --> 00:56:49,665 RYAN: All right. 1333 00:56:49,665 --> 00:56:50,730 Oh, yeah, I know. 1334 00:56:50,730 --> 00:56:51,570 I know. 1335 00:56:51,570 --> 00:56:52,080 I got this. 1336 00:56:52,080 --> 00:56:56,840 1337 00:56:56,840 --> 00:57:00,620 No, I don't. 1338 00:57:00,620 --> 00:57:04,546 1339 00:57:04,546 --> 00:57:06,420 TOMMY: So one thing to notice is that there's 1340 00:57:06,420 --> 00:57:08,160 no ones or zeros in your output. 1341 00:57:08,160 --> 00:57:09,000 RYAN: Yeah, I know. 1342 00:57:09,000 --> 00:57:09,660 I know. 1343 00:57:09,660 --> 00:57:18,417 It's because that if I just flip-flop these-- 1344 00:57:18,417 --> 00:57:20,750 TOMMY: So why don't we try stepping through the program? 1345 00:57:20,750 --> 00:57:22,583 RYAN: Yeah, I mean, well, I mean, you can't. 1346 00:57:22,583 --> 00:57:25,320 There's the fib, And then there's the binary, 1347 00:57:25,320 --> 00:57:27,690 and then you do them in that order. 1348 00:57:27,690 --> 00:57:30,536 So this was it. 1349 00:57:30,536 --> 00:57:31,660 TOMMY: OK, we'll cut there. 1350 00:57:31,660 --> 00:57:34,760 1351 00:57:34,760 --> 00:57:38,050 I know really, really stellar. 1352 00:57:38,050 --> 00:57:41,310 Let's talk about what went well and what did not. 1353 00:57:41,310 --> 00:57:44,020 So [INAUDIBLE] raise your hand. 1354 00:57:44,020 --> 00:57:44,680 Yeah? 1355 00:57:44,680 --> 00:57:47,620 AUDIENCE: [INAUDIBLE] 1356 00:57:47,620 --> 00:57:49,012 TOMMY: Yes, do not listen at all. 1357 00:57:49,012 --> 00:57:51,220 So the interviewer is trying to help me along and say 1358 00:57:51,220 --> 00:57:55,100 like here you should try this case-- 1359 00:57:55,100 --> 00:57:58,960 sort of tried to guide me and I just sort of ignored him entirely. 1360 00:57:58,960 --> 00:58:00,740 What else? 1361 00:58:00,740 --> 00:58:01,240 Yeah? 1362 00:58:01,240 --> 00:58:03,491 AUDIENCE: The code is recursive instead of entered in. 1363 00:58:03,491 --> 00:58:04,823 TOMMY: Yeah, that's pretty good. 1364 00:58:04,823 --> 00:58:07,650 The code makes no sense is sort of how I'd generalize that. 1365 00:58:07,650 --> 00:58:12,174 Yeah, the code is just flat out wrong so don't do that. 1366 00:58:12,174 --> 00:58:13,840 Other things that didn't go well or did? 1367 00:58:13,840 --> 00:58:17,326 AUDIENCE: [INAUDIBLE] 1368 00:58:17,326 --> 00:58:18,200 TOMMY: Yeah, exactly. 1369 00:58:18,200 --> 00:58:20,050 So you could see that what I did is I made an assumption. 1370 00:58:20,050 --> 00:58:20,980 I made a bunch of assumptions. 1371 00:58:20,980 --> 00:58:22,120 I didn't clarify upfront. 1372 00:58:22,120 --> 00:58:24,070 I assumed that like at zero indexed. 1373 00:58:24,070 --> 00:58:26,849 Well, I said it was zero indexed, and then I 1374 00:58:26,849 --> 00:58:28,390 didn't start by asking any questions. 1375 00:58:28,390 --> 00:58:31,014 With Fibonacci, that's like a very obvious clarifying question. 1376 00:58:31,014 --> 00:58:34,881 I just sort of jumped in and didn't ask any of that. 1377 00:58:34,881 --> 00:58:35,380 What else? 1378 00:58:35,380 --> 00:58:42,660 1379 00:58:42,660 --> 00:58:44,750 There's definitely other things. 1380 00:58:44,750 --> 00:58:45,250 Yeah? 1381 00:58:45,250 --> 00:58:48,002 1382 00:58:48,002 --> 00:58:49,460 AUDIENCE: Your attitude [INAUDIBLE] 1383 00:58:49,460 --> 00:58:53,100 TOMMY: Yeah, so I was very flustered or stressed out. 1384 00:58:53,100 --> 00:58:55,700 When it didn't work, I just sort of like freaked out 1385 00:58:55,700 --> 00:58:57,334 and started changing things randomly. 1386 00:58:57,334 --> 00:58:59,250 I didn't really reason through the code to try 1387 00:58:59,250 --> 00:59:02,400 to understand what's happening. was sort of flipping random signs 1388 00:59:02,400 --> 00:59:04,170 and hoping it was going to work. 1389 00:59:04,170 --> 00:59:06,835 At no point did I explain what my code was actually doing 1390 00:59:06,835 --> 00:59:09,210 or try to run through in my head and explain my approach. 1391 00:59:09,210 --> 00:59:12,390 I just sort of kept running it, changing random things, run it again, 1392 00:59:12,390 --> 00:59:14,473 which doesn't really give anyone confidence that I 1393 00:59:14,473 --> 00:59:15,730 have any idea what I'm doing. 1394 00:59:15,730 --> 00:59:17,955 How about one more, good or bad-- yeah? 1395 00:59:17,955 --> 00:59:20,163 AUDIENCE: In test cases, you didn't do extreme values 1396 00:59:20,163 --> 00:59:22,320 or probably like negative one. 1397 00:59:22,320 --> 00:59:24,980 TOMMY: Yeah, definitely. 1398 00:59:24,980 --> 00:59:27,449 Ryan actually suggested a test case that I ignored, 1399 00:59:27,449 --> 00:59:29,490 and then this piece is by no means comprehensive. 1400 00:59:29,490 --> 00:59:30,730 And I just sort of like printed it out. 1401 00:59:30,730 --> 00:59:32,146 That's not a great way to do that. 1402 00:59:32,146 --> 00:59:35,080 So I didn't edit reason through edge cases at all. 1403 00:59:35,080 --> 00:59:41,010 So, OK, so let's jump back and talk about concretely some strategies 1404 00:59:41,010 --> 00:59:43,540 and things to do differently-- 1405 00:59:43,540 --> 00:59:44,345 cool. 1406 00:59:44,345 --> 00:59:45,886 RYAN: Yeah, so that was not so great. 1407 00:59:45,886 --> 00:59:48,900 So let's talk a bit about what should you do. 1408 00:59:48,900 --> 00:59:52,120 So we talked a bit about what the negative examples here. 1409 00:59:52,120 --> 00:59:55,650 So what you should do is you should make sure you understand the problem. 1410 00:59:55,650 --> 00:59:59,640 It's extremely common that as an interviewer, I will ask a question, 1411 00:59:59,640 --> 01:00:03,100 and the interviewer-- does not actually immediately understand the problem. 1412 01:00:03,100 --> 01:00:07,860 So one good way to do this is to take an input 1413 01:00:07,860 --> 01:00:10,440 and make sure that you and the interviewer 1414 01:00:10,440 --> 01:00:12,500 agree on the output of that input. 1415 01:00:12,500 --> 01:00:15,600 So for example in this Fibonacci program, 1416 01:00:15,600 --> 01:00:18,750 it would have been good if Tommy had verified there was zero one index 1417 01:00:18,750 --> 01:00:21,780 and verified like hey how do you want this? 1418 01:00:21,780 --> 01:00:28,320 Should it be three or should it be 1 1 1 for input 5 or what not? 1419 01:00:28,320 --> 01:00:31,530 And you should also ask some clarifying questions. 1420 01:00:31,530 --> 01:00:35,524 I think you can save yourself a lot of time here by just making sure that you 1421 01:00:35,524 --> 01:00:37,440 really, really, really understand the problem. 1422 01:00:37,440 --> 01:00:39,565 A lot of times, people think it's more complex then 1423 01:00:39,565 --> 01:00:42,990 it really is, or you need to handle more test cases. 1424 01:00:42,990 --> 01:00:48,750 You can say, hey, do I need to cover negative numbers as well? 1425 01:00:48,750 --> 01:00:51,180 Do I need to handle the null case? 1426 01:00:51,180 --> 01:00:55,530 Do I need to handle like very, very large numbers? 1427 01:00:55,530 --> 01:00:57,729 And it gives you your interviewer a good signal 1428 01:00:57,729 --> 01:00:59,520 that you know what to look for in a program 1429 01:00:59,520 --> 01:01:01,418 as well when you're asking these questions. 1430 01:01:01,418 --> 01:01:04,819 1431 01:01:04,819 --> 01:01:06,360 Let's talk a bit about brainstorming. 1432 01:01:06,360 --> 01:01:08,660 So we touched on this a bit earlier. 1433 01:01:08,660 --> 01:01:11,385 But one thing to remember here is that your process is 1434 01:01:11,385 --> 01:01:13,010 really more important than your output. 1435 01:01:13,010 --> 01:01:15,530 1436 01:01:15,530 --> 01:01:19,550 If the most optimal solution requires a heap and you're just like not 1437 01:01:19,550 --> 01:01:23,690 familiar with the heap, and you find like some suboptimal solution that 1438 01:01:23,690 --> 01:01:26,240 uses like a sorted list, you're not going 1439 01:01:26,240 --> 01:01:27,900 to get dinged much on that at all-- 1440 01:01:27,900 --> 01:01:28,940 maybe not even at all. 1441 01:01:28,940 --> 01:01:33,560 If we're really primarily looking to see how well can you 1442 01:01:33,560 --> 01:01:35,630 reason through a problem, we're not looking 1443 01:01:35,630 --> 01:01:39,800 have you memorized this algorithm, have you memorized the data structure. 1444 01:01:39,800 --> 01:01:42,530 Those things you should do because it makes it easier 1445 01:01:42,530 --> 01:01:44,474 to get through these problems, but that's 1446 01:01:44,474 --> 01:01:46,640 not the goal of the interview the goal the interview 1447 01:01:46,640 --> 01:01:53,360 is to understand how well you operate in a real programming environment. 1448 01:01:53,360 --> 01:01:56,017 So you should go through a couple of different approaches 1449 01:01:56,017 --> 01:01:57,350 starting with the easiest thing. 1450 01:01:57,350 --> 01:02:00,110 So get the brute force solution. 1451 01:02:00,110 --> 01:02:03,770 Try every possible input and just run a verification on it. 1452 01:02:03,770 --> 01:02:08,600 Start with that because sometimes maybe that's like the best thing 1453 01:02:08,600 --> 01:02:10,100 that the interviewer is looking for. 1454 01:02:10,100 --> 01:02:12,650 I've had interviewers ask me questions that were 1455 01:02:12,650 --> 01:02:14,709 like how to close form solutions, but they didn't 1456 01:02:14,709 --> 01:02:16,250 want to know the close form solution. 1457 01:02:16,250 --> 01:02:19,990 They just wanted me to do a search implementation or something similar. 1458 01:02:19,990 --> 01:02:21,990 So really, even if you think it's really simple, 1459 01:02:21,990 --> 01:02:27,200 you just state that the simplest solution first and then go from there. 1460 01:02:27,200 --> 01:02:30,410 Drawing diagrams and test cases helps a ton. 1461 01:02:30,410 --> 01:02:33,920 I would suggest if you're doing a phone interview, have paper next to you. 1462 01:02:33,920 --> 01:02:37,400 I find it's a lot easier to diagram trees, 1463 01:02:37,400 --> 01:02:41,620 diagram your stream problems on paper, as opposed to using your laptop. 1464 01:02:41,620 --> 01:02:43,790 It's just so much faster to iterate, especially 1465 01:02:43,790 --> 01:02:46,440 on something like a graph problem. 1466 01:02:46,440 --> 01:02:48,499 And when you're doing your interview, even 1467 01:02:48,499 --> 01:02:51,290 if you're going to code on a laptop and there's a whiteboard there, 1468 01:02:51,290 --> 01:02:53,990 it's good I guess to just draw it out on the whiteboard. 1469 01:02:53,990 --> 01:02:56,390 Not only for your own benefit but also so 1470 01:02:56,390 --> 01:02:58,790 that you can kind of explain your process 1471 01:02:58,790 --> 01:03:01,507 to the interviewer who is trying to understand how well do 1472 01:03:01,507 --> 01:03:02,840 you work through these problems. 1473 01:03:02,840 --> 01:03:05,460 1474 01:03:05,460 --> 01:03:09,102 And lastly, make sure you do explain at a high level what 1475 01:03:09,102 --> 01:03:10,310 your approach is going to be. 1476 01:03:10,310 --> 01:03:12,510 Don't just like start writing your code. 1477 01:03:12,510 --> 01:03:15,301 Make sure your interviewer and you agree that's a good idea 1478 01:03:15,301 --> 01:03:17,300 to write the solution before you start doing it. 1479 01:03:17,300 --> 01:03:21,887 1480 01:03:21,887 --> 01:03:23,720 Let's talk a bit about writing the code too. 1481 01:03:23,720 --> 01:03:28,250 So again, just like the last slide, your process 1482 01:03:28,250 --> 01:03:29,970 is more important than your output. 1483 01:03:29,970 --> 01:03:35,690 So we're really looking to see how well can you work through a coding problem. 1484 01:03:35,690 --> 01:03:38,650 We're not looking, for example, do you know 1485 01:03:38,650 --> 01:03:42,410 whether reverse is a function of a string or it's like a function 1486 01:03:42,410 --> 01:03:45,354 that you call on a string. 1487 01:03:45,354 --> 01:03:48,020 We're not looking to see like how well you know your programming 1488 01:03:48,020 --> 01:03:49,130 language in super depth. 1489 01:03:49,130 --> 01:03:52,164 We want to know do you have familiarity. 1490 01:03:52,164 --> 01:03:54,080 We don't want to know like do you know the ins 1491 01:03:54,080 --> 01:03:56,246 and outs of every part of that programming language. 1492 01:03:56,246 --> 01:04:03,220 1493 01:04:03,220 --> 01:04:06,390 So secondly, your code really does matter so do not 1494 01:04:06,390 --> 01:04:09,570 call your functions foo, bar, and baz. 1495 01:04:09,570 --> 01:04:12,160 If you've had programming foreign language background, 1496 01:04:12,160 --> 01:04:15,090 you should not just like use single variable programming variable 1497 01:04:15,090 --> 01:04:18,270 names because you're trying to show your interviewer 1498 01:04:18,270 --> 01:04:22,260 what are you going to be like when you're on the job. 1499 01:04:22,260 --> 01:04:24,420 So name your tables reasonable things. 1500 01:04:24,420 --> 01:04:27,090 I also find that this actually really helps me 1501 01:04:27,090 --> 01:04:30,870 when I'm coding as well so especially when we're on the whiteboard, 1502 01:04:30,870 --> 01:04:31,930 for example. 1503 01:04:31,930 --> 01:04:35,670 You might need to like run through your code in your head. 1504 01:04:35,670 --> 01:04:37,770 It really helps me if I've named my variable 1505 01:04:37,770 --> 01:04:42,090 as something that kind of makes the program read like English. 1506 01:04:42,090 --> 01:04:49,590 So for example, like if I have a complex logic statement like if A and B or C 1507 01:04:49,590 --> 01:04:55,410 and D, I'll try to break it up into subparts like is number prime, 1508 01:04:55,410 --> 01:05:00,430 is the string greater than two length. 1509 01:05:00,430 --> 01:05:02,460 And some of this stuff makes your code longer, 1510 01:05:02,460 --> 01:05:06,450 but it really helps you kind of understand what's going on 1511 01:05:06,450 --> 01:05:11,970 and read through it and verify that everything's working correctly. 1512 01:05:11,970 --> 01:05:15,400 A big one is you should break your functions into helper functions. 1513 01:05:15,400 --> 01:05:18,240 So if you can break down your problem as much as possible 1514 01:05:18,240 --> 01:05:20,640 so you can test it in small parts, it'll really 1515 01:05:20,640 --> 01:05:23,340 help you when you're going back later and your debugging it, 1516 01:05:23,340 --> 01:05:26,010 either in your head or on a real computer. 1517 01:05:26,010 --> 01:05:28,540 So for example in the Fibonacci problem, it 1518 01:05:28,540 --> 01:05:31,680 would be really, really good to define multiple functions, make a function, 1519 01:05:31,680 --> 01:05:33,055 take something goes from decimal. 1520 01:05:33,055 --> 01:05:37,070 It goes to binary, produces the nth Fibonacci number-- 1521 01:05:37,070 --> 01:05:39,402 so break down your code. 1522 01:05:39,402 --> 01:05:41,610 You'll find this helps a lot when you were on the job 1523 01:05:41,610 --> 01:05:45,420 as well if you write a really complicated program with really 1524 01:05:45,420 --> 01:05:48,900 big state, It's going to take for you forever debug your program at the end. 1525 01:05:48,900 --> 01:05:53,460 So try and keep everything as kind of separate and discrete as possible. 1526 01:05:53,460 --> 01:05:56,950 1527 01:05:56,950 --> 01:06:05,660 Yep, so when you're coding on the computer, 1528 01:06:05,660 --> 01:06:10,760 it's really, really hard to get things to work correctly on the first time, 1529 01:06:10,760 --> 01:06:14,720 but you also want to make sure that is eventually correct. 1530 01:06:14,720 --> 01:06:18,200 So there's kind of this trade-off here. 1531 01:06:18,200 --> 01:06:21,330 As we talked about earlier, helper functions will help a lot here. 1532 01:06:21,330 --> 01:06:25,160 And one thing I suggest is that when you're writing your code, 1533 01:06:25,160 --> 01:06:28,260 actually add your debug statements as you write your code. 1534 01:06:28,260 --> 01:06:31,070 So the first pass when I go through my code sometimes, 1535 01:06:31,070 --> 01:06:33,110 I'll just include print statements, so I can 1536 01:06:33,110 --> 01:06:36,170 verify that things are working as I expect, as opposed 1537 01:06:36,170 --> 01:06:37,940 to going back and debugging later. 1538 01:06:37,940 --> 01:06:42,140 I find this actually helps a lot for initial program writing speed. 1539 01:06:42,140 --> 01:06:47,560 1540 01:06:47,560 --> 01:06:50,890 And lastly, some final tips just in general, you really 1541 01:06:50,890 --> 01:06:53,664 want to over-communicate, as opposed to under-communicate. 1542 01:06:53,664 --> 01:06:56,830 Not only does this save us from this awkward silence where we just sit there 1543 01:06:56,830 --> 01:06:58,170 and watch you code. 1544 01:06:58,170 --> 01:07:01,420 It really helps with the thing we talked earlier about the process 1545 01:07:01,420 --> 01:07:03,850 that we're trying to understand what you're thinking. 1546 01:07:03,850 --> 01:07:07,600 And if you run into a problem, it helps us understand that like, hey, I'm 1547 01:07:07,600 --> 01:07:09,280 thinking about this thing. 1548 01:07:09,280 --> 01:07:10,690 I haven't just like frozen. 1549 01:07:10,690 --> 01:07:13,960 I can't remember how to program or something. 1550 01:07:13,960 --> 01:07:17,890 So try to communicate as much as you can. 1551 01:07:17,890 --> 01:07:21,280 And remember, lastly, that it is not all about just writing 1552 01:07:21,280 --> 01:07:23,060 solving problems and writing code. 1553 01:07:23,060 --> 01:07:26,830 All the other stuff that we'd mentioned earlier about like being a nice person, 1554 01:07:26,830 --> 01:07:31,070 communicating well, explaining your ideas is all really, really important. 1555 01:07:31,070 --> 01:07:35,530 I think a lot of this gets lost nowadays over focus on the algorithm itself. 1556 01:07:35,530 --> 01:07:39,600 1557 01:07:39,600 --> 01:07:43,899 And let's talk a little bit about debugging on a whiteboard. 1558 01:07:43,899 --> 01:07:46,190 There's some practical things you should watch out for. 1559 01:07:46,190 --> 01:07:48,572 Just plan your code ahead of time. 1560 01:07:48,572 --> 01:07:50,780 You do not have to worry about these practical things 1561 01:07:50,780 --> 01:07:52,820 because you have a fixed time limit. 1562 01:07:52,820 --> 01:07:55,930 So try to not run out of space. 1563 01:07:55,930 --> 01:07:59,090 Write things-- you want to spend a little bit more time planning 1564 01:07:59,090 --> 01:08:00,839 when you're going to write on a whiteboard 1565 01:08:00,839 --> 01:08:03,610 because you can't refactor it quite so easily. 1566 01:08:03,610 --> 01:08:07,040 And you really want to practice debugging by stepping through 1567 01:08:07,040 --> 01:08:11,720 in your head because you're not able to have print standard and what not. 1568 01:08:11,720 --> 01:08:14,330 I think it's actually a really good skill that I actually 1569 01:08:14,330 --> 01:08:17,810 end up using my job as well because it takes a really long time to compile 1570 01:08:17,810 --> 01:08:18,990 larger programs nowadays. 1571 01:08:18,990 --> 01:08:22,370 So this can be a very useful skill. 1572 01:08:22,370 --> 01:08:26,217 You can do it by just doing one of your practice problems 1573 01:08:26,217 --> 01:08:28,550 and then trying to figure out, is it going to be correct 1574 01:08:28,550 --> 01:08:30,649 before you run the code because that's kind 1575 01:08:30,649 --> 01:08:34,590 of what you have to do on your whiteboard problems to a degree. 1576 01:08:34,590 --> 01:08:37,560 Cool, so now we're going to try a second mock interview 1577 01:08:37,560 --> 01:08:39,439 where Tommy is going to interview me. 1578 01:08:39,439 --> 01:08:43,060 TOMMY: OK, so keeping all those things in mind, we go to a second interview 1579 01:08:43,060 --> 01:08:43,560 here. 1580 01:08:43,560 --> 01:08:45,841 I'll start fresh. 1581 01:08:45,841 --> 01:08:47,590 So this time, I'm going to interview Ryan. 1582 01:08:47,590 --> 01:08:51,460 And again, we'll talk about what went well and what did not go so well. 1583 01:08:51,460 --> 01:08:52,170 How's it going? 1584 01:08:52,170 --> 01:08:53,189 RYAN: Hey, It's going great. 1585 01:08:53,189 --> 01:08:53,640 How are you? 1586 01:08:53,640 --> 01:08:54,029 TOMMY: Great. 1587 01:08:54,029 --> 01:08:54,779 RYAN: Good to hear. 1588 01:08:54,779 --> 01:08:56,040 Are you ready for some technical problems? 1589 01:08:56,040 --> 01:08:56,540 TOMMY: Yeah. 1590 01:08:56,540 --> 01:08:57,165 RYAN: OK, cool. 1591 01:08:57,165 --> 01:08:58,140 So for this first one. 1592 01:08:58,140 --> 01:09:00,730 1593 01:09:00,730 --> 01:09:02,729 Let's start by you're going to write a function, 1594 01:09:02,729 --> 01:09:04,562 and it's going to take as input some number. 1595 01:09:04,562 --> 01:09:08,040 And it's going to output the nth Fibonacci number in binary. 1596 01:09:08,040 --> 01:09:13,290 TOMMY: Cool, let's see, so for Fibonacci numbers, I would be going from 1 1, 1597 01:09:13,290 --> 01:09:16,740 2, 3, 4, 5, I'll just give an example here. 1598 01:09:16,740 --> 01:09:19,470 1599 01:09:19,470 --> 01:09:23,179 Do we say that the top is the value, and the bottom is the index? 1600 01:09:23,179 --> 01:09:24,470 Is that what we're looking for? 1601 01:09:24,470 --> 01:09:25,020 RYAN: Yeah, that's right. 1602 01:09:25,020 --> 01:09:25,950 Let's go with that. 1603 01:09:25,950 --> 01:09:27,210 TOMMY: Cool. 1604 01:09:27,210 --> 01:09:31,300 Let's see here-- so I think I'm going to first break it into two parts. 1605 01:09:31,300 --> 01:09:34,680 We're going to start by computing nth Fibonacci number. 1606 01:09:34,680 --> 01:09:40,399 I think I'll do that iteratively and kind of build it up with an array. 1607 01:09:40,399 --> 01:09:41,344 RYAN: OK. 1608 01:09:41,344 --> 01:09:43,260 TOMMY: And then I'm going to do a second part. 1609 01:09:43,260 --> 01:09:48,490 I'm going to transfer that number from decimal to binary. 1610 01:09:48,490 --> 01:09:49,770 Does that make sense? 1611 01:09:49,770 --> 01:09:51,450 RYAN: Yeah, that sounds good 1612 01:09:51,450 --> 01:09:53,859 TOMMY: Cool, let's get started here. 1613 01:09:53,859 --> 01:09:58,770 So first of all, to make the entry point, we'll call it fib binary. 1614 01:09:58,770 --> 01:10:01,390 And we'll just leave this empty for now. 1615 01:10:01,390 --> 01:10:06,750 So first, let's make a function that takes in a number and returns 1616 01:10:06,750 --> 01:10:08,790 in a Fibonacci number. 1617 01:10:08,790 --> 01:10:15,060 So we know that a basic Fibonacci number is f of n equals fn minus 1 1618 01:10:15,060 --> 01:10:18,840 plus f of n minus 2. 1619 01:10:18,840 --> 01:10:19,980 So let's see. 1620 01:10:19,980 --> 01:10:23,590 So if we were to do that just fully recursively, 1621 01:10:23,590 --> 01:10:27,540 we'd probably run a stack space for a large int. 1622 01:10:27,540 --> 01:10:31,670 So I'm going to try and do it iteratively and maintain our array. 1623 01:10:31,670 --> 01:10:32,730 RYAN: Sure. 1624 01:10:32,730 --> 01:10:37,300 TOMMY: So initialize it with the size of the number of elements. 1625 01:10:37,300 --> 01:10:41,220 Let's see-- and we'll start from zero and build up. 1626 01:10:41,220 --> 01:10:43,928 So for i in range-- 1627 01:10:43,928 --> 01:10:54,550 1628 01:10:54,550 --> 01:10:55,310 all right. 1629 01:10:55,310 --> 01:11:01,660 And then we'll return the last element. 1630 01:11:01,660 --> 01:11:06,370 And because we iterate up to n, we'll return n minus 1. 1631 01:11:06,370 --> 01:11:08,400 RYAN: Sure. 1632 01:11:08,400 --> 01:11:11,100 TOMMY: Cool and then next, let's take a decimal number 1633 01:11:11,100 --> 01:11:12,380 and convert it to binary. 1634 01:11:12,380 --> 01:11:13,730 Now we're making to a string. 1635 01:11:13,730 --> 01:11:14,480 RYAN: Yep, string. 1636 01:11:14,480 --> 01:11:21,080 [INAUDIBLE] 1637 01:11:21,080 --> 01:11:24,330 TOMMY: So I think the way we'll do this is I'll just repeatedly divide it by 2 1638 01:11:24,330 --> 01:11:28,800 and take the modulus of a number by two. 1639 01:11:28,800 --> 01:11:32,730 So that should get me the trailing 1 or 0. 1640 01:11:32,730 --> 01:11:37,720 And I'll iteratively build up the number from there. 1641 01:11:37,720 --> 01:11:54,242 So we'll do while decimal is greater than two, 1642 01:11:54,242 --> 01:12:00,206 ret plus equals decimal modulo two. 1643 01:12:00,206 --> 01:12:06,874 I'll make this into a string, and then we'll divide by two. 1644 01:12:06,874 --> 01:12:14,620 1645 01:12:14,620 --> 01:12:18,350 And then we'll finally return the result. [INAUDIBLE] say it, 1646 01:12:18,350 --> 01:12:21,320 and we'll add some test prints as well. 1647 01:12:21,320 --> 01:12:24,110 So we should be able to get-- 1648 01:12:24,110 --> 01:12:29,600 the fourth Fibonacci number should be three, so we'll print fib of four, 1649 01:12:29,600 --> 01:12:35,330 and it return three. 1650 01:12:35,330 --> 01:12:39,050 And then we'll do the same thing down here. 1651 01:12:39,050 --> 01:12:42,690 I guess we'll will turn three into decimal. 1652 01:12:42,690 --> 01:12:46,994 So this should return 11, I think. 1653 01:12:46,994 --> 01:12:51,614 1654 01:12:51,614 --> 01:12:52,800 OK, so let's start. 1655 01:12:52,800 --> 01:12:56,480 Let's run that and just verify that that works. 1656 01:12:56,480 --> 01:12:59,492 RYAN: OK, and just for a time, let's pause there. 1657 01:12:59,492 --> 01:13:00,450 So let's hear feedback. 1658 01:13:00,450 --> 01:13:02,610 So what went well and then what didn't go well? 1659 01:13:02,610 --> 01:13:06,190 1660 01:13:06,190 --> 01:13:06,898 Yeah? 1661 01:13:06,898 --> 01:13:08,717 AUDIENCE: [INAUDIBLE] 1662 01:13:08,717 --> 01:13:09,550 RYAN: Yeah, exactly. 1663 01:13:09,550 --> 01:13:11,670 So you sort of say upfront here's what I'm going to do. 1664 01:13:11,670 --> 01:13:12,520 Does that sound right? 1665 01:13:12,520 --> 01:13:13,780 Yep, here are the inputs and outputs. 1666 01:13:13,780 --> 01:13:14,650 Does that sound right? 1667 01:13:14,650 --> 01:13:15,040 Yep. 1668 01:13:15,040 --> 01:13:16,540 And so he sort of communicated throughout what 1669 01:13:16,540 --> 01:13:17,665 his process is going to be. 1670 01:13:17,665 --> 01:13:20,300 1671 01:13:20,300 --> 01:13:20,800 What else? 1672 01:13:20,800 --> 01:13:23,760 1673 01:13:23,760 --> 01:13:24,374 Yeah? 1674 01:13:24,374 --> 01:13:29,307 AUDIENCE: [INAUDIBLE] 1675 01:13:29,307 --> 01:13:30,140 RYAN: Yeah, exactly. 1676 01:13:30,140 --> 01:13:32,500 So we sort of like broke it up into two very clear functions. 1677 01:13:32,500 --> 01:13:34,060 It's very clear what each of these functions does. 1678 01:13:34,060 --> 01:13:36,400 You can read through it and understand it very easily. 1679 01:13:36,400 --> 01:13:40,050 So this is pretty clean code for the solution. 1680 01:13:40,050 --> 01:13:41,033 What else? 1681 01:13:41,033 --> 01:13:45,290 AUDIENCE: If the [? code's ?] correct, this is pretty suspect. 1682 01:13:45,290 --> 01:13:48,720 [INAUDIBLE] 1683 01:13:48,720 --> 01:13:50,030 RYAN: Yeah, this isn't correct. 1684 01:13:50,030 --> 01:13:52,370 We just got to cut it short because we are a little short on time. 1685 01:13:52,370 --> 01:13:52,870 But yeah. 1686 01:13:52,870 --> 01:13:56,718 1687 01:13:56,718 --> 01:14:00,090 What else? 1688 01:14:00,090 --> 01:14:00,725 Yeah? 1689 01:14:00,725 --> 01:14:02,000 AUDIENCE: The clarifying questions. 1690 01:14:02,000 --> 01:14:02,833 RYAN: Yeah, exactly. 1691 01:14:02,833 --> 01:14:05,500 So he clarified right up front what he wanted to do and not do. 1692 01:14:05,500 --> 01:14:06,926 It was good. 1693 01:14:06,926 --> 01:14:08,690 How about one more good or bad. 1694 01:14:08,690 --> 01:14:09,382 Yeah? 1695 01:14:09,382 --> 01:14:11,006 AUDIENCE: Put it in separate functions. 1696 01:14:11,006 --> 01:14:14,930 RYAN: Yeah, sort of like nicely decomposed easy to follow. 1697 01:14:14,930 --> 01:14:15,476 Yeah. 1698 01:14:15,476 --> 01:14:16,642 AUDIENCE: I have a question. 1699 01:14:16,642 --> 01:14:17,702 RYAN: Sure. 1700 01:14:17,702 --> 01:14:20,452 AUDIENCE: Say a possible solution doesn't come to you immediately. 1701 01:14:20,452 --> 01:14:24,238 Is it OK to kind of take some time to think ti yourself or do 1702 01:14:24,238 --> 01:14:27,819 you recommend just talking before-- like talking through it to find a solution? 1703 01:14:27,819 --> 01:14:30,360 RYAN: Yeah, if you can talk it through, that's always better. 1704 01:14:30,360 --> 01:14:32,060 Some people would just sort of like-- it really doesn't get to you. 1705 01:14:32,060 --> 01:14:34,250 Just like, oh, do you mind if I take a minute and draw something out? 1706 01:14:34,250 --> 01:14:35,208 I have some paper here. 1707 01:14:35,208 --> 01:14:37,760 I think that's sometimes fine. 1708 01:14:37,760 --> 01:14:40,585 We're biased towards always talking out loud if you can. 1709 01:14:40,585 --> 01:14:43,770 We'll save some more time for some questions at the end. 1710 01:14:43,770 --> 01:14:45,020 So let's just wrap up. 1711 01:14:45,020 --> 01:14:48,860 1712 01:14:48,860 --> 01:14:52,960 OK, so final section is the shortest one is after the interview. 1713 01:14:52,960 --> 01:14:56,060 One thing to keep in mind is that interviews are really, really high 1714 01:14:56,060 --> 01:14:57,230 variance. 1715 01:14:57,230 --> 01:14:59,690 Companies, like Google, do a lot of actually 1716 01:14:59,690 --> 01:15:03,020 like A/B testing and experimentation from their HR department 1717 01:15:03,020 --> 01:15:04,155 on some of the stuff. 1718 01:15:04,155 --> 01:15:07,280 So people have found that there are lots of really, really great developers 1719 01:15:07,280 --> 01:15:10,160 who just don't do well in some particular programming interview. 1720 01:15:10,160 --> 01:15:11,520 That's totally OK. 1721 01:15:11,520 --> 01:15:14,210 So if you have some coding interview and it doesn't go great, 1722 01:15:14,210 --> 01:15:15,220 don't get discouraged. 1723 01:15:15,220 --> 01:15:16,610 It's totally fine. 1724 01:15:16,610 --> 01:15:18,860 I'll never forget the first technical interview I did. 1725 01:15:18,860 --> 01:15:20,290 It was it was for Facebook. 1726 01:15:20,290 --> 01:15:22,970 And it was really simple-- just like traverse a binary tree. 1727 01:15:22,970 --> 01:15:27,110 And I was taking 51 at the time, and I'll do this and OCaml. 1728 01:15:27,110 --> 01:15:30,380 And it just like completely, completely exploded. 1729 01:15:30,380 --> 01:15:32,492 The interviewer was like what are you doing? 1730 01:15:32,492 --> 01:15:34,700 And I was like I don't know what I'm doing, actually. 1731 01:15:34,700 --> 01:15:35,782 And then it was terrible. 1732 01:15:35,782 --> 01:15:38,240 And then I remember he was talking to the other interviewer 1733 01:15:38,240 --> 01:15:39,230 like in the elevator. 1734 01:15:39,230 --> 01:15:44,050 I could hear them joking how badly I did, which was like fine. 1735 01:15:44,050 --> 01:15:45,640 Like everybody bombs these. 1736 01:15:45,640 --> 01:15:47,095 It's totally, totally fine. 1737 01:15:47,095 --> 01:15:48,470 So anyway, don't get discouraged. 1738 01:15:48,470 --> 01:15:50,600 The more practice you do, the more this is 1739 01:15:50,600 --> 01:15:52,970 going to really start to come naturally to you. 1740 01:15:52,970 --> 01:15:56,447 When you're writing code, speaking out loud and coding, it's not normal. 1741 01:15:56,447 --> 01:15:58,280 Like you wouldn't it when you're on the job. 1742 01:15:58,280 --> 01:16:00,050 You probably don't do this, or the people 1743 01:16:00,050 --> 01:16:01,970 like next you're going to think you're weird. 1744 01:16:01,970 --> 01:16:03,490 So it's really unnatural. 1745 01:16:03,490 --> 01:16:06,440 It's nothing that comes easily to a lot of people. 1746 01:16:06,440 --> 01:16:09,710 But the more you practice and the more you just sort of go 1747 01:16:09,710 --> 01:16:12,130 through lots of reps of different practice problems, 1748 01:16:12,130 --> 01:16:13,880 actual interviews are really going to help 1749 01:16:13,880 --> 01:16:16,760 you the most-- other mock interviews with your friends or things 1750 01:16:16,760 --> 01:16:19,089 like workshops like this. 1751 01:16:19,089 --> 01:16:21,380 You'll sort of naturally start to develop these skills, 1752 01:16:21,380 --> 01:16:23,480 but you're not going to be great out of the gates. 1753 01:16:23,480 --> 01:16:24,360 That's totally fine. 1754 01:16:24,360 --> 01:16:26,026 It doesn't mean you're a bad programmer. 1755 01:16:26,026 --> 01:16:27,230 Your career is over. 1756 01:16:27,230 --> 01:16:31,400 This stuff is hard, and it takes some time just to really practice through. 1757 01:16:31,400 --> 01:16:34,424 So just want to end with some takeaways from today. 1758 01:16:34,424 --> 01:16:36,590 The first thing you should do, if you don't already, 1759 01:16:36,590 --> 01:16:38,548 is pick some programming language that you were 1760 01:16:38,548 --> 01:16:41,120 going to interview in and learn it. 1761 01:16:41,120 --> 01:16:43,040 So all those data structures we talked about, 1762 01:16:43,040 --> 01:16:46,280 all the different functions we talked about, sort of like syntactic sugar, 1763 01:16:46,280 --> 01:16:49,130 just learn all of that for some programming language. 1764 01:16:49,130 --> 01:16:51,710 Do not think above that during your interview. 1765 01:16:51,710 --> 01:16:53,250 Next, fill up that toolbox-- 1766 01:16:53,250 --> 01:16:56,360 so not just language specifics but know the difference 1767 01:16:56,360 --> 01:16:59,090 between a breadth-first search or depth-first search. 1768 01:16:59,090 --> 01:17:00,800 Know just how to write that if you really 1769 01:17:00,800 --> 01:17:04,920 need to know the basics, the runtime for accessing a hash table or a linked 1770 01:17:04,920 --> 01:17:05,420 list. 1771 01:17:05,420 --> 01:17:08,090 Just know this stuff off the top of your head. 1772 01:17:08,090 --> 01:17:09,757 Third, do lots of practice problems. 1773 01:17:09,757 --> 01:17:12,590 This is really the best way to learn, and I wish there was some sort 1774 01:17:12,590 --> 01:17:16,160 of shortcut you could take-- or maybe I don't because it makes my life harder-- 1775 01:17:16,160 --> 01:17:17,150 but you can't. 1776 01:17:17,150 --> 01:17:19,816 You just really have got to like do a bunch of practice problems 1777 01:17:19,816 --> 01:17:21,760 and repetition and invest in that. 1778 01:17:21,760 --> 01:17:23,760 When you're doing so, practice talking out loud. 1779 01:17:23,760 --> 01:17:27,199 It feels really weird, but you just sort of get used to it eventually. 1780 01:17:27,199 --> 01:17:28,490 And finally, keep interviewing. 1781 01:17:28,490 --> 01:17:29,840 It's something that takes a lot of time. 1782 01:17:29,840 --> 01:17:32,090 You've got to go through it and fail some interviews. 1783 01:17:32,090 --> 01:17:33,410 Everyone does. 1784 01:17:33,410 --> 01:17:36,130 And that's really the only way to get better. 1785 01:17:36,130 --> 01:17:39,362 So I'm providing everyone at the workshop with this book. 1786 01:17:39,362 --> 01:17:41,570 So this author is actually pretty prominent on Quora. 1787 01:17:41,570 --> 01:17:44,297 This book is the best interview prep book out there. 1788 01:17:44,297 --> 01:17:46,880 It's got tons of practice problems categorized into the things 1789 01:17:46,880 --> 01:17:48,005 that we talked about today. 1790 01:17:48,005 --> 01:17:50,870 So dynamic probing problem, strings, recursion-- whatever-- 1791 01:17:50,870 --> 01:17:53,750 so that it helps you understand what classes of problems 1792 01:17:53,750 --> 01:17:57,467 that you're not great at, and so it enables you to focus on those. 1793 01:17:57,467 --> 01:17:58,550 And so that's all we have. 1794 01:17:58,550 --> 01:18:00,320 We wanted to save lots of time at the end for Q&A. 1795 01:18:00,320 --> 01:18:02,210 And so if you've got any questions for us 1796 01:18:02,210 --> 01:18:07,460 about sort of specific interview stuff, we'd love to talk about them right now. 1797 01:18:07,460 --> 01:18:08,220 Yeah? 1798 01:18:08,220 --> 01:18:11,720 AUDIENCE: So what you were saying something about breaking skills, 1799 01:18:11,720 --> 01:18:16,970 for example, you have more experience working 1800 01:18:16,970 --> 01:18:23,220 in some programming languages versus others, how can you address that? 1801 01:18:23,220 --> 01:18:26,670 RYAN: Yeah, so as an interviewer, it probably doesn't matter to me, 1802 01:18:26,670 --> 01:18:30,030 actually, like your relative skill on various programming languages. 1803 01:18:30,030 --> 01:18:34,001 For most interns, we don't expect you to come in knowing some technology down 1804 01:18:34,001 --> 01:18:34,500 really well. 1805 01:18:34,500 --> 01:18:37,740 We expect that you'll be able to learn a bunch on the job, 1806 01:18:37,740 --> 01:18:40,800 and you don't need to be an expert in React Native going 1807 01:18:40,800 --> 01:18:41,910 into your internship. 1808 01:18:41,910 --> 01:18:43,155 We just expect you've got your fundamentals, 1809 01:18:43,155 --> 01:18:45,488 and you're able to then learn that programming language. 1810 01:18:45,488 --> 01:18:49,143 So what matters most is just the language you're going to interview in. 1811 01:18:49,143 --> 01:18:52,268 Doesn't matter too much about like the relative skill sets outside of that. 1812 01:18:52,268 --> 01:18:54,787 AUDIENCE: Should we not list languages that we're not 1813 01:18:54,787 --> 01:18:56,390 comfortable interviewing in? 1814 01:18:56,390 --> 01:18:58,540 RYAN: Yeah, I think it's not a bad idea. 1815 01:18:58,540 --> 01:19:00,750 I think some sort of like mean interviews 1816 01:19:00,750 --> 01:19:04,347 have this rule that's like if it's on your resume, I can ask you about it. 1817 01:19:04,347 --> 01:19:06,180 So if you put assembly on your resume, we're 1818 01:19:06,180 --> 01:19:08,400 going to make you do a problem in assembly. 1819 01:19:08,400 --> 01:19:11,290 That's sort of lame, but it exists out there. 1820 01:19:11,290 --> 01:19:16,380 So broadly, listing languages in like the order that you know them in. 1821 01:19:16,380 --> 01:19:19,890 Some people like to say proficient or intermediate or whatever. 1822 01:19:19,890 --> 01:19:23,190 I mean, my personal view is that it doesn't matter all that much. 1823 01:19:23,190 --> 01:19:25,750 But yeah, don't list a bunch of stuff in your resume 1824 01:19:25,750 --> 01:19:28,440 that's untrue that you'd be uncomfortable talking with. 1825 01:19:28,440 --> 01:19:30,270 But I think if you list the language and interviewer says, 1826 01:19:30,270 --> 01:19:33,330 oh, let's do this language, you can say, oh, I took it for this class, 1827 01:19:33,330 --> 01:19:34,260 and I don't know it super well. 1828 01:19:34,260 --> 01:19:36,551 I'll be happy to give it a go, but this is the language 1829 01:19:36,551 --> 01:19:38,880 that I'd prefer to interview in. 1830 01:19:38,880 --> 01:19:39,524 Yeah? 1831 01:19:39,524 --> 01:19:44,740 AUDIENCE: [INAUDIBLE] 1832 01:19:44,740 --> 01:19:46,290 RYAN: Sorry, what's the question? 1833 01:19:46,290 --> 01:19:47,810 AUDIENCE: Should we list any relevant classes we're taking? 1834 01:19:47,810 --> 01:19:49,790 RYAN: Oh, should we list any relevant classes you've taken? 1835 01:19:49,790 --> 01:19:50,990 You certainly can. 1836 01:19:50,990 --> 01:19:54,410 In particular, if you don't have a lot of internship experience, 1837 01:19:54,410 --> 01:19:56,960 there's not a whole lot to put on your resume, 1838 01:19:56,960 --> 01:19:59,900 listing classes is pretty helpful. 1839 01:19:59,900 --> 01:20:03,799 Many times, the people like me who go to a school and talk to people 1840 01:20:03,799 --> 01:20:05,340 will have gone to the school as well. 1841 01:20:05,340 --> 01:20:07,777 So if you say something like I took CS 125, 1842 01:20:07,777 --> 01:20:09,860 that's like a meaningful thing to the interviewer. 1843 01:20:09,860 --> 01:20:12,920 So it really doesn't hurt, especially if you don't have a lot of stuff else 1844 01:20:12,920 --> 01:20:13,461 to put there. 1845 01:20:13,461 --> 01:20:18,194 1846 01:20:18,194 --> 01:20:18,860 Other questions? 1847 01:20:18,860 --> 01:20:21,480 TOMMY: I'd definitely put like if you TA'd the class as well 1848 01:20:21,480 --> 01:20:24,650 or if you've taken particularly like advanced graduate classes. 1849 01:20:24,650 --> 01:20:26,090 I think it's definitely a signal. 1850 01:20:26,090 --> 01:20:29,651 RYAN: Yeah, if you're taught a class, that's really, really great to see. 1851 01:20:29,651 --> 01:20:32,150 If you're taking like graduate classes, that's great to see. 1852 01:20:32,150 --> 01:20:32,480 Yeah? 1853 01:20:32,480 --> 01:20:35,310 AUDIENCE: If you really don't know how to do a question they ask, 1854 01:20:35,310 --> 01:20:39,230 is it fine to be honest if you [INAUDIBLE] 1855 01:20:39,230 --> 01:20:42,020 RYAN: Yeah, so what do you do if you don't see it? 1856 01:20:42,020 --> 01:20:45,230 Yeah, so a lot of interviewers want to help you, 1857 01:20:45,230 --> 01:20:48,147 and so they have hints prepared in their back pocket. 1858 01:20:48,147 --> 01:20:50,480 So if there's some question and you don't really see it, 1859 01:20:50,480 --> 01:20:52,010 you could say, hey, you know what. 1860 01:20:52,010 --> 01:20:53,150 Think out loud with your process. 1861 01:20:53,150 --> 01:20:53,952 OK, will this work? 1862 01:20:53,952 --> 01:20:55,160 No, this isn't going to work. 1863 01:20:55,160 --> 01:20:56,030 Will this other thing work? 1864 01:20:56,030 --> 01:20:57,049 Well, maybe it won't. 1865 01:20:57,049 --> 01:20:59,340 In an interview, one could like guide you based on that 1866 01:20:59,340 --> 01:21:02,720 and say, oh, well, actually, what if you do this, then does that approach work? 1867 01:21:02,720 --> 01:21:03,407 Yes. 1868 01:21:03,407 --> 01:21:05,490 Or sometimes say, hey, I'm honestly not seeing it. 1869 01:21:05,490 --> 01:21:06,810 Do you mind giving me a little bit of direction? 1870 01:21:06,810 --> 01:21:08,101 Interviewer will say, oh, sure. 1871 01:21:08,101 --> 01:21:09,900 What if you think about it in this way? 1872 01:21:09,900 --> 01:21:14,140 I definitely wouldn't say like, yeah, I don't know I'm packing it in. 1873 01:21:14,140 --> 01:21:15,770 Interviewers want to help you. 1874 01:21:15,770 --> 01:21:17,244 And so you say, hey, I'm not sure. 1875 01:21:17,244 --> 01:21:18,410 I'm sort of stuck right now. 1876 01:21:18,410 --> 01:21:19,740 Do you mind giving me a little bit of guidance 1877 01:21:19,740 --> 01:21:23,422 or do you have a hint to point me in the right direction or something like that? 1878 01:21:23,422 --> 01:21:24,294 Yeah? 1879 01:21:24,294 --> 01:21:27,602 AUDIENCE: Is it bad to Google something if you can't debug your code? 1880 01:21:27,602 --> 01:21:29,060 RYAN: Yeah, that's a good question. 1881 01:21:29,060 --> 01:21:32,390 Is it bad to Google something if you can't debug your code? 1882 01:21:32,390 --> 01:21:34,760 It is only bad if you do not ask. 1883 01:21:34,760 --> 01:21:38,060 So if you're doing a phone interview and all of a sudden 1884 01:21:38,060 --> 01:21:40,460 I hear like silence on the other end and like typing. 1885 01:21:40,460 --> 01:21:41,930 And I'm like, hey, what you doing? 1886 01:21:41,930 --> 01:21:43,180 And they're like, oh, nothing. 1887 01:21:43,180 --> 01:21:45,800 1888 01:21:45,800 --> 01:21:46,770 That's not good. 1889 01:21:46,770 --> 01:21:48,140 Don't do that. 1890 01:21:48,140 --> 01:21:51,380 Some interviewers really don't care if you're googling things. 1891 01:21:51,380 --> 01:21:54,020 Some interview questions are designed for like someone 1892 01:21:54,020 --> 01:21:54,770 might need to Google something. 1893 01:21:54,770 --> 01:21:55,550 That's totally OK. 1894 01:21:55,550 --> 01:21:56,800 Others are not. 1895 01:21:56,800 --> 01:21:58,610 There's others we don't want you to Google 1896 01:21:58,610 --> 01:22:00,170 because you could like stumble upon the solution, 1897 01:22:00,170 --> 01:22:01,490 and that's like obviously bad. 1898 01:22:01,490 --> 01:22:04,360 So just clarify with your interviewer upfront. 1899 01:22:04,360 --> 01:22:08,142 If you're sort of stuck, you say here I want to reverse a string. 1900 01:22:08,142 --> 01:22:09,850 I don't remember how to reverse a string. 1901 01:22:09,850 --> 01:22:11,290 Do you mind if I just Google it? 1902 01:22:11,290 --> 01:22:13,790 Usually, as an interviewer, I will say, no, don't Google it. 1903 01:22:13,790 --> 01:22:15,706 Just pretend there's a function called reverse 1904 01:22:15,706 --> 01:22:18,650 and use that because that's much more interesting than like you taking 1905 01:22:18,650 --> 01:22:20,450 some risk of like finding the solution. 1906 01:22:20,450 --> 01:22:22,400 But always be upfront with your interviewer. 1907 01:22:22,400 --> 01:22:24,494 That's the absolute most important thing. 1908 01:22:24,494 --> 01:22:26,160 And I think we have this on a slide too. 1909 01:22:26,160 --> 01:22:30,950 But if you've seen the problem before, absolutely say that. 1910 01:22:30,950 --> 01:22:35,150 A lot of people think they're going to win the best actor Oscar for pretending 1911 01:22:35,150 --> 01:22:36,620 they haven't seen a problem before. 1912 01:22:36,620 --> 01:22:39,821 It is excruciatingly obvious when you've seen a problem before. 1913 01:22:39,821 --> 01:22:40,820 So don't do that either. 1914 01:22:40,820 --> 01:22:41,940 If you've seen a problem before, just say hey, 1915 01:22:41,940 --> 01:22:43,550 actually, I was doing some practice problems, 1916 01:22:43,550 --> 01:22:45,050 and I've actually seen this one before. 1917 01:22:45,050 --> 01:22:45,980 Do you want me to solve it, anyway? 1918 01:22:45,980 --> 01:22:48,450 Sometimes interviewers say, oh, yeah, sure, solve it, anyway. 1919 01:22:48,450 --> 01:22:50,500 It's more of a coding thing than algorithms thing, 1920 01:22:50,500 --> 01:22:51,710 or sometimes interviewers say, oh, great. 1921 01:22:51,710 --> 01:22:52,835 Thanks for letting me know. 1922 01:22:52,835 --> 01:22:56,210 Let's do this other one instead. 1923 01:22:56,210 --> 01:23:01,340 We've rejected candidates immediately who are clearly lying so do not lie. 1924 01:23:01,340 --> 01:23:02,164 Yes? 1925 01:23:02,164 --> 01:23:12,050 AUDIENCE: Can you guys talk a little bit more about you decided [INAUDIBLE] 1926 01:23:12,050 --> 01:23:13,110 RYAN: Yeah, sure. 1927 01:23:13,110 --> 01:23:15,943 So I'll talk and then you probably have a different story than I do. 1928 01:23:15,943 --> 01:23:21,040 So let's see, so I went to Quora in 2013. 1929 01:23:21,040 --> 01:23:24,510 The recruiter at the time actually used to work with CS50 as well. 1930 01:23:24,510 --> 01:23:29,360 But for me, what I cared about most was sort of the mission of the company. 1931 01:23:29,360 --> 01:23:33,404 Before Quora, I did a lot of stuff with CS50 in education and edX and all that. 1932 01:23:33,404 --> 01:23:36,320 So I was really excited about sort of that mission of online education 1933 01:23:36,320 --> 01:23:36,861 and learning. 1934 01:23:36,861 --> 01:23:39,950 And Quora is one of the few companies operating in that space that's also 1935 01:23:39,950 --> 01:23:41,610 sort of in the consumer world as well. 1936 01:23:41,610 --> 01:23:44,119 So it's not this like academic or enterprise thing. 1937 01:23:44,119 --> 01:23:46,160 It's like a consumer web company that moves fast, 1938 01:23:46,160 --> 01:23:47,534 and you can have a lot of impact. 1939 01:23:47,534 --> 01:23:50,909 But also in that space that I care a lot about so that's why I picked Quora. 1940 01:23:50,909 --> 01:23:54,200 TOMMY: Yeah, I think, for me, I think a lot of people thought about the people, 1941 01:23:54,200 --> 01:23:58,400 so I had known people who had graduated before me and gone to work for Quora. 1942 01:23:58,400 --> 01:24:02,217 I knew that they had a strong engineering reputation. 1943 01:24:02,217 --> 01:24:05,300 And I think there was a lot of problems that were really interesting to me 1944 01:24:05,300 --> 01:24:05,842 at Quora. 1945 01:24:05,842 --> 01:24:07,800 So that's initially why I was interested in it. 1946 01:24:07,800 --> 01:24:13,480 1947 01:24:13,480 --> 01:24:14,770 RYAN: Other questions? 1948 01:24:14,770 --> 01:24:15,457 Yeah? 1949 01:24:15,457 --> 01:24:27,420 AUDIENCE: Is it OK to tell your interviewer [INAUDIBLE] 1950 01:24:27,420 --> 01:24:30,170 RYAN: Yeah, so the question is, is it OK to sort of say like, hey, 1951 01:24:30,170 --> 01:24:31,295 this is my first interview. 1952 01:24:31,295 --> 01:24:32,202 I'm kind of stressed. 1953 01:24:32,202 --> 01:24:33,160 That's a good question. 1954 01:24:33,160 --> 01:24:35,830 I've actually never thought about this one before. 1955 01:24:35,830 --> 01:24:38,910 So off the cuff, I don't think it's going 1956 01:24:38,910 --> 01:24:42,730 to help in a sense of like even if it is your first interviewer, 1957 01:24:42,730 --> 01:24:46,930 that doesn't change the rubric of the question or something like that. 1958 01:24:46,930 --> 01:24:49,177 1959 01:24:49,177 --> 01:24:51,010 You probably will not get some outcome where 1960 01:24:51,010 --> 01:24:53,780 like the interviewer goes easy on you or something. 1961 01:24:53,780 --> 01:24:56,710 So I don't know if there's a whole lot of value to that. 1962 01:24:56,710 --> 01:24:59,567 If it helps you feel better, makes you more comfortable to say like, 1963 01:24:59,567 --> 01:25:01,900 hey, I realized, oh, this is a real thing, how you feel, 1964 01:25:01,900 --> 01:25:03,471 and your stress is really important. 1965 01:25:03,471 --> 01:25:05,470 So if it makes you more comfortable to say that, 1966 01:25:05,470 --> 01:25:07,690 then there's not a lot of downside. 1967 01:25:07,690 --> 01:25:10,870 But there's also probably a pretty low upside as well. 1968 01:25:10,870 --> 01:25:11,807 What do you think? 1969 01:25:11,807 --> 01:25:12,640 TOMMY: I don't know. 1970 01:25:12,640 --> 01:25:16,614 I think like to be completely honest, you shouldn't fake things for us 1971 01:25:16,614 --> 01:25:17,530 to get better results. 1972 01:25:17,530 --> 01:25:20,680 But we do take this into an account when we're looking at decisions 1973 01:25:20,680 --> 01:25:23,470 like if I'm seeing that you're like crazy nervous 1974 01:25:23,470 --> 01:25:26,860 and I think part of that came into play when you're doing interview, 1975 01:25:26,860 --> 01:25:29,410 I think we do write that down in the feedback. 1976 01:25:29,410 --> 01:25:32,930 So yeah, I guess technically it could come into account, 1977 01:25:32,930 --> 01:25:34,930 but I don't know if like saying that-- like it's 1978 01:25:34,930 --> 01:25:36,080 really obvious when you're nervous. 1979 01:25:36,080 --> 01:25:37,413 You don't really need to say it. 1980 01:25:37,413 --> 01:25:41,380 1981 01:25:41,380 --> 01:25:42,880 RYAN: But it's OK if you're nervous. 1982 01:25:42,880 --> 01:25:45,100 That's why I'm doing a bunch of these is good. 1983 01:25:45,100 --> 01:25:45,796 Yeah? 1984 01:25:45,796 --> 01:25:48,530 AUDIENCE: You mentioned that interviewers won't give feedback 1985 01:25:48,530 --> 01:25:52,258 if you get rejected from the job, can you then ask for feedback 1986 01:25:52,258 --> 01:25:55,060 or will they be honest about how you could improve? 1987 01:25:55,060 --> 01:25:57,837 RYAN: Yeah, so the question is when is it OK to ask for feedback. 1988 01:25:57,837 --> 01:26:00,670 Even if they can't say it in an interview, suppose you get rejected. 1989 01:26:00,670 --> 01:26:02,980 Can you ask for feedback? 1990 01:26:02,980 --> 01:26:07,930 An unfortunate reality is there's a lot of legal risk in a company divulging 1991 01:26:07,930 --> 01:26:09,310 feedback about somebody. 1992 01:26:09,310 --> 01:26:12,719 So for a company, there's really high downside and basically 1993 01:26:12,719 --> 01:26:15,760 no upside for you, as an individual, there's a lot of upside in learning. 1994 01:26:15,760 --> 01:26:20,780 But unfortunately, most companies just can't do it. 1995 01:26:20,780 --> 01:26:26,350 So my advice would be to just not ask, use like these mock interviews, 1996 01:26:26,350 --> 01:26:28,360 use interviewing your friends, use interviewing 1997 01:26:28,360 --> 01:26:32,740 with people who did get internships at some company, get feedback from them. 1998 01:26:32,740 --> 01:26:34,919 That's really a feedback opportunity. 1999 01:26:34,919 --> 01:26:37,960 If you do ask, you sort of put the company in this uncomfortable position 2000 01:26:37,960 --> 01:26:39,160 of saying, well, we can't. 2001 01:26:39,160 --> 01:26:40,150 We can't give you feedback. 2002 01:26:40,150 --> 01:26:41,430 And some people like push really hard. 2003 01:26:41,430 --> 01:26:42,812 It's not really a great look. 2004 01:26:42,812 --> 01:26:44,020 I wish that weren't the case. 2005 01:26:44,020 --> 01:26:45,760 That's why we do stuff like these mock interviews 2006 01:26:45,760 --> 01:26:48,634 where you can go crazy and tell you exactly what you need to improve. 2007 01:26:48,634 --> 01:26:51,040 But yeah, I wouldn't recommend it. 2008 01:26:51,040 --> 01:26:55,190 TOMMY: For us, what if I've tried this and it didn't work? 2009 01:26:55,190 --> 01:26:55,690 RYAN: Yeah? 2010 01:26:55,690 --> 01:26:57,940 AUDIENCE: I'm not sure if this is appropriate for this 2011 01:26:57,940 --> 01:27:01,070 but how similar would the algorithms and that those kind of code questions 2012 01:27:01,070 --> 01:27:03,780 be in more of a data science role [INAUDIBLE] questions that 2013 01:27:03,780 --> 01:27:04,770 can be asked there too? 2014 01:27:04,770 --> 01:27:08,890 RYAN: Yeah, so the question is, how did these questions compare 2015 01:27:08,890 --> 01:27:10,810 between data science and engineering? 2016 01:27:10,810 --> 01:27:13,630 So typically, with data science, they'll be 2017 01:27:13,630 --> 01:27:15,979 less sort of coding heavy since as a data scientist, 2018 01:27:15,979 --> 01:27:18,520 you're probably not writing a whole bunch of production code. 2019 01:27:18,520 --> 01:27:21,160 And people need to worry about are you testing things correctly. 2020 01:27:21,160 --> 01:27:22,450 There's a separate set of questions, which would 2021 01:27:22,450 --> 01:27:24,620 be sort of like here's some problem. 2022 01:27:24,620 --> 01:27:28,070 How would you design metrics to evaluate the success of this product thing? 2023 01:27:28,070 --> 01:27:31,194 Or like questions that require you about a big SQL query, 2024 01:27:31,194 --> 01:27:32,610 for example, as opposed to Python. 2025 01:27:32,610 --> 01:27:34,720 So I think it's a different set of questions. 2026 01:27:34,720 --> 01:27:36,800 All the process stuff 100% applies and like 2027 01:27:36,800 --> 01:27:39,550 localizing what you're doing asking for, hints at the right point, 2028 01:27:39,550 --> 01:27:42,670 knowing the basics of whatever it is you need down cold, 2029 01:27:42,670 --> 01:27:44,866 but you're get a different set of questions. 2030 01:27:44,866 --> 01:27:46,740 TOMMY: I think another thing that's different 2031 01:27:46,740 --> 01:27:49,160 is I work in' machine learning. 2032 01:27:49,160 --> 01:27:51,430 So it's kind of a bridge between those two. 2033 01:27:51,430 --> 01:27:52,740 So we get similar interviews. 2034 01:27:52,740 --> 01:27:55,281 There's probably going to be more knowledge-based interviews. 2035 01:27:55,281 --> 01:27:58,490 So we do actually look to see like how well do you know machine learning? 2036 01:27:58,490 --> 01:28:01,237 How well do you know statistics in these interviews? 2037 01:28:01,237 --> 01:28:03,320 Which I guess we're not looking quite as much like 2038 01:28:03,320 --> 01:28:06,100 do you know infrastructure super well in your new grad interview, 2039 01:28:06,100 --> 01:28:11,850 but we might look more for the data scientist interview. 2040 01:28:11,850 --> 01:28:12,520 RYAN: Yeah? 2041 01:28:12,520 --> 01:28:14,228 AUDIENCE: Is there any book you recommend 2042 01:28:14,228 --> 01:28:21,150 for a data science role or just the generic machine learning [INAUDIBLE] 2043 01:28:21,150 --> 01:28:22,980 TOMMY: Let's see. 2044 01:28:22,980 --> 01:28:25,290 I think the field's evolving pretty fast right now, 2045 01:28:25,290 --> 01:28:29,670 so there's not like a ton of really good books on it. 2046 01:28:29,670 --> 01:28:32,670 2047 01:28:32,670 --> 01:28:35,820 I think there's a number of good online classes 2048 01:28:35,820 --> 01:28:38,230 that you can take to skim through. 2049 01:28:38,230 --> 01:28:38,730 Yeah, sorry. 2050 01:28:38,730 --> 01:28:40,646 Basically, I don't have a good answer to that. 2051 01:28:40,646 --> 01:28:42,994 I didn't use any books for preparing, so I don't know. 2052 01:28:42,994 --> 01:28:44,910 RYAN: Yeah, so the question was is there books 2053 01:28:44,910 --> 01:28:46,410 recommended for data science or ML? 2054 01:28:46,410 --> 01:28:49,320 I think your best shot is probably courses like there's courses here 2055 01:28:49,320 --> 01:28:51,210 you can take on ML and data science. 2056 01:28:51,210 --> 01:28:53,900 And then those course will point you to various resource. 2057 01:28:53,900 --> 01:28:55,070 I would start there. 2058 01:28:55,070 --> 01:28:56,903 Something like Cracking the Coding Interview 2059 01:28:56,903 --> 01:28:59,982 is sort of like your canonical answer for interviewing. 2060 01:28:59,982 --> 01:29:02,190 For other stuff, there's no real canonical answer yet 2061 01:29:02,190 --> 01:29:03,570 since the fields are sort of new. 2062 01:29:03,570 --> 01:29:06,022 Yeah? 2063 01:29:06,022 --> 01:29:09,326 AUDIENCE: For knowledge-based interviews, what kind of questions 2064 01:29:09,326 --> 01:29:10,270 are asked? 2065 01:29:10,270 --> 01:29:13,182 Do they see how much you remember [INAUDIBLE] 2066 01:29:13,182 --> 01:29:16,140 RYAN: Yeah, so the question is so for these knowledge-based interviews, 2067 01:29:16,140 --> 01:29:18,090 like what types of questions are asked. 2068 01:29:18,090 --> 01:29:21,090 We probably can't tell you exactly what we ask-- just give you a flavor. 2069 01:29:21,090 --> 01:29:27,240 TOMMY: I think it's going to be like do you understand the key algorithms used 2070 01:29:27,240 --> 01:29:30,450 in machine learning and statistics? 2071 01:29:30,450 --> 01:29:37,149 So we probably will not ask you to implement-- 2072 01:29:37,149 --> 01:29:38,940 I'm sorry, I can't give too many specifics. 2073 01:29:38,940 --> 01:29:42,361 RYAN: Yeah, I can try to give some examples. 2074 01:29:42,361 --> 01:29:44,610 So for some [? end rules, ?] like mobile, for example, 2075 01:29:44,610 --> 01:29:47,070 like mobile's a very specific domain in the same way, 2076 01:29:47,070 --> 01:29:48,440 like data specific domain. 2077 01:29:48,440 --> 01:29:51,130 And so we might ask questions about like parts of the framework. 2078 01:29:51,130 --> 01:29:55,650 So like when do you use this API versus this other API? 2079 01:29:55,650 --> 01:29:58,400 Or like what are trade-offs between these two APIs 2080 01:29:58,400 --> 01:30:01,830 or what's an API with an [? iOS ?] that you think is badly designed? 2081 01:30:01,830 --> 01:30:04,380 So that they're not like that really like gotcha 2082 01:30:04,380 --> 01:30:07,110 either-- just sort of like, hey, can you demonstrate 2083 01:30:07,110 --> 01:30:10,452 a depth of understanding in this field? 2084 01:30:10,452 --> 01:30:12,410 Hard to give too many specifics, unfortunately. 2085 01:30:12,410 --> 01:30:14,700 TOMMY: Yeah, for machine learning, I guess 2086 01:30:14,700 --> 01:30:18,480 you could ask when should you be using linear regression 2087 01:30:18,480 --> 01:30:20,010 versus a neural network? 2088 01:30:20,010 --> 01:30:21,960 What are the different upsides and downsides 2089 01:30:21,960 --> 01:30:24,453 of your very basic similar things? 2090 01:30:24,453 --> 01:30:29,854 2091 01:30:29,854 --> 01:30:30,836 RYAN: Other questions? 2092 01:30:30,836 --> 01:30:40,180 2093 01:30:40,180 --> 01:30:42,090 Well, we're almost at time, anyway. 2094 01:30:42,090 --> 01:30:44,180 So we'll hang out here for another 5 or 10 minutes 2095 01:30:44,180 --> 01:30:46,560 if you have any questions for us that you want to talk through. 2096 01:30:46,560 --> 01:30:48,351 And if not, then thanks so much for coming. 2097 01:30:48,351 --> 01:30:51,230 [APPLAUSE] 2098 01:30:51,230 --> 01:30:52,323