LaunchSchool - An Online School for Developers /

Blog

A Glimpse Into the Launch School Curriculum

In this article, we’ll take a tour of the various courses and assignments throughout the Launch School curriculum, and go over our teaching philosophy and curriculum sequence. It’s a good opportunity to see some of the coursework if you’re interested in Launch School, and we’ll give you a realistic idea of what learning in a transformative program like ours would feel like.

The goal of this article is to give you an idea about what our curriculum covers and the reasoning behind selecting the topics that we cover. A teaching endeavor of any kind, by necessity, has to be selective in what it covers. We do the same in Launch School and hopefully, this article will give you an insight into the reasons for choosing what we cover in the curriculum. We hope that this article piques your interest and inspires you to start the prep course with seriousness and move beyond just considering us as an option.

With that purpose in mind, it would be tempting for this article to showcase a few project screenshots and code examples to impress you but I realize that that would be short-sighted. I think that’d be tantamount to obscurantism and frankly, a little devious; a lot of glossy marketing with little insight into the day to day of being a student at Launch School. Kathy Sierra, a well known and respected programmer and writer, often uses the following image when she talks about this:

As you can see, on the left side of the image we have a very nice, easy-on-the-eyes brochure and on the right, a boring, black and white manual. This picture summarizes the experience of consumers with a lot of companies and products out there. Very rarely do you see someone pitching a product or a service and trying to tell you the whole story. In particular, no one tells you that you’ll have to read that boring manual to really get the most out of your purchase. To really be able to take high quality pictures with your camera, you need to read that manual, and may be read a couple of books. Buying a Nikon D200 doesn’t make you a great photographer!

Another example is how fitness gyms advertise themselves. You’ll see a lot of abs and fit bodies on a brochure but the reality of a gym is mostly out-of-shape sweaty people running on a treadmill.

What these glossy brochures do is confuse us. Every camera model out there has these glossy brochures. How do you know which one to choose. If you are to go by the brochure, they all look like great cameras and choosing the right one for you becomes impossible.

The reason I’m talking about this here is that the “learn to program” industry is also prone to such practices. This could be a brochure:

This picture is similar in some ways to the glossy brochure for a camera. It’s meant to project a “cool” and “hip” image of a programmer. Programming is and can be cool and it can be empowering, but this does not give us the full picture and perhaps it’s not meant to do that. The full picture would include something like this:

This is an image of an error message. A big portion of your day to day work as a programmer will involve reading, parsing, and determining the cause of error messages like this. And that’s what we’ll teach you here at Launch School. It’s important to remember what we’re trying to do here. Our goal at Launch School is not to make programming fun or accessible so that more people pick it up (that’s a worthy goal, but it’s not ours; see Our Pedagogy for more details). Our goal is to mould students into professional programmers and teach them the skills required to start a career as a professional software developer.

The Journey

While it’s very exciting to start learning programing for the first time, the actual journey of becoming a professional programmer can be quite boring. It requires consistency, focus, and a patient temperament. It’s not complex in that you don’t have to be a genius to succeed, but it’s hard because it requires a certain discipline. In some ways it’s similar to losing weight. It requires consistent habits as opposed to exuberant effort that comes from excitement or inspiration. In this article, we’ll explore our curriculum with both the “brochure” and the reality in mind. The brochure is the interesting and good looking project and the reality is a focus on fundamentals and consistent practice, which by necessity is boring. I’ll lean more on the side of the day to day reality but at the same time, I do want you to be interested. I don’t want you to leave thinking that learning to program is too hard. I want to emphasize that becoming a professional programmer is well within the reach of most people. It’s not easy but it’s well within reach if you have the discipline.

Goal of Our Curriculum

Before we get into the details of the curriculum, let’s first talk about our goal. One way to describe our goal is to say that we teach you the skills needed to get a job. However, as we note in the Our Pedagogy article, “getting a job” is a vague phrase and it’s not very helpful as an articulation of one’s goal. There’s no single bar for getting “a job”. You can probably get “a job” by reading a couple of books on a web framework because there are a lot of jobs out there with varying pay and quality.

The goal of our curriculum, however, is not just to teach you how to use a framework to build web applications. Learning to use a framework will be a side effect of going through our program. The actual goal is not just to learn how to use a framework or library but to understand the fundamentals of and the problems in web development well enough so that you could build your own library or framework if you felt the need to do so. The goal, in other words, is to lead you towards a professional level of proficiency and competency.

Paths to Proficiency

