Do less, better: Essentialism in a nutshell

Minimalist photograph of a light bulb hanging from the ceiling.
Photo by Adrià Tormo on Unsplash

As developers, we like to talk a lot about efficiency. Maybe it’s the engineering mindset or the sense that we want to always be improving and doing things better. Or maybe it’s because we care about making optimizations. Either way, it’s something that we value highly.

Essentialism is about applying that sort of efficiency to our life. It’s about cutting through the noise and the extra baggage and getting to the core of what needs to be solved or fixed. It does so primarily by eliminating what’s not working and focusing on what’s actually important. 

I just finished reading the book Essentialism: The Disciplined Pursuit of Less by Greg McKeown and this is my take on it. It was recommended to me by a developer I respect and I thought I’d spend a few minutes sharing what I learned in hopes that others will find it useful too.

What is Essentialism?

The whole premise of Essentialism is based around the idea of doing less, but better. Much of the book is spent comparing two types of people- what the author calls Essentialists & Nonessentialists. The Nonessentialist is your classic overstressed workaholic who makes too many commitments. It’s the person that is always busy yet still says yes to everything. They’re the folks that are outwardly successful but always seem to get bogged down in the weeds. It could also be the person with a thousand side projects that never see the light of day.

For me going through the book, the descriptions of Nonessentialists often hit too close to home. We’re living in very chaotic times and life is rough for so many people. We’re also in a spot where it’s easy to get swept up into all of the “stuff” that doesn’t really matter.

What Greg McKeown is arguing for, though, is a different perspective and way of being, what he calls the way of the Essentialist.  It can be summed up with the mantra of “do less, better”.

Do less, better

The three main components of essentialism, then, are as follows: 

  1. Individual choice
  2. Prevalence of noise
  3. Reality of tradeoffs

Let me explain about each of them.

First, as individuals, the idea is that we have the power to make choices. A choice is an action. It’s something that we decide to do. It’s about recognizing that we have the power to say no to projects and ideas that don’t excite us. We can politely decline invitations when we have other important work to do. We can make fewer commitments and promises.

Second, we can recognize the prevalence of noise in our lives and work.  Much of what we read, see, and do is in the category of noise. It’s all of that unimportant and often “urgent” work that we get caught up in. There are infinite possibilities out there to distract us from what’s important in our personal lives and work. As a result, we end up focusing on points that don’t really matter. It takes a very focused approach to be able to cut through it all and to find what’s essential. 

Third, we can come to terms with the reality of tradeoffs. People run into trouble is when they try to do everything. The end result is that their attention and focus gets diluted over too wide of an area. You may make an inch of progress in multiple different areas, but you never excel in any one spot. By cutting out unessential tasks and projects, we can open up more space to work on what we care about. The most important component, however, is to choose. And choosing means yes that there is undoubtedly something else (possibly many things) that we’ll need to say no to. We need to welcome such tradeoffs rather than trying to always jam more into our schedules. Learn to be your own best editor by graciously cutting what isn’t working for you.

Be the editor of your life

Watch out for statements like: 

  • I have to.
  • It’s all important.
  • I can do both.

We want to think we can do it all and that we’re superheroes. The reality, though, is that we can’t. We can’t be in two places at once. We can’t focus on two activities at the same time. We can’t be experts in everything. We can’t be everything to everyone.

Instead, try these statements:

  • I choose to.
  • Only a few things really matter.
  • I can do anything, but not everything.

The idea is to focus on being present for the stuff (people, projects, work) that really matters. When in doubt, Greg McKeown recommends applying the 90% rule. It’s either a Heck Yeah!! or a no. Don’t get caught up in anything in between. To borrow from Marie Kondo, we have to learn to keep only what sparks joy. Everything else, we need to graciously and respectfully say no to.

Sleep more, rest more, play more

Finally, we need to recognize the necessity of rest, play, and sleep in our lives. As busy people, there’s a tendency to think of ourselves as machines (or at least I certainly did for a while!).  The faulty thinking goes that we can do it all, we can keep working, and we don’t need to take breaks. We just need to push a little harder!

Unfortunately, though, we’re humans. Trying to burn the candle at both ends usually ends in… well, exhaustion and burnout.  As someone who has personally struggled with these issues, I can tell you that it’s just not worth it. Make space when you can, particularly when you feel the most resistance. When we’re at our busiest, that’s often when we need our rest and play time the most.

