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.
I read this interview with competitive programmer Ahmed Aly: Why Renowned Googler Ahmed Aly Chose HackerRank and what really stood out to me was his advice:
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.
This was my previous LeetCode Update and this was my Original LeetCode post.
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.
Also to make sure I can do new problems in random topic order I use TopCoder.
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 🙂
So you have been learning how to code, networking, and building a portfolio. But are you ready to start applying for jobs?
This article has the answer: How You’ll Know You’re Ready to Start Working as a Web Developer
And this video also has the answer: Question: How Do You Get Enough Experience to Apply for Programming Jobs?
Now how do you actually apply to jobs?
If you live in an area with lots of jobs like Southern California, New York, San Francisco, Seattle, etc. here’s how you can do it:
- Set up your resume and Linked In. Post your resume to every job site you can find.
- Register and use job sites that have one click applications. A few are Zip Recruiter, Dice, Monster, Career Builder, Indeed, Simply Hired.
- Every day apply to 15 jobs. This will only take a few minutes and will result in 100 applications a week.
- Focus on the process over the outcome. Think of interviews as lectures in disguise. Unfortunately you will possibly get rejected dozens or even hundreds of times. But as long as you learn and grow from each experience you will become an even better candidate.
For instance if you get rejected 3-4 times because you have never used AngularJS, but you then start learning AngularJS and demonstrate this in your portfolio, you will become an even stronger applicant.
- Keep learning, building, and applying. You will find a great job because an employer will be impressed by your skills, determination, and knowledge. You can and you will get hired!
First get acquainted with the basics. Make sure that coding is fun and interesting. I recommend Codecademy for a free and fun introduction to programming.
If structure is what you crave, you can learn from Free Code Camp or The Odin Project while building the assigned projects.
If you prefer to blaze your own path, first decide on how frequently you want to build a site. Keep in mind that a greater frequency of building will result in more variety but less depth and vice versa.
Here is a great example of building a portfolio by creating weekly sites: How I finally learned to build stuff with Rails.
And here is inspiration in the form of learning by building daily sites: How to Get Inspired about Web Development.