The following are a few paths one can take towards proficiency.

  1. Learning on Your Own Learning on your own is one path to proficiency. The problem with learning on your own is that it’s hard to know how deep you need to learn a particular topic. It’s especially true of web development. There’s an overwhelming amount of peripheral knowledge required when you start out. How do you know that you’ve learned enough Git, SQL, or Automated Testing to move forward? The lack of structure and guidance is a big problem with self-learning.

  2. Learning on The Job Learning on the job is a poor way to learn to proficiency because most employers do not give you the time to learn things from fundamentals. That’s one of the reasons a lot of professional developers take our program because we allow them to take their time and learn things from first principles. An employer will usually give you a week or two to learn something and after that they expect you to be productive. If your understanding is not a 100% at the end of the week, you’ll likely get into hacking mode because you have a deadline to meet. Though it seems like you’re getting the best of both worlds here (getting paid to learn), in reality this is one of the worst ways to learn to program. Another problem with this is that most beginners aren’t able to get into a job where they’re surrounded by senior engineers who are willing to mentor and ramp them up slowly. Instead, most beginners who are able to land jobs end up in a place where engineering is not valued, and are pushed into hack-and-slash projects staffed by other junior developers who also don’t know what’s going on. When people talk about just “getting a foot in the door, they tend to envision themselves as the only junior developer at a job, but usually those types of jobs are full of junior people all looking to get their foot in the door.

  3. Bootcamps and Learning Programs This is the category that Launch School falls into. The fact that you’re reading the article means that you’re interested in this way of learning. There are various approaches and angles on this model of learning as well. We’ll talk about our take on this and the tradeoffs we made in terms of the structure and sequence and give you better information to base you decision on. Note: we don’t really think of ourselves a “bootcamp”, which implies high intensity in a short duration, but most people bundle us into this group. We’re more about sustained discipline over a long period of time with a focus on mastery.

Learning Goals

Our curriculum aims for the following goals:

  • Fundamentals first, fundamentals throughout
  • A focus on learning things that don’t change
  • Learn slowly and deliberately
  • Learn to proficiency, not just awareness
  • Learn to understand problems, not solutions
  • Learn in a circular fashion

The consequence that follows from these goals is that the learning path will be long and slow. A focus on understanding the fundamentals means that you won’t be able to show people an app that you’ve built right away. It requires a long-term outlook, and a desire to learn skills that’ll be useful for decades.

Curriculum Layout and Sequence

Our curriculum is divided into three phases: 1) Preparatory phase, 2) Core Curriculum, 3) Capstone. We’ll take a deeper look at each of them in turn:

Preparatory Phase

This is the phase you are about to enter if you aren’t already in it. The content in this phase is free and unsupported, meaning that there will be no TA’s there to help you if you get stuck. The first course in this phase is an orientation to the program and the second course serves as a preparation for the core-curriculum.

Core Curriculum

The core curriculum is the meat of our program and this is where you’ll spend the majority of your time at Launch School. This is where we focus heavily on the fundamental concepts of programming and web development. Currently, the core-curriculum is divided into two phases: 1) Programming and back-end development, and 2) Front-end development. In the first phase we cover programming basics with Ruby, Object Oriented Programming, relational databases, and HTTP and web fundamentals. The front-end development phase covers foundational topics in front-end development such as HTML, JavaScript Basics, OOP with JavaScript, the DOM and asynchronous programming with JavaScript on the client-side. Throughout the core curriculum, there’s a strong emphasis on problem solving. We teach programming and backend development with Ruby, but a lot of the skills you’ll learn here are transferable to a variety of languages and platforms.

Our core-curriculum has the following three major components:

Assignments

Assignments consist of readings, books, exercises, and projects. Assignments are the smallest unit of our pedagogy in the core-curriculum. Each course has several lessons and each lesson has several assignments. Assignments introduce new topics or expand on topics previously introduced. Some assignments are exercise-only: they test your knowledge of previous assignment(s) in a particular lesson. Every lesson has an associated discussion tab where you can post your questions and share your thoughts or links to useful resources related to the lesson. Assignments are supported by code reviews. You can ask for a review of your code in the discussion forum and one or more of our TA’s will get back to you with a response. Here’s an image of the lesson listing in the first lesson of Course 101: Programming Foundations:

As you can see, the course has 6 lessons in total. Some courses will have more or less than 6 lessons. Each lesson has multiple assignments. You can access the list of assignments and associated discussions by clicking one of the lessons. The lesson page has two tabs: 1) An “Assignments” tab, and 2) A “Discussions” tab. The discussions tab is where you can see discussions and back-and-forth between students and TA’s; and create your own posts. Here’s the first discussion page for the second lesson of course 101:

