Mastery-Based Learning

Launch School
Launch School
Published in
23 min readApr 3, 2018

Note: this article is reprinted from https://launchschool.com/mastery

One of the core values that sets Launch School apart from some other coding schools out there is our emphasis on Mastery-based Learning. If the key to becoming a competent and confident Software Engineer is deep understanding of first principles, then the key to acquiring that understanding is through Mastery-based Learning (MBL). This is our core philosophy at Launch School and the principle that guides our curriculum and processes. Everything we do falls out of this core philosophy, including why we charge $199/month (more on that below). But what exactly is Mastery-based Learning? In this document, we hope to shed some light on what it is, what its pros and cons are, and how it shapes the Launch School experience.

If you’ve never heard of MBL before or haven’t seen it in action, hopefully this document will give you some insight into what it entails and how it’s implemented at Launch School. If you’ve heard of MBL before, hopefully this document will reaffirm your conviction and provide insight into how MBL informs the curriculum, structure, and even pricing at Launch School. But before we go into the details of MBL and its alternatives, let’s talk a bit about the background and motivation for this article.

Background

We get a lot of questions from prospective students who are contemplating starting to learn with us. Some of them include:

  • How do I get a job?
  • I have an idea for an app. How do I build it?
  • How do I become a professional developer?
  • How do I start a long career in software development?

The interesting thing about these questions is that the first two are asked way more often than the last two. The first one, “How do I get a job?” is by far the most frequently asked question. However, the latter two questions are ones that we rarely see. What’s the difference between these two sets of questions? The answer is that the first two questions are based on performance goals, while the latter two are what we call, mastery goals. The distinction between these two types of goals come from what psychologists call “Goal Orientation”. Goals that are performance-oriented tend to have a definite measurement, while goals that are mastery-oriented are more focused on the process. Performance goals are prevalent in the education system and the workforce in order to compel people to work harder. On top of that, most goal-setting advice, such as SMART or personal improvement plans, also focuses on performance goals. Because performance-goals are so ubiquitous, it’s very natural for prospective students to ask performance-oriented questions, such as “how do I get a job?”.

If we keep probing and ask them to further articulate their question, they might continue with “I want something that…”:

  • …will ensure me a job at the end
  • (and for the even more ambitious)…has employers tripping over themselves to hire its graduates

Again, these demands are doubling down on attaining performance-oriented goals. The wording of these questions hints at some sort of finality. There’s this notion of “graduation” and a “finishing line” or “at the end”. Nonetheless, these are natural questions and are very typical. Although there’s nothing inherently wrong with these questions, training institutions usually react to them and build curricula that fulfill these performance-oriented demands.

Current Education Models

The prevailing education model that satisfies performance goals is the factory-based education model. The factory-based model directly caters to performance-oriented goals. When the goal has a definite fixed end, the training program will have to follow and in turn, have a definite end. This, as we know, is the most common educational model and is by no means limited just to the learn-to-code industry. In fact, this is how the vast majority of us went through our own journey in education, from middle school to high school to college and so forth.

We call this the factory model because, in a sense, this model puts students on a conveyor belt and moves them along from one topic to the next with complete disregard for comprehension or mastery. It’s pretty common for people to pass a class even after receiving a C grade, and these students rarely catch up, especially when concepts are cumulative, like math or science.

The factory model’s main concern is time and not comprehension: you learn for a fixed amount of time, and then you move on regardless of the level of comprehension. However, it’s not just the lack of time that’s the problem in factory-based education. Since mastery of knowledge is not the focus, curriculum designers of factory-based education aim to produce a bell curve of students’ comprehension distribution. In a time-based course, curriculum designers measure their own success not by trying to increase students’ mastery of the material, but by how closely the students’ comprehension distribution fits the bell curve. This almost means that the curriculum by design ensures that most students do not reach an A+ level of mastery. According to the factory-model of education, mastery is only reserved for the top few.

Let’s look at how this model manifests itself in the learn-to-code industry. The following image contains a selection of blurbs from websites of various coding boot-camps.

What do all of these pithy sayings have in common? They reflect performance-oriented promises based on the factory model of education. While it’s easy to criticize these promises (who truly thinks they can become a professional anything in 12 weeks?), the reality is that these training programs are forced to make up some arbitrary duration and finality because students have performance-oriented demands. Of course, the problem that they don’t mention, though, is the problem within any factory model education system: variable comprehension among graduates.

