Here are some helpful and interactive SQL resources:
Then check out this great article by the always inspiring and informative Laurence Bradford: 11 Websites To Learn To Code For Free In 2017
Here’s a great article on how to apply for jobs effectively and efficiently, improve at interviews, and get a great job:
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.
Here’s a great article on learning: Learn Smart, Not Hard: Applying Learning Research to Learning Programming
Nice explanations on how to learn actively and effectively.
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.
Check out this amazing article on learning programming: Gearing up for success.
I wish this had been written when I first started.
I have especially benefited throughout the years from using The Pomodoro Technique, concentrating hard and then going for a walk/resting my mind, and focusing on the process of fun and learning instead of the outcome.
But to get all of the actionable tips read the article here: Gearing up for success.