Would you rather get what you want to slowly or get what you don’t want much faster？
I borrowed the title from the book The Robot’s Rebellion
Finding Meaning in the Age of Darwin, because I think this is also a good question for everyone who are pursuing a long term goal. I just finished Database course in Launch School(hereinafter refer as LS), it’s about half of its core curriculum. I prefer to call LS as a journey, because life in LS is more than what we do in a traditional “school”.
Thanks to Internet
I live in a very small city in China, and I never knew or cared about anything about programming until 28. But thanks to Internet, I met LS. I was deeply drawn by LS’s pedagogy. Instead of selling you the course urgently, LS provides a free preparatory course and advises you to make the decision after you’ve evaluated your feelings about the pre-course and you are agree with their pedagogy.
What I appreciate about LS
1. Mastery-Based Learning
If you were ever crazy about any sports and dedicated much time to train as an amateur, and you’ve watched any professional matches, you’ll know there’s a huge gap between amateur and professional player, this huge gap can even manifest distinctly between skillful amateur and novice professional player. We often call top players as “genius” or say they are “talented”, but the fact is they’ve all been through years even decades of systematic training. The most important two things during the process are:
- time: perseverance over a very long period of time
- systematic: trained in a scientific way, in a structured way
These two points are both reflected in LS’s curriculum. It requires you to fully mastered the knowledge in current phase, then you are permitted to enter the next phase. And it’s almost impossible for a beginner to burn himself then quickly pass a course test, human’s memory needs time to solidify. About Mastery-Based Learning, another strong support is from Sal khan, the founder of khanacademy. In his book The One World Schoolhouse he explains a lot about why MBL is so important:
Let me emphasize this difference, because it is central to everything I argue for in this book. In a traditional academic model, the time allotted to learn something is fixed while the comprehension of the concept is variable. Washburne was advocating the opposite. What should be fixed is a high level of comprehension and what should be variable is the amount of time students have to understand a concept.
But investing enough time is not the guarantee of mastery, we must learn in the correct way. Fortunately, that’s what LS provides.
2. Frequent tests throughout the learning process
There are various forms of tests in the course, sometimes this seems a bit daunting and time consuming. But this is deliberately designed to help students to master the material as well as increase the retention rate of knowledge.
Many researches have shown that instead of repeatedly reading a material, we should use questions and tests to “retrieve” the knowledge we just learned, by doing this we can remember knowledge longer and better. We are readily to be cheated by “Illusion of proficiency” if we just repeat over and over again. I’ll talk more about his later in this post.
3. Intime and professional support from TAs
All TAs take students’ questions seriously and their answers are professional and patient. Also you can discuss a topic with TAs and students on Slack.
4. Diversity of faculty and students
Students and TAs in LS have very different backgrounds. It’s interesting to work with people around the world. But due to my unskilled English I haven’t got to know many of them, which is a shame.
Sharing of some learning experience and other resource
1. How to keep strong motive
People talk about this a lot, but I just want to share one thing — when you are convinced that human brains can change tremendously until you die, you will never stop trying nor give up yourself. I got this fact from a book The brain that changes itself. Human brains can generate new neurons throughout our entire life, now this has become a common sense to scientists. But, decades ago, we all believed that neurons were gradually dying after adolescence.
2. Communication is as important as programming skill
Assessments in LS are graded from two aspects: technical and non-technical. Before I joined in LS, Chris had told me all assessments need to be answered precisely and clearly in English. This was challenging at first, but as I lived through more and more assessments, I saw the meaning there. The so called non-technical is actually part of technical. Think about this: if you don’t understand a concept well enough, can you explain it precisely and clearly? Of course communication is not just about assessments, it’s also about other interactions in your learning process. For example, how to write a forum post to ask for help, how to discuss with other students in Slack channel.
For me the most challenging part is the interview assessment, I think this is also true to many other students in LS. Facing a code challenge, you need to come up with a plan on the spot while explaining your thoughts to TA, then you have to solve the challenge by writing code and also articulate what you are doing. This kind of communication is actually enforcing you to honestly implement MBL. So I’ve been forcing myself to read out the course material as much as possible, to strictly follow PEDAC while doing every exercise(also articulate my thought process).
3. Use questions to increase retention rate of memory
I mentioned there’re many tests during the course, but I pushed that a bit — I made more questions to test myself. When I learned a new concept, I’ll try to write questions about the new concept. The main benefits here are two: 1) enforce me to think about the concept from another perspective; 2) serve as a reviewing tool. As I mentioned above, retrieving knowledge from the brain can lead to higher retention rate of memory. I started doing this from course 120, and I am still improving the way I write this questions. I’ll leave a link here if you are interested about these self-test questions.
4. About Math
I guess many people have conflict feelings about math like me. After I failed in math in my college entrance examination, I began to alienate math as much as I could. But since this is a topic we can not bypass, I’ll share something I know. I am not good at it so I won’t talk about how to learn math well, I just want to share what math we need to learn — for the purpose of learning programming.
First I’ll share an opinion from Dr. WuJun, a computer scientist and writer:
The mathematics used by computers is actually different from what most people learn from high schools and universities. What they need is discrete mathematics, but most of us are exposed to continuous mathematics, such as the geometry learned in high school. Algebra, calculus learned by the university, etc.
Discrete mathematics includes mathematical logic, set theory, combination theory (combined mathematics), graph theory, abstract algebraic structures, and so on. Their common feature is that the things they are studying are not continuously changing, which is very compatible with the binary logic of the computer, and not the same as the world we experience everyday.
Discrete mathematics emphasizes some abstract concepts, such as comparing the size, determining whether a target belongs to a certain set (the first step in web search is to determine whether a web page belongs to a member of the set to be found). Is there a connection between the two points, such as through the website A, after a few steps, can find the content of the website B. Of course, today’s discrete mathematics is actually used in chemistry, engineering, and biology. Learning discrete mathematics is to cultivate a computer thinking style.
By the way, one of his book has been translated into English and published last year. It’s worthy reading.
Second is a blog post from Steve Yegge:
Math is a lot easier to pick up after you know how to program. In fact, if you’re a halfway decent programmer, you’ll find it’s almost a snap.
I think they make clear points about what math programmers need to learn. And they all state that the math we need to learn is so different from what we learned in high school and university. After learning some fundamentals of programming, I was surprised that even I could read and understand some articles about algorithms. Hope this information can give you some confidence about math, and help you to find out what math you need to learn in the future.
I’ll be very happy if anything I write above could provide some useful information. I still have a long way ahead, I may share more after I finish the whole core curriculum.