Prospective students inherently understand this, too. So while these pithy promises were meant to address the students’ performance-oriented goals, they also cause skepticism and questioning because, of course, nobody wants to be at the wrong end of the comprehension distribution at graduation time. This skepticism is widespread because we know that from our previous experiences in school — middle school, high school, college, etc — not every student gets an A+. It means that not all students come out with the same level of comprehension. Common questions that prospective students might follow up with to quell their growing skepticism include:

  • What’s your graduation rate?
  • What’s your hiring rate?
  • How can you guarantee that I can get a job?
  • What’s the teaching format like?
  • Who are your instructors?
  • Where do your training materials come from?
  • Can someone help me install / configure / setup Vim/Ubuntu/Virtual Machine?
  • What if I’m too old/young, or didn’t attend college/too much college?

What we see is that there’s a lot of anxiety and uncertainty behind these questions, which arise out of our previous experience with the factory-based model of education. Intuitively, we know that this system doesn’t work for everyone, so we need to know what the chances are that we’re on the right side of the grading curve. Not everyone will become a star, and yet, the price of admission is the same and everyone spends the same amount of time in the course. These questions are basically saying “I need to know what are my chances of landing on the top end of that curve because I’ve seen it fail people — friends, family, or even myself — over and over and over again”.

To better deal with these tough questions, training institutions organize their factory into two main variants:

  1. Variable Input → Variable Output
  2. Quality Input → Quality Output

Variable Input Model (Community College)

In this variant of the factory model, the input to the system (students) is variable. This input can be variable for all sorts of reasons; not everyone will have the same background or the same amount of time or resources on their hands. For example, it’s pretty common for some students to work full-time while going to school, while other classmates not only don’t have to work, but also receive 1-on-1 tutoring and personal assistance in their learning. And yet, the time to master the course material is the same for both of these students: the test is on Friday for everyone no matter what.

This variable input is then processed through some sort of educational machinery in a fixed duration — 12 weeks, 24 weeks, 6 months, and so forth. We call this model the “community college” model because the input isn’t filtered and its admissions, for the most part, is open to all. When the input is variable and the time duration is fixed, the output (graduates) have variable comprehension. There’s no way it can be otherwise. There are certainly star graduates in this model too, but employers have to sift through and look for them, because by design, only a limited few are A+ stars. The end result is that it’s impossible to ensure a job to all graduates in this system of education. This is the type of education that most of us have received all our lives.

While variable output in a system like the above is inevitable, there’s another variant of the factory model that minimizes variation in output. We’ll discuss that next.

Quality Input Model (Ivy League)

This variant of the factory model minimizes the variation in output quite a bit. As you can see from the diagram, this lower output variation is achieved by having a strict admissions process that filters out the less prepared from the applicant pool, only leaving stars as input. If you have to work full-time, you’re out; if you didn’t help set up an orphanage in a 3rd world country last summer, you’re out; if you don’t have a CS degree, you’re out. This is the same model that is implemented by the top universities around the world, so we call this the “Ivy League” model. The actual educational machinery, however, didn’t really change; it’s still factory based, which means there’s still a fixed duration to master the material. But by changing the input to only allow stars to come through, the system outputs a much lower variance in quality. Employers love this model because they have a much easier job here and that’s why they prefer graduates from Ivy League schools. You don’t even have to graduate to impress employers, it’s enough to say you got past the strict admissions filter.

Let’s take inventory of what we’ve established so far.

  1. Prospective students make performance-oriented demands and ask performance-oriented questions
  2. Training institutions react to these demands by building factory-based curriculum in two variants:
  • Variable Input → Variable Output (Community College model)
  • Quality Input → Quality Output (Ivy League model)

So what we have so far is the factory model with two implementations. One has the disadvantage of having variable output and the other requires a strict admissions process to ensure quality output.

What if…?

The two factory-based models have issues, but they’re the two reigning models in education today. But what if it didn’t have to be that way? What if we had an education system that allowed variable input but always resulted in quality output? Is it possible to create such a curriculum?