Clicking on the “Assignments” tab opens a page with a list of the assignments in that lesson:

This particular lesson has 24 assignments. Since this is the first lesson of the first course, it introduces a lot of new concepts by using three programs. Assignment 6, for example, introduces a calculator program; the first program in the course. Let’s see what the assignment looks like:

This assignment introduces the problem statements, then a video walkthrough of the solution and then some more explanation of the solution at the end. Not all assignment will follow the same format. Some assignments are text-only.

Assignments can only be completed in order. You have to complete the current assignment to proceed to the next one. When you’re ready to move to the next assignment, you can click a button at the end of the assignment page and that assignment will be marked “completed” for you. As we’ve stressed in our mastery assignment, marking an assignment completed doesn’t mean you’ll never have to revisit it. Mastery is often a circular process and you need to revisit concepts from time to time in order to reach proficiency.

Assessments

Assessments are a critical component of our core curriculum. Every course has an associated assessment where we test your understanding of the material covered in that course. We have three types of assessments at Launch School:

  1. Written Tests
  2. Take Home Projects
  3. 1-1 Interviews

Through all these assessments, we test your understanding of language syntax, problem solving skills, and your ability to communicate technical concepts. Apart from testing your understanding, assessments also help you prepare for job interviews.

We take assessments very seriously and they are not trivial to pass. You have to study and practice to pass them. Usually, an assessment will have one of the following three outcomes:

  1. Pass
  2. Conditional Pass
  3. Not Yet

“Pass” is the obvious one. You’ll be able to advance to the next course after passing an assessment. “Conditional Pass” usually means you’ve done well enough but there are some areas that need improvement. You’ll have to meet a condition to advance to the next course. Usually we ask you to either write an article in which you articulate your understanding of the topic you struggled with, or we ask you to submit your solutions to a few programming problems. A “Not Yet” means that you’re not yet ready to move on to the next course. If you get a “Not Yet”, you’ll get a chance to review the relevant topics and we’ll specify a date after which you can re-take the assessment.

Exercises and Optional Activities

Exercises are another component of the core curriculum. Exercises can be considered optional in that you don’t have to complete them to move forward but they are very important and we highly recommend you do them. We’ve divided exercises by topics and difficulty level. After each significant milestone, we’ll recommend an exercise group you should complete before you move on to the next topic.

Other optional activities include:

  • Slack Chatroom Being an online program, going through Launch School can be a lonely experience. To mitigate that somewhat, we use Slack for community chat. Here you can get to know other students and staff and talk about everything from the weather to recursive functions! Our TA’s also hang around the chatrooms and subscribed users can ask quick questions if they get stuck or need clarification. For more detailed queries or code reviews, you’ll have to use the lesson forums but the chatrooms can be a quick way to get a response to simple questions either from the students or the TA’s.

  • Teach & Talk Meetup Tech & Talk is a bi-weekly webinar series created to facilitate the sharing and demonstration of interesting tech topics. Presentation topics may vary widely, and are not required to be related to Launch School’s curriculum. This casual meetup-style webinar gives you a chance to learn from others and share your own experiences. Everyone from the instructors to the students can participate as either a presenter or an audience member. You can see previous and upcoming talks here (log in required; you can register for free).

  • Blog and Medium Publication We publish beginner focused lectures, articles and tutorials on our blog. On top of that, we also have a Medium publication where students share their thoughts and tips with the community. If you have something to say about your experience at Launch School, programming, web development or your approach to learning, you can submit your article for a review.

These activities are optional but highly recommended. They give you an opportunity to share your experience, learn about what other students are doing, learn about other approaches to learning and problem solving, and more importantly, feel part of an active & vibrant community.

You can learn more about our core curriculum here.

Capstone

The Capstone program is an optional, admissions-based program and a final phase for students who have completed our Core Curriculum. The Capstone Program is a transition away from Mastery-Based Learning with the goal of applying already-mastered fundamentals to higher level concepts. Participating students will be exposed to rigorous algorithmic thinking and problem solving that top employer’s demand. This is the next step in your learning journey after mastering fundamentals. As a part of the process, we will also guide you through a significant capstone project that will highlight your engineering competency and help you stand out.

To learn more about the Capstone program, visit our capstone page.

FAQ

This blog post was originally in the form of a webinar. During that webinar students asked some good questions about Launch School and the process of learning in general. Here’s that Q&A in text form:

Q. I’m concerned that the opportunity cost of learning Ruby is quite high as most current and future career prospects will be focused on a deep understanding of JavaScript and Node JS.

