Amy M Haddad

Sign up for my Programming Thoughts newsletter:

Level Up with Python, JavaScript, SQL, and Problem-Solving

A good programming resource is hard to find. Here, I highlight some of the best resources I’ve used, organized by topic.

If you’re learning (or looking to get better at) Python, JavaScript, SQL, or problem-solving, then read on. Here, I offer several resources to help you on your journey.


Python Crash Course by Eric Matthes - If you’re new to programming and to Python, this book is a great place to start.

Matthes offers clear explanations of core programming concepts, like loops, functions, files, and classes. You’ll not only learn what a dictionary is and how to write one, for instance. But you’ll also get real-world examples of when to use it. Plus, many of his code examples offer line by line explanations. This will help you get better at reading (and understanding) code.

Ace Python Interviews by Reuven Lerner - This free course contains 50 instructional videos on Python topics organized into three levels: beginner, intermediate, and advanced. Each video focuses on a question that Lerner addresses in a screencast. You’ll learn how to swap variables, for example, but you’ll also learn why this works.

His explanations are supported by live code examples. You’ll see him write functions, classes, or conditionals to explain each concept. Lerner is an excellent teacher. So you’ll build your Python knowledge, while getting into the mindset of a great programmer.

Python Workout by Reuven Lerner - This book is another fantastic resource Lerner offers. It’s filled with 50 problems that dive into core parts of the Python language: strings, dictionaries, functions, files, lists and tuples, among others. This book is practice-heavy: after a brief introduction to a topic, Lerner gives you a problem to solve.

A point of distinction, however, is the thoughtful solution he provides. He not only provides the answer, but also a detailed explanation. As a result, you learn how to break down a problem, use the best tools to solve it, and understand each step of the way. In addition to the 50 core problems, Lerner provides extra problems (without solutions) at the end of each chapter for more practice.


Modern JavaScript - Execute Program - The Execute Program’s Modern JavaScript course is a comprehensive survey of modern JavaScript features, from ES5 through ES2017. You’ll learn about functions, classes, symbols, destructuring, and arrow functions, among many, many other topics.

The Execute Program offers a successful recipe for learning and retaining information. This course (and all of the courses offered through the Execute Program, including the SQL course listed below) offers an interactive teaching approach. Each lesson is focused and practice-heavy: you’ll work through problems throughout each lesson.

The courses are also review-heavy: you’ll complete problems on previously learned material before moving on to new material. It uses spaced repetition to track what you know and what you need to work on.

JavaScript: The Hard Parts, v2 - Will Sentance on FrontEnd Masters - Sentance goes beyond surface level and tackles core JavaScript topics in this course, including: the thread of execution, callbacks, and promises. He makes tricky topics, like closure, clear and easy to understand.

Sentance differentiates himself by his teaching approach: he diagrams everything. That said, you see what happens under the hood—line by line—when you call a function, for example. You see him add to the call stack and pop off of it. His approach is hugely beneficial for learning purposes: Sentance makes the abstract concrete.


SQL - Execute Program - Learn SQL with the Execute Program’s SQL course. This survey course covers many of the core topics of the SQL language, including: creating tables, using joins, handling conflicts, and using foreign and primary keys.

The teaching approach is the best part of this course (and all of the courses offered through the Execute Program). The Execute Program does things differently (as I point out above regarding its JavaScript course)—and it’s a good thing. You'll learn and retain the information. Its small and focused lessons are practice-heavy, meaning you’ll work through problems throughout each lesson. This course (like their others) is also review-heavy, which helps ensure that you understand the information at hand before moving on.


How to Solve It by George Pólya - This is a must-read for any programmer at any level. In it, mathematician George Pólya explains the problem-solving process. Although he writes through a mathematical perspective, the principles are timeless and easily applicable to programming.

Get Solving

There’s no way around it: to get better at problem-solving you’ve got to solve a lot of problems. Here are a few platforms and resources to try.

Exercises for Programmers by Brian Hogan - Hogan provides practical, real-world exercises that are organized by topic, such as files, data structures, and functions.

The exercises in this book are like an onion: you can solve the same one over and over again and gain new insights each time. That’s because Hogan offers several challenges and a constraint for each exercise. Plus, the exercises are not tailored to a specific language, so you can solve an exercises in Python now and JavaScript later.

Exercism - This programming platform offers a variety of problems that range in difficulty. What I like best is its focus on tests: there is a file of tests for each problem. Solving problems on Exercism was my start with Test-Driven Development.

LeetCode - There’s no shortage of problems to solve on LeetCode. But it offers an important benefit: there are usually multiple solutions with detailed explanations for each problem you solve. As a result, you’ll get better at reading code, considering time and space complexity, and thinking about many ways to tackle the same problem.