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!

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.

W3Schools

https://www.w3schools.com/

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)

https://developer.mozilla.org/en-US/

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!

freeCodeCamp.org

https://www.freecodecamp.org/

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.

Codecademy

https://www.codecademy.com/

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.

Scrimba

https://scrimba.com/

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.

Code.org

https://code.org/

Description: Code.org 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!

Scratch

https://scratch.mit.edu/

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”. 

Trinket

https://trinket.io/

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 (https://www.pygame.org/) in the browser!

Khan Academy

https://www.khanacademy.org/

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!

CodeCombat

https://codecombat.com/

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. 

WoofJS

https://woofjs.com/

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.

P5.js

https://p5js.org/

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

Kaggle

https://www.kaggle.com/

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

https://r4ds.had.co.nz/

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)

https://www.coursera.org/learn/algorithms-part1

https://www.coursera.org/learn/algorithms-part2

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.

Visualgo

https://visualgo.net/en

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!

HackerRank

https://www.hackerrank.com/

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.

Coderbyte

https://www.coderbyte.com/

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.

Codewars

https://www.codewars.com/

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

https://www.interviewcake.com/

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.

DEV

https://dev.to/

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.

CodeNewbie

https://www.codenewbie.org/

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

https://www.indiehackers.com/

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.

WomenMake

https://womenmake.com/

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

https://thebit.tech/

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!