I am currently a bit beyond the halfway point at Launch School, and I felt successful completion of the backend module provided more than enough experience of Launch School’s pedagogy and material to share my impressions. Additionally, I will provide some personal advice for those who choose to participate in a coding school that is in a class by itself (no pun intended!!).
I come from an electrical engineering background, and I am making this transition to a software engineering well into my middle age. I was a transistor level chip designer at IBM for 17 years (prior to that I served in the military as a Marine Officer). My transition to programming has been anything but smooth. As a matter of fact, I can say until I started Launch School in earnest this career change has been an unmitigated disaster.
I had the opportunity to attend a stereotypical coding “boot camp” after my separation from IBM. In the past, I told others this was the hardest intellectual endeavor I had ever experienced. Now, upon further reflection I would say it was the most frustrating academic experience I ever encountered. I was lost from the beginning. The curriculum not only covered a great variety of material it moved at such a fast pace that I never got to shore up the conceptual holes I accumulated along the way. Even though the head instructor graciously extended my participation by a month, it was clear to me by the end of that extra month I was not even close to grasping the foundational skills needed to be a programmer.
Naturally, going into my first software position I had a very high level of anxiety. I intuitively knew I was not prepared for the challenge even though it was an apprenticeship position, which by nature is easier than what would be required for a junior developer. My worst fears were born out as the first team I got assigned to was developing a browser based CAD (Computer Aided Design) system targeted for residential housing. I was unable to comprehend even the most basic aspects of how this software system worked which meant I had to deal with substantial knowledge debt for every assignment I encountered. Feeling I would never advance past apprentice or more likely get fired, I eventually resigned my position.
Later, I was able to reenter the software field after getting some additional training via tutorials and some personal mentorship by a software developer who was very gracious with his time. I mistakingly focused on learning a particular web framework instead of trying to shore up the basic skills I needed as a programmer. Of course, I cannot really blame myself for taking this approach as I thought the right framework provided the necessary “buzzword” on a resume or LinkedIn profile. Additionally, I did not have the necessary training or mindset to first assess my shortcomings in the fundamentals of web development, much less address and fix them.
In this, my second foray into software development, I worked for a contracting company which provided a team of developers to a company heavily involved in computer networks. The team I was assigned to wrote a suite of internal tools to increase the efficiency of maintaining the network. Though I did much better the second time around, actually feeling I made a significant contribution to the testing environment, I got fired four months after being promoted to a mid-level developer. Adding to my frustration I never had a face to face about my job being in jeopardy, I just got a phone call saying I was fired because “my skill set was not needed going forward”.
I wanted to discuss my personal background for two reasons. First as one can see I have experienced a number of setbacks and this led to serious doubts and concerns about my ability to program. I want to encourage any aspiring developer not to get discouraged, keep plugging away at the profession as I have, eventually you will be able to recognize the common patterns as they inevitably emerge in the course of your work. As a second note of encouragement, based on my personal reflection and experience in both the engineering and software worlds, the best developers are not necessarily the brightest. Passion and persistence will trump brains almost every time. Grit will win in the long term. Think tortoise versus hare.
Secondly, I wanted to use my prior experience as a Segway into Launch School. Let me open by emphatically stating that Launch School IS NOT A CODING BOOTCAMP. As I discuss my journey through Launch School in the following paragraphs, where appropriate I will highlight some of my shortfalls due to the coding bootcamp model and then go onto show how Launch School has rectified these shortfalls.
One last comment, the merits and downsides of the classic coding bootcamp model deserves its own discussion (see the link above). It is not my intent to delve deeply into that topic, it has absolutely worked for the right people under the right conditions, but in my opinion the model has significant downsides, particularly for those completely new to programming.
The Journey So Far
The most significant downside of my coding bootcamp was the knowledge debt I had to deal with. Information came at such a fast pace that I was not able to really understand any topic with sufficient depth. This meant any assignment which required that I build upon an already fragile foundation compounded my knowledge deficit. I firmly believe this is not unique to my experience, but a symptom of any coding bootcamp. With Launch School I have no knowledge debt in the fundamentals of the Ruby programming language or in the basics of object oriented design. Launch School repeatedly drilled these concepts in the instruction and the assigned projects. Additionally, the required assessments guarantee sufficient mastery before moving onto the next lesson.
Much to my chagrin, I had never considered what it takes to “Learn How To Learn” even after 17 years of chip design. You can forget about doing such valuable personal reflection in a coding bootcamp as one struggles to get through another all nighter on the final project. With Launch School the building blocks have been put into place through specific and directed practice. With a foundation built on rock and not sand, I am beginning to identify the common patterns across the different disciplines of software development. This means I am much more confident and equipped to learn something new.
In the past, I never really gave consideration to the formulation of my mental models because such a topic was never discussed. Solid mental models are key to extrapolating from past experience to learn new concepts or tools. Going forward, because of my Launch School instruction, I will continue to refine these mental models.
I am thoroughly enjoying the journey and my confidence has soared, even though (due to personal issues) it has taken me over a year to get just past the halfway point, the time spent is of no concern. With the timeline eliminated, I focus on mastery of the given topic. Currently, I do not feel my understanding of the CSS box model is sufficient to quickly and accurately arrange block level or inline level elements on a web page. Since I am not in the boot camp model, I have the time for deliberate practice before moving onto the next lesson. I control my pace and decide if my understanding is sufficient.
My Personal Advice
In this last section I will be offering some personal advice for those who plan to enter the program, these tidbits are based solely on my personal experience.
The most important thing one must do when entering the program is to step back and embrace the “Big Picture” Launch School is advocating. This “Big Picture” is not about “getting a job” but embarking on a career in software engineering which uses Mastery Based Learning to establish a solid foundation in the Fundamentals. I have had to constantly remind myself of this as I go through the program, as our entire schooling system is based on a “fixed time, fixed curriculum” (factory) model. In a practical sense, never tell yourself, “I am going to finish the lesson by this date or in this many days”. Such a mindset is contrary to Mastery Base Learning. Instead, as you work through the material you should always be asking yourself, “How comfortable am I with the content of this lesson? Am I at the exposure level or have I mastered the material? If I have not mastered the material, what additional things must I do to ensure mastery?” To close out this first point, never, ever compare your progress with other students. Launch School is set up to accommodate each students individual journey to begin his/her career in software development.
Trust the curriculum, it is designed to teach the Fundamentals of Software Development. Chris Lee and his staff have many years not only of software development experience but also many years of teaching software development, and I am paying them with the assumption that they can correctly identify what concepts I need to learn to mastery. Do not read a lot of supplementary material (other than the documentation) as you progress through the curriculum. I will recommend a few books for those who want to supplement their studies for the back end module, but as you will see I keep the list to a minimum. Your primary supplemental reading should be the documentation Launch School recommends. In the case of the back end module this is the Ruby Programming Language Documentation, the Mozilla Developer Network (MDN) documentation on HTTP, the PostgreSQL documentation, and the documentation for the Sinatra DSL (Domain Specific Language).
I used to think one of the paths to becoming a great programmer involved reading a lot of technical books. I no longer believe this; I feel a programmer’s time should be devoted to writing code, reading code and getting really good at reading documentation. Based on completing the preparatory work and the back end module, I would recommend two books: “Head First Ruby” and “The Well Grounded Rubyist”. Only read one of them. “Head First Ruby” is definitely the easier of the two and was written for those completely new to programming. Its main advantage is the topics covered align almost perfectly with the material covered in Launch School’s back end module, though the order in which the material covered is a bit different. “The Well Grounded Rubyist” is by far the more advanced book, as it was written for those who have had some experience in programming. It does cover other topics not covered by Launch School, but not too many. The strength of the book is that it is essentially a deep dive into Ruby’s Standard Library, so its focus remains on the fundamentals of programming in Ruby.
Spend a good amount of time with the free, preparatory module. This module prepares a student both emotionally and technically for the paid portion of Launch School’s curriculum. The bias in our culture towards the “factory” based model of education is substantial. A new student needs to detach themselves from this flawed model and emotionally buy into the Mastery Based Model. Read and take time to reflect on all of the materials dealing with the Mastery Based Model and “Learning How To Learn”. I strongly advise doing all of the “Ruby Basics” exercise set and then visit a Code Kata site like codewars and do additional exercises at the easy levels. Strive for solving 200–300 small problems (numbers include the Launch School “Ruby Basics”) before beginning the paid portion of the program. In doing so you will start the back end module with a strong foundation in the basics of Ruby programming and you will have already started the practice of decomposing and solving small problems.
Some Final Advice
If you are a complete beginner to programming and can devote the necessary time to Launch School, to me there is no other viable option out there among the myriad of choices available to an aspiring developer. With Launch School you begin the journey of a career in software development with a Solid Foundation in the First Principles of Software Development, something far more involved, challenging, and enjoyable that just “getting a job” after a coding boot camp.