1 00:00:00,000 --> 00:00:01,480 SPEAKER 1: Hello, everyone. 2 00:00:01,480 --> 00:00:02,850 Welcome. 3 00:00:02,850 --> 00:00:04,200 Let's get started. 4 00:00:04,200 --> 00:00:08,400 We are so grateful to have Tommy MacWilliam here with us today 5 00:00:08,400 --> 00:00:11,010 to do our prep and practice workshop. 6 00:00:11,010 --> 00:00:12,570 What number is this for you, Tommy? 7 00:00:12,570 --> 00:00:15,415 TOMMY MACWILLIAM: I want to say it's like, seven or eight, maybe. 8 00:00:15,415 --> 00:00:16,290 SPEAKER 1: Wonderful. 9 00:00:16,290 --> 00:00:17,880 We're so happy to have him here. 10 00:00:17,880 --> 00:00:19,020 Thank you, again. 11 00:00:19,020 --> 00:00:22,440 I'm going to let Tommy give more of an introduction of himself 12 00:00:22,440 --> 00:00:25,440 and the rest of his team from Figma, but again, welcome, Tommy. 13 00:00:25,440 --> 00:00:27,452 14 00:00:27,452 --> 00:00:29,910 TOMMY MACWILLIAM: Well it's really, really good to be here. 15 00:00:29,910 --> 00:00:33,530 I'm so excited to be back in person and not just be a square in a Zoom screen, 16 00:00:33,530 --> 00:00:36,120 so I'm really excited to see all of your faces as well. 17 00:00:36,120 --> 00:00:37,140 So I'm Tommy. 18 00:00:37,140 --> 00:00:39,930 I grew up in Boston, currently living in New York. 19 00:00:39,930 --> 00:00:44,450 I graduated from Harvard in 2013, which now feels forever ago, 20 00:00:44,450 --> 00:00:49,520 but I was one of the head TFs of CS 50 from 2010 to 2013. 21 00:00:49,520 --> 00:00:52,640 I was in Mather House. 22 00:00:52,640 --> 00:00:53,750 No one's in Mather House. 23 00:00:53,750 --> 00:00:55,542 Well, I was so that's great. 24 00:00:55,542 --> 00:00:57,500 And I'm here today with a few folks from Figma. 25 00:00:57,500 --> 00:01:00,810 We have Ashley, Carolyn, and Hannah, who'll be on the Zoom chat, 26 00:01:00,810 --> 00:01:02,700 answering questions. 27 00:01:02,700 --> 00:01:05,420 So today, I'm really excited today to talk about how 28 00:01:05,420 --> 00:01:07,940 to prepare for technical interviews. 29 00:01:07,940 --> 00:01:10,490 Really, the genesis of this talk was helping 30 00:01:10,490 --> 00:01:13,850 people learn all of the sort of unspoken rules 31 00:01:13,850 --> 00:01:17,180 and secret handshakes that go into succeeding in a technical interview. 32 00:01:17,180 --> 00:01:20,833 It's the type of stuff you don't necessarily learn in a course, 33 00:01:20,833 --> 00:01:23,000 and so I'm really excited to help fill in those gaps 34 00:01:23,000 --> 00:01:26,420 and help set you up for success as you begin or continue your journey 35 00:01:26,420 --> 00:01:28,250 through technical interviewing. 36 00:01:28,250 --> 00:01:30,830 So today, we're really trying to cover the whole end 37 00:01:30,830 --> 00:01:32,810 to end process of interviewing. 38 00:01:32,810 --> 00:01:36,623 We're talking about choosing companies, how to format your resume, and then 39 00:01:36,623 --> 00:01:37,790 the whole interview process. 40 00:01:37,790 --> 00:01:38,660 What to do before? 41 00:01:38,660 --> 00:01:39,800 What to do during? 42 00:01:39,800 --> 00:01:41,900 We'll have a mock interview, we'll go through it 43 00:01:41,900 --> 00:01:46,143 in a live example of what to do or maybe not do during a technical interview. 44 00:01:46,143 --> 00:01:48,560 And then we'll wrap up with how to think about and reflect 45 00:01:48,560 --> 00:01:51,020 after your interviews are done. 46 00:01:51,020 --> 00:01:55,040 So the first thing I want to talk about today is choosing companies. 47 00:01:55,040 --> 00:01:58,017 This is a really non-obvious thing, and the one thing 48 00:01:58,017 --> 00:02:00,725 I want you to take away from this is that everybody is different. 49 00:02:00,725 --> 00:02:03,440 You know, what you're looking for what your friends are looking 50 00:02:03,440 --> 00:02:06,456 for might be totally different things, and so don't feel bad 51 00:02:06,456 --> 00:02:08,539 if you feel like your place is at a larger company 52 00:02:08,539 --> 00:02:10,160 or your place is at a smaller company. 53 00:02:10,160 --> 00:02:12,030 There's no right answers here. 54 00:02:12,030 --> 00:02:15,110 And so rather than telling you exactly what companies to apply for, 55 00:02:15,110 --> 00:02:18,380 other than Figma, I want to give you these principles and frameworks 56 00:02:18,380 --> 00:02:21,830 to think about how you might narrow down that list. 57 00:02:21,830 --> 00:02:25,430 A lot of folks have a tendency to apply to 500 different companies, 58 00:02:25,430 --> 00:02:27,710 but you're probably setting yourself up for failure 59 00:02:27,710 --> 00:02:29,502 with doing a bunch of interviews every day, 60 00:02:29,502 --> 00:02:33,830 so here's a framework for narrowing that down a bit earlier in your process. 61 00:02:33,830 --> 00:02:37,790 So number one is asking yourself, what are you looking for? 62 00:02:37,790 --> 00:02:40,970 Again, this might be really different than what your friends are looking for 63 00:02:40,970 --> 00:02:42,890 and your peers are looking for, so don't feel 64 00:02:42,890 --> 00:02:44,750 like you ever have the wrong answer. 65 00:02:44,750 --> 00:02:47,480 Some folks are looking for a more structured company 66 00:02:47,480 --> 00:02:50,630 with a lot of mentorship, particularly early on in your career, 67 00:02:50,630 --> 00:02:53,780 to learn from more experienced folks, while other folks want 68 00:02:53,780 --> 00:02:55,250 to join somewhere a lot smaller. 69 00:02:55,250 --> 00:02:58,492 Sort of learn by doing, don't have mentors telling you exactly what to do. 70 00:02:58,492 --> 00:03:00,200 Neither one of those is the right answer, 71 00:03:00,200 --> 00:03:03,240 but they are very different companies and very different experiences, 72 00:03:03,240 --> 00:03:05,360 so think and reflect for yourself what it 73 00:03:05,360 --> 00:03:08,120 is you want to get out of your internship or first roll out 74 00:03:08,120 --> 00:03:09,800 of college. 75 00:03:09,800 --> 00:03:13,370 Second thing to think about, especially as you go through the interview process 76 00:03:13,370 --> 00:03:16,700 is would you be excited to work with these people every day? 77 00:03:16,700 --> 00:03:19,880 During your internship or role, you're going to be spending a lot of time 78 00:03:19,880 --> 00:03:20,720 with people. 79 00:03:20,720 --> 00:03:23,960 There's a tendency to Zoom in on what projects am I working on, 80 00:03:23,960 --> 00:03:26,540 what team I'm working on, but the people around you 81 00:03:26,540 --> 00:03:29,610 are really what's going to define this experience for you. 82 00:03:29,610 --> 00:03:31,880 So as you're going through the interview process, 83 00:03:31,880 --> 00:03:34,160 think about who is being represented there 84 00:03:34,160 --> 00:03:37,820 and how they sort of vibe with what you're looking for. 85 00:03:37,820 --> 00:03:41,180 A related thing is looking at a company's values page. 86 00:03:41,180 --> 00:03:44,090 Every company has them, Figma included. 87 00:03:44,090 --> 00:03:48,170 Learn about what a company values more than other companies. 88 00:03:48,170 --> 00:03:51,470 Every company will say they value hiring the best people 89 00:03:51,470 --> 00:03:53,630 and shipping impactful changes, but there's 90 00:03:53,630 --> 00:03:58,160 layers below that will give you a flavor of what the actual day to day work 91 00:03:58,160 --> 00:03:59,810 looks like. 92 00:03:59,810 --> 00:04:03,680 Finally, a really easy heuristic for thinking about where you want to work 93 00:04:03,680 --> 00:04:06,710 is what size company you're working for. 94 00:04:06,710 --> 00:04:10,010 So this is a graphic from Dustin Moskovitz, the Asana CEO, 95 00:04:10,010 --> 00:04:13,040 back when he was giving tech recruiting talks. 96 00:04:13,040 --> 00:04:13,790 And this sort of-- 97 00:04:13,790 --> 00:04:15,998 I won't go through this whole table, but this kind of 98 00:04:15,998 --> 00:04:19,387 lays out what it looks like to work at a small, medium, and large company. 99 00:04:19,387 --> 00:04:22,220 I will say this graphic is quite old, so the numbers on the top here 100 00:04:22,220 --> 00:04:26,420 I would double or triple what you call a small or large company at this point. 101 00:04:26,420 --> 00:04:29,095 But you can generally see that at a small company, 102 00:04:29,095 --> 00:04:31,220 you're not going to have a super well defined role. 103 00:04:31,220 --> 00:04:32,762 You might be wearing a bunch of hats. 104 00:04:32,762 --> 00:04:35,270 You might show up in your first day to assemble your desk. 105 00:04:35,270 --> 00:04:38,103 Where at a large company, you're going to have a lot more structure, 106 00:04:38,103 --> 00:04:41,500 a lot more road mapping and planning and strategy defined for you, 107 00:04:41,500 --> 00:04:44,750 and you're sort of going to come in and have a lot of impact through execution 108 00:04:44,750 --> 00:04:47,450 and working with other experienced engineers. 109 00:04:47,450 --> 00:04:51,200 So again, I'll say one last time, there is no right answer on this chart. 110 00:04:51,200 --> 00:04:53,670 What people are looking for is very, very different, 111 00:04:53,670 --> 00:04:56,390 so think about and reflect what it is you want and use 112 00:04:56,390 --> 00:04:59,120 this chart as a heuristic to start filtering down 113 00:04:59,120 --> 00:05:02,420 the wide spectrum of companies. 114 00:05:02,420 --> 00:05:04,340 So that's it on choosing companies. 115 00:05:04,340 --> 00:05:08,090 So next let's talk briefly about resumes. 116 00:05:08,090 --> 00:05:11,360 And I say briefly because resumes are really not 117 00:05:11,360 --> 00:05:14,150 as important as a lot of people think they are. 118 00:05:14,150 --> 00:05:17,900 Does anyone have a guess for how long me as a hiring manager or recruiter 119 00:05:17,900 --> 00:05:20,510 might spend reading your resume? 120 00:05:20,510 --> 00:05:23,520 Any guesses? 121 00:05:23,520 --> 00:05:24,210 Ten seconds? 122 00:05:24,210 --> 00:05:25,730 Five seconds. 123 00:05:25,730 --> 00:05:26,230 Ten seconds. 124 00:05:26,230 --> 00:05:27,330 I've given this talk too many times. 125 00:05:27,330 --> 00:05:28,705 It's actually been more generous. 126 00:05:28,705 --> 00:05:32,700 I'm going to say 30 seconds is my like, median time reading a resume. 127 00:05:32,700 --> 00:05:36,570 So you don't need to spend six months perfecting your resume 128 00:05:36,570 --> 00:05:38,340 to get through to the next step. 129 00:05:38,340 --> 00:05:41,050 We're really just looking for a few key things. 130 00:05:41,050 --> 00:05:43,890 And so I'm going to leave you with my ten patented resume rules. 131 00:05:43,890 --> 00:05:47,460 If you follow these ten things, you almost certainly cannot mess up 132 00:05:47,460 --> 00:05:50,250 your resume, and that's your goal here. 133 00:05:50,250 --> 00:05:53,310 Number one, most importantly, one page. 134 00:05:53,310 --> 00:05:54,480 No exceptions. 135 00:05:54,480 --> 00:05:58,320 I've read the resumes of engineers with 30 plus years of experience 136 00:05:58,320 --> 00:06:00,690 across five to ten different companies. 137 00:06:00,690 --> 00:06:02,490 Their resumes were one page. 138 00:06:02,490 --> 00:06:05,160 That means your resume can be one page too. 139 00:06:05,160 --> 00:06:08,700 I know you've done a lot of great stuff, had a bunch of internships, done 140 00:06:08,700 --> 00:06:10,020 a bunch of extracurriculars. 141 00:06:10,020 --> 00:06:12,760 I am not reading past page one, period. 142 00:06:12,760 --> 00:06:16,340 So don't make your resume more than one page. 143 00:06:16,340 --> 00:06:18,710 Second, make it easy to skim. 144 00:06:18,710 --> 00:06:19,820 I am your audience. 145 00:06:19,820 --> 00:06:24,080 I just told you I'm spending 30 seconds of my time on this. 146 00:06:24,080 --> 00:06:27,410 If I'm spending 20 of those seconds trying to figure out where the heck 147 00:06:27,410 --> 00:06:30,538 you worked because it's not formatted well or it's not easy to skim, 148 00:06:30,538 --> 00:06:33,080 you've only got ten seconds left for me to read your content. 149 00:06:33,080 --> 00:06:36,710 So make it really, really easy for me as the hiring manager or the recruiter 150 00:06:36,710 --> 00:06:40,790 or whomever to skim your resume and get the key details. 151 00:06:40,790 --> 00:06:43,250 Three make your contact info obvious. 152 00:06:43,250 --> 00:06:46,700 The goal of submitting your resume is to be contacted by a company 153 00:06:46,700 --> 00:06:48,290 to move forward with the next steps. 154 00:06:48,290 --> 00:06:50,570 I don't know how many resumes I've read that didn't 155 00:06:50,570 --> 00:06:54,200 have an email or a phone number or an obvious way to contact this person. 156 00:06:54,200 --> 00:06:57,620 Super easy mistake to make, so just make sure it's really easy 157 00:06:57,620 --> 00:06:59,860 to contact you from your resume. 158 00:06:59,860 --> 00:07:02,360 Number four, and this is maybe the advice you hear the most, 159 00:07:02,360 --> 00:07:05,100 try to highlight specific accomplishments. 160 00:07:05,100 --> 00:07:09,230 If you can talk about you improved the performance of some system by 5%, 161 00:07:09,230 --> 00:07:14,360 you increased revenue by 3% by optimizing some system, talk about that 162 00:07:14,360 --> 00:07:16,160 and try to use specifics. 163 00:07:16,160 --> 00:07:18,050 Many companies or internships might put you 164 00:07:18,050 --> 00:07:21,260 under some nondisclosure agreement that prevents you from disclosing 165 00:07:21,260 --> 00:07:23,190 the total ARR of some company. 166 00:07:23,190 --> 00:07:25,970 However, you can still be specific about what you worked on 167 00:07:25,970 --> 00:07:28,490 and what the impact of that was without getting yourself 168 00:07:28,490 --> 00:07:31,010 sued by the Google legal department. 169 00:07:31,010 --> 00:07:34,640 Number five, try to include your interesting personal projects. 170 00:07:34,640 --> 00:07:38,990 In particular, if you only have zero or one internships under your belt, 171 00:07:38,990 --> 00:07:41,030 this is your opportunity to showcase what 172 00:07:41,030 --> 00:07:43,017 you've built outside of internships. 173 00:07:43,017 --> 00:07:46,100 Maybe it's a cool class project where you built something and kind of went 174 00:07:46,100 --> 00:07:47,517 above and beyond the requirements. 175 00:07:47,517 --> 00:07:49,725 Maybe it's just something you built in your free time 176 00:07:49,725 --> 00:07:52,430 because you wanted to solve some problem or build some cool app. 177 00:07:52,430 --> 00:07:54,350 Please highlight that on your resume. 178 00:07:54,350 --> 00:07:57,950 I literally do click click on GitHub links and flip through projects 179 00:07:57,950 --> 00:08:01,190 and try out apps, and it really does help you stand out in particular 180 00:08:01,190 --> 00:08:03,440 if you don't have a bunch of that experience already, 181 00:08:03,440 --> 00:08:05,940 which everyone has zero experience at some point. 182 00:08:05,940 --> 00:08:10,572 And so this is a way to cold start your resume and get it in front of folks So 183 00:08:10,572 --> 00:08:11,530 that's a bunch of do's. 184 00:08:11,530 --> 00:08:12,940 How about some don'ts? 185 00:08:12,940 --> 00:08:16,030 Number one, no charts or ratings ever, period. 186 00:08:16,030 --> 00:08:16,690 Please. 187 00:08:16,690 --> 00:08:20,410 Don't tell me that you're a four out of five stars on JavaScript, 188 00:08:20,410 --> 00:08:22,510 or an eight out of ten on collaboration. 189 00:08:22,510 --> 00:08:23,950 I have no idea what that means. 190 00:08:23,950 --> 00:08:25,610 I don't think you do either. 191 00:08:25,610 --> 00:08:29,440 So don't waste the space on your one page of resume telling me precisely 192 00:08:29,440 --> 00:08:33,640 the three significant figures how good you are at some tool. 193 00:08:33,640 --> 00:08:36,130 Number seven, don't include an objective statement. 194 00:08:36,130 --> 00:08:37,900 Again, waste of space. 195 00:08:37,900 --> 00:08:40,419 There's a bunch of resumes that say I'm looking 196 00:08:40,419 --> 00:08:43,330 for a fast paced internship in the field of software engineering 197 00:08:43,330 --> 00:08:44,500 at a fast growing company. 198 00:08:44,500 --> 00:08:45,160 Like, duh. 199 00:08:45,160 --> 00:08:46,360 I mean, that's what everyone's doing, right. 200 00:08:46,360 --> 00:08:49,402 There's no point in wasting your space with that objective statement that 201 00:08:49,402 --> 00:08:53,550 doesn't separate you from any other resume in the pile. 202 00:08:53,550 --> 00:08:57,060 Number eight, please use a professional email. 203 00:08:57,060 --> 00:09:00,750 I've had some pretty ridiculous emails across some resumes 204 00:09:00,750 --> 00:09:05,100 like, thegolfninja12345@gmail.com. 205 00:09:05,100 --> 00:09:08,670 Create a resume, first initial, last name's a super great template. 206 00:09:08,670 --> 00:09:10,650 Really, lots of free email services. 207 00:09:10,650 --> 00:09:12,810 Don't use a silly email. 208 00:09:12,810 --> 00:09:14,857 Nine, include relevant links. 209 00:09:14,857 --> 00:09:16,440 If you've got a LinkedIn, included it. 210 00:09:16,440 --> 00:09:17,932 You've got a GitHub, include it. 211 00:09:17,932 --> 00:09:20,640 If you're a designer or a data scientist, you've got a portfolio, 212 00:09:20,640 --> 00:09:21,900 please include that as well. 213 00:09:21,900 --> 00:09:24,150 Like I said, especially for folks who might not 214 00:09:24,150 --> 00:09:26,520 have a bunch of previous internship experience, 215 00:09:26,520 --> 00:09:29,160 we literally do click these things, so please put them 216 00:09:29,160 --> 00:09:32,550 on there to give us the opportunity give you the opportunity 217 00:09:32,550 --> 00:09:36,380 to showcase your skills really fully. 218 00:09:36,380 --> 00:09:38,750 Number ten, don't sweat the aesthetics. 219 00:09:38,750 --> 00:09:42,530 A lot of folks are really concerned about getting the correct shade of blue 220 00:09:42,530 --> 00:09:44,030 for the header on their resume. 221 00:09:44,030 --> 00:09:45,230 I don't care. 222 00:09:45,230 --> 00:09:48,410 Just make sure the content is really what's coming through in your resume. 223 00:09:48,410 --> 00:09:53,050 Don't spend a bunch of time trying to design stuff. 224 00:09:53,050 --> 00:09:56,220 So those ten rules in mind, I have two fake resumes. 225 00:09:56,220 --> 00:09:59,460 I promise they're not real because I googled fake resume. 226 00:09:59,460 --> 00:10:02,542 And so I want to hear from the group what we think about this resume. 227 00:10:02,542 --> 00:10:03,250 It's not all bad. 228 00:10:03,250 --> 00:10:04,000 It's not all good. 229 00:10:04,000 --> 00:10:08,070 So what's good and what's bad according to those ten rules? 230 00:10:08,070 --> 00:10:10,110 Feel free to raise your hand. 231 00:10:10,110 --> 00:10:11,160 Yeah, in the back. 232 00:10:11,160 --> 00:10:13,410 AUDIENCE MEMBER 1: I think that it's easy to navigate, 233 00:10:13,410 --> 00:10:17,150 and you can clearly see what is the job title that they have and dates, 234 00:10:17,150 --> 00:10:17,870 and stuff. 235 00:10:17,870 --> 00:10:19,400 That's the good side. 236 00:10:19,400 --> 00:10:22,150 The bad side, it's-- 237 00:10:22,150 --> 00:10:23,840 he has the ratings that you mentioned. 238 00:10:23,840 --> 00:10:25,510 So it's very subjective. 239 00:10:25,510 --> 00:10:31,270 And also, it is misusing the space, in my opinion, in this thing of putting, 240 00:10:31,270 --> 00:10:35,990 I think header you can eventually make that a bit more simple. 241 00:10:35,990 --> 00:10:39,180 And I cannot actually read too much the points, 242 00:10:39,180 --> 00:10:42,820 but it doesn't seem that they are focused too much on the achievements. 243 00:10:42,820 --> 00:10:46,195 They have some of them like, in the last one that says like, 244 00:10:46,195 --> 00:10:47,410 [INAUDIBLE] of something. 245 00:10:47,410 --> 00:10:50,562 But the rest doesn't look like, very focused points. 246 00:10:50,562 --> 00:10:51,520 TOMMY MACWILLIAM: Yeah. 247 00:10:51,520 --> 00:10:54,850 So just so just to recap, so I think this is definitely well structured. 248 00:10:54,850 --> 00:10:56,690 Words like data scientist are in bold. 249 00:10:56,690 --> 00:10:57,190 Great. 250 00:10:57,190 --> 00:10:58,720 I can read that really easily. 251 00:10:58,720 --> 00:11:01,210 We've got this very strange chart over here, 252 00:11:01,210 --> 00:11:03,580 where it seems like they're a good team player, 253 00:11:03,580 --> 00:11:05,630 but they don't have great attention to detail. 254 00:11:05,630 --> 00:11:07,660 I'm not really sure how that adds up. 255 00:11:07,660 --> 00:11:13,070 Maybe one other observation from someone else? 256 00:11:13,070 --> 00:11:13,910 Good or bad. 257 00:11:13,910 --> 00:11:18,740 258 00:11:18,740 --> 00:11:19,580 Yeah. 259 00:11:19,580 --> 00:11:21,330 AUDIENCE MEMBER 2: One good observation is 260 00:11:21,330 --> 00:11:23,570 that they're using a professional email address, 261 00:11:23,570 --> 00:11:26,810 but a bad observation is that they have a profile which 262 00:11:26,810 --> 00:11:29,842 is sort of like the objective and it's unnecessary. 263 00:11:29,842 --> 00:11:30,800 TOMMY MACWILLIAM: Yeah. 264 00:11:30,800 --> 00:11:32,008 I think that's exactly right. 265 00:11:32,008 --> 00:11:33,822 So good contact information easy to read. 266 00:11:33,822 --> 00:11:36,530 However, they've got this waste of space and this waste of space. 267 00:11:36,530 --> 00:11:39,380 The actual content is really this small square over here 268 00:11:39,380 --> 00:11:40,850 and this small square over here. 269 00:11:40,850 --> 00:11:41,990 There's probably a lot more room for them 270 00:11:41,990 --> 00:11:45,110 to be highlighting specific achievements by removing a lot of this cruft 271 00:11:45,110 --> 00:11:46,800 that I'm really not that interested in. 272 00:11:46,800 --> 00:11:48,500 OK, that's one. 273 00:11:48,500 --> 00:11:51,860 And here is google images fake resume number two. 274 00:11:51,860 --> 00:11:54,425 What's good about this and what's bad? 275 00:11:54,425 --> 00:11:58,600 276 00:11:58,600 --> 00:11:59,290 Yeah. 277 00:11:59,290 --> 00:12:02,492 AUDIENCE MEMBER 3: I just have a [INAUDIBLE].. 278 00:12:02,492 --> 00:12:03,450 TOMMY MACWILLIAM: Yeah. 279 00:12:03,450 --> 00:12:05,910 It is really, really dense. 280 00:12:05,910 --> 00:12:07,150 Pretty hard to read. 281 00:12:07,150 --> 00:12:09,335 I like that they've kind of highlighted their roles, 282 00:12:09,335 --> 00:12:10,960 but there's just so much going on here. 283 00:12:10,960 --> 00:12:14,190 It's not easy for me to read compared to the last one. 284 00:12:14,190 --> 00:12:15,170 Yeah. 285 00:12:15,170 --> 00:12:17,712 AUDIENCE MEMBER 4: Positive is that they have their LinkedIn, 286 00:12:17,712 --> 00:12:20,212 but it's sort of hard for me to find with how much text-- 287 00:12:20,212 --> 00:12:21,170 TOMMY MACWILLIAM: Yeah. 288 00:12:21,170 --> 00:12:21,670 Exactly. 289 00:12:21,670 --> 00:12:25,010 So it's there, but it doesn't really jump out to me at the starting point 290 00:12:25,010 --> 00:12:27,020 either. 291 00:12:27,020 --> 00:12:28,760 One other observation? 292 00:12:28,760 --> 00:12:33,550 293 00:12:33,550 --> 00:12:34,330 Yeah? 294 00:12:34,330 --> 00:12:39,250 AUDIENCE MEMBER 5: I think that they use way many points under each experience, 295 00:12:39,250 --> 00:12:43,100 and if they have more experiences that they share, they can just like, 296 00:12:43,100 --> 00:12:45,632 condense some of these things-- 297 00:12:45,632 --> 00:12:46,590 TOMMY MACWILLIAM: Yeah. 298 00:12:46,590 --> 00:12:47,465 I think that's right. 299 00:12:47,465 --> 00:12:49,260 There's a whole lot of verbosity here. 300 00:12:49,260 --> 00:12:53,310 I think that's in part what's making this easy to skim. 301 00:12:53,310 --> 00:12:54,540 Yeah. 302 00:12:54,540 --> 00:12:57,082 AUDIENCE MEMBER 6: I think another positive is they like list 303 00:12:57,082 --> 00:13:01,047 their like, positive attributes [INAUDIBLE].. 304 00:13:01,047 --> 00:13:02,380 TOMMY MACWILLIAM: Yeah, I agree. 305 00:13:02,380 --> 00:13:04,810 This part is actually maybe the most memorable part of the whole thing. 306 00:13:04,810 --> 00:13:07,560 Sort of what they're doing, what their area of expertise is. 307 00:13:07,560 --> 00:13:08,560 I'll add one more thing. 308 00:13:08,560 --> 00:13:09,935 I'm surprised nobody pointed out. 309 00:13:09,935 --> 00:13:11,650 I have literally no idea what this is. 310 00:13:11,650 --> 00:13:14,830 I don't know what they're trying to convey here, but they didn't convey it. 311 00:13:14,830 --> 00:13:16,090 So don't try to get fancy. 312 00:13:16,090 --> 00:13:18,100 Don't think about too much the aesthetics here. 313 00:13:18,100 --> 00:13:19,300 Simplify your resume. 314 00:13:19,300 --> 00:13:25,540 Make sure the content is really being highlighted, not some thing. 315 00:13:25,540 --> 00:13:26,540 So that's it on resumes. 316 00:13:26,540 --> 00:13:28,460 I'm not spending any more time on resumes in this workshop 317 00:13:28,460 --> 00:13:30,460 because like I said, they're not that important. 318 00:13:30,460 --> 00:13:32,700 They're a way for you to get your foot in the door, 319 00:13:32,700 --> 00:13:35,340 but at no point am I ever in a debrief for candidates saying, 320 00:13:35,340 --> 00:13:37,700 well their resume had the best font I've seen in weeks. 321 00:13:37,700 --> 00:13:39,033 We've got to give them the role. 322 00:13:39,033 --> 00:13:44,390 [LAUGHTER] So let's talk about what to expect before the interview. 323 00:13:44,390 --> 00:13:46,810 So first, here's things that you can expect. 324 00:13:46,810 --> 00:13:51,940 One, if you can, try to interview early and plan it into your schedule. 325 00:13:51,940 --> 00:13:55,240 Interviewing is nearly another class for you to take on. 326 00:13:55,240 --> 00:13:58,880 There's a whole lot of coordination and it's a stressful experience. 327 00:13:58,880 --> 00:14:01,750 So I'm not telling you to take an easy class or two, 328 00:14:01,750 --> 00:14:04,330 but I'm not not telling you that either if it's 329 00:14:04,330 --> 00:14:06,640 going to help you with your schedule. 330 00:14:06,640 --> 00:14:10,450 And third, try to look for opportunities that are geared to your experience. 331 00:14:10,450 --> 00:14:13,600 Many companies, the Googles, the Microsofts, the Metas, 332 00:14:13,600 --> 00:14:17,350 they have internships geared specifically at first year students 333 00:14:17,350 --> 00:14:19,060 or folks who don't have any experience. 334 00:14:19,060 --> 00:14:22,093 Try to apply to those first if that's the category of person you are. 335 00:14:22,093 --> 00:14:24,010 If you have three internships under your belt, 336 00:14:24,010 --> 00:14:26,050 don't try to apply to one of those first year programs. 337 00:14:26,050 --> 00:14:28,480 Look for something that's a bit more tailored to you. 338 00:14:28,480 --> 00:14:30,063 There's no sort of like, secrets here. 339 00:14:30,063 --> 00:14:31,230 Just read the opportunities. 340 00:14:31,230 --> 00:14:32,650 They'll usually be pretty clear. 341 00:14:32,650 --> 00:14:35,377 This is a fellowship for a first year, and then this 342 00:14:35,377 --> 00:14:37,960 is, sort of, our standard internship with an eye of converting 343 00:14:37,960 --> 00:14:41,270 towards a full time person. 344 00:14:41,270 --> 00:14:45,290 So here's a sketch of what the process might look like. 345 00:14:45,290 --> 00:14:47,890 So many, many processes will start with you 346 00:14:47,890 --> 00:14:51,970 meeting with a recruiter coming to an event like this to meet with folks. 347 00:14:51,970 --> 00:14:54,010 The first technical assessment will probably 348 00:14:54,010 --> 00:14:57,370 be some kind of online coding challenge. 349 00:14:57,370 --> 00:14:59,560 Maybe there's someone human there moderating it. 350 00:14:59,560 --> 00:15:00,310 Maybe there's not. 351 00:15:00,310 --> 00:15:02,410 There's lots of tools these days to just allow 352 00:15:02,410 --> 00:15:06,100 you to work on a problem in the comfort and space in your own time. 353 00:15:06,100 --> 00:15:08,100 There may be some sort of take home assignment. 354 00:15:08,100 --> 00:15:09,850 Maybe that's something that's a bit longer 355 00:15:09,850 --> 00:15:13,750 in scope, maybe three to four hours or a weekend to build something. 356 00:15:13,750 --> 00:15:16,090 There could be a technical phone screen, which 357 00:15:16,090 --> 00:15:19,690 is a conversation live with an engineer going through a coding problem, 358 00:15:19,690 --> 00:15:21,370 like the one we'll see later today. 359 00:15:21,370 --> 00:15:23,397 And then there's going to be an on site that's 360 00:15:23,397 --> 00:15:25,480 sort of a blend of different interviews, and we'll 361 00:15:25,480 --> 00:15:27,250 go into what those interviews look like. 362 00:15:27,250 --> 00:15:29,930 And I'll say that every company doesn't have all of these steps. 363 00:15:29,930 --> 00:15:32,138 It's more that these are the steps you may encounter. 364 00:15:32,138 --> 00:15:34,630 Companies will probably pick and choose two of these maybe 365 00:15:34,630 --> 00:15:36,520 to define their process, but here's all kind 366 00:15:36,520 --> 00:15:40,700 of the enemies you may encounter along the way. 367 00:15:40,700 --> 00:15:45,100 So here are five types of interviews that you might encounter. 368 00:15:45,100 --> 00:15:47,410 We're going to focus the most on algorithms 369 00:15:47,410 --> 00:15:49,660 and coding today because especially for early career 370 00:15:49,660 --> 00:15:52,870 folks that's the bread and butter of your technical interviewing. 371 00:15:52,870 --> 00:15:56,080 But we'll also briefly touch on systems design, practical interviews, 372 00:15:56,080 --> 00:15:59,382 deep dives, and values interviews as well. 373 00:15:59,382 --> 00:16:01,090 So that's what you can expect, but I also 374 00:16:01,090 --> 00:16:03,940 want to talk about what I expect of you as an interviewer. 375 00:16:03,940 --> 00:16:05,440 So this is pulling back the curtain. 376 00:16:05,440 --> 00:16:08,020 This is the lens of what your interviewer wants you to do. 377 00:16:08,020 --> 00:16:11,750 Broadly speaking, they want you to be able to think through a problem. 378 00:16:11,750 --> 00:16:13,810 Some problem that you haven't seen before, 379 00:16:13,810 --> 00:16:15,700 you're sort of drawing on past experience, 380 00:16:15,700 --> 00:16:17,260 but you haven't seen exactly this, we want 381 00:16:17,260 --> 00:16:19,677 to see how you're thinking, the way you approach problems, 382 00:16:19,677 --> 00:16:21,040 and how you solve them. 383 00:16:21,040 --> 00:16:23,140 We want you to write functional code. 384 00:16:23,140 --> 00:16:26,470 We don't want a verbal description or a paragraph description or a pseudocode. 385 00:16:26,470 --> 00:16:27,765 We want actual code. 386 00:16:27,765 --> 00:16:29,890 In some language, often whatever language you want, 387 00:16:29,890 --> 00:16:34,240 but we do want the code to work and for it to be real code with real syntax. 388 00:16:34,240 --> 00:16:35,540 Three, nobody's perfect. 389 00:16:35,540 --> 00:16:38,110 And so we want you to fix issues along the way. 390 00:16:38,110 --> 00:16:41,207 Ideally if you're writing code, you're identifying those issues yourself. 391 00:16:41,207 --> 00:16:43,540 Maybe you found a bug, maybe you found some improvement. 392 00:16:43,540 --> 00:16:45,940 We're looking for you to be on the lookout for those and fix them, 393 00:16:45,940 --> 00:16:47,210 but that doesn't always happen. 394 00:16:47,210 --> 00:16:48,770 Sometimes your interviewer might point out, 395 00:16:48,770 --> 00:16:51,530 hey it seems like you've got a bug if you consider this edge case. 396 00:16:51,530 --> 00:16:53,920 We're looking for you to be able to fix that and not sort of stress out, 397 00:16:53,920 --> 00:16:56,680 maybe being able to adapt your code to new Information. 398 00:16:56,680 --> 00:16:58,630 Looking for you to reason about runtime. 399 00:16:58,630 --> 00:17:00,713 We'll talk about that in a bit, but be able to say 400 00:17:00,713 --> 00:17:03,610 is the solution linear or logarithmic or whatever. 401 00:17:03,610 --> 00:17:07,810 And lastly and most importantly, we're looking for you to communicate clearly. 402 00:17:07,810 --> 00:17:09,730 The interview is a conversation. 403 00:17:09,730 --> 00:17:12,849 Your goal in that conversation is to communicate your solution 404 00:17:12,849 --> 00:17:15,339 through words, through code, so make sure that's 405 00:17:15,339 --> 00:17:18,920 really clear to your interviewer. 406 00:17:18,920 --> 00:17:21,890 So now let's talk a bit about preparing for interviews. 407 00:17:21,890 --> 00:17:25,310 And like I said, we're going to focus the most on these algorithms encoding 408 00:17:25,310 --> 00:17:28,970 interview, which is going to be what you're mostly going to see. 409 00:17:28,970 --> 00:17:31,850 The first thing you want to do as you're preparing, really 410 00:17:31,850 --> 00:17:33,710 start with the basics. 411 00:17:33,710 --> 00:17:36,860 When you're in an interview, it's really stressful. 412 00:17:36,860 --> 00:17:39,770 No matter how many interviews you do, I did some interviews recently, 413 00:17:39,770 --> 00:17:41,330 it's still really stressful. 414 00:17:41,330 --> 00:17:46,070 The number one thing you can do to reduce that stress is to practice. 415 00:17:46,070 --> 00:17:48,710 The more types of problems you've seen, the more 416 00:17:48,710 --> 00:17:51,920 times you've been in a time setting with some weird-looking Leet Code 417 00:17:51,920 --> 00:17:54,410 problem you've never seen before, it's going to reduce 418 00:17:54,410 --> 00:17:55,702 the stress as much as possible. 419 00:17:55,702 --> 00:17:58,610 It'll never be zero, but you can reduce it with practice. 420 00:17:58,610 --> 00:18:01,970 More specifically, pick a language and stick to it. 421 00:18:01,970 --> 00:18:05,570 It's very rare, possible, but very rare for a company 422 00:18:05,570 --> 00:18:08,448 to say you must interview in precisely this language. 423 00:18:08,448 --> 00:18:10,490 So instead, what you should do is pick a language 424 00:18:10,490 --> 00:18:11,782 that you feel comfortable with. 425 00:18:11,782 --> 00:18:13,700 Maybe you've used it in a bunch of classes. 426 00:18:13,700 --> 00:18:16,280 Maybe you had an internship where you use Python. 427 00:18:16,280 --> 00:18:19,580 Pick one of those languages like a Python or a Ruby or a JavaScript 428 00:18:19,580 --> 00:18:23,840 that's fairly simple, has a bunch of built in tools, and use it. 429 00:18:23,840 --> 00:18:26,600 The last thing you want to do going into an interview problem 430 00:18:26,600 --> 00:18:29,267 is say, all right, what language do I want to use to solve this? 431 00:18:29,267 --> 00:18:32,840 You should know that cold before the question even gets asked. 432 00:18:32,840 --> 00:18:37,280 And once you pick a language, try to learn the foundations of that language. 433 00:18:37,280 --> 00:18:40,040 Syntax, built ins, error handling. 434 00:18:40,040 --> 00:18:42,530 If you're in an interview and you're trying to remember, 435 00:18:42,530 --> 00:18:44,900 how do I get the length of a string in Python? 436 00:18:44,900 --> 00:18:45,650 Is it Len? 437 00:18:45,650 --> 00:18:46,910 Is it dot size? 438 00:18:46,910 --> 00:18:48,470 It's just stress, right? 439 00:18:48,470 --> 00:18:50,810 You want to eliminate that variable completely. 440 00:18:50,810 --> 00:18:54,360 Just have these basics down cold and be ready to use them, 441 00:18:54,360 --> 00:18:57,110 so that all of your stress and all of your energy in the interview 442 00:18:57,110 --> 00:19:01,160 itself goes towards solving the problem and not all the boring stuff 443 00:19:01,160 --> 00:19:04,490 around that. 444 00:19:04,490 --> 00:19:07,180 So really want to start with these basics. 445 00:19:07,180 --> 00:19:09,550 So having heard this, what are some things 446 00:19:09,550 --> 00:19:14,540 that people think you should know how to do cold? 447 00:19:14,540 --> 00:19:17,735 Raise your hand and let me know. 448 00:19:17,735 --> 00:19:18,235 Yeah. 449 00:19:18,235 --> 00:19:19,240 AUDIENCE MEMBER 7: Like, write a loop. 450 00:19:19,240 --> 00:19:19,570 TOMMY MACWILLIAM: Yeah. 451 00:19:19,570 --> 00:19:20,080 That's a great one. 452 00:19:20,080 --> 00:19:20,950 Being able to write a loop. 453 00:19:20,950 --> 00:19:21,670 What's the syntax? 454 00:19:21,670 --> 00:19:22,503 Does it have braces? 455 00:19:22,503 --> 00:19:23,663 Is there a colon? 456 00:19:23,663 --> 00:19:25,330 Is there even a y-loop in this language? 457 00:19:25,330 --> 00:19:25,720 Right a loop. 458 00:19:25,720 --> 00:19:26,510 That's a really good one. 459 00:19:26,510 --> 00:19:27,040 What else? 460 00:19:27,040 --> 00:19:30,320 461 00:19:30,320 --> 00:19:31,273 Yeah. 462 00:19:31,273 --> 00:19:31,980 AUDIENCE MEMBER 8: Conditionals. 463 00:19:31,980 --> 00:19:32,400 TOMMY MACWILLIAM: Yeah. 464 00:19:32,400 --> 00:19:32,942 Conditionals. 465 00:19:32,942 --> 00:19:33,533 Exactly. 466 00:19:33,533 --> 00:19:34,950 What's the state for conditionals? 467 00:19:34,950 --> 00:19:36,630 What is the syntax there? 468 00:19:36,630 --> 00:19:40,600 How about one more, and then I'll give you my list. 469 00:19:40,600 --> 00:19:41,170 Yeah. 470 00:19:41,170 --> 00:19:43,420 AUDIENCE MEMBER 9: How to visualize an array? 471 00:19:43,420 --> 00:19:44,290 TOMMY MACWILLIAM: Yeah, that's great. 472 00:19:44,290 --> 00:19:46,415 List an array is super, super common in Primitives. 473 00:19:46,415 --> 00:19:48,820 Being able to know, is it called a vector, is it a list. 474 00:19:48,820 --> 00:19:50,998 Having that really, really comfortable. 475 00:19:50,998 --> 00:19:53,290 So here's a few other things that-- along the same line 476 00:19:53,290 --> 00:19:54,190 of what we just mentioned. 477 00:19:54,190 --> 00:19:55,990 One is making sure to create a function. 478 00:19:55,990 --> 00:19:57,580 You'd be shocked at the number of interviews 479 00:19:57,580 --> 00:20:00,490 that I've started where someone has said, how do I create a function again? 480 00:20:00,490 --> 00:20:01,573 You don't want to be that. 481 00:20:01,573 --> 00:20:02,710 Just have that down cold. 482 00:20:02,710 --> 00:20:03,940 Define classes. 483 00:20:03,940 --> 00:20:04,840 Work with strings. 484 00:20:04,840 --> 00:20:07,030 Tons of interview questions have to do with strings. 485 00:20:07,030 --> 00:20:09,800 Lists, as someone just mentioned, and trees as well. 486 00:20:09,800 --> 00:20:11,287 So just have this practice down. 487 00:20:11,287 --> 00:20:13,120 You shouldn't have to be wondering, oh crap, 488 00:20:13,120 --> 00:20:15,580 how do I represent a binary tree in Ruby? 489 00:20:15,580 --> 00:20:19,232 Just know that going in. 490 00:20:19,232 --> 00:20:21,690 An interesting thing about-- interesting interview problem, 491 00:20:21,690 --> 00:20:23,898 is that we're is going to ask you what's the runtime. 492 00:20:23,898 --> 00:20:26,040 It's like baked into every interviewer's trainings. 493 00:20:26,040 --> 00:20:28,200 Like, just say the words, what's the runtime. 494 00:20:28,200 --> 00:20:31,620 And what's interesting is that interview problems really rarely 495 00:20:31,620 --> 00:20:33,180 have complex complexity. 496 00:20:33,180 --> 00:20:38,370 Your answer is never going to be 2 to the n divided by log n factorial-- 497 00:20:38,370 --> 00:20:39,150 it's not that. 498 00:20:39,150 --> 00:20:41,680 It's going to be all of the simple ones. 499 00:20:41,680 --> 00:20:44,790 So with that in mind, what are some common runtimes 500 00:20:44,790 --> 00:20:47,592 that you might encounter for an interview problem? 501 00:20:47,592 --> 00:20:48,610 AUDIENCE: Log n. 502 00:20:48,610 --> 00:20:49,860 TOMMY MACWILLIAM: Yeah, log n. 503 00:20:49,860 --> 00:20:50,610 That's a good one. 504 00:20:50,610 --> 00:20:51,180 What else? 505 00:20:51,180 --> 00:20:52,333 AUDIENCE: Linear. 506 00:20:52,333 --> 00:20:54,000 TOMMY MACWILLIAM: Linear, and what else? 507 00:20:54,000 --> 00:20:54,900 AUDIENCE: N square. 508 00:20:54,900 --> 00:20:56,970 TOMMY MACWILLIAM: N square-- we've basically got them all. 509 00:20:56,970 --> 00:20:59,020 Honestly, that's not going to be more complicated than that. 510 00:20:59,020 --> 00:21:02,062 So you've got-- to add a couple more, you've got constant, we didn't say. 511 00:21:02,062 --> 00:21:05,710 Polynomial is just the generalized form of quadratic and cubic. 512 00:21:05,710 --> 00:21:06,990 And then exponential as well. 513 00:21:06,990 --> 00:21:09,150 If you answer the question and you say exponential, 514 00:21:09,150 --> 00:21:11,652 that almost always means your interview is not 515 00:21:11,652 --> 00:21:13,860 done yet, because you can do better than exponential. 516 00:21:13,860 --> 00:21:16,318 Not always, but that's kind of a signal that you can get it 517 00:21:16,318 --> 00:21:18,010 into one of these other runtimes. 518 00:21:18,010 --> 00:21:21,030 So if you find yourself deriving some math principle 519 00:21:21,030 --> 00:21:24,510 or proving some theory where you're answering the complexity question, 520 00:21:24,510 --> 00:21:25,500 you're probably wrong. 521 00:21:25,500 --> 00:21:30,130 Just say one of these five words and that's what your interview wants. 522 00:21:30,130 --> 00:21:35,470 So along the same line, you also want to build out your toolbox of concepts. 523 00:21:35,470 --> 00:21:39,040 There's a whole bunch of interview questions out there, but many of them 524 00:21:39,040 --> 00:21:43,790 are really just dressing up some core CSS concept and disguising it. 525 00:21:43,790 --> 00:21:47,870 So some of the concepts you'll probably encounter, one is recursion. 526 00:21:47,870 --> 00:21:50,740 So how can you take this problem divide it into subproblems, 527 00:21:50,740 --> 00:21:54,610 and solve the original problem with the sort of combination of the subproblems? 528 00:21:54,610 --> 00:21:55,690 Graph searches. 529 00:21:55,690 --> 00:21:58,240 A bunch of things can just be reduced to graph searches, 530 00:21:58,240 --> 00:22:01,360 so knowing what breadth-first search or depth-first search is. 531 00:22:01,360 --> 00:22:03,910 What a binary tree is, for instance. 532 00:22:03,910 --> 00:22:04,960 Greedy algorithms. 533 00:22:04,960 --> 00:22:07,840 A lot of questions sound like they've got some crazy solution, 534 00:22:07,840 --> 00:22:11,450 but the answer is just sort of approach it greedily. 535 00:22:11,450 --> 00:22:13,130 A lot of string questions are out there. 536 00:22:13,130 --> 00:22:16,130 Things Like palindromes versus string and one of our marketing questions 537 00:22:16,130 --> 00:22:19,100 it's a string question so just being really comfortable with strings. 538 00:22:19,100 --> 00:22:22,095 How to access them, create them, mutate them. 539 00:22:22,095 --> 00:22:23,720 And then, lastly searching and sorting. 540 00:22:23,720 --> 00:22:26,210 Ton of interview questions, sort of, take the form, 541 00:22:26,210 --> 00:22:30,470 find a path through the trees, or transform this into that, 542 00:22:30,470 --> 00:22:33,620 just boils down to some kind of search or some kind of sort. 543 00:22:33,620 --> 00:22:35,840 So have these basics down. 544 00:22:35,840 --> 00:22:38,312 Sort of be really comfortable with recursion, which I know 545 00:22:38,312 --> 00:22:40,520 is a scary topic, but if you get comfortable with it, 546 00:22:40,520 --> 00:22:43,790 you're going to be able to start unlocking the solution to a whole bunch 547 00:22:43,790 --> 00:22:44,910 of interview questions. 548 00:22:44,910 --> 00:22:47,810 And again, it doesn't get much, much fancier than this. 549 00:22:47,810 --> 00:22:51,740 One sort of advanced topic here, if you've taken 121 or 124, 550 00:22:51,740 --> 00:22:53,990 is this thing called dynamic programming, which 551 00:22:53,990 --> 00:22:57,160 is this way of caching values and transforming some exponential solution 552 00:22:57,160 --> 00:22:59,150 into something polynomial, hopefully. 553 00:22:59,150 --> 00:23:01,100 So you might see that as well as you're searching around topics, 554 00:23:01,100 --> 00:23:03,683 but that's a bit more of an advanced one and sort of for the-- 555 00:23:03,683 --> 00:23:06,960 maybe for the new grad roles, as opposed to the intern roles. 556 00:23:06,960 --> 00:23:09,300 So those are the topics. 557 00:23:09,300 --> 00:23:13,020 And so how about the tools that you have at your disposal? 558 00:23:13,020 --> 00:23:14,578 So one is arrays and linked lists. 559 00:23:14,578 --> 00:23:16,370 Be comfortable creating those, knowing what 560 00:23:16,370 --> 00:23:17,900 the difference is, how to use them. 561 00:23:17,900 --> 00:23:21,620 Hash tables are a super easy way to make some runtime faster, 562 00:23:21,620 --> 00:23:23,000 so know how to use those. 563 00:23:23,000 --> 00:23:25,910 Binary search comprises a huge proportion 564 00:23:25,910 --> 00:23:29,010 of interview questions for some reason are just disguised binary search, 565 00:23:29,010 --> 00:23:30,470 so get really good at that. 566 00:23:30,470 --> 00:23:31,670 Shortest path algorithm. 567 00:23:31,670 --> 00:23:35,420 Sort of, how to navigate a graph, and sort of memorization, 568 00:23:35,420 --> 00:23:39,620 which is one of the techniques possibly behind dynamic programming of caching 569 00:23:39,620 --> 00:23:42,143 values and reusing previous computations. 570 00:23:42,143 --> 00:23:44,810 So these are the things just sort of practice different problems 571 00:23:44,810 --> 00:23:46,520 with these different tools. 572 00:23:46,520 --> 00:23:49,370 And whenever you encounter a problem, your first thought 573 00:23:49,370 --> 00:23:51,530 should be, OK, well what's in my toolbox, 574 00:23:51,530 --> 00:23:58,340 and how can I apply these tools to this question that I just got? 575 00:23:58,340 --> 00:24:02,700 So that's the preparation, the intellectual part of preparation. 576 00:24:02,700 --> 00:24:05,370 And so now let's talk about the actual tactics here. 577 00:24:05,370 --> 00:24:09,080 So one is simulate the environment as much as you can. 578 00:24:09,080 --> 00:24:11,030 I have a tendency, and I've seen many people 579 00:24:11,030 --> 00:24:13,980 have a tendency, to read some question like in the books 580 00:24:13,980 --> 00:24:16,730 that you're looking at, think about it for like a minute, be like, 581 00:24:16,730 --> 00:24:18,290 oh, yeah it's probably something like this. 582 00:24:18,290 --> 00:24:19,280 Like, yeah, I got it. 583 00:24:19,280 --> 00:24:22,340 Flip to the answer key, and then be like, oh yeah, I totally had it. 584 00:24:22,340 --> 00:24:25,400 If you find yourself doing that, that is totally the wrong thing to do. 585 00:24:25,400 --> 00:24:29,360 Many, many people overestimate the degree to which they have it. 586 00:24:29,360 --> 00:24:32,960 So I'd really encourage you to actually sit down, write out the solution 587 00:24:32,960 --> 00:24:34,152 to the problem yourself. 588 00:24:34,152 --> 00:24:35,360 Don't look at the answer key. 589 00:24:35,360 --> 00:24:36,260 Try to time yourself. 590 00:24:36,260 --> 00:24:39,215 Put yourself on a, I don't know, 30 to 45 minute clock, 591 00:24:39,215 --> 00:24:41,090 because that's a real thing in the interview. 592 00:24:41,090 --> 00:24:42,860 Try to get used to that. 593 00:24:42,860 --> 00:24:46,633 Don't try to-- if you're in an interview that doesn't let you look up something 594 00:24:46,633 --> 00:24:48,050 on Google, simulate that yourself. 595 00:24:48,050 --> 00:24:51,258 Know what it's like to work without your autocomplete or without your answers 596 00:24:51,258 --> 00:24:51,890 on Google. 597 00:24:51,890 --> 00:24:56,060 And as you're doing that, try to look for patterns in your own performance. 598 00:24:56,060 --> 00:24:57,690 Again, everybody's really different. 599 00:24:57,690 --> 00:25:01,220 Some people are amazing at recursion, but sort of struggle with graph 600 00:25:01,220 --> 00:25:01,730 algorithms. 601 00:25:01,730 --> 00:25:04,472 Some people just never really get behind dynamic programming, 602 00:25:04,472 --> 00:25:06,680 but are really good at these kind of string problems. 603 00:25:06,680 --> 00:25:10,542 Everyone's different and try to assess your own strengths and weaknesses. 604 00:25:10,542 --> 00:25:13,250 If you're looking online and you're sort of looking at questions, 605 00:25:13,250 --> 00:25:15,517 they're almost always categorized by something. 606 00:25:15,517 --> 00:25:16,850 Divide and conquer, or whatever. 607 00:25:16,850 --> 00:25:18,850 So try to do a few of those different categories 608 00:25:18,850 --> 00:25:21,800 and see where you're good, where you're not, and zone in on the areas 609 00:25:21,800 --> 00:25:23,003 where you're not. 610 00:25:23,003 --> 00:25:25,420 And then lastly, if you can, try to practice with friends. 611 00:25:25,420 --> 00:25:29,120 You can get an interview buddy and practice being the interviewer, 612 00:25:29,120 --> 00:25:30,345 being the interviewee. 613 00:25:30,345 --> 00:25:33,470 Even if you've never done interviewing before, you kind of get the idea of, 614 00:25:33,470 --> 00:25:34,730 oh maybe, I know the answer. 615 00:25:34,730 --> 00:25:35,600 I can give hints. 616 00:25:35,600 --> 00:25:36,922 It's also a lot less lonely. 617 00:25:36,922 --> 00:25:40,130 It's not a fun thing to do by ourselves, so if you can get an interview buddy 618 00:25:40,130 --> 00:25:42,213 and practice together, you can just, sort of, help 619 00:25:42,213 --> 00:25:45,950 simulate a more realistic environment, which ultimately that's 620 00:25:45,950 --> 00:25:47,060 your North Star here. 621 00:25:47,060 --> 00:25:49,640 When you're sitting in an environment with an interviewer, 622 00:25:49,640 --> 00:25:51,680 you want to feel like you've done this before. 623 00:25:51,680 --> 00:25:53,377 You're as comfortable as you can be. 624 00:25:53,377 --> 00:25:54,710 This doesn't feel weird and new. 625 00:25:54,710 --> 00:25:57,230 And the way to do that is to really take the time, 626 00:25:57,230 --> 00:26:00,820 simulate the environment beforehand. 627 00:26:00,820 --> 00:26:02,110 So that's all of your prep. 628 00:26:02,110 --> 00:26:07,785 So now let's talk a bit about strategies during the interview itself. 629 00:26:07,785 --> 00:26:10,160 The thing that I'm going to repeat a bunch of times today 630 00:26:10,160 --> 00:26:13,940 is that as an interviewer, I care about process 631 00:26:13,940 --> 00:26:16,460 a lot more than I care about output. 632 00:26:16,460 --> 00:26:18,500 There have been many, many, many interviews 633 00:26:18,500 --> 00:26:20,630 I've done where the person I'm interviewing 634 00:26:20,630 --> 00:26:23,510 didn't get the correct answer, their code didn't work, 635 00:26:23,510 --> 00:26:26,760 didn't think of some edge case, and they still made it through the next round. 636 00:26:26,760 --> 00:26:30,167 And the reason is because their thought process was really clear, 637 00:26:30,167 --> 00:26:32,750 they were able to articulate the trade offs of their approach, 638 00:26:32,750 --> 00:26:36,380 and I'm confident that with a couple more minutes and maybe 10% less stress, 639 00:26:36,380 --> 00:26:38,250 they could have gotten the answer correct. 640 00:26:38,250 --> 00:26:41,000 So think about that as you're interviewing. 641 00:26:41,000 --> 00:26:44,930 Don't zone in and get really lasered in on did I get the right answer. 642 00:26:44,930 --> 00:26:47,820 Laser in on your process for getting that right answer, 643 00:26:47,820 --> 00:26:50,040 which we're about to talk about. 644 00:26:50,040 --> 00:26:52,940 So the first part of the interview will be some sort of icebreaker. 645 00:26:52,940 --> 00:26:55,580 I always advise people before they start an interview, 646 00:26:55,580 --> 00:26:58,730 take a deep breath before you click the blue button on Zoom. 647 00:26:58,730 --> 00:27:02,270 Just take a deep breath, center yourself, and get ready. 648 00:27:02,270 --> 00:27:03,953 Have an intro prepared. 649 00:27:03,953 --> 00:27:05,870 As an interviewer, they'll introduce themself. 650 00:27:05,870 --> 00:27:06,240 I'm Tommy. 651 00:27:06,240 --> 00:27:07,698 I've been an Figma for nine months. 652 00:27:07,698 --> 00:27:08,720 I work on these teams. 653 00:27:08,720 --> 00:27:10,400 Have a quick intro prepared on your end. 654 00:27:10,400 --> 00:27:13,250 I've seen some candidates sort of like, ramble for like, 655 00:27:13,250 --> 00:27:16,280 ten minutes about their cat's name in second grade. 656 00:27:16,280 --> 00:27:19,640 So just have a quick 30 second intro prepared on your end. 657 00:27:19,640 --> 00:27:21,350 Again, just don't even think about this. 658 00:27:21,350 --> 00:27:22,610 Like erase the variable. 659 00:27:22,610 --> 00:27:26,347 Have this stuff down cold so your energy is going towards the problem. 660 00:27:26,347 --> 00:27:28,430 Your interviewer might ask you about some project. 661 00:27:28,430 --> 00:27:31,760 It might be like an hour long interview where maybe 40 minutes of that 662 00:27:31,760 --> 00:27:34,218 is coding, but 20 minutes they're going to say, oh, tell me 663 00:27:34,218 --> 00:27:37,040 about your last internship, so be ready for that. 664 00:27:37,040 --> 00:27:39,800 Pick a project you can talk about for five to ten minutes. 665 00:27:39,800 --> 00:27:41,000 What the challenges were. 666 00:27:41,000 --> 00:27:44,220 What went well, what didn't. 667 00:27:44,220 --> 00:27:47,270 But again, just have that down cold, and don't ramble. 668 00:27:47,270 --> 00:27:50,600 When people are nervous, myself included, maybe I'm doing it now, 669 00:27:50,600 --> 00:27:54,110 they have a tendency to ramble and not end their sentences and keep talking. 670 00:27:54,110 --> 00:27:57,290 So try to be mindful of that in your interview conversation, 671 00:27:57,290 --> 00:28:00,200 to stop and pause and let your interviewer interject 672 00:28:00,200 --> 00:28:03,630 and ask questions. 673 00:28:03,630 --> 00:28:06,485 Next piece of advice, you're going to receive some technical problem 674 00:28:06,485 --> 00:28:07,610 you haven't seen it before. 675 00:28:07,610 --> 00:28:11,420 It probably has scary terms like integer and sorted list. 676 00:28:11,420 --> 00:28:12,170 Don't panic. 677 00:28:12,170 --> 00:28:14,300 Sort of, practice, get used to this. 678 00:28:14,300 --> 00:28:16,250 If your reaction is panic, try to practice 679 00:28:16,250 --> 00:28:20,330 and get used to solving these sort of new and unfamiliar problems. 680 00:28:20,330 --> 00:28:23,960 If you've seen the problem before, like exactly that problem, 681 00:28:23,960 --> 00:28:25,687 tell your interviewer. 682 00:28:25,687 --> 00:28:28,520 I've interviewed a bunch of folks who think they can win the Academy 683 00:28:28,520 --> 00:28:31,020 Award for pretending they haven't seen an interview problem, 684 00:28:31,020 --> 00:28:32,520 and I haven't handed one out yet. 685 00:28:32,520 --> 00:28:33,780 They never win. 686 00:28:33,780 --> 00:28:36,530 And it's really, really bad and borderline unethical for a company 687 00:28:36,530 --> 00:28:38,510 to be like, cheating in this way on an interview. 688 00:28:38,510 --> 00:28:39,260 So don't do that. 689 00:28:39,260 --> 00:28:41,480 You're just sort of setting yourself up for failure. 690 00:28:41,480 --> 00:28:43,220 Many times, the interview will say, OK, cool. 691 00:28:43,220 --> 00:28:43,850 Thanks for telling me. 692 00:28:43,850 --> 00:28:45,020 We're going to do it anyway. 693 00:28:45,020 --> 00:28:47,300 And you sort of proceed that way, and the interviewer 694 00:28:47,300 --> 00:28:48,550 can kind of keep that in mind. 695 00:28:48,550 --> 00:28:50,717 But if you have seen it, just tell your interviewer. 696 00:28:50,717 --> 00:28:52,220 Don't try to get away with it. 697 00:28:52,220 --> 00:28:55,430 After you get a problem, ask clarifying questions. 698 00:28:55,430 --> 00:28:58,912 A really good thing that I like to see is say, OK, well here's the problem. 699 00:28:58,912 --> 00:28:59,870 So let me just confirm. 700 00:28:59,870 --> 00:29:02,312 With this input, the output should be this. 701 00:29:02,312 --> 00:29:03,770 Your interviewer is like, oh, yeah. 702 00:29:03,770 --> 00:29:04,312 That's right. 703 00:29:04,312 --> 00:29:07,400 And you've concluded to yourself, I now understand the constraints 704 00:29:07,400 --> 00:29:10,310 of this problem, rather than jumping in and assuming it's something, 705 00:29:10,310 --> 00:29:12,650 and then your interviewer doesn't realize you're on the wrong track, 706 00:29:12,650 --> 00:29:14,700 and 20 minutes later, the two of you realize, oh, 707 00:29:14,700 --> 00:29:17,270 we're actually solving the wrong thing, and you just burn those 20 minutes. 708 00:29:17,270 --> 00:29:20,240 So just confirm you have a full understanding of the problem, 709 00:29:20,240 --> 00:29:22,460 and a great tactic is just to say, here's an input, 710 00:29:22,460 --> 00:29:25,682 is this the correct output. 711 00:29:25,682 --> 00:29:27,390 As you're solving a problem, you're going 712 00:29:27,390 --> 00:29:31,050 to do this really weird thing that you don't do when you're coding normally, 713 00:29:31,050 --> 00:29:34,380 and that's you're going to be constantly speaking out loud. 714 00:29:34,380 --> 00:29:36,962 It's really sort of tempting to say, OK. 715 00:29:36,962 --> 00:29:37,920 Thanks for the problem. 716 00:29:37,920 --> 00:29:38,910 See you on 20. 717 00:29:38,910 --> 00:29:40,260 I'll shoot you over solution. 718 00:29:40,260 --> 00:29:41,190 Don't do that. 719 00:29:41,190 --> 00:29:43,950 Be constantly vocalizing your thought process. 720 00:29:43,950 --> 00:29:47,070 So say things like, all right, so first I'm going to create a function, 721 00:29:47,070 --> 00:29:48,870 let's call it find minimum. 722 00:29:48,870 --> 00:29:51,280 We just need to take one argument here. 723 00:29:51,280 --> 00:29:52,120 It's a list. 724 00:29:52,120 --> 00:29:54,000 So the first thing we're going to do is loop through the list. 725 00:29:54,000 --> 00:29:54,720 Things like that. 726 00:29:54,720 --> 00:29:58,230 Articulate what you're thinking, and code as you're speaking. 727 00:29:58,230 --> 00:30:02,750 That's the best way to communicate your thought process to the interviewer. 728 00:30:02,750 --> 00:30:06,350 Also, try to think through multiple possible approaches. 729 00:30:06,350 --> 00:30:08,180 There's probably a chance that you'll think 730 00:30:08,180 --> 00:30:09,890 of approaches that aren't very efficient, 731 00:30:09,890 --> 00:30:11,780 and approaches that are very efficient, so 732 00:30:11,780 --> 00:30:15,950 try to talk that out loud before you write a single character of code. 733 00:30:15,950 --> 00:30:19,670 Explain a possible solution to your interviewer, get on the same page 734 00:30:19,670 --> 00:30:23,270 that you're aligned and you're like, roughly on the right track here. 735 00:30:23,270 --> 00:30:25,220 If it's helpful, draw a diagram. 736 00:30:25,220 --> 00:30:27,918 Some interview tools will have a whiteboard attached 737 00:30:27,918 --> 00:30:29,210 where you can draw some things. 738 00:30:29,210 --> 00:30:31,550 Some won't, so you can just use a pen and paper. 739 00:30:31,550 --> 00:30:33,140 Maybe show it to your interviewer, maybe you don't. 740 00:30:33,140 --> 00:30:34,820 But some people are very visual, and don't 741 00:30:34,820 --> 00:30:37,570 feel like you're not allowed to be visual in one of these settings 742 00:30:37,570 --> 00:30:39,600 because you just have some coderpad or replit. 743 00:30:39,600 --> 00:30:41,600 So drawing a diagram can be a pretty helpful way 744 00:30:41,600 --> 00:30:45,920 for some people to visualize a problem. 745 00:30:45,920 --> 00:30:48,340 So we talked a lot about all these things 746 00:30:48,340 --> 00:30:50,300 that you're going to do and prepare for. 747 00:30:50,300 --> 00:30:51,842 And again, it's not a very long list. 748 00:30:51,842 --> 00:30:54,175 None of these lists that I've showed you, intentionally, 749 00:30:54,175 --> 00:30:55,520 have more than like five things. 750 00:30:55,520 --> 00:30:59,740 So when you have a problem, try to pattern match against what you know. 751 00:30:59,740 --> 00:31:03,730 Against these core concepts we just talked about, and against these tools 752 00:31:03,730 --> 00:31:05,080 in your toolbox. 753 00:31:05,080 --> 00:31:08,620 For instance, maybe you're given some problem that say, OK, maybe you're 754 00:31:08,620 --> 00:31:11,878 like, running across a river, and there's rocks floating on the river. 755 00:31:11,878 --> 00:31:14,170 What's the fastest way to get from one end of the river 756 00:31:14,170 --> 00:31:15,100 to the other way to the river? 757 00:31:15,100 --> 00:31:16,090 Maybe that's a graph. 758 00:31:16,090 --> 00:31:18,040 Maybe you could formulate that as a graph. 759 00:31:18,040 --> 00:31:19,810 Maybe you could formulate it recursively, 760 00:31:19,810 --> 00:31:21,730 sort of divide the river into sub rivers. 761 00:31:21,730 --> 00:31:23,260 Maybe there's a binary search. 762 00:31:23,260 --> 00:31:25,360 Maybe there's some way to decomposing problems. 763 00:31:25,360 --> 00:31:29,320 But just sort go through, one by one, the tools in your toolbox, 764 00:31:29,320 --> 00:31:30,640 and see what applies. 765 00:31:30,640 --> 00:31:34,587 There's a very, very, very high probability that one of them applies. 766 00:31:34,587 --> 00:31:36,670 So just make sure you've got them down, and you're 767 00:31:36,670 --> 00:31:39,835 going through what's going to make the most sense for this problem. 768 00:31:39,835 --> 00:31:42,398 769 00:31:42,398 --> 00:31:44,440 A common tendency and a common mistake I've seen, 770 00:31:44,440 --> 00:31:48,580 again, is for folks to think really specifically about problems, 771 00:31:48,580 --> 00:31:50,570 rather than more general solutions. 772 00:31:50,570 --> 00:31:54,352 So for instance, maybe there's a question that the input is some number. 773 00:31:54,352 --> 00:31:57,310 And maybe it's really obvious what the solution is if you pass at zero. 774 00:31:57,310 --> 00:31:59,170 And so some people are like, all right, well, if it's zero, 775 00:31:59,170 --> 00:32:00,220 then I'm just going to return one. 776 00:32:00,220 --> 00:32:02,082 And they'll say if n is zero, return one. 777 00:32:02,082 --> 00:32:03,790 And if it's one, I'm going to return two. 778 00:32:03,790 --> 00:32:05,260 And then, if n is 1, return two. 779 00:32:05,260 --> 00:32:08,650 That's almost always not the right way of approaching the problem. 780 00:32:08,650 --> 00:32:11,170 Try to think more generally with solutions, 781 00:32:11,170 --> 00:32:14,650 rather than just kind of zeroing in on some specific instances. 782 00:32:14,650 --> 00:32:16,810 Or put another way, start with high level ideas, 783 00:32:16,810 --> 00:32:19,930 rather than starting with low level ideas. 784 00:32:19,930 --> 00:32:23,500 In general, if you're writing a solution and it seems really complex, 785 00:32:23,500 --> 00:32:27,160 you've got all these data structures, you've got like 500 lines of code, 786 00:32:27,160 --> 00:32:30,520 if it seems really complicated, it's probably is. 787 00:32:30,520 --> 00:32:33,850 Very few interview problems have extremely complicated solutions 788 00:32:33,850 --> 00:32:35,470 with all these different things. 789 00:32:35,470 --> 00:32:38,770 Many interview questions are designed intentionally 790 00:32:38,770 --> 00:32:43,000 to be solved in just few lines of code and really using the right concepts. 791 00:32:43,000 --> 00:32:45,892 So if you think it's too complicated, it probably is. 792 00:32:45,892 --> 00:32:47,350 And check in with your interviewer. 793 00:32:47,350 --> 00:32:48,940 If you have this crazy complicated solution, 794 00:32:48,940 --> 00:32:50,940 say does this seem like it's on the right track, 795 00:32:50,940 --> 00:32:53,290 or is there a simpler way that I could approach this? 796 00:32:53,290 --> 00:32:55,873 Your interview will give you some feedback and some guardrails 797 00:32:55,873 --> 00:32:57,520 to guide you in the right direction. 798 00:32:57,520 --> 00:33:01,145 If you're really, really stuck, don't be afraid to ask for help. 799 00:33:01,145 --> 00:33:03,520 Certainly, don't ask your interviewer every three minutes 800 00:33:03,520 --> 00:33:06,395 what the next line of code should be or if you're on the right track, 801 00:33:06,395 --> 00:33:10,180 but at the same time, if you just hit a wall and everyone hits that wall, 802 00:33:10,180 --> 00:33:13,240 you just don't see a path forward, just be honest about that. 803 00:33:13,240 --> 00:33:16,210 Say, OK, well I've got these concepts, but I'm not exactly sure 804 00:33:16,210 --> 00:33:20,050 how we can solve this case, or where I should go from here. 805 00:33:20,050 --> 00:33:23,620 As an interviewer, I promise I want to help you. 806 00:33:23,620 --> 00:33:28,070 It's really not fun for me either for someone to not do well in an interview. 807 00:33:28,070 --> 00:33:30,380 So I don't want that as much as you don't want that. 808 00:33:30,380 --> 00:33:32,890 So ask for help if you're stuck and give your interviewer 809 00:33:32,890 --> 00:33:34,508 an opportunity to help you. 810 00:33:34,508 --> 00:33:37,300 If you're just talking constantly and don't give me the opportunity 811 00:33:37,300 --> 00:33:41,850 to jump in, I can't help you and you're setting yourself up for more failure. 812 00:33:41,850 --> 00:33:44,980 And last, make sure you explain a solution 813 00:33:44,980 --> 00:33:46,900 before touching a key on your keyboard. 814 00:33:46,900 --> 00:33:49,270 I mentioned this before, but align on a high level 815 00:33:49,270 --> 00:33:52,090 idea before you start writing code top to bottom. 816 00:33:52,090 --> 00:33:54,160 Many of yours won't stop you if you start 817 00:33:54,160 --> 00:33:56,050 writing code from top to bottom, because maybe you get it, 818 00:33:56,050 --> 00:33:58,270 and I don't want to get in your way and mess you up. 819 00:33:58,270 --> 00:34:00,800 But almost always that's a bad idea. 820 00:34:00,800 --> 00:34:03,160 You want to make sure that we're on the same page 821 00:34:03,160 --> 00:34:06,980 before you start typing some Python. 822 00:34:06,980 --> 00:34:11,239 And all of this is to say the process matters so much more than the output. 823 00:34:11,239 --> 00:34:14,510 Having people communicate, check in, receive feedback well, 824 00:34:14,510 --> 00:34:18,380 ask for tips, that's what we're looking for here before we're thinking about, 825 00:34:18,380 --> 00:34:23,520 did they get exactly the right answer with the precisely correct runtime. 826 00:34:23,520 --> 00:34:27,600 So another failure mode here is folks who 827 00:34:27,600 --> 00:34:32,159 will try to jump to the most optimal solution to a problem 828 00:34:32,159 --> 00:34:34,949 before they just get something working at all. 829 00:34:34,949 --> 00:34:37,260 Very more often than not, it's much better 830 00:34:37,260 --> 00:34:40,050 to leave an interview with some sort of solution. 831 00:34:40,050 --> 00:34:44,038 Maybe it's not the perfect runtime or the cleanest code 832 00:34:44,038 --> 00:34:46,080 you've written in your life, but it's much better 833 00:34:46,080 --> 00:34:48,760 to leave an interview with something rather than nothing. 834 00:34:48,760 --> 00:34:51,219 So in your process of constantly communicating, 835 00:34:51,219 --> 00:34:54,630 try to get something working in the time slot of the interview, 836 00:34:54,630 --> 00:35:00,210 and after something works, then start simplifying your code, optimizing it. 837 00:35:00,210 --> 00:35:02,970 As your interviewer, again, I'm going to want to help you. 838 00:35:02,970 --> 00:35:08,100 Many times I'll say something like, have we considered using a list for this. 839 00:35:08,100 --> 00:35:10,770 The answer to that question is never no. 840 00:35:10,770 --> 00:35:12,380 Many people will say no. 841 00:35:12,380 --> 00:35:14,130 Like well maybe we need-- maybe this isn't 842 00:35:14,130 --> 00:35:16,130 working because we haven't restarted the server. 843 00:35:16,130 --> 00:35:18,570 No, that can't be it. 844 00:35:18,570 --> 00:35:21,630 If I give you any sort of hints or guardrails, please take them. 845 00:35:21,630 --> 00:35:24,422 As an interviewer, I'm looking for you to respond to feedback well, 846 00:35:24,422 --> 00:35:25,800 and I'm trying to help you. 847 00:35:25,800 --> 00:35:28,510 So don't just sort of get really zoomed in on your approach 848 00:35:28,510 --> 00:35:29,760 and getting your code to work. 849 00:35:29,760 --> 00:35:32,760 It's a conversation and make sure that it's a two way 850 00:35:32,760 --> 00:35:36,450 street during the interview as well. 851 00:35:36,450 --> 00:35:38,700 As you're writing code, a really, really simple thing 852 00:35:38,700 --> 00:35:41,533 that if you haven't done interview before this might not be obvious. 853 00:35:41,533 --> 00:35:44,610 Your goal is to write a function that returns the answer, unless you're 854 00:35:44,610 --> 00:35:45,310 told otherwise. 855 00:35:45,310 --> 00:35:49,500 So you're not trying-- your first line of code shouldn't be int main, int r,c, 856 00:35:49,500 --> 00:35:50,010 whatever. 857 00:35:50,010 --> 00:35:53,370 It should be the definition of a function that takes in some inputs 858 00:35:53,370 --> 00:35:56,100 and returns some outputs. 859 00:35:56,100 --> 00:35:59,560 As you're writing code, decompose that into functions as needed. 860 00:35:59,560 --> 00:36:03,120 Again, get something working, but if you sort of observe that it would be easier 861 00:36:03,120 --> 00:36:06,480 to solve the problem if you had some helper function to do x, y,z, 862 00:36:06,480 --> 00:36:10,400 feel free to tangent, write that helper function, and then come back. 863 00:36:10,400 --> 00:36:12,830 All the sort of practices that you learn about in CS 50 864 00:36:12,830 --> 00:36:17,450 are on clearly designed code and code style, they apply here too. 865 00:36:17,450 --> 00:36:21,020 You don't have to go crazy like commenting your code and putting doc 866 00:36:21,020 --> 00:36:23,960 strings on everything, but do use readable variable names, 867 00:36:23,960 --> 00:36:28,190 reasonable names for functions, as opposed to just a,b,c, x,y,z. 868 00:36:28,190 --> 00:36:30,710 And as you're going, if you can, factor out common logic. 869 00:36:30,710 --> 00:36:33,860 Try to create well designed code, but that's secondary 870 00:36:33,860 --> 00:36:36,650 compared to your first goal of get something working, 871 00:36:36,650 --> 00:36:40,600 then start thinking about code design. 872 00:36:40,600 --> 00:36:44,400 Process, not output. 873 00:36:44,400 --> 00:36:47,550 You'll have two kind of types of coding interviews. 874 00:36:47,550 --> 00:36:50,967 There's those where you can run code and there's where you can't. 875 00:36:50,967 --> 00:36:53,550 Neither is better, there's no sort of like, right answer here, 876 00:36:53,550 --> 00:36:54,700 but you're going to find them both. 877 00:36:54,700 --> 00:36:57,540 And so, I just want to give you some tools for each situation. 878 00:36:57,540 --> 00:37:01,860 If you're not allowed to run your code, your job is to be the computer, right. 879 00:37:01,860 --> 00:37:05,820 When you write down your code, you're going to say, all right, does it work. 880 00:37:05,820 --> 00:37:08,400 Literally run through your code line by line. 881 00:37:08,400 --> 00:37:10,950 Sort of, maybe you write down the state of variables, 882 00:37:10,950 --> 00:37:13,440 walk through what branches of a condition are going to hit, 883 00:37:13,440 --> 00:37:16,357 how many times you'll go through a loop, but step through line by line 884 00:37:16,357 --> 00:37:19,270 as if you were a debugger or a CPU running your code 885 00:37:19,270 --> 00:37:21,390 and say out loud what's going to happen. 886 00:37:21,390 --> 00:37:24,318 In the process of doing so, you will either build confidence 887 00:37:24,318 --> 00:37:27,360 that your solution is correct because your code is doing the right thing, 888 00:37:27,360 --> 00:37:28,193 or you'll find bugs. 889 00:37:28,193 --> 00:37:31,318 It's a great way to find bugs if you're really literally going through what 890 00:37:31,318 --> 00:37:32,640 the code says it's going to do. 891 00:37:32,640 --> 00:37:36,630 And this is how a technique you can use to proactively find bugs 892 00:37:36,630 --> 00:37:38,010 before your interviewer. 893 00:37:38,010 --> 00:37:41,010 Always a great sign if someone finds their own bug before I have to say, 894 00:37:41,010 --> 00:37:46,130 I've seen this problem 1,000 times, you didn't think about the zero input case. 895 00:37:46,130 --> 00:37:51,110 If you are allowed to run code, you might not have to do that sort of line 896 00:37:51,110 --> 00:37:56,430 by line verbal run through because you can actually physically run your code. 897 00:37:56,430 --> 00:37:58,640 Some people like to do that run through anyway just 898 00:37:58,640 --> 00:38:00,320 to build more confidence in your code. 899 00:38:00,320 --> 00:38:01,620 That's totally fine. 900 00:38:01,620 --> 00:38:05,880 But if you can run your code, I would highly advise you to run that code. 901 00:38:05,880 --> 00:38:09,920 So some specific tactics here, write some test cases, 902 00:38:09,920 --> 00:38:12,680 you agreed on some of these cases at the start of your interview 903 00:38:12,680 --> 00:38:14,570 with your interviewer, actually encode those. 904 00:38:14,570 --> 00:38:17,737 Put them at the bottom of the file so when run it, you can see if they pass. 905 00:38:17,737 --> 00:38:20,180 Don't just randomly guess and check even if that's 906 00:38:20,180 --> 00:38:22,880 how you write real code, which is not necessarily invalid, 907 00:38:22,880 --> 00:38:24,560 don't do it in an interview. 908 00:38:24,560 --> 00:38:27,170 So don't just be like, oh I got a plus one, I'll try plus two, 909 00:38:27,170 --> 00:38:29,510 and I'll try minus one until it works. 910 00:38:29,510 --> 00:38:32,270 Reason through the changes you're making and try 911 00:38:32,270 --> 00:38:34,610 to convince yourself and your interviewer 912 00:38:34,610 --> 00:38:37,940 that you're making a change to solve the problem correctly. 913 00:38:37,940 --> 00:38:40,430 And try to print and debug a lot of state. 914 00:38:40,430 --> 00:38:43,520 If something's not running, don't just sort of like stare at it and think. 915 00:38:43,520 --> 00:38:45,258 Start printing out different variables. 916 00:38:45,258 --> 00:38:46,550 What's the state of this input? 917 00:38:46,550 --> 00:38:47,342 What's the counter? 918 00:38:47,342 --> 00:38:49,550 When the counter is three, how long is this list? 919 00:38:49,550 --> 00:38:52,550 And then that's going to help you identify and spot bugs. 920 00:38:52,550 --> 00:38:56,210 So it's not all that different than probably actual writing code 921 00:38:56,210 --> 00:38:58,550 for a problem set or some project, but don't 922 00:38:58,550 --> 00:39:00,560 be afraid to do that in an interview either. 923 00:39:00,560 --> 00:39:03,100 I would not recommend dropping down to some debugger, 924 00:39:03,100 --> 00:39:05,553 or trying to val grind or interview code or something. 925 00:39:05,553 --> 00:39:07,220 You just don't have time for that stuff. 926 00:39:07,220 --> 00:39:09,770 So printing out code and printing out all the relevant state 927 00:39:09,770 --> 00:39:12,420 can be a really useful tool. 928 00:39:12,420 --> 00:39:14,660 Again, it's about the process not the output. 929 00:39:14,660 --> 00:39:18,110 We want to see how you're finding bugs, not necessarily 930 00:39:18,110 --> 00:39:21,460 that you wrote perfect bug free code. 931 00:39:21,460 --> 00:39:23,543 So that's everything on algorithms and coding. 932 00:39:23,543 --> 00:39:26,710 What I want to do briefly is talk about each of these other interview types, 933 00:39:26,710 --> 00:39:29,002 and then we're going to dive into a mock interview that 934 00:39:29,002 --> 00:39:31,820 goes through an algorithm and coding question. 935 00:39:31,820 --> 00:39:34,090 So the second type of interview you might encounter 936 00:39:34,090 --> 00:39:37,460 is a systems design interview. 937 00:39:37,460 --> 00:39:39,553 So a systems design interview is basically 938 00:39:39,553 --> 00:39:42,220 a question where you're not going to be writing a bunch of code, 939 00:39:42,220 --> 00:39:45,380 but instead you're going to be architecting some larger system. 940 00:39:45,380 --> 00:39:48,550 And so just like we talked about those code building blocks, your loops, 941 00:39:48,550 --> 00:39:50,650 your strings, your functions, your linked lists, 942 00:39:50,650 --> 00:39:53,140 you also have some systems design building blocks. 943 00:39:53,140 --> 00:39:56,200 Things about how do we want to store data, what type of database 944 00:39:56,200 --> 00:40:00,040 do we want to use, what type of tables should we use to record the users 945 00:40:00,040 --> 00:40:02,780 or who's following whom, or what the likes are. 946 00:40:02,780 --> 00:40:05,320 So think about how to represent data and databases. 947 00:40:05,320 --> 00:40:08,500 Caching layers, if we're going to be reading from some database a bunch. 948 00:40:08,500 --> 00:40:09,910 Is there a way to cache that? 949 00:40:09,910 --> 00:40:11,350 Things like message queues. 950 00:40:11,350 --> 00:40:13,330 Maybe we want to have some service that talks 951 00:40:13,330 --> 00:40:15,762 to some other service along some queue. 952 00:40:15,762 --> 00:40:18,970 Maybe some parts of the questions should run online, like when I load a page, 953 00:40:18,970 --> 00:40:20,073 this stuff should happen. 954 00:40:20,073 --> 00:40:21,490 Other stuff should happen offline. 955 00:40:21,490 --> 00:40:23,680 So we'll like, run some process every minute 956 00:40:23,680 --> 00:40:26,920 that writes some data to some database that some other thing just reads. 957 00:40:26,920 --> 00:40:27,880 Similar thing here. 958 00:40:27,880 --> 00:40:30,790 Just know these building blocks in advance. 959 00:40:30,790 --> 00:40:34,010 And then during the question, all you're doing is piecing them together. 960 00:40:34,010 --> 00:40:36,802 You know what a database is, you know how to represent tables, 961 00:40:36,802 --> 00:40:39,010 so let's tie all these tables together into something 962 00:40:39,010 --> 00:40:40,630 that represents your application. 963 00:40:40,630 --> 00:40:43,600 Create some visuals draw arrows between services and things. 964 00:40:43,600 --> 00:40:46,060 And also, think through the requirements of your system. 965 00:40:46,060 --> 00:40:48,310 Ask your interviewer, is this going to have to support 966 00:40:48,310 --> 00:40:51,050 10 users, 1,000 users, a million users? 967 00:40:51,050 --> 00:40:53,050 The system you architect is really going to vary 968 00:40:53,050 --> 00:40:54,592 based on the answer to that question. 969 00:40:54,592 --> 00:40:56,383 So make sure you're asking that and getting 970 00:40:56,383 --> 00:40:58,300 on the same page with your interviewer. 971 00:40:58,300 --> 00:41:02,030 A practical interview I've seen kind of take two shapes. 972 00:41:02,030 --> 00:41:05,830 One shape is that you are given a code base, like maybe it's 973 00:41:05,830 --> 00:41:08,230 a huge code base, some GitHub project, and your job is 974 00:41:08,230 --> 00:41:09,710 to make some change to it. 975 00:41:09,710 --> 00:41:13,240 So maybe it's some app, but you want to change the color of some button 976 00:41:13,240 --> 00:41:15,580 to blue, or make the behavior do some other thing. 977 00:41:15,580 --> 00:41:17,500 If that's the case, these can be really scary, 978 00:41:17,500 --> 00:41:19,300 because you're like I haven't seen this code base before. 979 00:41:19,300 --> 00:41:20,800 This is like 500 lines of code. 980 00:41:20,800 --> 00:41:22,600 What am I supposed to do here? 981 00:41:22,600 --> 00:41:23,890 Searching code is your friend. 982 00:41:23,890 --> 00:41:25,480 Try to search for concepts. 983 00:41:25,480 --> 00:41:27,760 If you're trying to change the home feed, 984 00:41:27,760 --> 00:41:30,820 search around the code base for feed or home feed. 985 00:41:30,820 --> 00:41:34,310 And then as you're running code, stack traces are your friend. 986 00:41:34,310 --> 00:41:37,060 One of my favorite things to do when I'm looking at some code base 987 00:41:37,060 --> 00:41:38,680 and I'm like, all right, I'm in some function, 988 00:41:38,680 --> 00:41:41,290 but like, what's calling this function, is I just go and divide 989 00:41:41,290 --> 00:41:43,750 by 0 inside of that function, because what that's going to do 990 00:41:43,750 --> 00:41:45,160 is it's going to crash your program and you're 991 00:41:45,160 --> 00:41:47,260 going to get a nice stack trace of all the things 992 00:41:47,260 --> 00:41:50,135 that are calling the functions, and how did you end up in this place. 993 00:41:50,135 --> 00:41:53,380 So that's a really easy way to start getting a grasp of a new code 994 00:41:53,380 --> 00:41:55,607 base quickly, which is the goal of this question, 995 00:41:55,607 --> 00:41:58,690 because you're sort of having to learn this huge thing and just 45 minutes 996 00:41:58,690 --> 00:42:01,140 or so. 997 00:42:01,140 --> 00:42:03,337 If you're not given a code base, this is what 998 00:42:03,337 --> 00:42:04,920 a take home interview might look like. 999 00:42:04,920 --> 00:42:08,490 It might be build an app or write a script to scrape this website 1000 00:42:08,490 --> 00:42:10,230 or represent something. 1001 00:42:10,230 --> 00:42:13,740 If that's the case, you really want to focus on code quality 1002 00:42:13,740 --> 00:42:14,850 with your solution. 1003 00:42:14,850 --> 00:42:17,760 Here we're really, really less concerned about did you do it 1004 00:42:17,760 --> 00:42:21,160 the right way, and more about what is the design of your code look like. 1005 00:42:21,160 --> 00:42:23,730 The question to ask yourself consistently throughout this 1006 00:42:23,730 --> 00:42:25,950 is would I actually push this to production 1007 00:42:25,950 --> 00:42:27,698 if I were an intern at this company. 1008 00:42:27,698 --> 00:42:29,740 If the answer is no, take some time to fix it up, 1009 00:42:29,740 --> 00:42:32,280 because as an interviewer, as I'm reading this I'm like, all right, 1010 00:42:32,280 --> 00:42:35,100 well this is literally what would be put to production if this person were 1011 00:42:35,100 --> 00:42:36,090 an intern on my team. 1012 00:42:36,090 --> 00:42:36,990 Am I happy with this? 1013 00:42:36,990 --> 00:42:38,250 Yes or no. 1014 00:42:38,250 --> 00:42:41,578 So that's what a practical interview might look like. 1015 00:42:41,578 --> 00:42:44,370 A deep dive is actually something we're starting to see a lot more. 1016 00:42:44,370 --> 00:42:47,190 We do one at Figma for some roles. 1017 00:42:47,190 --> 00:42:50,670 Your job here is just to present some interesting past project. 1018 00:42:50,670 --> 00:42:52,350 Maybe it's a class final project. 1019 00:42:52,350 --> 00:42:54,180 Maybe it's a past internship. 1020 00:42:54,180 --> 00:42:56,310 And as you're doing so, what we're really 1021 00:42:56,310 --> 00:42:59,460 looking for is for you to know the details in and out. 1022 00:42:59,460 --> 00:43:01,920 If you built some system, but then you can't tell me 1023 00:43:01,920 --> 00:43:04,350 how some component of that system works, I don't really 1024 00:43:04,350 --> 00:43:06,210 have confidence that you knew what you were doing, 1025 00:43:06,210 --> 00:43:07,793 or that you actually built the system. 1026 00:43:07,793 --> 00:43:12,120 So try to know the details and the lower level stuff in and out. 1027 00:43:12,120 --> 00:43:18,015 And I don't really care as much about exactly the order 1028 00:43:18,015 --> 00:43:20,010 in which you wrote something. 1029 00:43:20,010 --> 00:43:23,430 I'm much more interested in your trade offs and thought process. 1030 00:43:23,430 --> 00:43:26,700 This is some design that you built. What else did you consider? 1031 00:43:26,700 --> 00:43:29,310 What other designs did you end up not going with? 1032 00:43:29,310 --> 00:43:31,830 What was your thought process in making trade offs? 1033 00:43:31,830 --> 00:43:34,470 Maybe it's around speed or usability or whatever. 1034 00:43:34,470 --> 00:43:37,500 So discuss all the things you thought about on the way 1035 00:43:37,500 --> 00:43:41,350 to arriving to this final solution, not just the final solution itself. 1036 00:43:41,350 --> 00:43:43,140 And finally, highlight the challenges. 1037 00:43:43,140 --> 00:43:45,180 What parts of this were really non-obvious, not 1038 00:43:45,180 --> 00:43:47,470 intuitive, the hardest things for you to build. 1039 00:43:47,470 --> 00:43:48,660 That's what I'm interested as an interviewer. 1040 00:43:48,660 --> 00:43:49,860 What was the hardest thing that you did? 1041 00:43:49,860 --> 00:43:52,110 What's the most what's the thing you're most proud of? 1042 00:43:52,110 --> 00:43:55,310 And you should highlight that yourself. 1043 00:43:55,310 --> 00:43:58,220 And last is the values interview. so this 1044 00:43:58,220 --> 00:44:02,120 is a totally non-technical interview, with someone like me, like a manager, 1045 00:44:02,120 --> 00:44:05,630 and not necessarily with someone on the engineering team. 1046 00:44:05,630 --> 00:44:07,970 And to think about values interviews, you're 1047 00:44:07,970 --> 00:44:12,260 really going to be talking about your past experience, the collaboration, 1048 00:44:12,260 --> 00:44:15,200 prioritizing projects, working with others, all the stuff 1049 00:44:15,200 --> 00:44:17,180 around writing code. 1050 00:44:17,180 --> 00:44:20,730 And I generally think about this interview as having two parts. 1051 00:44:20,730 --> 00:44:23,990 The first part is you looking back on your past experience, 1052 00:44:23,990 --> 00:44:25,280 your past internships. 1053 00:44:25,280 --> 00:44:26,300 What did you learn? 1054 00:44:26,300 --> 00:44:27,410 What are you proud of? 1055 00:44:27,410 --> 00:44:29,512 What was really hard for you? 1056 00:44:29,512 --> 00:44:30,720 How did you work with others? 1057 00:44:30,720 --> 00:44:34,280 So look back and just start reflecting on those past experiences 1058 00:44:34,280 --> 00:44:36,710 and be able to talk about them. 1059 00:44:36,710 --> 00:44:39,200 And the other half of this interview is looking forward. 1060 00:44:39,200 --> 00:44:41,480 You know, why are you interested in this internship? 1061 00:44:41,480 --> 00:44:43,490 What are you looking for in your next role? 1062 00:44:43,490 --> 00:44:45,380 Where do you want to be in 6 to 12 months? 1063 00:44:45,380 --> 00:44:47,550 What skills or languages do you want to learn? 1064 00:44:47,550 --> 00:44:50,175 But also, where do you want to be in three to five years, which 1065 00:44:50,175 --> 00:44:52,280 is this crazy like, long timeline to think about, 1066 00:44:52,280 --> 00:44:55,050 but I'm really interested in your long term career goals. 1067 00:44:55,050 --> 00:44:57,560 Maybe you want to be a technical lead working on back end. 1068 00:44:57,560 --> 00:45:00,440 Maybe you want to be a manager of some team working on front end. 1069 00:45:00,440 --> 00:45:03,650 I'm genuinely interested to know where your goals and aspirations are. 1070 00:45:03,650 --> 00:45:05,870 And if your answer to this is, I don't know, 1071 00:45:05,870 --> 00:45:07,490 that's not a great signal for me as an interviewer, 1072 00:45:07,490 --> 00:45:09,980 because I'm a little bit worried that you don't have that growth mindset 1073 00:45:09,980 --> 00:45:11,850 and sort of that appetite for learning. 1074 00:45:11,850 --> 00:45:15,058 And so the best way to be ready for this is just think about this in advance. 1075 00:45:15,058 --> 00:45:17,210 Do some reflection and introspection on your own, 1076 00:45:17,210 --> 00:45:19,700 both your past experiences and where you want to go next, 1077 00:45:19,700 --> 00:45:22,730 and just have some talking points around questions like this. 1078 00:45:22,730 --> 00:45:25,070 Many of these questions will also take the form 1079 00:45:25,070 --> 00:45:27,600 of tell me about a time you blank. 1080 00:45:27,600 --> 00:45:30,150 And so the more you're reflecting on your past experiences, 1081 00:45:30,150 --> 00:45:35,670 the more you'll be able to pull stories out and talk about things effectively. 1082 00:45:35,670 --> 00:45:39,588 So that's an overview of all the things to think about 1083 00:45:39,588 --> 00:45:40,880 before and during an interview. 1084 00:45:40,880 --> 00:45:42,930 So now, we're going to do one. 1085 00:45:42,930 --> 00:45:46,250 So I'm excited to welcome up our first mock interviewer. 1086 00:45:46,250 --> 00:45:49,244 if you want to come up here and we'll simulate an interview. 1087 00:45:49,244 --> 00:45:52,330 [APPLAUSE] 1088 00:45:52,330 --> 00:45:52,830 All right. 1089 00:45:52,830 --> 00:45:54,090 Yeah. 1090 00:45:54,090 --> 00:45:56,470 Let's get some hype. 1091 00:45:56,470 --> 00:45:56,970 All right. 1092 00:45:56,970 --> 00:45:58,350 So do you want to-- let's see. 1093 00:45:58,350 --> 00:46:01,260 Maybe we can just use the mic. 1094 00:46:01,260 --> 00:46:03,360 So here's our problem. 1095 00:46:03,360 --> 00:46:06,630 It's up here in the docstring, but we're going 1096 00:46:06,630 --> 00:46:09,570 to be working with an array that has been rotated. 1097 00:46:09,570 --> 00:46:13,170 So let's define as rotated array as one that's assorted array, 1098 00:46:13,170 --> 00:46:16,390 but all the elements have been rotated over some number of times. 1099 00:46:16,390 --> 00:46:19,440 So you can see here, if you take the array 1, 2, 3, 4, 5, rotate it 1100 00:46:19,440 --> 00:46:22,440 three times, you get 3, 4, 5, 1, 2. 1101 00:46:22,440 --> 00:46:26,610 So your challenge is given some rotated array, 1102 00:46:26,610 --> 00:46:28,860 find the number of times it has been rotated. 1103 00:46:28,860 --> 00:46:30,907 1104 00:46:30,907 --> 00:46:31,990 INNOCENT MUNAI: All right. 1105 00:46:31,990 --> 00:46:34,152 Will folks hear me if the microphone is here. 1106 00:46:34,152 --> 00:46:35,110 TOMMY MACWILLIAM: Yeah. 1107 00:46:35,110 --> 00:46:37,150 Maybe I can-- maybe I'll like awkwardly hold it. 1108 00:46:37,150 --> 00:46:39,580 This doesn't happen in real interviews I promise. 1109 00:46:39,580 --> 00:46:42,580 INNOCENT MUNAI: All right, so my name is Innocent Munai. 1110 00:46:42,580 --> 00:46:46,060 I'm a sophomore at the college studying computer science. 1111 00:46:46,060 --> 00:46:49,930 I'm one of the members of the teaching staff this year for CS 50, 1112 00:46:49,930 --> 00:46:53,710 and I'm excited to take part in this mock interview. 1113 00:46:53,710 --> 00:46:57,860 So yeah, and a little nervous, so let's see how this goes. 1114 00:46:57,860 --> 00:47:00,010 All right, so hi, Tommy. 1115 00:47:00,010 --> 00:47:00,610 How are you 1116 00:47:00,610 --> 00:47:01,300 TOMMY MACWILLIAM: Doing great. 1117 00:47:01,300 --> 00:47:02,770 Thanks for joining the interview today. 1118 00:47:02,770 --> 00:47:03,220 INNOCENT MUNAI: Thank you. 1119 00:47:03,220 --> 00:47:04,090 How is your day been? 1120 00:47:04,090 --> 00:47:05,340 TOMMY MACWILLIAM: Not too bad. 1121 00:47:05,340 --> 00:47:08,140 It's a little rainy here in Boston, but I can't complain. 1122 00:47:08,140 --> 00:47:08,440 INNOCENT MUNAI: Oh, yeah. 1123 00:47:08,440 --> 00:47:08,710 Sure. 1124 00:47:08,710 --> 00:47:10,160 I mean, my day was good as well. 1125 00:47:10,160 --> 00:47:13,790 I just came out from leading a lab session for an introduction 1126 00:47:13,790 --> 00:47:15,790 to computer science class that I'm teaching for. 1127 00:47:15,790 --> 00:47:16,090 TOMMY MACWILLIAM: Nice. 1128 00:47:16,090 --> 00:47:16,900 First time teaching it? 1129 00:47:16,900 --> 00:47:17,530 INNOCENT MUNAI: Yeah. 1130 00:47:17,530 --> 00:47:18,160 TOMMY MACWILLIAM: Very exciting. 1131 00:47:18,160 --> 00:47:18,490 INNOCENT MUNAI: And it's been great. 1132 00:47:18,490 --> 00:47:19,210 So I'm glad. 1133 00:47:19,210 --> 00:47:19,630 TOMMY MACWILLIAM: All right. 1134 00:47:19,630 --> 00:47:20,200 All right. 1135 00:47:20,200 --> 00:47:21,533 INNOCENT MUNAI: All right, sure. 1136 00:47:21,533 --> 00:47:23,200 So I guess we can get started. 1137 00:47:23,200 --> 00:47:23,530 TOMMY MACWILLIAM: Yeah. 1138 00:47:23,530 --> 00:47:24,430 Let's jump right into it. 1139 00:47:24,430 --> 00:47:25,763 INNOCENT MUNAI: All right, sure. 1140 00:47:25,763 --> 00:47:28,900 So I will first read through the problem. 1141 00:47:28,900 --> 00:47:34,900 And I usually use pen and paper to sort of digest the question. 1142 00:47:34,900 --> 00:47:36,400 TOMMY MACWILLIAM: Yeah, that's fine. 1143 00:47:36,400 --> 00:47:36,730 INNOCENT MUNAI: If that's OK? 1144 00:47:36,730 --> 00:47:39,542 Yeah, so if you see me looking like, at the bottom of the screen, 1145 00:47:39,542 --> 00:47:41,500 just know that I'm trying to look at the paper. 1146 00:47:41,500 --> 00:47:41,740 TOMMY MACWILLIAM: All right. 1147 00:47:41,740 --> 00:47:42,580 That sounds great. 1148 00:47:42,580 --> 00:47:43,455 INNOCENT MUNAI: Sure. 1149 00:47:43,455 --> 00:47:50,140 So the prompt says let's define a rotation array as a sorted array 1150 00:47:50,140 --> 00:47:55,190 where the numbers have all been rotated to the right some number of places, 1151 00:47:55,190 --> 00:47:58,870 with numbers wrapping around when they reach the end of the list. 1152 00:47:58,870 --> 00:48:05,530 And we're given a list right here with elements 1, 2, 3, 4, 5. 1153 00:48:05,530 --> 00:48:12,430 If it's rotated three times, then it becomes 3, 4, 5, 1, 2. 1154 00:48:12,430 --> 00:48:13,210 All right. 1155 00:48:13,210 --> 00:48:15,790 So given such an array, we need to find the number 1156 00:48:15,790 --> 00:48:17,680 of times it was rotated, right? 1157 00:48:17,680 --> 00:48:18,220 TOMMY MACWILLIAM: That's right. 1158 00:48:18,220 --> 00:48:19,303 INNOCENT MUNAI: All right. 1159 00:48:19,303 --> 00:48:27,120 So in this case, if this is the rotated array-- 1160 00:48:27,120 --> 00:48:30,340 I'll just copy it and paste it right here. 1161 00:48:30,340 --> 00:48:35,490 If this is the rotated array, then we expect our function 1162 00:48:35,490 --> 00:48:41,130 to roturn three, right, because this means 1163 00:48:41,130 --> 00:48:42,730 the array was rotated three times. 1164 00:48:42,730 --> 00:48:43,590 TOMMY MACWILLIAM: That's right. 1165 00:48:43,590 --> 00:48:44,673 INNOCENT MUNAI: All right. 1166 00:48:44,673 --> 00:48:48,960 So let me think of like a different rotated array, 1167 00:48:48,960 --> 00:48:52,740 and try to see whether I actually got the point of the problem. 1168 00:48:52,740 --> 00:49:05,880 All right, so I'll think of one that begins with 2, 3, 4, 5 and 1 right 1169 00:49:05,880 --> 00:49:08,520 here. 1170 00:49:08,520 --> 00:49:15,330 Will this be rotated four times? 1171 00:49:15,330 --> 00:49:16,020 Is that true. 1172 00:49:16,020 --> 00:49:16,710 TOMMY MACWILLIAM: Yeah, that's right. 1173 00:49:16,710 --> 00:49:17,760 One more than the previous. 1174 00:49:17,760 --> 00:49:18,450 INNOCENT MUNAI: Oh, right. 1175 00:49:18,450 --> 00:49:18,990 Sure. 1176 00:49:18,990 --> 00:49:24,940 So then in this case, just before I proceed, 1177 00:49:24,940 --> 00:49:29,130 I would try to come up with a solution that works on my example, 1178 00:49:29,130 --> 00:49:32,280 and then sort of like generalize for all kinds of inputs. 1179 00:49:32,280 --> 00:49:37,830 All right, so looking at this problem right here, it seems that-- 1180 00:49:37,830 --> 00:49:42,510 looking at the pattern, it seems that what we are actually looking for 1181 00:49:42,510 --> 00:49:52,530 is the index of the number that is like less than the previous one. 1182 00:49:52,530 --> 00:49:58,930 So sort of like, I could narrow this down to a search problem 1183 00:49:58,930 --> 00:50:08,620 where we are looking for the index of the number that 1184 00:50:08,620 --> 00:50:12,522 is less than the previous. 1185 00:50:12,522 --> 00:50:13,480 TOMMY MACWILLIAM: Yeah. 1186 00:50:13,480 --> 00:50:15,430 Put another way there, or the minimum element. 1187 00:50:15,430 --> 00:50:17,320 You're looking for the index of that. 1188 00:50:17,320 --> 00:50:18,310 INNOCENT MUNAI: The minimum element. 1189 00:50:18,310 --> 00:50:18,810 All right. 1190 00:50:18,810 --> 00:50:21,370 Just because all the elements on the right 1191 00:50:21,370 --> 00:50:24,970 will have to be like, greater than this one, because they are sort of sorted. 1192 00:50:24,970 --> 00:50:25,660 TOMMY MACWILLIAM: Yeah, exactly. 1193 00:50:25,660 --> 00:50:26,320 INNOCENT MUNAI: All right. 1194 00:50:26,320 --> 00:50:26,820 All right. 1195 00:50:26,820 --> 00:50:30,150 So we are sort of looking like the minimum. 1196 00:50:30,150 --> 00:50:30,650 Right. 1197 00:50:30,650 --> 00:50:33,930 1198 00:50:33,930 --> 00:50:40,830 So then in this case, I will have to define a function that 1199 00:50:40,830 --> 00:50:44,430 works along the lines of this solution. 1200 00:50:44,430 --> 00:50:53,340 I will call my function find rotation key, 1201 00:50:53,340 --> 00:50:59,520 and then this function is going to take in an array, 1202 00:50:59,520 --> 00:51:03,000 let's call it nums, because it's like an array of nums. 1203 00:51:03,000 --> 00:51:09,000 And then, this function is going to return 1204 00:51:09,000 --> 00:51:10,558 the index that is required, right? 1205 00:51:10,558 --> 00:51:11,475 TOMMY MACWILLIAM: Yep. 1206 00:51:11,475 --> 00:51:12,558 INNOCENT MUNAI: All right. 1207 00:51:12,558 --> 00:51:20,940 So working through what happens here, what I need to do is go through-- 1208 00:51:20,940 --> 00:51:29,100 I'll need to go through each element of the array, 1209 00:51:29,100 --> 00:51:37,110 and then I will check for an-- 1210 00:51:37,110 --> 00:51:44,370 I will check for an element that is less than the previous. 1211 00:51:44,370 --> 00:51:46,470 I mean, I'm looking for the minimum, but like, 1212 00:51:46,470 --> 00:51:49,080 I could check for both, whether it's less 1213 00:51:49,080 --> 00:51:50,670 than the previous one and the next. 1214 00:51:50,670 --> 00:51:53,160 But for this case, it's sufficient to just check 1215 00:51:53,160 --> 00:51:55,020 whether it's less than the next, right? 1216 00:51:55,020 --> 00:51:55,440 TOMMY MACWILLIAM: That's right. 1217 00:51:55,440 --> 00:51:55,950 That's right. 1218 00:51:55,950 --> 00:51:56,825 INNOCENT MUNAI: Sure. 1219 00:51:56,825 --> 00:52:04,980 And then what I need to return is the index of that element. 1220 00:52:04,980 --> 00:52:05,822 How does this-- 1221 00:52:05,822 --> 00:52:06,780 TOMMY MACWILLIAM: Yeah. 1222 00:52:06,780 --> 00:52:07,260 That makes sense. 1223 00:52:07,260 --> 00:52:08,190 That makes sense to me. 1224 00:52:08,190 --> 00:52:08,640 INNOCENT MUNAI: All right. 1225 00:52:08,640 --> 00:52:09,570 Thank you so much. 1226 00:52:09,570 --> 00:52:14,552 All right, so then I think I can just go ahead and change this into code. 1227 00:52:14,552 --> 00:52:15,510 TOMMY MACWILLIAM: Yeah. 1228 00:52:15,510 --> 00:52:16,260 Let's do that. 1229 00:52:16,260 --> 00:52:17,593 INNOCENT MUNAI: All right, sure. 1230 00:52:17,593 --> 00:52:21,640 So I need to go through each element of the array. 1231 00:52:21,640 --> 00:52:28,860 So I'll use for loop for i in range. 1232 00:52:28,860 --> 00:52:36,060 I want i to be in the range of my array, so I'll just use i in range nums. 1233 00:52:36,060 --> 00:52:41,400 And then right here, I need to check for an element that 1234 00:52:41,400 --> 00:52:42,630 is less than the previous. 1235 00:52:42,630 --> 00:52:49,020 So it means-- right now I'm at index i, so what I need to do is-- 1236 00:52:49,020 --> 00:53:01,480 if an element at index i is less than an element at the previous element, 1237 00:53:01,480 --> 00:53:06,300 then I will return that index, right. 1238 00:53:06,300 --> 00:53:07,860 That's what I'm looking for. 1239 00:53:07,860 --> 00:53:08,410 TOMMY MACWILLIAM: Makes sense. 1240 00:53:08,410 --> 00:53:09,993 INNOCENT MUNAI: So sort of like, this. 1241 00:53:09,993 --> 00:53:14,340 And then in this case, this has to be semicolon. 1242 00:53:14,340 --> 00:53:20,720 All right, this comment should go up because it 1243 00:53:20,720 --> 00:53:24,530 describes what is being done here. 1244 00:53:24,530 --> 00:53:25,070 All right. 1245 00:53:25,070 --> 00:53:28,820 So let me try going through explaining what 1246 00:53:28,820 --> 00:53:31,373 happens in each line of this program for my input. 1247 00:53:31,373 --> 00:53:32,540 TOMMY MACWILLIAM: All right. 1248 00:53:32,540 --> 00:53:35,360 INNOCENT MUNAI: So for i in range nums, and that 1249 00:53:35,360 --> 00:53:38,250 means from the very first element to the last element. 1250 00:53:38,250 --> 00:53:41,270 so for my first element, this will be two. 1251 00:53:41,270 --> 00:53:46,130 And for that case, it will check whether it's less than the previous element, 1252 00:53:46,130 --> 00:53:50,310 so it will do this check where i is 0 at this point. 1253 00:53:50,310 --> 00:53:53,090 So my numbers 0 is 2, right? 1254 00:53:53,090 --> 00:53:56,090 And then, I will check whether it's less than the previous one. 1255 00:53:56,090 --> 00:54:00,170 Nums i plus 1, and i plus 1, in this case, is 1. 1256 00:54:00,170 --> 00:54:05,295 And nums one will give me three, which is the next element and not 1257 00:54:05,295 --> 00:54:06,170 the previous element. 1258 00:54:06,170 --> 00:54:06,620 TOMMY MACWILLIAM: Exactly. 1259 00:54:06,620 --> 00:54:08,370 INNOCENT MUNAI: So I need to change this-- 1260 00:54:08,370 --> 00:54:09,880 TOMMY MACWILLIAM: Yep. 1261 00:54:09,880 --> 00:54:11,680 INNOCENT MUNAI: --to i minus 1. 1262 00:54:11,680 --> 00:54:18,100 And then, right here, what happens is that since it's 0 and it's minus 1, 1263 00:54:18,100 --> 00:54:21,220 it will check with the last element, and it will return 1264 00:54:21,220 --> 00:54:23,150 whether it's truly less than that. 1265 00:54:23,150 --> 00:54:27,790 And if it's not, then it will run the entire loop over and over again, 1266 00:54:27,790 --> 00:54:32,780 and come up with the point where the element is less than the previous one. 1267 00:54:32,780 --> 00:54:38,230 So for that case, if my algorithm works for this particular input, 1268 00:54:38,230 --> 00:54:40,450 I'm going to try to come up with several other inputs 1269 00:54:40,450 --> 00:54:43,600 and try to see whether it works for those inputs as well. 1270 00:54:43,600 --> 00:54:45,490 TOMMY MACWILLIAM: Sure. 1271 00:54:45,490 --> 00:54:49,720 INNOCENT MUNAI: I will come up with one input, when-- 1272 00:54:49,720 --> 00:54:50,560 let's see. 1273 00:54:50,560 --> 00:54:58,190 Let's use this one, the one given from the example, and in this case, 1274 00:54:58,190 --> 00:55:05,080 let's say we have 4 right here where we have duplicates. 1275 00:55:05,080 --> 00:55:05,950 4 and 4. 1276 00:55:05,950 --> 00:55:09,850 So in this case, this is just rotating the same three times, 1277 00:55:09,850 --> 00:55:15,620 so we should expect the same number-- like the rotation key to be the same. 1278 00:55:15,620 --> 00:55:26,870 And then, I would also think of a situation where we have an empty array. 1279 00:55:26,870 --> 00:55:28,790 And in this case, it should just return 0. 1280 00:55:28,790 --> 00:55:30,290 TOMMY MACWILLIAM: Yeah, that's fine. 1281 00:55:30,290 --> 00:55:32,623 INNOCENT MUNAI: There's nothing that's happening really. 1282 00:55:32,623 --> 00:55:42,880 And then in a case where we have the numbers just without any rotation, 1283 00:55:42,880 --> 00:55:46,880 and in this case, it should really give me 0 as well. 1284 00:55:46,880 --> 00:55:48,380 TOMMY MACWILLIAM: Yeah, not rotated. 1285 00:55:48,380 --> 00:55:49,463 INNOCENT MUNAI: All right. 1286 00:55:49,463 --> 00:55:51,970 So a number can be on a rake, could be rotated 1287 00:55:51,970 --> 00:55:58,030 0 times, 1 times, 2 times, all the way to the length of that array, 1288 00:55:58,030 --> 00:55:59,780 or even more than that. 1289 00:55:59,780 --> 00:56:04,720 So in this case, I would check to see whether if this array would be rotated 1290 00:56:04,720 --> 00:56:09,280 five times, which is the length of the array, it would sort of go in a circle 1291 00:56:09,280 --> 00:56:10,610 and still be the same. 1292 00:56:10,610 --> 00:56:15,040 So it means my test case is cover when arrays 1293 00:56:15,040 --> 00:56:18,400 rotate at like, at 0 times, rotated like the maximum times, 1294 00:56:18,400 --> 00:56:20,750 and like, all the middle cases. 1295 00:56:20,750 --> 00:56:24,400 So my assumption is that if my algorithm works for these cases, 1296 00:56:24,400 --> 00:56:25,870 it will work for all cases. 1297 00:56:25,870 --> 00:56:26,080 TOMMY MACWILLIAM: Yeah. 1298 00:56:26,080 --> 00:56:26,650 That looks right. 1299 00:56:26,650 --> 00:56:27,525 INNOCENT MUNAI: Yeah. 1300 00:56:27,525 --> 00:56:29,592 So you have maybe any ideas of more test cases? 1301 00:56:29,592 --> 00:56:30,550 TOMMY MACWILLIAM: Yeah. 1302 00:56:30,550 --> 00:56:32,170 Let's try a few these, and let's try running it. 1303 00:56:32,170 --> 00:56:32,750 See it works. 1304 00:56:32,750 --> 00:56:33,625 INNOCENT MUNAI: Sure. 1305 00:56:33,625 --> 00:56:37,930 So first I will work through this with one of my age cases. 1306 00:56:37,930 --> 00:56:40,940 And in this case, let's say the empty array. 1307 00:56:40,940 --> 00:56:44,710 So it will go through the empty array, try to check, 1308 00:56:44,710 --> 00:56:46,450 but it won't return anything. 1309 00:56:46,450 --> 00:56:52,780 But I want-- if there is not any element in that array, 1310 00:56:52,780 --> 00:56:54,440 this loop won't be executed. 1311 00:56:54,440 --> 00:56:56,410 So I want to handle that case too. 1312 00:56:56,410 --> 00:57:05,860 So in this sense, I might have to have return zero, just 1313 00:57:05,860 --> 00:57:08,260 to account for the case when this loop won't be executed. 1314 00:57:08,260 --> 00:57:09,905 And that's for the empty array. 1315 00:57:09,905 --> 00:57:11,155 TOMMY MACWILLIAM: Makes sense. 1316 00:57:11,155 --> 00:57:12,238 INNOCENT MUNAI: All right. 1317 00:57:12,238 --> 00:57:14,260 So now I think I should run some-- 1318 00:57:14,260 --> 00:57:14,500 TOMMY MACWILLIAM: Yeah. 1319 00:57:14,500 --> 00:57:15,100 Let's try running it. 1320 00:57:15,100 --> 00:57:15,370 INNOCENT MUNAI: All right. 1321 00:57:15,370 --> 00:57:15,870 Sure. 1322 00:57:15,870 --> 00:57:29,890 So I will say if name is main, I want to run the main function. 1323 00:57:29,890 --> 00:57:43,500 So I will sort of print, calling this function onto several inputs. 1324 00:57:43,500 --> 00:57:45,220 Let's see. 1325 00:57:45,220 --> 00:57:49,160 So I just want to order inputs in the same-- 1326 00:57:49,160 --> 00:57:55,530 so I'll just do this one and then take this one. 1327 00:57:55,530 --> 00:57:58,950 Put it right here. 1328 00:57:58,950 --> 00:58:03,980 Second input three. 1329 00:58:03,980 --> 00:58:04,752 Oh no. 1330 00:58:04,752 --> 00:58:05,960 TOMMY MACWILLIAM: No worries. 1331 00:58:05,960 --> 00:58:08,070 I have some hot keys, that's all. 1332 00:58:08,070 --> 00:58:08,570 You're good. 1333 00:58:08,570 --> 00:58:10,280 INNOCENT MUNAI: All right. 1334 00:58:10,280 --> 00:58:17,868 Then I will take this input, pass it to this function, this time around. 1335 00:58:17,868 --> 00:58:19,910 TOMMY MACWILLIAM: Yeah, let's try just these two. 1336 00:58:19,910 --> 00:58:20,270 INNOCENT MUNAI: Oh, yeah. 1337 00:58:20,270 --> 00:58:21,170 Sure. 1338 00:58:21,170 --> 00:58:25,170 So I'll just run this. 1339 00:58:25,170 --> 00:58:26,900 Oh, it yells at me. 1340 00:58:26,900 --> 00:58:30,860 It tells me this object cannot be interpreted as an integer. 1341 00:58:30,860 --> 00:58:34,430 Oh, that's true because at this point here 1342 00:58:34,430 --> 00:58:41,060 I needed my range to be from 0 to like one less the length of the nums array. 1343 00:58:41,060 --> 00:58:46,250 And I know that there's a function that can give me the length of nums. 1344 00:58:46,250 --> 00:58:48,187 Do you happen to know what it is? 1345 00:58:48,187 --> 00:58:48,770 Could I just-- 1346 00:58:48,770 --> 00:58:49,220 TOMMY MACWILLIAM: Yeah. 1347 00:58:49,220 --> 00:58:49,782 Len is right. 1348 00:58:49,782 --> 00:58:50,990 INNOCENT MUNAI: Len is right. 1349 00:58:50,990 --> 00:58:52,580 Thank you. 1350 00:58:52,580 --> 00:58:57,290 So I'll just call Len here, and run the program once again. 1351 00:58:57,290 --> 00:58:58,190 All right. 1352 00:58:58,190 --> 00:59:03,140 So seems like the first two cases have passed in this case. 1353 00:59:03,140 --> 00:59:04,515 I will also try to run this case. 1354 00:59:04,515 --> 00:59:05,890 TOMMY MACWILLIAM: Yeah, actually. 1355 00:59:05,890 --> 00:59:08,610 Just for time, I think we can actually pause there. 1356 00:59:08,610 --> 00:59:09,890 So thanks so much. 1357 00:59:09,890 --> 00:59:10,220 INNOCENT MUNAI: All right. 1358 00:59:10,220 --> 00:59:12,470 TOMMY MACWILLIAM: We'll pause there for the interview. 1359 00:59:12,470 --> 00:59:15,590 [APPLAUSE] 1360 00:59:15,590 --> 00:59:16,940 So observations from folks. 1361 00:59:16,940 --> 00:59:20,748 What went well and what could have gone better? 1362 00:59:20,748 --> 00:59:22,040 Overall I think this was great. 1363 00:59:22,040 --> 00:59:24,440 AUDIENCE MEMBER 9: Well, the best part I thought 1364 00:59:24,440 --> 00:59:27,680 was the communication was so consistent in every step of the process, 1365 00:59:27,680 --> 00:59:31,400 as well as this is a big part of any interview, the tone of respect 1366 00:59:31,400 --> 00:59:33,950 he had for you as he was going through the codes. 1367 00:59:33,950 --> 00:59:34,160 TOMMY MACWILLIAM: Yeah. 1368 00:59:34,160 --> 00:59:34,550 I totally agree. 1369 00:59:34,550 --> 00:59:35,800 The communication was amazing. 1370 00:59:35,800 --> 00:59:37,820 You sort of saw it at every step along the way, 1371 00:59:37,820 --> 00:59:41,030 sort of vocalizing exactly what he was thinking, and sort of doing that. 1372 00:59:41,030 --> 00:59:44,030 It's a tough tightrope to walk, talking what you're thinking and writing 1373 00:59:44,030 --> 00:59:46,988 the code, but that's exactly what you want to be doing in an interview. 1374 00:59:46,988 --> 00:59:48,450 Exactly what we just saw. 1375 00:59:48,450 --> 00:59:49,005 What else? 1376 00:59:49,005 --> 00:59:58,820 1377 00:59:58,820 --> 00:59:59,866 Yeah. 1378 00:59:59,866 --> 01:00:02,250 AUDIENCE MEMBER 10: Kind of adding on to that idea, 1379 01:00:02,250 --> 01:00:05,860 I like before he actually got to typing up the code, 1380 01:00:05,860 --> 01:00:10,090 he wrote out into his long process in comments. 1381 01:00:10,090 --> 01:00:13,218 It works as a guideline, but also you as the interviewer 1382 01:00:13,218 --> 01:00:15,462 can see his long process. 1383 01:00:15,462 --> 01:00:16,420 TOMMY MACWILLIAM: Yeah. 1384 01:00:16,420 --> 01:00:17,295 That's exactly right. 1385 01:00:17,295 --> 01:00:20,620 We aligned on a solution before he started typing, wrote that out 1386 01:00:20,620 --> 01:00:23,530 in pseudo code, and the two of us were super confident together 1387 01:00:23,530 --> 01:00:25,390 that he was on the right track. 1388 01:00:25,390 --> 01:00:28,240 Maybe one last thing, and then I'll add what stood out to me. 1389 01:00:28,240 --> 01:00:30,690 1390 01:00:30,690 --> 01:00:31,190 Yeah. 1391 01:00:31,190 --> 01:00:34,107 AUDIENCE MEMBER 11: The fact that he didn't panic when the code didn't 1392 01:00:34,107 --> 01:00:35,320 go how he expecting it to. 1393 01:00:35,320 --> 01:00:35,740 TOMMY MACWILLIAM: Yes. 1394 01:00:35,740 --> 01:00:37,120 I don't know if that was planned on your end or not, 1395 01:00:37,120 --> 01:00:39,203 but I thought the way you react is exactly how you 1396 01:00:39,203 --> 01:00:40,877 want to react in an interview. 1397 01:00:40,877 --> 01:00:41,710 So you didn't panic. 1398 01:00:41,710 --> 01:00:44,170 So it looks like here's the error, read the error message. 1399 01:00:44,170 --> 01:00:46,503 A lot of people just see red, and they're like [YELLS].. 1400 01:00:46,503 --> 01:00:49,090 You sort of read it, and then asked me is it Len or sighs. 1401 01:00:49,090 --> 01:00:50,450 I was confirming that with you. 1402 01:00:50,450 --> 01:00:52,332 So I thought that was really great. 1403 01:00:52,332 --> 01:00:54,040 Maybe I'll just add a couple other things 1404 01:00:54,040 --> 01:00:56,650 that I really liked as the interviewer. 1405 01:00:56,650 --> 01:00:59,650 So one is you caught a bug proactively and fixed it. 1406 01:00:59,650 --> 01:01:03,400 You sort of saw how running through the code verbally, 1407 01:01:03,400 --> 01:01:05,500 you can kind of catch those things. 1408 01:01:05,500 --> 01:01:07,385 So I thought that was really, really great. 1409 01:01:07,385 --> 01:01:09,760 And then, I thought the other thing that was really great 1410 01:01:09,760 --> 01:01:12,093 was sort of thinking about all these edge cases as well. 1411 01:01:12,093 --> 01:01:15,792 So we took a lot of time up front agreeing on inputs and outputs. 1412 01:01:15,792 --> 01:01:17,500 And I think because we spent so much time 1413 01:01:17,500 --> 01:01:19,420 up front, that's why this went so smoothly 1414 01:01:19,420 --> 01:01:21,920 and we're able to cover all the cases as we went. 1415 01:01:21,920 --> 01:01:23,740 So as the interviewer, those are two things 1416 01:01:23,740 --> 01:01:26,300 that stood out to me in the really positive direction. 1417 01:01:26,300 --> 01:01:28,510 So thanks so much for the mock interview. 1418 01:01:28,510 --> 01:01:29,630 We appreciate it. 1419 01:01:29,630 --> 01:01:30,868 INNOCENT MUNAI: All right. 1420 01:01:30,868 --> 01:01:34,983 [APPLAUSE] 1421 01:01:34,983 --> 01:01:36,150 TOMMY MACWILLIAM: All right. 1422 01:01:36,150 --> 01:01:39,540 So I have some closing thoughts here. 1423 01:01:39,540 --> 01:01:42,060 And I want to make sure we have at least 15, 1424 01:01:42,060 --> 01:01:45,840 20 minutes or so for questions for me about whatever is on your mind 1425 01:01:45,840 --> 01:01:47,160 when it comes to interviewing. 1426 01:01:47,160 --> 01:01:50,783 So last we're going to wrap up with after the interview. 1427 01:01:50,783 --> 01:01:52,950 Usually, at the end of an interview, the interviewer 1428 01:01:52,950 --> 01:01:57,268 will leave you five minutes or so at the end of the interview to say, 1429 01:01:57,268 --> 01:01:58,560 what questions you have for me? 1430 01:01:58,560 --> 01:02:01,470 Have some questions ready in advance. 1431 01:02:01,470 --> 01:02:04,370 Can anyone think of a question they've asked an interviewer before, 1432 01:02:04,370 --> 01:02:06,287 or that they might want to ask an interviewer. 1433 01:02:06,287 --> 01:02:09,210 I'll give you some examples, but want to hear some from you too. 1434 01:02:09,210 --> 01:02:09,870 Yeah. 1435 01:02:09,870 --> 01:02:11,310 AUDIENCE MEMBER 12: What's a day in your life? 1436 01:02:11,310 --> 01:02:11,670 TOMMY MACWILLIAM: Yeah. 1437 01:02:11,670 --> 01:02:12,810 That's a good one. 1438 01:02:12,810 --> 01:02:15,210 What is the day to day life look like at your role? 1439 01:02:15,210 --> 01:02:15,840 What else? 1440 01:02:15,840 --> 01:02:21,600 1441 01:02:21,600 --> 01:02:22,170 Yeah. 1442 01:02:22,170 --> 01:02:23,460 AUDIENCE MEMBER 13: I guess, what is-- 1443 01:02:23,460 --> 01:02:25,950 if you have an end goal, what is the end goal with something technical, 1444 01:02:25,950 --> 01:02:27,700 like these type of tools to use, and like, 1445 01:02:27,700 --> 01:02:29,190 why are you even coding in general? 1446 01:02:29,190 --> 01:02:29,460 TOMMY MACWILLIAM: Yeah. 1447 01:02:29,460 --> 01:02:30,377 That's a great one. 1448 01:02:30,377 --> 01:02:32,460 So what are the big problems your team is solving? 1449 01:02:32,460 --> 01:02:34,200 What are you really trying to solve at a higher level? 1450 01:02:34,200 --> 01:02:35,010 I love that. 1451 01:02:35,010 --> 01:02:37,968 Maybe one more, and then I'll give you some ones that I think are good. 1452 01:02:37,968 --> 01:02:44,870 1453 01:02:44,870 --> 01:02:45,370 Yeah. 1454 01:02:45,370 --> 01:02:47,910 In the back. 1455 01:02:47,910 --> 01:02:48,933 Sorry? 1456 01:02:48,933 --> 01:02:49,840 AUDIENCE: [INAUDIBLE] 1457 01:02:49,840 --> 01:02:50,770 TOMMY MACWILLIAM: Yeah, that's a great one. 1458 01:02:50,770 --> 01:02:52,000 What have you learned recently? 1459 01:02:52,000 --> 01:02:54,400 What has been your experience, and where are you growing? 1460 01:02:54,400 --> 01:02:55,567 I think that's really great. 1461 01:02:55,567 --> 01:02:59,380 In general, try to bias for questions-- exactly, day to day is the first one. 1462 01:02:59,380 --> 01:03:01,898 Try to bias for questions that aren't Google-able. 1463 01:03:01,898 --> 01:03:04,690 Like asking questions like, how many employees are at your company, 1464 01:03:04,690 --> 01:03:06,273 or what year was your company founded? 1465 01:03:06,273 --> 01:03:07,180 Highly Google-able. 1466 01:03:07,180 --> 01:03:09,430 You're like, not using the best use of your time 1467 01:03:09,430 --> 01:03:12,097 or your interviewer's if that's the type of stuff you're asking. 1468 01:03:12,097 --> 01:03:14,050 Instead, try to ask questions that could only 1469 01:03:14,050 --> 01:03:15,460 be answered by someone at this company. 1470 01:03:15,460 --> 01:03:17,620 Things like their day to day, their team's culture, 1471 01:03:17,620 --> 01:03:20,703 what they like about their team, what they would want to change, something 1472 01:03:20,703 --> 01:03:23,260 they're proud of, what their growth path has looked like. 1473 01:03:23,260 --> 01:03:25,990 These are really great questions for you to get 1474 01:03:25,990 --> 01:03:28,462 a sense of what it's actually like to work at this company, 1475 01:03:28,462 --> 01:03:31,670 and for your interviewer to share a bit more about their personal experience, 1476 01:03:31,670 --> 01:03:35,530 which is going to be way more valuable than some stat around fundraising. 1477 01:03:35,530 --> 01:03:40,390 So the last thing I want to say with after the interview, don't worry. 1478 01:03:40,390 --> 01:03:44,590 Interviews are very, very, very high variance. 1479 01:03:44,590 --> 01:03:47,605 Everyone bombs interviews, myself included. 1480 01:03:47,605 --> 01:03:48,730 I like to share this story. 1481 01:03:48,730 --> 01:03:52,540 I was once interviewing at a large social network 1482 01:03:52,540 --> 01:03:54,340 site that will not be named. 1483 01:03:54,340 --> 01:03:55,840 [LAUGHTER] 1484 01:03:55,840 --> 01:04:00,130 The question was something around like, traversing a binary tree. 1485 01:04:00,130 --> 01:04:04,930 I decided that OCaml would be the best language to write this in. 1486 01:04:04,930 --> 01:04:05,920 Nope. 1487 01:04:05,920 --> 01:04:08,500 So I totally bombed it, and a lot of people are like, no Tom. 1488 01:04:08,500 --> 01:04:09,580 You didn't do that bad. 1489 01:04:09,580 --> 01:04:13,390 I did because when I was walking out of the interview, I 1490 01:04:13,390 --> 01:04:16,060 my interviewer was in the elevator with another interviewer 1491 01:04:16,060 --> 01:04:18,100 from this large unnamed social network talking 1492 01:04:18,100 --> 01:04:20,200 about how bad I did in the interview. 1493 01:04:20,200 --> 01:04:22,690 So I like, walked into this elevator, I was like, oh that-- 1494 01:04:22,690 --> 01:04:25,600 really no doubt that I bombed that interview. 1495 01:04:25,600 --> 01:04:27,700 So it happens to everybody. 1496 01:04:27,700 --> 01:04:30,730 If it happens to you, don't worry. 1497 01:04:30,730 --> 01:04:33,160 Interviews are not fun, and they're really high variance. 1498 01:04:33,160 --> 01:04:35,535 There's a lot of candidates who just-- you get a question 1499 01:04:35,535 --> 01:04:37,933 and it just doesn't click, and then they don't do well 1500 01:04:37,933 --> 01:04:39,100 and they don't move forward. 1501 01:04:39,100 --> 01:04:41,860 But I bet they're a great candidate, and they would have possibly 1502 01:04:41,860 --> 01:04:43,277 been a great addition to the team. 1503 01:04:43,277 --> 01:04:48,490 But just the whole variance of interviewing, don't worry about that. 1504 01:04:48,490 --> 01:04:51,460 View each interview as an opportunity to get better. 1505 01:04:51,460 --> 01:04:53,890 It's really easy to get discouraged when you're constantly 1506 01:04:53,890 --> 01:04:56,770 getting no's all over the place from different companies, 1507 01:04:56,770 --> 01:04:58,870 but try to view that as a growth opportunity, 1508 01:04:58,870 --> 01:05:02,350 reflect on what went well, because it wasn't all bad probably, 1509 01:05:02,350 --> 01:05:05,313 as well as where you can improve, and try to grow and get 1510 01:05:05,313 --> 01:05:06,730 better and better at interviewing. 1511 01:05:06,730 --> 01:05:07,490 It's a skill. 1512 01:05:07,490 --> 01:05:08,740 It's a muscle you can develop. 1513 01:05:08,740 --> 01:05:10,402 Nobody has it out of the gate. 1514 01:05:10,402 --> 01:05:12,610 And you're not going to pass 100% of your interviews. 1515 01:05:12,610 --> 01:05:14,980 If you do, maybe you can join me up here next year. 1516 01:05:14,980 --> 01:05:18,910 But don't worry if you don't do well on some of your interviews. 1517 01:05:18,910 --> 01:05:21,280 So some takeaways from the talk. 1518 01:05:21,280 --> 01:05:23,770 Number one, make sure you have the basics down. 1519 01:05:23,770 --> 01:05:26,560 This is the best way to reduce stress and increase your success 1520 01:05:26,560 --> 01:05:28,060 rate of technical interviews. 1521 01:05:28,060 --> 01:05:30,280 Number two, build out your toolbox. 1522 01:05:30,280 --> 01:05:33,310 Be familiar with all the concepts and tools you can 1523 01:05:33,310 --> 01:05:35,920 use to solve a problem in an interview. 1524 01:05:35,920 --> 01:05:39,610 Number three, do lots of realistic practice problems. 1525 01:05:39,610 --> 01:05:43,840 Sit down, time yourself, don't just look at the answer key. 1526 01:05:43,840 --> 01:05:47,380 Actually walk through the solution, and communicate a solution 1527 01:05:47,380 --> 01:05:49,330 before writing code. 1528 01:05:49,330 --> 01:05:51,730 Verbally run your code, look for issues, make 1529 01:05:51,730 --> 01:05:55,055 sure you're creating this bidirectional conversation with your interviewer, 1530 01:05:55,055 --> 01:05:57,430 and in case you thought I wouldn't show this slide again, 1531 01:05:57,430 --> 01:06:00,890 it's about the process, not necessarily the output. 1532 01:06:00,890 --> 01:06:03,310 So think about how you're getting to that answer 1533 01:06:03,310 --> 01:06:05,920 and how you're working together with your interviewer. 1534 01:06:05,920 --> 01:06:07,390 So that's the end of the talk. 1535 01:06:07,390 --> 01:06:11,086 I'd love to take questions from the audience. 1536 01:06:11,086 --> 01:06:20,270 [APPLAUSE] 1537 01:06:20,270 --> 01:06:20,878 Yeah. 1538 01:06:20,878 --> 01:06:22,670 AUDIENCE MEMBER 14: What are some resources 1539 01:06:22,670 --> 01:06:26,182 that you suggest to find like, technical interview questions? 1540 01:06:26,182 --> 01:06:27,140 TOMMY MACWILLIAM: Yeah. 1541 01:06:27,140 --> 01:06:30,620 So what are some resources for finding technical interview questions? 1542 01:06:30,620 --> 01:06:32,840 So we'll put some links in the Zoom chat. 1543 01:06:32,840 --> 01:06:35,450 So one is Leet Code has a ton of stuff. 1544 01:06:35,450 --> 01:06:38,870 What's cool is you could sort of write the code and run it and see solutions. 1545 01:06:38,870 --> 01:06:40,520 Project Euler is another one. 1546 01:06:40,520 --> 01:06:41,540 Just a lot of problems. 1547 01:06:41,540 --> 01:06:43,790 Cracking the Code Interview is one of those books that 1548 01:06:43,790 --> 01:06:45,903 just has a ton of practice problems. 1549 01:06:45,903 --> 01:06:47,570 But honestly, even just googling around. 1550 01:06:47,570 --> 01:06:49,403 Like, if you find yourself like, man, I just 1551 01:06:49,403 --> 01:06:51,820 can't get recursion no matter how many times I've done it, 1552 01:06:51,820 --> 01:06:54,008 just googling practice recursion interview problems, 1553 01:06:54,008 --> 01:06:55,550 you'll probably find some good sites. 1554 01:06:55,550 --> 01:06:58,890 Like Geeks for Geeks is pretty high on their SEO there. 1555 01:06:58,890 --> 01:06:59,600 So, yeah. 1556 01:06:59,600 --> 01:07:02,390 Those are some good ones I'd recommend. 1557 01:07:02,390 --> 01:07:02,990 Yeah. 1558 01:07:02,990 --> 01:07:04,990 AUDIENCE MEMBER 15: When you're-- two questions. 1559 01:07:04,990 --> 01:07:07,670 One, when you're searching for internships that are technical 1560 01:07:07,670 --> 01:07:09,830 or to find technical interviews in general, 1561 01:07:09,830 --> 01:07:13,040 do you remember when you were searching for internships, if you ever did, 1562 01:07:13,040 --> 01:07:14,780 what the best process was to do this? 1563 01:07:14,780 --> 01:07:18,470 And number two is when trying to feel ready enough 1564 01:07:18,470 --> 01:07:20,892 to apply to one of these tech internships, other 1565 01:07:20,892 --> 01:07:22,600 than building your toolbox, which is when 1566 01:07:22,600 --> 01:07:25,030 we saw specific examples, what makes you get to the point where you're like, 1567 01:07:25,030 --> 01:07:25,180 yeah. 1568 01:07:25,180 --> 01:07:26,710 I'm ready to go for this interview stage. 1569 01:07:26,710 --> 01:07:29,770 Because at my point of coding, I don't think I'm ready for that right now. 1570 01:07:29,770 --> 01:07:30,160 TOMMY MACWILLIAM: Yeah. 1571 01:07:30,160 --> 01:07:30,460 That's great. 1572 01:07:30,460 --> 01:07:31,168 So two questions. 1573 01:07:31,168 --> 01:07:34,660 One is how to top a funnel sourcing for companies to apply to, 1574 01:07:34,660 --> 01:07:36,633 and then two is how do when you're ready. 1575 01:07:36,633 --> 01:07:38,800 So number one, I think honestly a really great thing 1576 01:07:38,800 --> 01:07:42,730 is to just like open your phone and look at the products that you use every day. 1577 01:07:42,730 --> 01:07:45,130 Those companies are probably hiring interns. 1578 01:07:45,130 --> 01:07:48,370 As well as talking to friends and other people in-- 1579 01:07:48,370 --> 01:07:49,690 if you're in CS-- 1580 01:07:49,690 --> 01:07:52,150 excuse me, the CS department, hearing about what 1581 01:07:52,150 --> 01:07:53,560 internships were really great. 1582 01:07:53,560 --> 01:07:56,170 Many companies, including us, are recruiting on campus, 1583 01:07:56,170 --> 01:08:00,880 so try to join the email lists a company blast out these events and invites on. 1584 01:08:00,880 --> 01:08:03,322 Those are some ways to identify things. 1585 01:08:03,322 --> 01:08:05,780 And then how to know when you're ready, it's kind of tough. 1586 01:08:05,780 --> 01:08:07,030 Everyone's a bit different. 1587 01:08:07,030 --> 01:08:10,690 For me, there gets a point where I'm sort of refreshing these practice 1588 01:08:10,690 --> 01:08:11,652 problems. 1589 01:08:11,652 --> 01:08:14,860 Maybe I get like, three in a row, and I'm just feeling a bit more comfortable 1590 01:08:14,860 --> 01:08:17,380 or I'm solving things consistently, maybe not 100% 1591 01:08:17,380 --> 01:08:21,250 correct 100% of the time, but in general, I'm given a problem, 1592 01:08:21,250 --> 01:08:23,981 I can probably get most of it in 30 minutes or so. 1593 01:08:23,981 --> 01:08:25,689 But again, everybody is really different, 1594 01:08:25,689 --> 01:08:28,189 and even the difficulty of problems is going to be different 1595 01:08:28,189 --> 01:08:30,609 and depending on how far you are in your CS career. 1596 01:08:30,609 --> 01:08:32,649 But I'd say the best way to learn is honestly 1597 01:08:32,649 --> 01:08:34,120 by going and doing the interviews. 1598 01:08:34,120 --> 01:08:36,422 Simulating is great, but if you interview a few times 1599 01:08:36,422 --> 01:08:39,380 and you totally bomb them, that's a really, really valuable experience. 1600 01:08:39,380 --> 01:08:42,069 So don't wait too, too long before just jumping in. 1601 01:08:42,069 --> 01:08:43,736 The worst thing a company can say is no. 1602 01:08:43,736 --> 01:08:46,819 Well, the worst thing they do is tell you in the elevator how bad you did. 1603 01:08:46,819 --> 01:08:48,609 The second worst thing I can do is say no. 1604 01:08:48,609 --> 01:08:50,234 And so don't worry too much about that. 1605 01:08:50,234 --> 01:08:57,580 1606 01:08:57,580 --> 01:08:58,140 Yeah. 1607 01:08:58,140 --> 01:09:00,449 AUDIENCE MEMBER 16: Do you have any suggestions 1608 01:09:00,449 --> 01:09:05,135 for things you did at Harvard that you felt like were very beneficial as you 1609 01:09:05,135 --> 01:09:06,271 entered your career? 1610 01:09:06,271 --> 01:09:07,229 TOMMY MACWILLIAM: Yeah. 1611 01:09:07,229 --> 01:09:10,560 So stuff I did at Harvard that was really beneficial for my career. 1612 01:09:10,560 --> 01:09:13,890 So some classes, I think, are just better geared 1613 01:09:13,890 --> 01:09:16,140 towards getting good at interviews than others. 1614 01:09:16,140 --> 01:09:17,880 124 I'd recommend. 1615 01:09:17,880 --> 01:09:20,790 182 they do like graph algorithms all day long, 1616 01:09:20,790 --> 01:09:23,279 or at least they used to when I was there. 1617 01:09:23,279 --> 01:09:26,819 So classes that are a bit more data structures or algorithm 1618 01:09:26,819 --> 01:09:29,050 focused, I think, are really good. 1619 01:09:29,050 --> 01:09:32,010 Another thing is I tried to join all these different email lists. 1620 01:09:32,010 --> 01:09:33,540 And I can't tell you the names of them any more 1621 01:09:33,540 --> 01:09:35,498 because they're probably all different, but try 1622 01:09:35,498 --> 01:09:38,010 to get on the lists for a bunch of these different events. 1623 01:09:38,010 --> 01:09:40,385 There's no like-- a lot of times there's no invite lists. 1624 01:09:40,385 --> 01:09:42,106 Just sort of like, if you knew that Figma 1625 01:09:42,106 --> 01:09:44,439 is going to be in this room on this day you can show up. 1626 01:09:44,439 --> 01:09:46,189 So try to get on all these different lists 1627 01:09:46,189 --> 01:09:48,689 and look out for events just to learn about companies, 1628 01:09:48,689 --> 01:09:51,990 learn about opportunities, and also just meet more folks who can get to know 1629 01:09:51,990 --> 01:09:52,830 and practice with. 1630 01:09:52,830 --> 01:09:55,390 1631 01:09:55,390 --> 01:09:58,755 I was on like, every email list you could think of. 1632 01:09:58,755 --> 01:10:00,710 AUDIENCE MEMBER 17: How did you find those? 1633 01:10:00,710 --> 01:10:03,260 TOMMY MACWILLIAM: I would just sort of ask around friends, like oh 1634 01:10:03,260 --> 01:10:05,780 like-- if some friend was like, oh are you going to the x event? 1635 01:10:05,780 --> 01:10:07,760 And I was like, not only what is that event, two 1636 01:10:07,760 --> 01:10:09,010 how did you find out about it? 1637 01:10:09,010 --> 01:10:11,110 And then go and join that. 1638 01:10:11,110 --> 01:10:11,610 Yeah? 1639 01:10:11,610 --> 01:10:14,312 AUDIENCE MEMBER 18: How important are career fairs? 1640 01:10:14,312 --> 01:10:15,270 TOMMY MACWILLIAM: Yeah. 1641 01:10:15,270 --> 01:10:17,730 How important are career fairs for recruiting? 1642 01:10:17,730 --> 01:10:20,140 I think as you're thinking about what companies 1643 01:10:20,140 --> 01:10:22,890 do I want to apply to, even like what companies are out there that 1644 01:10:22,890 --> 01:10:26,098 are hiring interns of some given degree, I think there they're really, really 1645 01:10:26,098 --> 01:10:27,290 helpful. 1646 01:10:27,290 --> 01:10:30,787 Oftentimes, it can be great to meet a recruiter and give them your resume. 1647 01:10:30,787 --> 01:10:33,120 For many folks, it doesn't make too much of a difference 1648 01:10:33,120 --> 01:10:35,203 whether you like meet a recruiter in person versus 1649 01:10:35,203 --> 01:10:37,080 apply through the early career channels. 1650 01:10:37,080 --> 01:10:40,485 So I'd say they are more useful for you to find opportunities 1651 01:10:40,485 --> 01:10:42,360 you're excited about that are sort of aligned 1652 01:10:42,360 --> 01:10:44,970 with your experience and your skill level, as opposed to, 1653 01:10:44,970 --> 01:10:50,700 oh this is my in, like I gave a paper copy of my resume to some recruiter. 1654 01:10:50,700 --> 01:10:51,200 Yeah. 1655 01:10:51,200 --> 01:10:54,350 AUDIENCE MEMBER 19: Any advice that could be particularly more helpful 1656 01:10:54,350 --> 01:10:56,352 for PM interviews. 1657 01:10:56,352 --> 01:10:57,310 TOMMY MACWILLIAM: Yeah. 1658 01:10:57,310 --> 01:11:00,280 Any advice for PM interviews? 1659 01:11:00,280 --> 01:11:02,530 I would say that PM, of all the interview 1660 01:11:02,530 --> 01:11:05,440 types we talked about here, I'd say the PM interviews 1661 01:11:05,440 --> 01:11:10,180 are most or closest to the systems design and values interview. 1662 01:11:10,180 --> 01:11:12,800 Values is sort of someone that anyone's going to go through. 1663 01:11:12,800 --> 01:11:14,650 So I'd spend some time thinking about that. 1664 01:11:14,650 --> 01:11:18,398 A lot of PM interviews are about critical thinking like, 1665 01:11:18,398 --> 01:11:21,190 pick an app on your phone and tell me how you would make it better, 1666 01:11:21,190 --> 01:11:24,160 or here's some problem. 1667 01:11:24,160 --> 01:11:27,498 Maybe like, Uber is thinking about expanding into jetpacks. 1668 01:11:27,498 --> 01:11:29,290 How would you think about the go to market? 1669 01:11:29,290 --> 01:11:32,132 It's sort of like that type of problem to think about, 1670 01:11:32,132 --> 01:11:35,090 which is more less about writing code and more about critical thinking. 1671 01:11:35,090 --> 01:11:37,990 So there's lots of example problems online for not just engineering 1672 01:11:37,990 --> 01:11:39,410 interviews, but other domains. 1673 01:11:39,410 --> 01:11:42,050 And so I go through this same process of getting used to it, 1674 01:11:42,050 --> 01:11:44,430 building that toolbox, and be getting comfortable. 1675 01:11:44,430 --> 01:11:48,930 1676 01:11:48,930 --> 01:11:49,560 Yeah. 1677 01:11:49,560 --> 01:11:51,560 AUDIENCE MEMBER 20: How many companies would you 1678 01:11:51,560 --> 01:11:53,230 recommend applying for in one season? 1679 01:11:53,230 --> 01:11:53,650 TOMMY MACWILLIAM: Yeah. 1680 01:11:53,650 --> 01:11:56,317 How many companies would I recommend applying for in one season? 1681 01:11:56,317 --> 01:11:57,980 It's a really good question. 1682 01:11:57,980 --> 01:11:59,020 It varies a bit. 1683 01:11:59,020 --> 01:12:02,830 I'd say that, especially early on, interviews can be tough, 1684 01:12:02,830 --> 01:12:06,730 and as you're sort of building up that muscle, you might have a higher number. 1685 01:12:06,730 --> 01:12:11,108 I'd say, a good number is maybe in the like five to ten 1686 01:12:11,108 --> 01:12:12,400 ballpark on like, the high end. 1687 01:12:12,400 --> 01:12:15,150 Like if you find yourself applying to like 20 different companies, 1688 01:12:15,150 --> 01:12:18,370 and you've got like three on sites a day every day for two weeks, that's 1689 01:12:18,370 --> 01:12:19,290 probably too many. 1690 01:12:19,290 --> 01:12:21,040 But if you're only applying to one or two, 1691 01:12:21,040 --> 01:12:24,250 it can be hard to get the full breadth of experience. 1692 01:12:24,250 --> 01:12:27,657 And there's a reality thing here that is at some point, 1693 01:12:27,657 --> 01:12:29,740 companies will sort of fill up their intern class. 1694 01:12:29,740 --> 01:12:33,490 And so if you're sort of waiting until January or February to start applying, 1695 01:12:33,490 --> 01:12:36,085 sometimes it could be harder to get an internship. 1696 01:12:36,085 --> 01:12:38,710 So make sure you're not like, spreading it out too much either. 1697 01:12:38,710 --> 01:12:42,560 1698 01:12:42,560 --> 01:12:43,060 Yeah. 1699 01:12:43,060 --> 01:12:44,393 Well, thanks so much for coming. 1700 01:12:44,393 --> 01:12:45,520 I'll hang up here-- 1701 01:12:45,520 --> 01:12:47,812 Hanging up here to answer any other questions you have. 1702 01:12:47,812 --> 01:12:51,500 But thanks so much for coming, and best of luck on your technical interviews. 1703 01:12:51,500 --> 01:12:52,000