What I’ve learned during my first month at Launch School.
What is the true value of Launch School?
First of all, a bit of context. Almost exactly 30 days ago I left my job as an English teacher to begin studying programming full-time. I chose to study at Launch School as I felt that they offered a unique approach that is in line with my way of learning. In the last 30 days, I have logged over 180 hours of focused study.
While I had learned how to solve basic problems using loops and functions and even simple recursion before coming to Launch School, Launch School focuses so much more on drilling the fundamentals of the language than on teaching you problem-solving in the beginning. For example, rather than telling you “X does this, now use it to solve these problems”, Launch School focuses on ensuring that you understand the intricacies of how X works and what the advantages and disadvantages are of using X over Y.
So what are considered to be the fundamentals?
Concepts such as:
- The difference between how primitives and objects are stored in memory
- What truthy and falsy values are.
- What variable scoping is and why it’s important.
- What shadowing is and the importance of using unique, distinctive variable names.
- The difference between function declarations and function expressions.
- The difference between mutating vs non-mutating methods.
- The difference between pass-by-reference and pass-by-value and how it affects your code.
- How to go straight to the Documentation when I don’t understand something.
- The importance of writing clear, easy-to-understand code
Some of these concepts I had already been exposed to, and I learned about them more in-depth. Others were new to me, like truthy and falsy values, mutating and non-mutating methods, and of course the all-important concept of pass-by-value and pass-by-reference. The fact that after learning these concepts, I can now analyze basic code and know exactly what’s going on and what to expect is just incredible to me.
The thing I have found most valuable though has nothing to do with the specifics of the language.
The thing I’ve found most useful so far has been PEDAC. What is PEDAC? It stands for:
- Data structures
- Code with intent
A big problem that I had in the beginning when trying to solve a problem was that like most Junior developers, I would just sit down and start writing code, see what worked, and gradually hack a solution together. This is very inefficient and stems from a lack of problem-solving ability combined with a lack of in-depth knowledge of the fundamentals of the language.
Then check the examples. Is your understanding in line with the examples provided? Can you come up with some more examples? Are there any edge cases or requirements that you have missed?
What data structures will you use to represent that data while converting the input to output? (This is more used for more complex problems and is often left out when solving more simple problems).
Then you write your Algorithm. In this context, your Algorithm is a list of the steps that you will take to get the desired result. Because you have already thought about the input and required output, now you just have to decide how you are going to solve this particular problem and then put your ideas in writing.
And finally, you code up your solution. This sounds like a lot of work, and it is. It may even sound more inefficient than just sitting down and coding through the problem. And granted, for very short simple problems it can be overkill. But once the problems you are solving start to increase in complexity, PEDAC will become your new best friend.
Whenever I find myself struggling while coding a problem, it’s always because I didn’t put enough thought into my Algorithm and the steps required.
Without a strong understanding of the fundamentals, this would be impossible. Before I started studying at Launch School, I would go to StackOverflow any time I was stuck and copy a solution to a problem from there, and of course, I rarely understood what I was copying or how it worked. I can now proudly say that I haven’t needed to use StackOverflow at all this month, as I have learned how to break the problem down into smaller chunks, and when I am not 100% sure how something works, my new default is to go straight to the Documentation.
So to sum up, what have I learned from my first 30 days in Launch School?
- How to think like an engineer, to break down problems and think them through one step at a time.
- How to talk about code using clear, precise, and concise language.
- How to read and understand documentation.
- How to ask well-formed questions thus making it easier to get help if I do get stuck.
All I can say is that this experience has been invaluable, and the knowledge I have gained is priceless. I can’t wait to see what’s in store for me in the next 30 days.