TLDR: We need to make room in our schedules and lives for the things that matter the most.

Closing thoughts

In summary, Essentialism has been an eye-opening experience for me in a lot of ways. It builds upon a number of books and concepts that I’ve previously read about, most notably the book Rest: Why You Get More Done When You Work Less by Alex Soojung-Kim Pang and Marie Kondo’s lovely book The Life-Changing Magic of Tidying Up: The Japanese Art of Decluttering and Organizing.

If I had a complaint about the book Essentialism, it would merely be that the author focuses perhaps too much on CEOs and people whose lifestyles are frankly out of reach for many of us. His target audience is not the “everyman” or “every person”, it’s the high functioning business executive. So if you do read the book, keep that in mind.

I also want to recognize that the ability to say “no” and to guard your time aggressively in and of itself can be rife with a lot of privilege. If you’re struggling to make ends meet or fighting for survival, it’s a lot harder. If you’re in a toxic work or home environment, it’s a lot harder.  If you have kids, it’s a lot harder. If you are from an underrepresented community in tech, it’s a lot harder. If you’re currently dealing with fallout from the pandemic, it’s a lot harder. You get the idea. 

However, in its defense, I might argue that setting boundaries on your time and energy is even more critical when all is not going well or when you’re coming from a place of low personal power. It might even help you regain some semblance of your focus and control over your life to help you work toward a better situation.

Either way, as with most things, take what you can from it and leave what doesn’t work for you. No judgment here. Be gentle and kind to yourself. I just know that engaging with this philosophy has helped me already.

Some changes that I’ve personally made after reading this book is that I decided to quit volunteering once a week. I realized that it wasn’t contributing to my goals and instead it was leaving me exhausted after. I’ve also moved all of my teaching lessons to the weekends so that I can focus more on my writing and development skills. Baby steps toward a less chaotic schedule and hopefully baby steps toward honing in on what’s most important to me. 

Take-away Points:

I’ll leave you with my three main take-away points:

  1. Learn to guard and protect your time & energy. If it’s not a heck yeah, then it’s a no.
  2. Focus on what’s important to you, ignore the rest.
  3. Sleep more, play more, rest more. Especially when there’s no time.

Questions for Discussion:

  • What personal philosophy have you relied on? Have you used a version of essentialism in your life? What have you found that works for you?
  • How do you go about saying no to various nonessential commitments or responsibilities in your life? How do you decide what your priority is and where your focus should be? 
  • Are there any nonessential projects that you could say goodbye to this next week? What would your schedule look like if you had more time to do what you love? 

That’s all for now! 🙂

I welcome your feedback. If you enjoyed this article or if you have any questions or concerns, feel free to contact me on Twitter or write to me in the comments section below. Thanks for reading!

How to create your own Roadmap: A Self-Assessment Tool + Guide for New and Aspiring Developers

Are you an aspiring developer, or know someone who is? Or perhaps you’re someone later down the road but feeling stuck and looking for a new direction? No matter what stage you’re at, I hope you’ll find this tool useful in getting your thoughts out of your head and moving forward in a meaningful direction. 

Photo by Jaromír Kavan on Unsplash

Why this tool exists

With the advent of the internet, we have an infinite number of potential choices to make with regards to being developers. Do we want to be self-taught or should we sign up for a class? What languages should we learn? How should we arrange our schedules to learn the skills we need? What skills do we need anyway and how should we navigate all of that?

We’re also in the unique position of being our own teachers more often than not now. Faced with so many challenges, it’s easy for people to get stuck or burnt out. I know that I’ve seen this pattern time and time again with my students and with people I’ve mentored. I’ve also seen it in myself.

What I’m hoping to help with

I’d like developers to have more clarity of purpose and to be more easily able to define what they’re doing and why. I’d also like to help developers feel like they’ve got a sense of direction and that they know where they’re going.

The truth is that much of the work of learning development skills or becoming a programmer is internal. It’s about you as a person growing, making decisions, solving problems, and gaining new knowledge. There’s no shortcut or secret sauce that’ll quickly get you there.

The other truth is that I don’t have all of the answers. I can tell you what’s worked for me and give you advice, but that’s not always very helpful. Instead, what I’d like to do is to equip you with the tools you need to figure out what’s best for yourself. You are the one who will best guide yourself through this process. That’s the way I’ve designed this.