If the answer was “no”, this document would end, so obviously it’s possible. However, for such a system to exist, it has to replace the “X weeks of awesome” or any fixed time duration with a central focus on mastery and comprehension. This is so important that we’ll state it again: at the core of MBL is replacing time with mastery. The factory-based model of education is centered around the time-based conveyor belt that ushers students from one topic to the next. In MBL, there is no such conveyor belt and movement between topics is based on passing a test of mastery. This is what Mastery-based Learning is all about: a pedagogy that allows the possibility to transform variable input into quality output. Given a pool of earnest and studious learners with different backgrounds, an education system based on mastery is capable of producing graduates who all turn into stars no matter their history or personal circumstance. In the diagram above, notice that nothing is filtered out; the non-stars turned into stars.

If it wasn’t clear, the answer to the question at the beginning of this section is a resounding “YES!”, because it’s not a theoretical question. At Launch School, we are not proposing a theory or making a conjecture; we are sharing our own experience applying the principles of MBL as the centerpiece of our pedagogy for the past several years. In the sections below, we’ll directly talk about our experience with MBL and its pros and cons, and more importantly, what it takes to succeed in an MBL learning system. It’s difficult for students to work in an MBL system for a variety of reasons, but mostly, based on our years of experience applying MBL pedagogy at Launch School, the difficulty comes from students who have a factory-based mindset and make performance-oriented goals. Those two things must be removed in order to fully partake and thrive in an MBL environment.

Mastery-Based Learning

At the core, Mastery-Based Learning is about the following two principles:

  1. Remove all time-based measurements from your learning journey.
  2. Move to a new topic after mastery of the current topic.

Let’s analyze these two principles in more detail by using them to navigate an example skills/knowledge acquisition tree. The following tree diagram expresses the relationship between concepts and techniques that one needs to learn in order to become an expert of any skill (piano, cooking, tennis, programming, etc).

The concepts at the roots of the tree (A, B, C, D, and E) are what we call atomic concepts. We call them “atomic” because they stand on their own and don’t deconstruct down to other concepts. The concepts on the other levels are what we call compound concepts or integrated concepts. The skills/knowledge acquisition tree shows the dependencies between concepts. For example, to learn AB, you need to master A and B first separately. In MBL, we move down the tree only after we master and are fully confident about the concepts at the level above. We only tackle integrated concepts after mastery of atomic concepts, as opposed to after a period of time. The progression between nodes is dictated by comprehension level, not a time duration. There are no mandated time durations for any topic and therefore, there is no definite duration for mastering all the topics in the tree. The singular bar at each step of the way through the skills tree is your level of comprehension of the topic in front of you, and that’s it.

Contrast that with the factory model where you might have, let’s say, a week to learn A and a week to learn B. Let’s also say, for example, that you couldn’t reach 100% comprehension level after a week of A and a week of B because you got sick or had a busy week at work. Regardless of this, in the next week, the factory’s conveyor belt moves you to the next topic: AB. If you haven’t fully grasped A and B separately, it’s very likely that you won’t understand AB very well, either.

In fields where concepts build on top of each other cumulatively, the complexity and ambiguity compound exponentially if they are not dealt with linearly. In the factory model, if you didn’t understand the material in week 1, it’s most likely that you’re already in trouble because the compounding complexity will out-pace your ability to catch up. After a while, the deficit becomes insurmountable causing those affected to stop learning altogether. Hopefully, it isn’t controversial to say that we’ve all experienced this either directly or have observed friends or classmates who have succumbed to the effects of compounding complexity.

In MBL, you deal with the complexity linearly — as they arise and as you encounter them one by one — which prevents it from compounding.

Constraints of Mastery-Based Learning

MBL is not a silver bullet for all pedagogical problems, otherwise it’d be a lot more popular. By removing time and demanding mastery each step of the way, MBL also introduces some constraints to one’s learning journey:

  • It has to be self-paced; there are no synchronous cohorts or classmates going through the same materials with you.
  • There’s no peer group; your peers are learners of that topic at each stage, not a cohort or class.
  • No definite end date; an 100% MBL curriculum has indefinite duration.
  • It’s assessment-driven.
  • Your progress is measured by the depth of understanding, not necessarily by the number of topics consumed or time spent on each topic.

Consequences of Mastery-Based Learning

These constraints, in turn, further introduce significant consequences for students. To participate successfully in MBL, students must understand these consequences and work carefully to mitigate their effects.

