This posting is mainly written for the class Learning How To Learn. However, it is not bounded to assignment. This will help my future learning, and I hope this will help you to learn from examples, or my cases.
This will embed some code snippets, but you can safely ignore them. They’re only to draw or calculate some numbers.
I’ve learned many learning methodologies, techniques and underlying researches in the class. Now, I’ll use them to analyze my past 3000 days’ learning trials. They are related to the topics:
- Practice, Illusion of competence of learning
- Process, not Product
- Repeat in spaced manner, to form chunks
- Action: Journaling, Pomodoro
I finished mandatory military service at 2006. Since then, I’ve been trying various things. Some are for work, and some not.
I collected somewhat big learning trials for almost 8 years, approximately 3000 days.
Sorry for the big drawing. You can see the full picture at flickr page. I’ll list them up here in plaintext:
for trial in Trials: print('%-30s\t%s ~ %s' % (trial['name'], trial['start'], trial['end']))
Study Ruby 2006-1 ~ 2008-1 Study Japanese 2006-2 ~ 2007-2 Study RoR 2007-1 ~ 2008-1 Study Python 2008-2 ~ 2014-2 Study Erlang 2010-1 ~ 2010-2 Korean brush painting 2010-1 ~ 2010-2 Study basic statistics 2011-1 ~ 2011-2 Writing journal 2011-2 ~ 2014-2 Driver license 2012-2 ~ 2012-2 Using pomodoro 2013-2 ~ 2014-2 Korean traditional archery 2014-1 ~ 2014-2 Study Dot Language 2014-2 ~ 2014-2 SICP 2008-1 ~ 2011-1 HTDP 2011-1 ~ 2012-1 Aosabook 2012-1 ~ 2012-2 JMBook 2012-2 ~ 2013-2 MMIX 2013-2 ~ 2014-1 IPSC 2014-1 ~ 2014-2 PCI 2014-1 ~ 2014-2 MIA 2014-2 ~ 2014-2 Murphy 2014-2 ~ 2014-2 Coursera ML 2013-2 ~ 2014-1 Coursera compdata 2014-1 ~ 2014-2 Coursera ModelThinking 2014-1 ~ 2014-2 Coursera getdata 2014-2 ~ 2014-2 Coursera learning 2014-2 ~ 2014-2
Following number 1 or 2 means, first half or second half of the year. For example, 2006-1 means second half of the year 2006.
For each trial, I assigned simple meta information. Meta info has 5 categories, each has boolean(True/False) value.
- Teamed: With team or not?
- Practiced: Did practice in extra time?
- Regular: Was it regular?
- Paid: Was it paid course?
- Success: Successful?
This is the complete table:
pd.DataFrame(M, columns=names, index=[x['name'] for x in Trials])
|Korean brush painting||True||True||True||True||False|
|Study basic statistics||False||False||False||False||False|
|Korean traditional archery||False||True||True||True||True|
|Study Dot Language||False||True||False||False||True|
Are those features related to result?
In the course, I’ve learned:
- Learn with team, it works better
- Practice makes permanent
- Spaced repetition is important
I have teamed, practiced and regular features on each trials. Are they related to the results? I also have paid info, which is not covered in the course. But I feel it has affected my learning. How much? Let’s calculate conditional probabilities and correlation coefficients for each columns.
for name in names[:-1]: pp, pn, np, nn = 0, 0, 0, 0 for n, r in zip(X[name], X['success']): if n==1 and r==1: pp += 1 elif n==1 and r==-1: pn += 1 elif n==-1 and r==1: np += 1 else: nn += 1 print 'p(success | %s) = %.3f' % (name, float(pp)/(pp+pn)) print 'p(success) = %.3f' % (float(pp+np)/(pp+pn+np+nn))
p(success | teamed) = 0.800 p(success | practiced) = 0.929 p(success | regular) = 0.842 p(success | paid) = 0.900 p(success) = 0.769
from sklearn.metrics import matthews_corrcoef for name in names[:-1]: print('Matthew correlation coefficient between %s and success: %.3f' % (name, matthews_corrcoef(X[name], X['success'])))
Matthew correlation coefficient between teamed and success: 0.085 Matthew correlation coefficient between practiced and success: 0.408 Matthew correlation coefficient between regular and success: 0.285 Matthew correlation coefficient between paid and success: 0.245
Actually, each columns are not independent, but I’ll ignore it. (Wrong, but not TOO wrong, I guess.)
Base success ratio is about 0.77, and each condition increases the success probabilty a litte bit. It becomes much clearer when calculate matthew correlation coefficients. All 4 features have positive relations, although their strengths vary.
We cannot say it has causality, but at least there must be correlations. And, among those four, practicing was the most important factor for me.
Among 26 items in the list, there are two special trials.
- Writing journal
- Using Pomodoro
These are not direct learning challenge, but a meta-learning try: creating habits. I can say, these two habits creations are successful, because I’ve been writing journals and using pomodoro techniques for more than a year comfortably. This is more detail how I did.
In the course, pomodoro technique is introduced as a tool to tackle procrastination problem. But my reason to adapt pomodoro is to use pomodoro as a unit of works. In other words, it’s the concept of Process oriented, not product.
- Journal (In Evernote)
- Write down next week’s major goals on Sunday night, before sleep
- Every morning, I declare the things to do
- Every night before sleep, I wrote retrospection on the day
- When write down todo list, set a goal of pomodoros. (Example: Study on Coursera for 4 pomodoros, Read books for 6 pomodoros)
- In the end of the week, check the number of pomodoros and adjust the number of pomodoro for the next week.
Shortly, the chart looks:
Is is true? I split the whole period into 3 segments and calculate the average number of learning activities(activities per halfyear) and success ratio. Intuitively, Learning activities times success ratio seems a reasonable score value, so I calculcated it also.
Let’s interpret the table.
- Writing journal: It increased success ratio.
- Using pomodoro: It increased the number of learning activities.
I concluded that: Both Journal and Pomodoro boost my overall learning efficiency.
I grouped some learning activities in the chart. There are 3 groups. I’ll explain them briefly.
Machine learning and Data Science Study group. Most members are(or were) SNUCSE students. One core man started the group, and currently in Season 3, reading “Machine Learning: A Probabilistic Perspective”. Nowaday, I have troubles in following the study. The book seems a little bit difficult for me. So I’m trying to find a way to overcome this hardship in the course materials.
In the company, there are several people to keep learning something. Mainly we’ve been taking coursera classes. It’s like a game to collect certificates. ;-)
I already stated that, With team, learning results better above. Actually, these 3 groups’s results are much better than the total average. Ok, team works. Now, I’m saying about How to maintain the team. Before the course, I had a little bit vague ideas in my mind. While watching the class videos, I realized that,
Process, not product
This concept can be applied to team creation and maintenance.
The Team, especially if the team is for learning, must focus on process, not product. Of course, it is good to have concrete output from learning activities. But if the study group start to focus on generating output - Presentation, Code, Seminar, Finish materials in limited time … -, members are getting stressful. Product is automagically generated as long as study group keeps going on.
In a single task, process oriented goal is preferred because we can start it with easy mind. For instance, Spend 2 pomodoros on physic homework is better than Finish physics homework. This simple policy greatly works on study group. Spend every tuesday evening on solving SICP problems is (usually) better than Finish solving problems in SICP Chapter 2 until next month.
If output is considered more important, questions are skipped. Sometimes, members feel guilty to give easy questions. But they shouldn’t. If all the other know the correct and rich answers for these easy questions, they don’t need the study group. Teaching is (one of) the best learning skill.
So, in my opinion, the team should focus on the learning process, not the product of learning, for long-run.
Why So Many Failures in Programming?
My major is Computer Science and Engineering and I’ve been a professional programmer since 2006. However, you can see many(more than avg) failures in learning programming languages. Why so many, especially programming languages? It’s my field!
While watching the video, I catched the term, Illustions of competence of learning. Immediately, I understand why I failed so many in my field.
I Failed because I was experienced.
I learned new programming languages, frameworks or platforms quickly at first, because I had similar experience and knowledge in my brain. And I began to think, “I understand it. I know it enough for now”. I stopped to code, read and study and feel satisfied. That was a TRAP. Actually, at that time the knowledge and understanding were only in my working memory and NOT CONSOLIDATED YET. Because I stopped further practice, the longterm memory cannot have newly learned materials. This is typical working example of Illusions of competence of learning.
In real learning, the first understanding is just a small bit. Especially about the programming language, you must be able to write the code in the language if you learned it correctly. Understanding the syntax is nothing. Repetitive practice(=Coding) must be followed after understanding to master new languages, in spaced duration.
All successfull learning challenges involved continuous practice sessions, even though it’s not intended.
From now on, I’ll challenge to learn a new programming language(rust) with carefully scheduled repeating coding sessions.
I already listed some topic in the overview. (Repeat!)
- Study together, it works.
- Focus on process. Also, I think it can be applied to team activities.
- Practice is not optional. It is the key to mastering anything.
- My learning efficiency increased a lot by writing journal and using pomodoro. I hope you also try!
The course doesn’t cover the effect of paid learning. In my case, it results better. ;-)