Here are some resources on coding interview patterns:
- https://www.educative.io/courses/grokking-the-coding-interview (PAID)
I recently read this article: The Interleaving Effect: Mixing It Up Boosts Learning.
A few interesting points were made:
Blocking involves practicing one skill at a time before the next (for example, “skill A” before “skill B” and so on, forming the pattern “AAABBBCCC”), in interleaving one mixes, or interleaves, practice on several related skills together (forming for example the pattern “ABCABCABC”).
Overall, the interleaving effect can be strong, stable, and long-lasting.
I am currently learning from Pluralsight courses. I think interleaving works nicely with Pluralsight because the modules are around 30-60 minutes, which can fit into a Pomodoro because I play the videos at 2x speed.
I also feel like I have more fun because I can take several courses at once and finish a module from each course every day. Plus I get the variety of many different subjects, and the repetition when the courses overlap.
Ahmed, what advice do you have for people who want to become great programmers like you?
Don’t try to solve harder problems unless you are really good at solving the easier ones. That means solve a lot of really easy problems (that could be hundreds), that will improve your coding skills, which should be the easiest skill to gain. Then go to little bit harder problems, and so on.
Here are some additional resources for data structures and algorithms practice:
- Firecode.io I have only used this for a few days but it is amazing! It has a very user-friendly interface and it is also designed to provide spaced-repetition of problems to enhance learning and memorization.
- Pramp was introduced to me by Infinitely Finite and is also highly recommended in Mohsin Ali’s guide. Pramp provides free interview practice with other developers. Pramp has helped me improve at solving problems, explaining my thinking process, and teaching and helping others improve their algorithmic coding.
- Geeks for Geeks Practice is great because problems can be sorted by company, topic, and difficulty. There are countless problems and there are plenty of explanations as well. I have fun solving problems here and improving my ranking 🙂
- Tushar Roy‘s video explanations are very organized and easy to understand. He breaks down concepts step-by-step and also draws out every step, and then shows how to implement the concepts as code.
- Hacker Rank has problems from Cracking the Coding Interview along with superb video explanations by author Gayle Laakmann Mcdowell.
- A2 Online Judge has an endless supply of practice problems organized by category.
Before I was doing the LeetCode algorithm problems in order of difficulty. I was doing and redoing the problems in random topic order.
I am now doing the problems by category. I am not finishing the category until I am able to solve the problems in the category. I think this is an improvement because it is more drilling and practicing of recalling and typing the correct solution. It is definitely more difficult than just searching for patterns, but it is providing me with a better understanding of what each line of code does in a solution.
I have recently begun to do code challenges from TopCoder.
I first heard of TopCoder from John Sonmez here: So You Want to Become a Better Programmer? (TopCoder).
I started by doing the archived problems here. The problems are sorted by the percent of competitors who were able to solve them–basically in order of difficulty.
The questions can be fun but a few of them are impossible for me to understand and the interface requires a very large monitor for me to see everything. But overall it has benefited me because I get to attempt to understand a requirement, pass tests, then look at successful and cleanly written code from past competitors.
Check out this great post by Joanna Chen: How I landed a Google internship in 6 months
She has has great advice on building, practicing coding problems (Pramp.com), meeting people, applying, etc.
Special thanks to Siddharth for being the first to introduce me to Pramp.com for free interview practice.
Here are the sites I have experience with and my thoughts
- LeetCode is excellent because there are many problems and explanations. Furthermore the problems without explanations have answers and commented solutions in the discussion boards. It is the best online judge in my (limited) experience.
- Cracking the Coding Interview has many questions and detailed answers in Java.
- Data Structures and Algorithms Made Easy in Java is excellent. Sure there are many, many, many typos. But it has so many code samples for each of the data structures, explanations from worse (brute force) to best (optimized) along with advantages and disadvantages of the many possible solutions.
An honorable mention goes to Free Code Camp. The first time I ever had fun solving code challenges was at Free Code Camp. They did an amazing job of starting off with relatively easy challenges, then they raised the bar. Before I knew it I was doing difficult challenges, yet the hours flew by.
Here are the steps you can take to learn web development and get hired. This advice is based on my experiences so it is extremely biased 😉
- Save lots of money, ideally enough to cover 2 years of expenses. This would give you the option to quit your job and focus 100% on coding.
- Learn for free and get free help.
- Get inspired. Read How to Get Inspired about Web Development and You can get a coding job!
- If you have done steps 1-3, you can now begin your boot camp.
Commit to building a site every day and blogging about what you have learned and built. Remember Jennifer DeWalt’s advice:
Throughout the project a start small, keep going mantra was in my head. It is important to understand that you don’t necessarily need to understand to get things working. It is just as important to keep moving forward. The understanding will come eventually.
- Fully commit. Be willing to build 30 sites in 30 days, 100 sites in 100 days, 180 sites in 180 days, whatever it takes to get hired.
- After 30 days of building, revamp your resume and start applying for jobs.
- Prepare for interviews by doing code challenges. Free Code Camp has fun problems as does Code Wars.
- Don’t give up. You can do it! Keep going until your dream job is your day job 🙂