Indefinite Duration
We’ve found that the biggest source of anxiety in an MBL model is dealing with an indefinite duration. It’s very difficult to reconcile MBL with one’s personal life and goals. For example, if you have a performance-oriented goal like “I’m going to get a job in six months”, you’ll find that an indefinite learning duration is in direct conflict with your goal. It can also be difficult to get family and friends on board with your learning journey if you can’t supply a concrete graduation date.

Self-Paced
The pros of a self-paced curriculum are listed above: you get to digest and master concepts at your own pace. An MBL pedagogy requires that it be self-paced, but this also means that it can be a lonely journey since you are deprived of a traditional cohort or classmates.

Assessments
The key to an MBL curriculum is mastery and so assessing students’ mastery is a central activity. At Launch School, we employ rigorous assessments that top employers use: written exams, 1-on-1 live coding interviews, and take home projects. This sounds good in theory, however, not passing them can be very annoying. We have a mandatory wait period after each “Not Yet” (we don’t “fail” assessments, we “not yet” them in an MBL curriculum), and if you’re not fully bought in on MBL and are just in a rush to get to the next course, being told to wait a while until a retake can feel very annoying.

Depth
When your progress is measured by how deeply you know a concept, you might feel that you aren’t making any progress. You’re not quickly moving to the next concept. It’s also not as exciting. Certainly, it’s always exciting to move on to new topics, but this excitement shouldn’t come at the expense of true learning.

The Mastery-Based Learning Process

Let’s revisit the skills/knowledge acquisition tree from earlier, but this time, let’s add in the components of MBL into the diagram to see how we’re supposed to progress from one topic to another and from atomic concepts to integrated concepts.

This is how our example of learning concepts A, B and AB looks like in a mastery-based approach. Take note, however, of what’s not in the diagram: any mention of how long it will take. The learning sequence is comprised of two steps: 1) practice atomic concepts and 2) pass an assessment on the atomic concepts. Once those two steps are met for all prerequisite atomic concepts, the steps are then repeated for the integrated concept. With this, it doesn’t matter how long it will take because MBL completely removes the time element from the process.

A phrase we often use to describe this diagram is local mastery before integration. Usually, learning the atomic concepts is not the hard part: spend enough time on the concept or practice enough and you’ll eventually get it. However, it’s integrating those atomic concepts that add to the complexity, and confusion arise usually because people tend to rush to integrate before local mastery of atomic concepts. Therefore, in a mastery-based learning program, there is no-compromise on comprehension, while there is complete disregard for how long you studied on a certain topic. This is the complete opposite of factory-based learning where you study a topic for a fixed duration, regardless of how well or not you understood it.

How to Learn with Mastery

At this point we’ve given you a good idea of what Mastery-Based Learning is about and how it differs from the time or factory-based model of learning. What we haven’t talked about yet is how you can start shifting your thinking from a time-based learning approach to a mastery-based learning approach. This is not straightforward to do even if you agree with the premise. In the next section, we have prepared a few pointers that’ll help you transition away from time-based thinking and serve as reminders throughout your MBL journey.

Eliminate Timelines

A lot of conversations we have with prospective students about Launch School are related to timelines. Often, students will look at their calendar and say, “Okay, I’ve got until December to complete the program”. Then, they take the number of months they have in mind and divide it by the number of topics in our program. Maybe if they do a little more sophisticated analysis, they’d assign different weights to the topics.

Let’s say they come up with a two weeks’ goal for topic A. Sounds reasonable, right? But what happens when they’re into week 3 and are barely halfway through the topic A? Then they look at their progress and see that they’re already behind schedule and they only just started the program. This is where anxiety creeps in. Whenever that happens, your behavior starts to change in a way that will compel you to start trying to work around comprehension, which defeats the purpose of and intention behind MBL. Setting goals is a good thing, but performance goals are not compatible with an MBL curriculum. Instead, you have to start setting mastery-based goals, such as “I will work 10 hours this week” or “I will spend 2 hours on exercises today”. The bottom line is this: you cannot force mastery into a time-box.

Stay Focused on Fundamentals

Staying focused on fundamentals is one of those things that’s easy to say, but hard to do. This is especially true for the curious-minded. Curiosity can be a double-edged sword; it’s a good attribute that comes with negative side effects.