So, your secret weapon, and also one of the most helpful places to start is with is a critical self-assessment. What I mean is simply examining your life, where you’re at, and figuring out how to realize your dreams and aspirations. The one who can answer those questions… is you. If you don’t know where you’re at, where you’re going, or where you want to end up, you’ll almost certainly never get there.

A Quick Overview

With all that said, let’s get started by talking about the main components you’ll need for your dev journey. 

You need five primary components to get started. They are as follows:

  1. A clear decision 
  2. A solid direction
  3. A detailed plan
  4. Consistent action
  5. Review and reflection

For many people, you’ll probably find that these steps happen naturally for you over time, and that you’ve already been doing them (consciously or not) on some level. Many of us are taught at least some version of this in school, at work, from their parents, etc. It usually comes in the form of basic life skills. Please note: None of what I’m going to talk about is going to be particularly original in that regard.

So if you’re shaking your head saying you already know all this stuff, then let me be the first to say it– That’s awesome! If what you’re already doing works for you, please skip this article. Or better yet, please share your wisdom! Reach out to those around you and help them.  We need more people like you. 🙂

However, if you’re anything like me, simply knowing the main steps involved isn’t enough. We need to actually put them into practice. And particularly for those of us who are self-taught in some way or who are prone to ending up in uncharted territory, I find it useful to shine light on each component.

After all, the first step to debugging any system is figuring out where the problem is. That’s what we’re going to do. 🙂

The Dev Roadmap

The following questions should help you get a start on recognizing each of these five components in your own decision making process. 

What you’ll need is to set aside some time to work through these questions. I wouldn’t necessarily recommend trying to power through it all as fast as you can. Instead, try doing a chunk or a section at a time, or skip to the one that seems to be bothering you the most right now.

Anyway, without further ado, let’s start.

1. A clear decision

A decision is your firm resolve. This is the “why” of your journey. Why have you decided to become a developer or to learn these skills? Without this first commitment, none of the other steps matter.

The question you are trying to answer is: 

Do I want to become a programmer/developer/software engineer?”

Write down as many reasons as you can, from the tangible to the not so tangible.  Here are some prompts to get started:

  • Who are you learning to program for?  This could be for yourself, for future employers, for your customers, for your community, etc
  • What are your primary motivations for wanting to gain this skill set? 
  • On a scale of 1 to 10, how excited are you to learn to code?
  • Why are you trying to learn to code, study algorithms, learn about computers, etc?
  • Why do you want to make stuff?
  • What problems are you trying to solve? Why do these problems matter to you?
  • Who are some programmers that you admire and why? What is it about their work that you find fascinating or worthwhile?
  • How do you imagine your life will be different as a programmer?
  • What do you think the purpose of software development is and how do your other life goals fit in with it? 

Where/how this can go wrong: You spend too much time making a decision that you don’t ever get to the planning stage. Maybe you second guess yourself. Or, maybe you skip this step entirely and end up with a much bigger crisis later down the road (see also- “help! I picked the wrong profession!”).

My recommendation: Don’t overthink it, but give yourself a deadline for making a final decision. Then, stick with it. You can always change your mind later.  Also, beware if your motivation is anything less than an enthusiastic YES. You’re embarking on a big life commitment. If you’re already having second thoughts, it might be time to step back and rethink other aspects of your life. 

Your goal is to be able to say:

“I’ve decided to do this!”

2. A Solid direction

Next, you need a solid direction. You need to know where you want to end up, or at least some general idea of it. Obviously you’ve never been there before, so it’s okay if the details are still a little hazy. The point is to just generate some ideas at this stage. 

The question you are trying to answer here is:

“Where am I at, and where am I trying to get to?

  • What would you like to make? 
  • If you could learn to make anything you wanted without concern for budget, skills, time– what would that look like? Be specific.
  • What topics excite you the most?
  • What are some of your favorite apps, games, websites? What do you like about them? 
  • What do your favorite programmers do? Is that something that you’d like to learn too? 
  • What skills do you already have? Is there a way to combine them with your new dev skills?

Where/how this can go wrong: You get stuck in the inspiration / idea exploration stage or you get distracted by shiny project ideas. Multiple directions all seem exciting. Or perhaps you skip this step entirely and end up working on a project or topic that you hate. 

My recommendation: Do some research and take time to explore. Talk to people if you’re unsure and figure out what they do on a day to day basis. See if it’s something you might be interested in. Give yourself a set amount of time to explore. I’d also recommend you limit yourself to one or two subjects max so you don’t get too distracted. Like before, you can always change your mind if you realize you’ve made a mistake.  

