Launch School So Far

Part of the way there… (Shaver Lake, CA)

I just successfully completed Launch School’s course 170 (Web Development), which is the 4th out of 5 courses in the Programming and Back-end Development phase. This course was a lot of fun, probably the most fun I’ve had so far in LS, as I’m finally building simple applications using the fundamentals I’ve learned in prior courses.

After acing the 179 assessment, my confidence is high, I’m more interested in learning than ever, and I’m really excited to continue this journey of mastery, so it seems like a good time to take stock of how far I’ve come as of today.

This post is mostly a journal entry for me, to record my thoughts and look back on the past 9 months of my Launch School journey.

My History at Launch School

I discovered Launch School in this article while I was researching coding boot camps in 2016.

I had decided that I wanted to train for a new career in web development, but needed a boot camp that fit my financial and time constraints, and offered a curriculum that I could trust to give me confidence in my skills going forward.

Launch School’s focus on mastering the fundamentals — the things that don’t change — spoke to me, as did their description of how they see the long, slow journey of truly learning a subject to depth, as it immediately reminded me of my long, slow, and often-difficult-but-endlessly rewarding journey as a musician.

I started working on the Preparatory material that LS provides for free in January of 2017, then gradually increased my weekly time commitment to studying that material throughout February and March. I signed up to start the paid courses on March 30th.

I also started recording my time spent on Launch School in a spreadsheet when I started this journey, and as of today, October 3rd 2017, I’ve recorded 435 hours.

~200 pages of notes thus far

What I’ve Learned About Programming and Software Development

Launch school uses Ruby to introduce you to the core concepts of software development, and how to understand and solve problems.

I already had some experience in different aspects of web development coming into the course, including a pretty strong understanding of HTML and CSS, and a familiarity with JavaScript, PHP and MySQL.

Here are some of the major things I’ve learned so far in Launch School:

  • Using the command line in Linux for file and system administration tasks (which necessitated figuring out how to install Ubuntu Linux in a Virtual Machine on my Windows laptop)
  • Git and Github
  • Using irb, “Interactive Ruby”, to test expressions via the command line
  • Data structures
  • Control flow
  • Variable scoping rules in Ruby
  • Closures
  • Object oriented programming, using Ruby’s system of class inheritance and modules to encapsulate and organize the data in an application
  • Regular Expressions (I worked through the Launch School Regex book after course 130)
  • How to write tests to ensure that an application behaves as expected, and to prevent code regression
  • How to deploy Ruby gems for release, and how to deploy applications to Heroku
  • How to use Sinatra, a Ruby web framework, to write web applications that use the HTTP request/response cycle for flow control and sending data between a client and server
  • How to write applications in Sinatra that can simulate state via a session ID, and can render HTML dynamically when responding to HTTP requests

This is simply the list that comes to mind right now, and is far from exhaustive, but it’s gratifying to see how much I’ve learned in a the past 6 months.

Some of the intangibles I’ve learned in this time are every bit as important as the specific technical skills I’ve been working on:

  • A structured problem solving approach focused on first understanding the problem well before writing any code
  • How to pass a coding challenge interview, solving a series of small problems under pressure while talking through my thought process out loud
  • How to communicate effectively about programming topics and code, using the correct terminology
  • How to stay focused and patient over long periods of time, when it takes days to solve a a particular problem or learn a concept for example, without giving in to frustration

What I’ve Learned About Learning

The effectiveness of Launch School’s curriculum design is undeniable when I consider the fact that I just finished course 170, Web Development, which required me to take my knowledge of Ruby, object-oriented programming, the command line, and testing, and combine it with newly acquired knowledge of HTTP, as well as a smattering of HTML, CSS and JavaScript.

Despite how dense that may sound, I actually found it to be less of a struggle than any course so far, and more of a natural progression. I’m firmly convinced that this is because I invested heavily in the fundamentals back in course 101, and took time to master concepts fully before attempting the rigorous assessments Launch School administers.

Looking back at my time logs, I spent about 170 hours in course 101, and it was time well spent. There is a definite “Karate Kid” aspect to mastery-based learning — I had several “a ha” moments in writing Sinatra app in course 170, when I needed to split a string by some criteria and I suddenly realized that this was just a real live example of the many small problems and exercises I’d poured so much effort into doing, and doing again, and again...

Reverse a String, reverse a String again…

What I’ve Learning About Succeeding at Launch School

Launch school’s courses are all online, and there is a Slack channel where you can find students and instructors for questions about the material or just socializing any time of day, as well as a forum on the website, and kind of sub-forum for each Lesson in each course.

Here are some habits I’ve picked up that I think are helping me to get the most out of Launch School’s setup:

  • I always read the questions posed by other students on each Lesson. These are formatted like a forum, and specific to each lesson. Often, questions that I have about the material will already be answered here, but just as often I’ll learn something I hadn’t even thought to ask about.
  • I use the quizzes to pinpoint weak spots in my understanding. Making a list of these “questions I got wrong” is a great component of the assessment study guide in each course.
  • I use the other solutions posted by students to the exercises and challenges to help me understand other ways of approaching problems, as well as other syntax. Since everyone has their own toolbox and preferred approaches to things, it’s always interesting and enlightening to compare solutions (this is how I learned about Array#each_cons, for example).
  • I’ve read a lot of other LS students’ posts on Medium, and learned an enormous amount about how they approach things, as well as been inspired to keep working hard. For example, I used Nick’s post about how he prepared for the 101 interview as a guide for my own preparation, and I highly recommend it.
  • Whenever I have question, I can ask the Slack channel, and usually get an informative response from a TA and one or more other students quickly.
  • Conversely, whenever I happen to be on Slack and see someone ask a question that I know how to answer, I try to give a concise, precise answer, describing how I understand the issue. When I see someone expressing frustration or doubt, I try to encourage them. It makes me feel good to do so, and it makes them feel good as well, and it helps foster a sense of community in what is an inherently solitary and sometimes lonely pursuit.

That’s it for today’s journal entry. It’s time to tackle Launch School’s course 180 — SQL and Relational Databases, and I’m looking forward to it.