Have you ever had this experience?
You spend weeks preparing to interview at your dream company. Hours have passed in the library, you’re feeling jittery from your third coffee. Lucky you, getting to do this all again tomorrow.
You’ve covered every topic that you can think of. Linked lists, graphs, bottom-up merge sorts, dynamic programming. Some topics are easy. Others – maybe dynamic programming – aren’t quite sticking the way you want them to.
“Dynamic programming problems just inherently terrify me.”
— Ben B.
It would be awesome to have a bit of extra time. “Maybe I can delay my interview?”
Nope. The interview is next week. You’ve already rescheduled twice. This train isn’t stopping.
You’ve been at this for so long that it all kind of blurs together. Am I prepared? Is there something I should spend more time studying? Who even knows at this point?
This interview is a big investment. They’re flying you across the country to come interview in person. They paid for the flight for you, which is nice, but it’s not like you can really take any more time off work.
This really needs to go well! This is your chance to prove you are the rockstar they’re looking for. That you’re “Googly” enough.
After a lovely night of restless sleep and endless worrying “what if they ask me some problem I don’t know how to solve?,” it’s time for the interview…
At least they offered you coffee before getting started.
You go into the interview, sit down, hands sweating a little bit. There are some pleasantries first. They ask you about a project on your resume. Your answer rolls off your tongue. Things seem to be going okay.
And then BAM. They ask you a question on that one topic you were secretly hoping against hope wouldn’t come up. The one you never quite wrapped your head around.
“The panic state that comes when I get an unfamiliar problem and the brain paralysis that accompanies it.”
You flounder a bit. You remember bits and pieces, but these concepts never fully clicked when you were studying and you didn’t have time to solidify them.
You’re only halfway through an interview for a job you know won’t get.
But you still have to sit there and muddle through.
After painful minute.
Then there’s an awkward “thanks for taking the time” and you’re out of there. Finally. Do not pass go. Do not collect $200.
Now I know this all sounds bad. And it is.
But here’s the worst part: Interviewers know exactly what types of questions to ask to trip you up.
And don’t expect them to hold back in the interest of taking it easy on you. A warm smile and pleasant smalltalk might help them overlook some minor flaws in your code, but they’re still going to ask you those same tough questions.
When they really want to trip you up, interviewers can always fall back on dynamic programming. The one topic where most people don’t understand it and most of those who think they understand it can’t apply it.
If you really want to take your interviewing to the next level and get that elite job that you deserve, you need to kill it at dynamic programming.
So knowing this, why not just spend a few extra hours studying dynamic programming and be on your merry way? Unfortunately, it’s not so simple.
Dynamic programming is an inherently counterintuitive type of problem solving. It requires you to completely invert your normal way of thinking.
When most people study for interviews, they go to practice problems. Leetcode has almost 100 dynamic programming problems alone.
However, by only solving practice problems, they never learn to reason about dynamic programming.
Rather, by drilling practice problems, you learn to hack away at a problem and try to intuit the right answer. If you get it, that’s great, but it doesn’t actually help you improve your process. At best, you learn some patterns that will slowly help you intuit solutions more quickly.
And with something as counterintuitive as dynamic programming, finding the correct answer is often sheer luck. The patterns are hard to spot.
Studying this way makes finding the right answer on your interview a crapshoot. Did you see the problem before somewhere in your studying? Is it similar enough to a problem that you know that you can translate the solution over from that other problem? Can you just see the answer?
It’s this uncertainty that screws people over.
So what options do you have if you want to build your confidence in solving dynamic programming problems?
You can turn to Google or search on Youtube. There are a decent number of articles and videos out there. However, almost all of them show solutions to the same basic dynamic programming problems without really showing you how to solve them. Fibonacci numbers, anyone?
You can keep doing more practice problems. Maybe if you do enough you’ll start to identify recurring patterns that you can use. You’ll have to go through a lot of problems, though. So much for saving time to study other topics.
You can read books. An Amazon search returns 4500+ results for “dynamic programming” and then you have to wade through a sea of books that look like they belong in a graduate-level CS theory class. Not that there’s anything wrong with that but that sounds like a lot of not-very-fun, not-very-necessary work to me.
You can always go to the source to study. A little mathy for my taste, though.
The most successful engineers have figured out dynamic programming. They made it through the interview process at Google or Facebook and now have endless career opportunities in front of them. Everyone wants to hire a Big 4 engineer. Not to mention all the perks of having a highly respected job with free food and unlimited vacation.
Does getting a job like that sound far fetched? Nailing dynamic programming will make it a lot more attainable.
Until now, your choices for learning dynamic programming have been Google, practice problems, and books. These have been the “best” options available to you. But honestly, they’re not great. Interviewing for jobs shouldn’t have to be a full time job in and of itself. You shouldn’t have to read multiple theory textbooks just to understand one super narrow subset of problems.
I'm the founder of Byte by Byte, a site dedicated to helping software engineers just like you land their dream jobs. Over the past 3 years, I’ve helped tens of thousands of students just like you master the skill of interviewing.
Coding Interview Mastery: Dynamic Programming is my revolutionary video course on dynamic programming to help anyone effectively solve dynamic programming problems in their interview.
Over the past year, I’ve spent countless hours distilling all of dynamic programming down into exactly what you need to ace any question in your interview. I’ve packaged this information into a 3+ hour video course and tested the material with dozens of students.
This course focuses precisely where other materials fail; it teaches you how to solve dynamic programming problems in your interview. I never give you the solution without showing you exactly how to get there. The system in the course, the FAST Method, is designed to help you solve any dynamic programming problem, even if you’ve never seen it before.
If you’ve been struggling with dynamic programming in your interviews, then this course is for you. It will take you from not knowing anything about dynamic programming to solving any problem your interview throws at you with ease.
In module 1 you will learn to:
In Module 2, we’ll explore…
I have spent months developing this material and had dozens of students experience incredible successes using these recursive strategies. I know this tested methodology works. However, if you work through the course material and don’t get positive results, email me and I will refund your money 100%.
Are you ready to master recursion today?
I already have your eBook. How is this course different?
While this course and Dynamic Programming for Interviews cover the same basic material, this course goes into much greater depth. There are many additional practice problems, more detailed descriptions of each step of the FAST method, and obviously the course is mainly video content. If you feel like you learned everything you needed to know from the ebook, this course may not be right for you. However if you’d like to take your dynamic programming skills to the next level and really solidify those skills, this course will be perfect.
Are there any prerequisites to this course?
This course is accessible to anyone with strong computer science fundamentals. In particular, you will need to understand recursion, as that is required but not taught in this course.
If you are rusty, I provide plenty of materials to review recursion, and you have lifetime access to the course so you can always take your time to bone up on recursion first and then come back to it.
Why should I pay when there are so many free/cheap options out there?
Yep, there are other options out there that will cost you less money in the short run. But ask yourself, “How much is getting my dream job worth?”
This course will not just give you solutions to memorize, but really teach you the mental frameworks you need to work through these problems, giving you the opportunity to truly succeed at your interviews.
Why does the course only include 14 practice problems?
People constantly come to me wanting more practice problems. More, more, more. But rarely do they realize why. When you approach studying with this mindset, there is a subtle shift towards memorizing solutions rather than actually learning the process. By going through tons of problems, you are basically trying to ensure that you’ve seen every possible problem before your interview.
This course takes the opposite approach. In this course you learn how to solve problems, so it doesn’t matter which problem you get asked. You have the framework to solve whatever problem you’re presented with. Therefore, I’ve provided a representative sampling of problems that you can use to practice the FAST Method without getting bogged down in having to solve dozens of problems. Once you know the methodology, that’s just not necessary.
What language is this course in?
This course is primarily taught in Java. However, the concepts are universal. As long as you have basic comprehension of Java, you will be able to apply the content to the language of your choosing.
Here’s what some students have said about the course:
“[Coding Interview Mastery: Dynamic Programming] is the best among everything that I have come across on the internet. Resources like GeeksforGeeks, InterviewCake and Cracking Coding interview are really good for interview preparation. I had gone through most of them, but I was never confident and never really understood how to solve DP problems before taking this course. After going through the course and using other additional resources (when needed), now I feel confident that I can tackle dynamic programming problems in my interviews (even if I have not seen that problem in the past). I am very comfortable using the FAST method (especially the top-down approach). I am gaining more confidence every time I go through the video lectures. This course is a very good supplement for interview preparation as well as understanding how to implement solutions to DP problems for someone taking an algorithms course in school.”
“A great course that will help you with DP.”
“Things I loved about the course were the clarity of the solutions and the unique approach to problem solving. I also got more comfortable solving recursive dynamic programming problems. In the past, I had problems solving new DP problems. After taking the course, I am able to solve these problems with clarity. [I would recommend this course for] anyone who wants to become a better programmer. I think this course is not only helpful for interviews but also to help you progress as a engineer. The concepts learned here can be applied to various problems.”
— Amit C.
Are you struggling with dynamic programming? Does the stress of these sorts of problems screw you up in the rest of your interview? Have you skipped studying everything else so that you could focus on dynamic programming only to get screwed over by a simple interview question you didn’t study for?
If so, then this course is exactly what you need.
When you sign up, you’ll get lifetime access to:
Before you go, I want to tell you a quick story.
When I was in college studying computer science, as well as after I graduated and started my career as a software developer, there was a pervasive idea. I don’t think anyone said it outright, but it was definitely something I was led to believe: Software engineers do everything for themselves.
No one had to say it, but it was visible in the culture.
“Oh you don’t need a book, just read the documentation and figure it out.”
“I wanted a tool to make such-and-such simpler so I just coded it up myself.”
The implication is that software engineers don’t buy things. They don’t take shortcuts. The only way to succeed is the long way.
While I was researching this course, I came across a Reddit post whose comments perfectly reflected this idea. The OP was asking what he could do beyond simple practice to improve his recursion skills faster:
Well I’m here to tell you that there is a way. If there’s one thing that I’ve learned from building this business, it’s that you can make exponentially more progress by investing in yourself.
Whether you read books, take courses, or find a coach, learning from someone who has done what you want to do is the best way to get ahead quickly. This is the greatest shortcut there is to success.
Your time is valuable. You could spend years learning recursion if you really want, but that’s just not necessary. This course will teach you everything that I spent years learning in a fraction of the time, letting you get back to the rest of your studying.
Ultimately, how much do you want the job? If you’re truly serious, then this is the best way to get there. You can try to learn dynamic programming on your own, but you will spend hours and may still not get to where you want to go. If you invest in yourself now, you will never have to worry again about failing an interview because of dynamic programming. You’ll quickly get to where you need to be and then you can go back to studying everything else.
Everyday you delay, you’re competing for jobs with people who are DP pros. Your dream job is out there and it’s yours to take.
Join Coding Interview Mastery: Dynamic Programming today!