First of all, I don’t think that’s a true statement. There are still a lot of Jobs out there for Ruby developers. More importantly though, if you learn any one of these languages really well, learning the other one becomes much much easier. The problem is that a lot of programmers out there don’t learn any one language really well. Our program focuses on making you a proficient programmer. We have had graduates who got Python or PHP or Go jobs, yet we don’t cover any of those languages. The reason is that those students demonstrated a strong ability to program and a strong ability to solve problems. Ultimately, it’s about your ability as a programmer that matters far more than a language. But even if you are still concerned, our program covers JavaScript in detail, too. You might want to take a look at this thread to see how others feel about this issue: https://launchschool.com/posts/7c9f955f.

Q. How do you know when you’re moving too slowly in the program?

Moving too slowly is rarely a problem with students. Usually, it’s moving too fast that’s the problem. It’s like asking “how do I know if I know something too well?”. You want to be as good as possible. Having said that, I think there are cases where students study a topic to too much depth and go down rabbit holes that may not be immediately useful. For example, after studying some HTTP you might be tempted to go down a few levels and try to understand networking from the ground up. This is usually a good thing but it’s important to get back on track. Otherwise, it can get overwhelming pretty quickly.

Q. If I’m being challenged by some aspects of the prep-course, should I be nervous?

If you found some concepts or a problem difficult but you’re able to sit with it and really study it, you should be fine. The important bit is to be willing to spend time with the problem and really trying to come out with a clear understanding. Eventually, you’ll get it. If you give up easily, that’s not a good sign. What we’ve seen is that it’s not the difficulty of the topic that stops people, it’s people giving up after X duration, because they felt that if they couldn’t understand a topic in X duration, then something is wrong — the material, the instructor, themselves, etc. We give you a lot of strategies for how to solve and understand problems, and it’s important to be patient and allow your brain time to digest and figure things out. As for the prep course, we usually say that if you found the Ruby Basics exercises straight-forward, you should be ready for course 101.

Q. How do employers recognize successful Launch School graduates? Is there some sort of certification?

In our field there’s a certain aversion to certification. Of course, if you have a PhD from an Ivy League university, that’s going to mean something regardless of the field. In general, though, certifications are an appeal to credentials and in the software engineering industry, you are assessed based on your ability. Our goal is that over time, being a Launch School graduate will be a strong signal for employers and we’ve already made considerable progress in that direction.

Q. How does one study code? Should we use memorization?

In the early stages of your learning, you’ll rely heavily on memorization because there’s a lot of new syntax to learn. In the long run, though, programming is a skill and like any other skill you’ll get better at it by tackling increasingly challenging problems. Music is a perfect analogy here. When learning to play a guitar, you start by memorizing the components of a guitar, then learn what each string is called and where every note is. However, to get really good at playing the guitar, you have to be constantly challenging yourself and learning to play increasingly more sophisticated music. The same applies to programming. Memorization is a component of learning but the more important pieces are writing code and reading other people’s code.

Q. What do you think is a good amount of time to spend studying to become a standout Launch School student?

This is difficult question to answer because there’s isn’t a single number for everyone. We get students from all kinds of backgrounds, ranging from Electrical Engineering to music and from teenagers to retirees. A student with a technical background, in general, will advance faster than someone with a background in literature. Standing out at Launch School is probably not too different from standing out anywhere — you have to be pro-active, work hard, engage with others. On top of that, try to participate and get involved. One easy way to do that is to contribute to our Medium publication. And finally, of course, you need to do well on the assessments.

Q. What would you say is a healthy weekly amount of hours to spend at Launch School for someone with a regular 40-hour job?

At least 15-20 hours. Learning with a full time job is very difficult. However, we don’t want to discourage anyone because we’ve seen amazing students here at Launch School who have completed the program under very tight time constraints. It also depends on the kind of job you have. If it’s a mentally taxing job where you regularly work 40 or more hours, it becomes difficult to regularly take time out for studying. If, on the other had, it’s not a strict 40-hour job and it’s not as mentally straining, you might find it a little easier.

Q. How do you know if you’ll make a good programmer?

This is a question that’s often asked by someone with a fixed mindset as apposed to a growth mindset. People with a fixed mindset believe that they have fixed talents or intelligence. They believe they are good at some things and bad at others, and no matter what they do, they’ll fail at the things they aren’t good at. People with a growth mindset believe that they can get better at almost anything if they work hard. A lot of people don’t learn programming because of a fixed mindset. When you learn anything to proficiency, you’ll face problems and challenges that validate your convictions if you have a fixed mindset. Don’t let those challenges stop you. Have a growth mindset and believe in yourself. You’ll make a good programmer if you put in the work and time to develop the traits of a good programmer.