Your goal is to be able to say:

“This is the direction I’ve picked.”

3. A Detailed Plan

Third, you need a plan. You need to have some way of breaking down the steps needed to get to where you want to go. Some milestones would be great, too. Milestones are helpful landmarks that you decide on that will let you know that you’re on track. Celebrate your wins, no matter how small.

This step is about converting your vision into actionable goals & steps. The primary question you’re trying to answer here is: 

“Where am I at right now, and how can I get to where I want to go?” 

  • What are some of the core skills that you’ll need as a programmer? How can you find out more about each of these skills?
  • What do you need in order to make this dev journey work for you?
  • What tools and resources do you have available to me?
  • How can you build in feedback systems to help yourself know you’re on track? Can you set up any milestones along the way? 
  • When or how should you reach out to mentors or guides?
  • Should you sign up for an online course, enroll at a university, or be self-directed? What are your options?
  • What is your main priority right now? What other commitments do you have right now that could get in the way of your current progress? 
  • How fast do you want to make progress on this? 
  • How should you divide up your time and what should you focus on during each learning session? 

Where/how this can go wrong: You spend too much time making plans and strategizing, so much so that you never move past this stage. Maybe you want to know all of the details before diving in or you spend too long considering what to learn and how to learn, but never actually start learning.  Or, you skip this step and end up getting lost frequently. Perhaps you experience a mismatch between your learning style and your chosen learning method. Keep in mind that some people really don’t do well as when self-taught and need more structure, while others thrive on it. You’ll need to figure out what will work for you via trial and error. 

My recommendation: Plan ahead about a week and have some long term goals in addition to your short term goals. But also, don’t overthink it. Make plans with what resources you have available and create a foundation. 

Your goal is to be able to say:

“This is my plan of action.”

4. Consistent Action

Next, you need consistent action. Having and making plans, even very detailed ones, are not enough without the action to back it up. To make this a worthwhile journey, you need to be able to dedicate resources to the endeavor– time and energy, usually. Sometimes money too, depending on your particular situation. 

This is the point in time when Shia LeBeouf comes on stage to tell you to JUST DO IT. But more realistically, it’s about showing up. Consistently. Day after day, even when the going gets tough. The primary question you’re trying to answer here is:

“How can I translate my plans into consistent action?”

Some questions to consider:

  • How can you add accountability & resiliency to your development journey? 
  • How will you track your progress? 
  • What resources should you make use of when you get stuck? 
  • How can you make sure that you bring your best self to each coding session? 
  • What does a good study session look like to you?  
  • How can you study and learn the materials more effectively?
  • How can you reduce distractions while you work & study?
  • How and when should you ask for feedback from others?
  • What does your support system look like?
  • What are some learning techniques that have worked well for you in the past? Can you apply them here?
  • How can you get the most out of each of the learning tools that you’ve currently got available to you? 

Where/how this can go wrong: You try to jam too much into one session and end up feeling too overwhelmed. You give yourself too large of an assignment and don’t break it down enough, so you get in over your head. Maybe you give yourself too little to do, and you get bored. Or perhaps you get busy with other parts of your life and fall off the bandwagon. You might also limit yourself to thinking you need to pay for a fancy course or bootcamp. While it could help, make sure you’re not just procrastinating.

My recommendation: Learn to pick yourself up again when you get stuck. Plan far enough ahead so that you can get into the flow of your work. Weekly might be a decent schedule to aim for. Also, keep in mind that research suggests that you’re better off dedicating a small amount of time daily to developing your skills than setting aside a marathon session once a week. Make your plans accordingly. But if your scheduling is too grueling due to other commitments or if you’re exhausted, also don’t beat yourself up about it. Just do what you can when you can. Your system doesn’t have to be perfect. It just has to work for you. Small amounts of daily progress are better than none.

Your goal is to be able to say:

“I commit to consistent practice.”

5. Review and Reflection

And finally, you need to set aside some time for review and reflection. 

People often forget this step, or think it’s unimportant. But a periodic review of all of your answers to the previous sections is helpful. You might find that your answers change over time. That’s okay. That’s good, and normal. Either way, it can help give you direction. Regular reviewing and reflection can also help you not sweat the small stuff. It can also remind you why you started this process in the first place. Be honest and patient with yourself. 