This negative side effect manifests itself most commonly in a constant need to monitor everything: you feel like you need to learn every new library or framework that’s coming out; it seems as if every day there’s going to be a blog post or a news article about a new technology; you hear things like “Rails is dead”, “Angular is dead”, “X is the next best thing” and so on. It’s very obvious to those with experience in the industry that articles like these are playing upon our fears, the same way with advertisements on the TV are. They do not only say something provocative in order to grab your attention, but also make you feel like you’re missing out on a wave. But in fact, you’re not.

Focus on the fundamentals — the things that don’t change — these are the things that will serve you for a career.

Work in a Sustainable Fashion

It’s really important to work in a sustainable fashion and establish study habits that you can carry with you for the rest of your life. There is a simple reason for this: you aren’t going to stop studying when you become a professional software engineer. In fact, your study habits become even more important then. Build good study habits, not only for a particular training program but for yourself and for your career. More importantly, don’t cram. Cramming doesn’t work for long-term retention, and it also doesn’t help with assessments that focus on your skill. There’s simply no place to hide the lack of fluency in a 1-on-1 live coding interview, which is why both top employers and Launch School use this method of assessing people.

To build up skills for long-term retention, you have to give your brain a chance to construct sound and accurate mental models. Here, we’ll borrow an example from Kathy Sierra, an influential software engineer, author, and educator. In her example, she talks about a job role called a “chick sexer”. The job is this: all the chicks are coming down a conveyor belt, and the chick sexer has but a split second to separate the males from the females. As it turns out, it’s a very difficult skill to teach to new chick sexers; no formal training technique seems effective, except for one training method. The trainee starts by randomly guessing the sex of each chick as they’re coming down the conveyor belt. Whenever they’re wrong, the expert immediately corrects him/her. Eventually, the trainee starts to pick up on the differences intuitively.

What this tells us is that when you spend a consistent of time doing something and watching others do it, over time your brain subconsciously establishes certain patterns. In fact, it is the same idea of allowing your brain to marinate in a concept for a long period of time in order to establish mental representations that you can use in a split second when processing a problem (such as, during a live 1on1 coding interview). There’s no shortcut to achieving this pattern recognition and you certainly can’t cram for this skill. This is how you’ll be transformed from a hack-and-slash beginner into a true professional. But it takes consistent deliberate practice over a long period of time.

Eliminate Expectations and Milestones

The last thing that we want to mention here is the importance of eliminating milestones and expectations. This is somewhat related to the idea of eliminating timelines but in a slightly different way. It goes back to the idea of mastery vs. performance goals. An important metric of how you’re doing in a mastery-based system is how many hours you spend, not some arbitrary deadline or milestone. When you say that you’re going to finish a course in a month, you’ll have to ask yourself what “finish” means. Here’s a simple example: what if you clicked through all the assignments, but your comprehension is at only 60%. Can we consider that as “finished”? Suppose you’re at day 27 and you realize that you’re supposed to “finish” the course by day 28, should you just click through the rest of the course quickly? The “finish a course in a month” goal is a typical performance goal, not a mastery goal. A mastery goal would be stated in terms like “I’m going to spend a 100 hours this month on this topic”.

Mastery-Based Learning at Launch School

Now let’s talk about what Mastery-based Learning looks like at Launch School and what it translates to in more practical day-to-day scenarios.

Structure and Sequence

The structure and sequence of our curriculum are based on the tree of concepts discussed earlier. Learn A, learn B, learn AB, so on and so forth. The end goal is to work our way down the skills/knowledge acquisition tree in order to learn progressively more integrated concepts. In a mastery-based learning environment, however, you’ll also sometimes need to go up that tree. That sounds counterintuitive because it sounds like going backward, but the words “forward” and “backward” only make sense in a factory-based model.

In a mastery-based environment, it’s common to master A and B, to pass each assessment for A and B, but then, get to compound concept AB and realize that you don’t fully understand either A or B. The diagnosis in such cases could be that your knowledge of A faded or regressed, which is completely fine. The correct thing to do in such a situation is to go and refresh your knowledge of A before taking the AB assessment. However, in a factory model, there is this stigma associated with “going back”, which can be embarrassing. On the other hand, in a mastery-based system, it’s critical that you’re able to go up and down that tree without feeling like you’re going backward.

Assessments

