My Student Got an Amazon Internship. Here is What We Did. (Part One)
In this post, I'm going to give you an in-depth look at the process we used to make the internship happen. I'm also going to give you advice on how you can make this process work for you.
Due to the nature of this post, I'll mention tons of computer science concepts. I'll try to provide link references to as many concepts as I can, but feel free to get in touch if you have any questions or if you need some guidance.
Who is this student?
Sarah (not her real name) finished a code school program around 2018. She had to take a break from coding due to personal reasons. Coming back after her hiatus, her goal was to find a position in the tech industry as soon as possible.
I started working with Sarah around January 2021, and we worked together for about 5 months.
Takeaway: It's never too late to start your computer science journey!
How often did you meet with her?
I started meeting with her about once a week for one hour, but as she became better and better we switched it to once every 2-3 weeks. She needed less guidance, and I wanted her to reach her goals without spending too much money in our sessions.
Whenever she had to get ready for an interview we usually had one or two extra sessions to review company-specific problems. I used to check on her from time to time via text messages learn about her progress and double-check her 'homework'
Takeaway: Accountability can be a big factor in your success. It doesn't have to be a paid tutor. Find a friend or a classmate and ask them to keep you accountable.
How did the sessions look like?
Our sessions had a very common structure:
Reviewing her current progress We spent 5 minutes talking about her recent progress and how she felt with the entire process
Core Work I customized this part based on Sarah's needs, but we usually did some form of an informal lecture or mock interview.
Next Steps I gave some recommendations about what to focus on during her self-study. Sarah only had about 2 hours a day to study, so one of my goals was to be as efficient as possible.
Takeaway: Even if you don't have a lot of time, find a pace that works for you. The most important thing is to get started.
Tell me more!!!
Sure! I heavily adapted our core work as the sessions progressed. Let's talk about it based on a rough timeline.
First Session: It Begins!
We discussed Sarah's goals and background. We started doing mock interviews from day 1, so I asked Sarah to validate an email. Something similar to validating an email address
Takeaway: Try to have a mock interview as soon as possible. It'll highlight what you should improve.
Next set of sessions (about 2-3): Becoming Familiar with Code
As Sarah was feeling more comfortable in front of a code editor, I wanted to make sure she was able to execute code in her mind. I asked her to spend less time on her code school materials and more time solving small code challenges. We started with some Codewars problems.
The only caveat was that I asked her to do most of her coding in notepad (or paper) before using Visual Studio. I asked her to predict the outcome of her code, and I wanted to pay close attention to the discrepancies in syntax and behavior.
Behavior discrepancies are the most important ones in my book, but syntax discrepancies matter as well. This sounds tedious, and it is, but it's a great way to improve your algorithmic thinking.
Finally, I recommended Sarah listened to the Base CS Podcast for her to be more familiar with traditional computer science. Ideally, this would happen or her free time while she was doing chores haha
Takeaway: Modern tools are amazing and very useful, but don't use them as a crutch. Train yourself to be able to predict how your code is going to behave.
Session 4: Resumes and Data Structures
Sarah was becoming more and more comfortable with code so I asked her to focus on data structure fundamentals. Specifically, traversing Linked Lists and Binary Trees.
Whenever Sarah faced a code challenge, I wanted her to focus on the core of the problem instead of on the mechanics of data structure manipulation. As Endeavor would say:
As 'extra credit', I asked her to solve the following problems:
- Counting the number of duplicated nodes in a Linked List
- Counting the number of nodes in a binary tree
- Counting the number of leaves in a binary tree
- Counting the number of right branches in a tree (whenever you can go to the right)
All of those problems needed to be solved via depth-first and breath-first traversals.
Lastly, but perhaps the most important part of the session; I wanted Sarah to start applying for positions. We reviewed her resume and I made several recommendations (that's an article for another day).
Takeaway: Focus on the FUNdamentals before attempting to solve the kind of problems you'll find in books like 'Cracking the Coding Interview' or Leetcode.
Bonus Takeaway: Start applying to job openings before you think you are 100% ready. Companies can take a while to get back to you and not all your applications will result in interviews.
Bonus Takeaway 2: Start networking as soon as you can. Start networking right now!
Session 5: Binary Trees
We spent most of this session working on binary trees. My goal was for her to become 100% comfortable with traversing and manipulating data structures. Her homework was:
- Traversing binary trees, linked lists, and arrays. These traversals were done recursively and iteratively.
From our mock interviews, I also gave her the following feedback:
- Focus on building muscle memory with the basic syntax of your language. I don't think you need to memorize 100% of the syntax, but memorize enough so it doesn't affect your mental state during interviews.
- Thinking about what sort of unit tests she would write for previous code challenges.
For her homework, I asked Sarah to go into more detail about how the code is executed during recursive calls. She was kind enough to let me show you the diagrams she created:
Notice how she's separating different recursive calls. This is A LOT OF WORK, but it allowed her to understand the subtle interactions between recursive calls. This might be obvious by now, but I'm so very proud of her :D.
You don't have to use the same type of diagrams she created. The goal is to find a way to understand and de-construct how your code is executed.
Takeaway: Build a deep understanding of the 'fundamental' skills, so you can adapt your existing knowledge to new problems.
Session 6 and 7 - Diving Deeper into Linked Lists
We decided to focus almost exclusively on Linked Lists and move to different data structures in a few sessions. Given her time constraints, I thought it was the best way for her to move to more 'advanced' problems.
Her homework for these sessions was:
- First Priority: A few problems from 'Cracking the Coding Interview'. We focused on the Linked List and Arrays sections.
I want to make a small pause here and remind us all that the focus when solving a code challenge should be to understand and improve your own problem-solving process and not just getting to the answer by whichever means possible.
- Second Priority: Review her Bootcamp materials. If she was going to head for interviews, I wanted her to be ready for 'take-home' challenges and to defend her resume.
- Third Priority: Build a small API if she had enough time in between her code challenges.
- Lastly: On her 'spare' time 😅, I asked her to re-write her challenges from sessions four and five. Remember endeavor's words ;)
Session 7 was mainly focused on mock interviews.
Takeaway (Part One): There are different kinds of interviews, make sure to divide your time between traditional code challenges, regular coding, and behavioral interviews.
Takeaway (Part Two): If your time is limited, prioritize your learning based on where you are on your Job Hunt.
Time For Her First INTERVIEW!!!!!!!!
In between sessions 7 and 8, Sarah had her first take-home interview!!!! I was so proud! I think this is a great point for us to take a break and highlight some key takeaways of her journey:
How will Sarah fare in her interview? Will she achieve her goals? (I guess the tittle of this article spoils that) Will I continue to give her more and more code challenges?
Tune in next time for the rest of the sessions :)