The primary question you’re trying to answer here is: 

“Am I on the right track right now?”

Here are some other questions to consider:

  • How does your dev journey feel to you right now? Are there any big chances that you’d like to make?
  • If you’re being 100% honest, are you happy with where you’re at right now career-wise? Education-wise? School-wise?
  • Are there any skill tracks that you’d like to focus more on moving forward? 
  • What areas have you been making progress in, and what might you be neglecting?
  • Do you need to switch up your focus? Are there other parts of your life that need attention? 
  • Have your goals or aspirations changed at all?
  • How is your schedule? Does it work with you and for you? Or does it cause you stress? Are there changes that you can make so that different parts of your life work more smoothly?
  • How is your concentration? Do you need to take more breaks or schedule in more down time? Are you feeling burnt out?

Where/how this can go wrong: You never take time to reflect on your goals, so you may continue working in the same way and on the same projects even after your goals have changed. Your destination has changed but like a good little robot, you continue doing the wrong job and can’t figure out why you’re not seeing the results you want.  

My recommendation: Keep a journal or devlog. Regularly revisit your goals, especially when you’re feeling stuck. Make course corrections as needed. Better late than never. You’ll thank yourself later, I promise. 

Your goal is to be able to say:

“I will review my progress on a regular basis. If I’ve gone off course, I commit to making changes.”

In Conclusion

Becoming a developer is a skill set and profession that takes time. Despite what anybody will tell you, it’s going to take a mixture of time, hard work, and luck. Success, of course, will be determined by what your goals are. However, I can almost assuredly guarantee that there will be setbacks along the way, and plenty of things that won’t go your way. There will be times when you make big mistakes or go off course. There will be wins, losses, and no shortage of unexpectedly painful bugs. However, there will also be great fun and excitement for those who seek it. 

What will the journey look like for you? 🙂 

I sincerely hope that it’s a fun and meaningful one!

I welcome your feedback. If you enjoyed this article or if you have any questions or concerns, feel free to contact me on Twitter or write to me in the comments section below. Thanks for reading!

Getting the most out of programming tutorials

Photo by Christina @ on Unsplash

Let’s talk about tutorials. Love them, hate them, they are everywhere and here to stay. From newbie developers to seasoned veterans, we all use tutorials from time to time.

In my experience, tutorials can be an excellent place to start when you’re learning an unfamiliar language, framework, or technique. Often they are one of the fastest ways to get a basic understanding of any material and to get something up and running quickly. However, they aren’t necessarily built for maximum learning. Like most things, you’ll get out what you put in.

The question then becomes, how can you get the most out of a single tutorial? Are there any tips and tricks? How can we be efficient about it all?