The way that we are able to diagnose problems in students’ mental models and prescribe remedies is through assessments. We spend a lot of time creating and refining the assessments and therefore, we take them very seriously. They’re modeled after how employers hire: written answers, 1-on-1 live coding interviews, and take home code challenges. It’s through assessments that we understand your level of comprehension and it’s also through them that prepares you for real job interviews. In fact, our assessments, like real job interviews, are structured in a way so that there’s no place to hide and you must learn the material well in order to pass.

Pricing and Support

Another important aspect of our curriculum that results from our MBL pedagogy is the pricing and support structure. Some people might say that we’re basically backfilling a random philosophy to justify the cost of our program. They say, “of course you’d want people to learn forever because you are a monthly service”. However, the causation is reversed.

We thought really hard about what the best learning program could look like if it was focused on comprehension. We set out to build that program and then realized that there’s an inherent conflict between pricing and mastery-based learning: on one hand, we want people to take as long as it takes without feeling rushed, but on the other hand, we want to have a support structure in place, which is inherently expensive.

Normally, for an individual student, it could potentially take a year or two years to complete the program. How do we arrive at a good price point? A good price point is one that’s sustainable and one that doesn’t distract from the focus on mastery. We could price the curriculum at $1,000/month and that would allow us to provide a lot more support, but that wouldn’t be sustainable for most people. At that price, it would induce a lot of financial pressure and ultimately compromise the integrity of a mastery-based program.

We charge $199/month because we feel that it’s a sustainable price that still allows people to focus on mastery. Even if someone takes several extra months to study, it is only annoying but not financially devastating. The idea is that mastery of these fundamental concepts cannot be compromised and that it’s worth it in the long run.

Focus on Things That Don’t Change

The last thing that we want to mention here as a direct consequence of our mastery-based Learning approach: our focus on things that don’t change. If you’re asking people to learn to mastery, you can’t teach them something that will not be as useful after a year or two. At Launch School, we’re not trying to catch a wave or take advantage of a surge in demand. Instead, we’re trying to focus on things that’ll be useful to you for decades to come, such as a systematic problem-solving approach or learning how to deconstruct a programming language or building sound mental representations of how web application work. Everything we’re trying to do at Launch School is with an eye towards sustainable studying habits and building skills for a long-term career. At that intersection are “things that don’t change”.

Conclusion and Final Thoughts

We believe in Mastery-Based Learning so much that we have organized our entire school around it. We believe that the best way to learn any useful skill so that you can get to a professional level is to pursue mastery-based goals. But in reality, this is not easy and does not come naturally to everyone.

The most difficult thing to come to terms with is the indefinite duration. It’s the main source of trepidation and anxiety for students and it’s exacerbated by a lot of social factors: for example, people around you ask questions and they’ll want to know when you’ll be graduating. It’s not easy for them to understand that learning to mastery takes an indefinite amount of time. You may even sense that they are starting to question your ability. It’s not easy for anyone to face that social pressure and stigma, but know that every Launch School student faces these pressures, too. In order to better handle these pressures, be open to the idea of removing timelines and dealing with all these different sources of anxiety and try to create an environment for yourself that’s conducive towards mastery-based learning.

We’ll end with a hopeful thought: we’ve all experienced the limitations of the factory-based education model and have seen that a lot of people were let down by it. With mastery-based learning, on the other hand, it’s in your control, so you can do it! Allow your brain the time to fully absorb the material and get into the habit of learning deeply as opposed to quickly moving from one topic to the next. If possible, try to get rid of the sources of anxiety, time constraints, short-term expectations, social pressures, and then fully allow yourself the room to learn to mastery. Follow this slow, patient, consistent path, and you will get there.

Resources

  • We ask that all prospective Launch School students read the book Mastery by George Leonard. It’s a short book and takes very little time to read, and is mandatory. Please buy it and read it before starting the paid courses at Launch School.
  • MBL is used in our Core Curriculum. To understand our perspective on the entire learning journey, read about Our Pedagogy.
  • Make sure to take a look at the Common Questions page where we address many student submitted questions related to Mastery-based learning.
  • If you enjoy reading about our thoughts around teaching, you may want to continue on to Our Learning Goals.
  • Finally, if you prefer this document in video form, you can watch a video on this article here — make sure to scroll to the bottom. (Note: there are some minor discrepancies in the video due to it being slightly dated, but the core message is the same).

--

--

Launch School
Launch School

The slow path for studious beginners to a career in software development.