As an avid tutorial taker, here are some tried and tested methods to getting the most out of any single programming tutorial:

  1. Type everything out manually – No copy and paste, in other words. Take the time to actually type out every single line of code that you need. The reason being is that you’ll learn better the more time you spend with the material. And the more that you’re able to commit to memory, the faster you’ll be at it all. 
  2. Create a glossary – Highlight any unknown terms and then make a point to google them later. Summarize your findings in your own words in a sentence or two. Keep a record of what you learned. Update it as you go. 
  3. Do a line by line analysis of the code – Make sure you understand every step and that the syntax makes sense to you. Or if something is confusing to you, make a note to come back to it after. If at the end of the tutorial you’re still confused, try looking up the topic using other resources. Still stuck? Ask someone! You may even be able to reach out to the author of the tutorial for help. Other people are usually happy to clear up points of confusion for you!
  4. Keep a log of your progress – It doesn’t have to be super detailed. You could use Twitter, a blog, or even GitHub for this. I’ve even heard of people that write entire novels with GitHub, for instance. 🙂 But the important part is just to spend a few minutes recording what you did. If nothing else, it’s a great way to see how far you’ve come.
  5. Preview the martial – Before beginning a tutorial, spend some time previewing all that you will be covering. Skim the article, look at any pictures or diagrams, and consider what you already know about the topic. This helps to prime your brain so that when you actually do the tutorial, you’ve already laid the tracks for it (and you know what’s next!). Win, win!
  6. Work ahead of the tutorial – This one is more applicable the more advanced of a student and developer you become, but to the best of your ability, try to plan out or work out a solution to the problem before reading through the answers. Read the next topic headline and spend 10-15 minutes seeing if you can plan an approach. Or better yet, see if you can preemptively come up with an entire solution. At worst you end up getting stuck (see Tip #8). You now know where your knowledge limits are and what topics to review. And at best, you either have one or two outcomes. 1) You will have discovered another way to solve the problem that the author didn’t show. Very cool and empowering! Or 2) you will have solved it in a similar manner to the author and have thus taught it to yourself in a more engaging way. You’ll come away not only with the additional knowledge but a nice confidence boost to go with it. Whatever the case, you will have learned a lot in the process. Give it a go next time!
  7. Quiz yourself – this is something you can do throughout the tutorial or lesson, but do your best to commit concepts to memory. Research has shown time and time again that active recall is a key step in efficient learning. It will help you develop mastery of any new material. Bonus: Test yourself using your newly created glossary by creating flashcards. Lots of options here.
  8. Get stuck – Okay, hear me out. This one’s a hard sell but honestly, when I’m trying to learn new material, one of the greatest gifts I can have is getting stuck. I’ve learned to appreciate it even if it’s frustrating. Here’s why: Getting stuck forces you to really think. One of the major issues with tutorials is that they allow certain parts of your brain to shut off. You are simply following directions, like with a recipe. Getting stuck, on the other hand, is a surefire way of snapping yourself out of that. Use these moments to your advantage to really go deep on a topic.
  9. Take breaks when you need them – Completely stuck? Take a 20-minute break. Nap, eat, stretch, walk, shower, whatever you like. You’ll be surprised at how your brain may supply solutions and help you get unstuck. 
  10. Create a personalized cheat sheet – Make a summary of the tutorial once you’re done with it and fill it with the information you’ve learned. Include some code snippets and some high level concepts. If you can, also add in a 3-4 bullet point overview. Thanks to the Practicing Developer for this tip! 

That’s all for now!

Questions for discussion:

  1. What are your thoughts on the value of tutorials? Do you find them helpful? Why or why not?
  2. What study tips have worked for you, especially when covering new materials?
  3. What do you do when you get stuck on a tutorial? How do you get yourself unstuck?

I welcome your feedback. If you enjoyed this article or if you have any questions or concerns, feel free to contact me on Twitter or write to me in the comments section below. Thanks for reading! 🙂

Need help finding your next code project? Start here.

So you’ve completed a tutorial, or maybe even an online class. You’re really excited about it all! In fact, this is a big milestone in your developer journey & career! You should be proud!

However, after the smoke settles and the fireworks are gone, you might be left with the unsettled feeling of… what comes next? Where do I go from here? 

So first off, congratulations! You’ve reached a turning point. This is an awesome time to take some time out to reflect on where you’re at and where you want to go– to look over the project you just made and the skills you hopefully just learned! It’s also a good time to reevaluate your priorities and the direction you’d like to go.

But once you’ve done that, what do you do? If you’re out of ideas or unsure, here are some suggestions: 

  • Recreate the same tutorial project from scratch. You already took the tutorial, but now you need to test yourself to see how much you actually retained. No cheating on this one if you can. Only look at the answers if you get stuck for more than 15 minutes. Set a timer if you have to. If you can figure it out, great! You just learned how to figure it out yourself. If not, that’s great too! You just learned what topic you need to review more of– also a valuable lesson!

    Studying in this manner will test your active recall and problem-solving skills in a relatively safe, low-risk manner. After all, you can always look at the tutorial since the material is still there! Win-win!
  • Add additional features to the tutorial project. There are so many possibilities here. You could redesign the UI, hook the project up to a database, add authentication, etc. If it’s a game, you could try adding a multiplayer feature, a timer, a scoring system, or a save feature. The sky’s the limit here. Challenge yourself to modify the tutorial so much that someone wouldn’t be able to tell it’s the same project as before.

    This sort of exercise will test your ability to add/build on to an already existing project. It’s also relatively safe because you’ve already got something working! It may sound boring to repeat the same material, but there’s no better way to make sure you’re truly “getting it”!
  • Create a new project from scratch using the same concepts that you’ve just learned. Recreate a similar project to the one that you just made, but modify the content and core of it somehow. So if you just made a to-do list app using arrays, try building something that also uses arrays, but in a different way or for a different purpose.

    A new project using the same concepts will test your ability to apply the concepts you already know to a new project.
  • Create your own chimera/hybrid project using the material from two or more tutorials. Have you taken more than one tutorial recently? If so, try combining them into a single project!

    This type of project will stretch your ability to synthesize material from multiple sources.
  • Recreate someone else’s project. Or, mimic an app you already use on a regular basis – Create a simplified version of Instagram, Twitter, Yelp, Pinterest, etc. Or pay homage to a favorite developer that you have by studying one of their projects.

    This will test your ability to start creating projects independently but also your ability to study and observe already existing software. It might also give you a newfound respect for someone whose work you already admire!
  • Find a programming concept that you’re still learning and design your own app about it. Just learn about linked lists or queues? Try building something with that knowledge! Or, if that’s still too hard, spend some time brainstorming possible use cases for how you might be able to apply that concept in a future project. You never know what’ll show up later down the road! 

    This type of project will test your knowledge of core programming concepts & also help you learn how to build apps independently.

Still need ideas for a new project? Use an random idea generator! Or try creating your own idea generator tool! 🙂

Questions for Discussion

  1. Do you have a favorite way of studying & learning new material?
  2. How do you keep your knowledge fresh after you’ve finished a tutorial or class? Do you ever set aside time to review?
  3. What sorts of projects have you gotten the most mileage out of? What projects were the most fun?
  4. For more experienced developers- If you were starting out in your dev journey again now, what would you recommend to someone who was in your shoes?

I welcome your feedback. If you enjoyed this article or if you have any questions or concerns, feel free to contact me on Twitter or write to me in the comments section below. Thanks for reading!

Learn to Code Online: Free and Budget-friendly Resources to Get Started With

Quick Summary:

Hello world! 🙂 first blog post after a long hiatus!

I wanted to share a curated list of free & budget-friendly resources for learning to code.

The focus of this link collection thus far is on web development and python, but you’ll find plenty of opportunities to branch off to other languages too. I’ve also included a number of resources related to data science as well as data structures & algorithms. Whether you’re new to the world of coding or simply looking for more resources for practicing, I hope you find what you’re looking for!

If you would like to contribute to this resource list or have any recommendations, let me know in the comments below.

Table of Contents

| For Adult Learners| For Younger learners |

| Data Science | Data structures & algorithms |

| Communities & Support |

For Adult Learners:

These websites & tools should work for most learners.


Description:  Created originally in 1998 by a Norwegian company Refsnes Data, W3Schools is a collection of free resources & tutorials for web development.

My note: It’s a great tool for looking up various code snippets.

Mozilla Developer Network (MDN)

Description:  A collection of resource & reference guides for developers run by the Mozilla Foundation, a nonprofit organization.

My note: This is run by the same folks that develop the Firefox browser!

Description:  Founded by Quincy Larson, freeCodeCamp is a nonprofit learning hub & community that teaches people how to code.

My note: Great series of exercises for getting started with web development. I regularly send my students here if they express an interest in web development.


Description:  Codecademy is an online learning platform that teaches a variety of programming languages in browser including Python, JavaScript, and Ruby. 

My note: Many of the courses require a paid subscription, but it could be worth it depending on what you’re looking for.


Description: Scrimba is an interactive screen cast tool created by Scrimba AS in Oslo, Norway. Follow along with tutorials in the browser with this interactive tool / development environment.

My note: What makes this one noteworthy is that it allows you to stop the video at any time & edit the code via the editor.

For Younger Learners:

These are some helpful interactive tools & sites directed at getting younger students interested in coding. They might also be useful even if you’re an adult learner as they typically assume no prior knowledge or experience.

Description: is a nonprofit that provides K-12 computer science education for schools. 

My note: Most of the kids that I work with have used this site at some point or another. My favorite tool is the App Lab, which is a sandbox tool for developing mobile applications. Many of the students also enjoy it!


Description: Scratch is a block based coding tool that is aimed at teaching children to create interactive media, stories, and games. Scratch was created by the Lifelong Kindergarten group at the MIT Media Lab. 

My note: Scratch is what we introduce the younger kids to when they first start learning to code. Some features that I particularly like about Scratch is that you can remix and see inside all of the projects. They’re all “open source”. 


Description: Trinket is a coding & learning environment designed for kids, with a focus on Python. 

My note: We use this one often in the classroom. The Hour of Code is a great way to introduce kids to programming using typed languages (as opposed to block languages). I also like that you can create games with Pygame ( in the browser!

Khan Academy

Description: Khan Academy is a nonprofit organization founded by Sal Khan in 2005. It’s dedicated to providing learning resources in a variety of different topics.

My note: KhanAcademy is primarily known for its extensive math curriculum, but they also have a section for Computer Science & Algorithms. Worth looking at!


Description:  CodeCombat is a game-based education tool designed to teach students computer science concepts in JavaScript & Python. 

My note: CodeCombat is a great option for students who need a little more excitement / interactivity while they learn. 


Description: WoofJS is a coding tool in JavaScript for kids designed to bridge that gap between Scratch (block-based) & typed languages. 

My note: It’s a fun tool to use and allows some of the features of Scratch (drag and drop) but also stepping things up a bit in terms of difficulty. Great site for making simple games.


Description: p5.js is a JavaScript library developed by Laura McCarthy. Notably, it was designed to be accessible and inclusive to new developers.

My note: This is a great tool for younger coders who want to get started making sketches and digital art.

Data Science


Description: Kaggle is a data science community with a number of open source public datasets. They also have tutorials & guides for learning python, machine learning, and pandas.

My note: I’ve used this site briefly, but not extensively. They regularly host a number of competitions. While I haven’t participated personally, I’m sure trying it out would be a great learning experience.

R for Data Science

Description: This is a free to use online textbook developed by two authors Garrett Grolemund and Hadley Wickham that will introduce you to R and other related data science packages.

My note: Recommended by Brian (@ThatPhageGuy) on Twitter as a great resource for learning about R and Data Science. Looks good to me!

Algorithms & Data Structures:

These sites are largely geared towards candidates looking for interview preparation materials. However, they also double as good resources for learning about algorithms & data structures.

Algorithms (Coursera)

Description: A free two-part course series for learning about data structures & algorithms taught by two Princeton University professors Robert Sedgewick and Kevin Wayne. The language of choice for the course is Java, though the concepts can be applied across languages.

My note: I haven’t taken this course, but I’ve heard it recommended from several sources.


Description: A visualization tool for learning about various algorithms created by Dr. Steven Halim for his students.

My note: Very helpful site if you’re new to algorithms. It also features a few training tools & quizzes!


Description: HackerRank is a well-known site that has learning tools for practice coding & interview skills.

My note: I’ve been recommended this resource a few times, and it seems to be a favorite for helping students practice for interviews. Like the Coursera course, the language of focus is Java. They have support for other languages too, though.


Description: Another site dedicated to improving your coding & interview skills. It features challenges & courses.

My note: I haven’t used this one specifically, but I’ve heard it recommended a few times. I may give it a go eventually and update this listing.


Description: Designed to mimic a dojo, with Codewars you participate in a series of online coding exercises at various skill levels / kyu.

My note: I’ve personally used this one as my go-to for programming-related exercises. If I had a complaint, it would simply be that some of the challenges aren’t terribly moderated. So, the questions may be poorly worded or confusing. The upside is that they offer the challenges in multiple different languages.

Interview Cake

Description: This is a popular subscription site directed at helping engineers get better at technical interview questions.

My Note: To get access to all of the content requires a yearly subscription. It might be worth it if you’ve got an upcoming interview or exam.

Communities & Support:

There are lots of developer communities out there, some of which are more supportive of beginners & newbies than others. I’m listing the ones I’ve had personal experience with or others have vouched for.


Description: DEV is a open source community dedicated to collaborative learning founded & run by developers Ben Halpern, Jess Lee, and Peter Frank.

My note: DEV has an amazing community and countless development-related articles that are published around the clock. Be sure to check out the “Top 7 Most Popular DEV posts” listings for some great starting points.


Description: CodeNewbie is a community of programmers & other people learning how to code. It started as a biweekly TwitterChat by developer Saron.

My note: Very supportive community. They also have a podcast!

Indie Hackers

Description: An indie hacker community run by Courtland Allen. It has a full collection of resources & articles directed at helping others build online businesses & side projects.

My note: I don’t have any personal experience with this one yet, but it seems to be a great resource & community. Recommended by Fiona.


Description: A community created for women entrepreneurs. Created and moderated by Marie DM.

My note: I can personally vouch for this community as well! It’s not specifically directed at programmers, but you’ll find plenty of resources here. Marie is very welcoming. 

The Bit

Description: This is a free tool that matches self-taught learners together to complete online courses.

My note: I haven’t tried out this service personally, but it looks like it could be useful!