Since I left my last company, I haven't been updating this blog for a while. What surprises me is that there are constant flow of traffic coming towards this site. It's certainly not much but apparently Google is pointing at some of my thoughts.
One and half year ago was a dark time to me. Studying algorithm was the only few things which were bright in my life. It keeps on nourishing me as a person and a programmer.
My current job requires me to be proficient on certain languages. So reading them become my first priority. I guess what I learned from algorithmic study is that thinking deeply first become my habit in solving any programming problems. In general, it makes my code being less buggy.
Will I come back? I don't know but my guess is yes. As long as I am working in the tech business, there will be a need to refine my skill in algorithms.
33_P
This is my self-study page for the book, "Introduction to Algorithm", or commonly known as CLRS. This is also my diary page of how I struggle and grow in the programming world. I hope this blog can help amateurs or professionals, to improve their skills in programming, learning and living. As of Sep 12, 2011, I finished the "exercise read" of Chapter 2 (20110518) and 3 (20110608) and half of Chapter 4.
Shortcut for chapter specific information
Chapter4
(62)
chapter3
(41)
Chapter2
(22)
chapter6
(10)
chapter12
(9)
chapter15
(8)
chapter13
(7)
chapter7
(7)
Chapter10
(5)
chapter5
(5)
Appendix A
(4)
chapter8
(4)
Chapter19
(3)
Chapter22
(3)
Chapter34
(3)
Chapter35
(3)
chapter11
(3)
chapter16
(3)
chapter18
(3)
Appendix C
(2)
Chapter21
(2)
Chapter25
(2)
Chapter26
(2)
Chapter27
(2)
Chapter28
(2)
Chapter29
(2)
Chapter9
(2)
chapter14
(2)
chapter20
(2)
chapter23
(2)
chapter24
(2)
chapter30
(2)
chapter31
(2)
chapter32
(2)
Appendix D
(1)
Chapter1
(1)
Chapter33
(1)
chapter17
(1)
Showing posts with label thought. Show all posts
Showing posts with label thought. Show all posts
Monday, December 24, 2012
Wednesday, November 2, 2011
Difficult talk
Today I went to talk with a senior manager of my company. I thought about this chat for around a month before I go to talk with him. There are a lot of things I learnt during the talk.
What did we talk about? Essentially I hope to give an official grief of what I am doing at work. As a low-level employee, a lot of need of being innovative and being aggressive was not taken cared of. When you work in a big company though, these are tough talks. You don't want to throw all your raw emotions on other people but you still want to get your frustration and grief through. In fact, if you believe in someone you can talk with, then it is highly possible that someone can give you a positive feedback.
But human is strange, they are not exactly machine which you can query random things, each has emotion, each has ticks. You don't just go there when you wake up and try to convince somebody or something. You take your time, find your spot and try to get your message through. It is a very tough skill to learn.
Some people are not meant to talk to in a daily basis. When you come up with something, they will contend you until you succumb to their reasoning. This kind of "natural debater", if they are insightful or knowledgeable, is worthwhile to chat with them in a well-timed intervals. At you learn something during the process. On the other hand, if they are just being contentious for contentious sake, you might want to avoid them and more often you want to confront them with well-crafted arguments. The purpose, to be honest, is to shut them up. You don't want them to affect your daily life. In fact, more than often, you have better things to do.
There are people you want to drop by their office more regularly. Those are people you want to induce a conversation. They tend to say whenever they have something to say. Think whenever they have something to think. Those are people you want to ask their advises or suggestions.
These are all considerations you want to think through before you talk with a senior-level manager. Some don't worth your time to talk to them at all. Others it's completely fine to talk with them, you just need to prepare what you want to say. The bottom line is you need to communicate, that's a tough thing to do. You need to follow the convention, the culture, the personality of your boss and most importantly yourself on how to give a cogent argument.
That's what I did. This is also the first thing I learnt, you don't want to be very reactive on your emotion. You want to sit down, think it through before you packaged it and let other people know.
Then I learn the second thing, which is how you take care of complains like that. The senior manager didn't really explicit taught me anything to day. But he said something like this, "Problem X is essentially a problem which everyone is facing" and I am very convinced by his arguments. It boils down to the objective reality of the workplace - you either say you are not happy about your workplace. i.e. you prefer to quit completely. Or you accept the reality and stay. That's very reasonable trade-off he presented to me.
Now I also asked the typical question for career, "How can I do better?", "How can I do something else 5 years later?" , "How can I make myself better fit into the dynamics of the group?" These are very reasonable questions. If you said something like "How can I get promoted?" or "How can I get more credit?", you are coming from the self-angle. No one likes to listen to this kind of talk because no one like to work with someone who is selfish.
It is interesting how my manager answered. On one hand, I believe what he tries to do is to affirm something what I know already. i.e. Doing my business takes a long time to get promoted. The technical path I am taking is highly competitive and not easy to be the best. You need to be the best of the best to attain respect on certain things you say. Many live in the world of whether "they agree" on something but that doesn't bring a person far enough. You need to always have some technical support on your argument. If you are fast and smart, these arguments come to your head earlier.
In a technical debate, you want to be faster and deeper to win an argument, to be faster and deeper, you have to routinely build context of what you know on the topics. Eventually, you also need to think creatively to come up with a thought that no one has thought about. Thinking is a tough skill, because most of the time people don't tell you what they think. The best way you can do is to mimic what they think and try to simulate their thinking. You can repeat what they said, but it's more important to understand why and where they come from. Or else, you will come from seemingly random ideas. Creativity and Randomness of thought is always closed-calls.
That's why going technical is a deep discipline and it is difficult to master them in couple of years. Some thinkers are hard to mimic. The reason : they might be good at thinking, but they don't really know how they come up with their thought.
In any case, I am very convinced that it will take many years before I am considered to be good in the technical aspect. Now, this is a very useful piece of information by itself. If it takes so much time, it is then important to either 1) work harder, 2) admit failure and move on to something else.
Now, on the other hand, my senior manager also said that there are aspects of things I can work on. I told him that I am reading CLRS and I told him that it improves my efficiency. He said that's good. Then he went on and say learning data structure will likely give me a better aspect of getting my work done faster. It certainly doesn't make me have better idea in my field. It also doesn't give me better chance to get promoted or do anything important. Then he named couple of things I should work on - the code base, a knowledge in my field, data structure as well as analytic skill on data.
Indeed, those are important skills. Now, think about the beauty of the talk. It resolved a human crisis: The "future"-type of question, whenever you ask, signified a younger member in your team are shaken about the future of the group. It also means that there are some events in the group which make members to be unsure. If you are good at management, those are things which you should take care.
Let me continued, not only it resolved a crisis, it also come up with something positive such that I can work on. How tough is that to learn the 4 aspects of things I just mentioned? In fact, if you are bright, it will only take you a year or so. But during the time, the group is still running smoothly. What else is better.
So the chat was a win-win. I don't get all the things I want but I see a path. I also see something positive to work on. It takes my manager sometime, but he got a closure which at least sometime I will not go to bug him the "future"-question. Then he also resolve a human problem in the group. Very smart.
Now, the third thing I thought about is why did I get a win-win in this case? Well, because I have been prepared and I have a good will . In general, this is where you start a conversation in the first place, you prepared and think through other people's perspective before you go on talking. This is third thing I learned.
At the end, do I agree with what my manager said? Not really but I think he handles it well. Difficult talk is, a skill, but a definite must have in your life.
33_P
What did we talk about? Essentially I hope to give an official grief of what I am doing at work. As a low-level employee, a lot of need of being innovative and being aggressive was not taken cared of. When you work in a big company though, these are tough talks. You don't want to throw all your raw emotions on other people but you still want to get your frustration and grief through. In fact, if you believe in someone you can talk with, then it is highly possible that someone can give you a positive feedback.
But human is strange, they are not exactly machine which you can query random things, each has emotion, each has ticks. You don't just go there when you wake up and try to convince somebody or something. You take your time, find your spot and try to get your message through. It is a very tough skill to learn.
Some people are not meant to talk to in a daily basis. When you come up with something, they will contend you until you succumb to their reasoning. This kind of "natural debater", if they are insightful or knowledgeable, is worthwhile to chat with them in a well-timed intervals. At you learn something during the process. On the other hand, if they are just being contentious for contentious sake, you might want to avoid them and more often you want to confront them with well-crafted arguments. The purpose, to be honest, is to shut them up. You don't want them to affect your daily life. In fact, more than often, you have better things to do.
There are people you want to drop by their office more regularly. Those are people you want to induce a conversation. They tend to say whenever they have something to say. Think whenever they have something to think. Those are people you want to ask their advises or suggestions.
These are all considerations you want to think through before you talk with a senior-level manager. Some don't worth your time to talk to them at all. Others it's completely fine to talk with them, you just need to prepare what you want to say. The bottom line is you need to communicate, that's a tough thing to do. You need to follow the convention, the culture, the personality of your boss and most importantly yourself on how to give a cogent argument.
That's what I did. This is also the first thing I learnt, you don't want to be very reactive on your emotion. You want to sit down, think it through before you packaged it and let other people know.
Then I learn the second thing, which is how you take care of complains like that. The senior manager didn't really explicit taught me anything to day. But he said something like this, "Problem X is essentially a problem which everyone is facing" and I am very convinced by his arguments. It boils down to the objective reality of the workplace - you either say you are not happy about your workplace. i.e. you prefer to quit completely. Or you accept the reality and stay. That's very reasonable trade-off he presented to me.
Now I also asked the typical question for career, "How can I do better?", "How can I do something else 5 years later?" , "How can I make myself better fit into the dynamics of the group?" These are very reasonable questions. If you said something like "How can I get promoted?" or "How can I get more credit?", you are coming from the self-angle. No one likes to listen to this kind of talk because no one like to work with someone who is selfish.
It is interesting how my manager answered. On one hand, I believe what he tries to do is to affirm something what I know already. i.e. Doing my business takes a long time to get promoted. The technical path I am taking is highly competitive and not easy to be the best. You need to be the best of the best to attain respect on certain things you say. Many live in the world of whether "they agree" on something but that doesn't bring a person far enough. You need to always have some technical support on your argument. If you are fast and smart, these arguments come to your head earlier.
In a technical debate, you want to be faster and deeper to win an argument, to be faster and deeper, you have to routinely build context of what you know on the topics. Eventually, you also need to think creatively to come up with a thought that no one has thought about. Thinking is a tough skill, because most of the time people don't tell you what they think. The best way you can do is to mimic what they think and try to simulate their thinking. You can repeat what they said, but it's more important to understand why and where they come from. Or else, you will come from seemingly random ideas. Creativity and Randomness of thought is always closed-calls.
That's why going technical is a deep discipline and it is difficult to master them in couple of years. Some thinkers are hard to mimic. The reason : they might be good at thinking, but they don't really know how they come up with their thought.
In any case, I am very convinced that it will take many years before I am considered to be good in the technical aspect. Now, this is a very useful piece of information by itself. If it takes so much time, it is then important to either 1) work harder, 2) admit failure and move on to something else.
Now, on the other hand, my senior manager also said that there are aspects of things I can work on. I told him that I am reading CLRS and I told him that it improves my efficiency. He said that's good. Then he went on and say learning data structure will likely give me a better aspect of getting my work done faster. It certainly doesn't make me have better idea in my field. It also doesn't give me better chance to get promoted or do anything important. Then he named couple of things I should work on - the code base, a knowledge in my field, data structure as well as analytic skill on data.
Indeed, those are important skills. Now, think about the beauty of the talk. It resolved a human crisis: The "future"-type of question, whenever you ask, signified a younger member in your team are shaken about the future of the group. It also means that there are some events in the group which make members to be unsure. If you are good at management, those are things which you should take care.
Let me continued, not only it resolved a crisis, it also come up with something positive such that I can work on. How tough is that to learn the 4 aspects of things I just mentioned? In fact, if you are bright, it will only take you a year or so. But during the time, the group is still running smoothly. What else is better.
So the chat was a win-win. I don't get all the things I want but I see a path. I also see something positive to work on. It takes my manager sometime, but he got a closure which at least sometime I will not go to bug him the "future"-question. Then he also resolve a human problem in the group. Very smart.
Now, the third thing I thought about is why did I get a win-win in this case? Well, because I have been prepared and I have a good will . In general, this is where you start a conversation in the first place, you prepared and think through other people's perspective before you go on talking. This is third thing I learned.
At the end, do I agree with what my manager said? Not really but I think he handles it well. Difficult talk is, a skill, but a definite must have in your life.
33_P
Wednesday, October 5, 2011
RIP. Mr Jobs.
In our time, it's hard to find someone you can call a visionary. Mr. Steve Jobs is worthwhile for the title.
News from CNN
News from CNN
Wednesday, September 28, 2011
To make a living
I have spent a lot of time to ponder on why I work as a researcher and a programmer. You see, this is one of those fundamental questions which people try to avoid. Yet, once you have the answers for one of them, you have a powerful conviction in your life and many difficulties become non-issues.
In the past, my answer of working on research has a lot to do with compassion. I truly believe that technology can benefit human being. I still believe so. Though in reality, humans have a lot to do with technology development and humans...... let's just say you will have your own reason to feel unhappy with them.
Then, there is innovation. I briefly considered. In the modern day companies though, you are probably a small part of a very big framework to do something. When you really publish a paper, you become one of the inconsequential second authors of the paper. Your idea is usually not being used unless it convinces people high-up. And when it convince people's high-up, it would become their ideas(!).
Go to read Putt's Law and the Successful Technocrat, you will know what I just said it's true for every single bit.
So, not compassion, not innovation, without them also implies there is no fun as well. Ok, no fun as well...... What can we think of...? Ah.
Money.
Yes, at the end of the day, your rational judgement of whether you should take a certain job should always boil down to optimizing money. My job is certainly not a darling. But I buck up because I want to make a living and pay off my house. My boss is one of the most brain-proud person in the world and talking with him is suffocating but I always think, "This is just part of the hostile situation, I am going to think of a solution to talk with him". Some of strategies include I would avoid social interaction with him - so I avoid the group lunch because he is always taking up the conversation token but got pissed when the token is taken from him. This gives me the reputation of "anti-social".
I decided to take all these. Not because I have any compassion or can be innovative about the job, but I want to make a living. I have myself and my family to take care.
But fellows, that doesn't mean this is a compromise. If you found that you are one of my situations, what you should do is to make sure you equipped yourself during these kind of bad time. Here is the 5 things I do,
In the past, my answer of working on research has a lot to do with compassion. I truly believe that technology can benefit human being. I still believe so. Though in reality, humans have a lot to do with technology development and humans...... let's just say you will have your own reason to feel unhappy with them.
Then, there is innovation. I briefly considered. In the modern day companies though, you are probably a small part of a very big framework to do something. When you really publish a paper, you become one of the inconsequential second authors of the paper. Your idea is usually not being used unless it convinces people high-up. And when it convince people's high-up, it would become their ideas(!).
Go to read Putt's Law and the Successful Technocrat, you will know what I just said it's true for every single bit.
So, not compassion, not innovation, without them also implies there is no fun as well. Ok, no fun as well...... What can we think of...? Ah.
Money.
Yes, at the end of the day, your rational judgement of whether you should take a certain job should always boil down to optimizing money. My job is certainly not a darling. But I buck up because I want to make a living and pay off my house. My boss is one of the most brain-proud person in the world and talking with him is suffocating but I always think, "This is just part of the hostile situation, I am going to think of a solution to talk with him". Some of strategies include I would avoid social interaction with him - so I avoid the group lunch because he is always taking up the conversation token but got pissed when the token is taken from him. This gives me the reputation of "anti-social".
I decided to take all these. Not because I have any compassion or can be innovative about the job, but I want to make a living. I have myself and my family to take care.
But fellows, that doesn't mean this is a compromise. If you found that you are one of my situations, what you should do is to make sure you equipped yourself during these kind of bad time. Here is the 5 things I do,
- Learn: take every chance to learn. Learn everything that can help you - work-related stuffs such as programming courses or classes, thinking-related stuffs such as Math, Physic. Learn, Learn, Learn. Your job sucks, you don't. Think of how to optimize the experience if it is not the most ideal.
- Take control of your life. Your job is not you. Your employer is not really your boss. You are. You should conduct yourself like it is a company. A good company. So don't crazy things when time is rough and economy is bad. Be responsible for your life.
- Connect with other people: Your boss sucks it doesn't mean all of your co-workers suck. You co-workers suck doesn't mean every one besides you suck. Positive interaction is indeed a random event but whether you want to seek one is decided by you.
- See it as problem: Don't see limitations as limitations. See it as opportunities for you to grow as a person. You don't always win in every life's situation. So when life is tough, you should be in your problem solving mode - think! how should I deal with difficult people? Treat it as a problem. Never subscribe to the theory that "I am that kind of person and he/she are those kinds, so we can't get a long forever." Every problem has a solution. If you give up, then there is none.
This is a big motivational but I think it's as every bit true as well. Go on living, programmers and researchers. You guys are smart group in the population. You deserve a good life and feel happy.
33_P
Monday, September 26, 2011
Fellows, don't plagiarize in programming
Unlike many, I don't think the word plagiarism is equivalent to copying. Some copying can be good, for example, when you have a book filled with text, if you want to make another copy. Before Gutenberg, that means you would need to create a new print to print it. On the other, you can simply do a command cp to copy an existing file to make an copy verbatim. Behind that mechanism, bunch of system calls were made but essentially it's just to duplicate something. Honestly, that is a rather fascinating things.
That's said, that means I believe there are good copying as there are bad. I tend to believe copying in academia is bad because promoting copying could easily discredit the person who really generate the idea in the first place - as a result, not many would then be motivated in thinking of a new idea. This is indeed the case. A good example is the Academia in China and India. It's not unheard of that some Universities from Mainland China copy famous research and claim that it is theirs. The general public is relentless on pirating software and there is always a way to do so. As a results, you seldom hear a new idea generated from a Chinese academic publication. Many are small tweaks. Those are actually good. Some are plain-right copy to take care of some kind of requirements in the University.
Ideas are the source of innovations, innovation is the source of greater efficiency. If you kill ideas, innovation is gone, when innovation is gone, efficiency will leave you as well. That's why in general, you would generally feel that an economy based on copying can be glimicky and shallow.
Now, all being said, programming is not such an academic discipline. In fact, there are moments we just have to use other people's program. So why should you care whether you copy something from the internet? At the end, it depends on whether you want to finish *your job* by *yourself*. If you copied and you understand how it works, there act of copying is not much different from an act of extracting convenience. For example, if you understand quicksort, getting a quicksort implementation will allow you to change the partition function. If your goal is to do an experiment on different quicksort, it sorts of make no sense to implement quicksort from scratch.
On the other hand, if you are working on a project and require you to write an algorithm from scratch but you decided to choose copy the program *without understanding it), this usually spells trouble in future. What if you were asked to change the behavior of the program? What if some body to extend it? How would you take care of your job? Those would be moments when your temporary gain in time now will cost you much time in future.
Another point I would make is that thinking through or grok the nature of one thing, usually bring understand on the other. What is the act of programming anyway? All the grandiose theories aside, once you know a certain algorithm, programming is just typing. Think about insertion sort, I spend quite a bit of time to practice how to write one. Now I can pretty much put it on paper and it will run. Time taken? depends on my typing. Usually around 2 minutes including compilation and test. If you know what you are doing for sure, many of your tasks would usually take you 10 minutes to write the first version of the program. The time which is really costly is the time of debugging. This is efficiency.
So my friends who were directed here by Google, allow me to advise you on this. Don't plagiarize in programming. You are actually getting slower and slower each time when you copy programs and treat it as your work. NOT FASTER. NOT FASTER because you hadn't learnt a single thing of the problem. You are the one who got hurt most in the process. Not me.
33_P
Saturday, September 24, 2011
The 501-th post in Self-Study : "Why are we studying bubble sort?"
After about half a year and endless coding, I found myself posting the 501-th post of this blog. It's a sign of continued enthusiasm on the subject. So I decided to write something in this occasion.
Most people I know in work and academia are brilliant. Many of them have special skills which one would envy. Algorithmic skills is common and it becomes some kind of source of power in conversation. A person who can wield the correct algorithmic reasoning takes an edge in the programming well.
In my view, algorithmic skill is different from programming skill. In programming, you might decide not to do something deal to non-algorithmic reason. For example, A is a new guy and you want to give opportunity to him. So you will pass a certain programming problem to him even though you don't know what he would do. This reasoning is completely fine. Though those are concerns more close to software engineering and even management.
As algorithmic concern might not be the first consideration. Why do we study algorithm then? In lecture 1 of the MIT open course of algorithm (SMA 5503), Prof. Charles Leiserson once asked the same questions. His answer is quite illuminating and it boils down to this - speed of an algorithm is a kind of fundamental tradeoff of many other aspects of a program. For example, if we want to show cutting-edge graphic, then we need to decide if the underlying algorithm is fast or not. Leiserson believes that algorithmic performance of a program is like a currency. Once you know the currency of a program, you can make rational decision on programs.
So this come back to the point of why we are studying bubble sort. This is a question comes up in the class I am taking in famous extension school. When it is brought up, a grin and certain condescension was shown to the subject.
I don't really approve that attitude - for one there are interesting characteristics of all types of algorithms. The written representation is a form of it. Whether the algorithm is stupid or not is also not important, they are taught because we want to let new generation of programmer to think algorithm better. No one would believe that in real life, one would want to use Bubblesort to run sorting given its n^2 performance in both comparison and moves. But that doesn't mean, one shouldn't spend some time to understand its characteristic and try to learn something in it. Theoretical interest of an algorithm should sustain one's interest of an algorithm. If one just think programming practically, why not just skip the whole algorithmic study?
For people who are unconvinced, they should spend sometime to take a look of the sorting chapter of TAOCP. Knuth is a well-respected figure in computer science and I always find that reading his book make me understand certain things more. I think my linear search is refined because I read his book. (Again, if you think this is stupid, you will be surprised on how deep linear search can be.)
This is the mindset which keeps me going as a researcher, programmer and generally a human. I hope this is a good attitude to share with everyone of you.
33_P
Most people I know in work and academia are brilliant. Many of them have special skills which one would envy. Algorithmic skills is common and it becomes some kind of source of power in conversation. A person who can wield the correct algorithmic reasoning takes an edge in the programming well.
In my view, algorithmic skill is different from programming skill. In programming, you might decide not to do something deal to non-algorithmic reason. For example, A is a new guy and you want to give opportunity to him. So you will pass a certain programming problem to him even though you don't know what he would do. This reasoning is completely fine. Though those are concerns more close to software engineering and even management.
As algorithmic concern might not be the first consideration. Why do we study algorithm then? In lecture 1 of the MIT open course of algorithm (SMA 5503), Prof. Charles Leiserson once asked the same questions. His answer is quite illuminating and it boils down to this - speed of an algorithm is a kind of fundamental tradeoff of many other aspects of a program. For example, if we want to show cutting-edge graphic, then we need to decide if the underlying algorithm is fast or not. Leiserson believes that algorithmic performance of a program is like a currency. Once you know the currency of a program, you can make rational decision on programs.
So this come back to the point of why we are studying bubble sort. This is a question comes up in the class I am taking in famous extension school. When it is brought up, a grin and certain condescension was shown to the subject.
I don't really approve that attitude - for one there are interesting characteristics of all types of algorithms. The written representation is a form of it. Whether the algorithm is stupid or not is also not important, they are taught because we want to let new generation of programmer to think algorithm better. No one would believe that in real life, one would want to use Bubblesort to run sorting given its n^2 performance in both comparison and moves. But that doesn't mean, one shouldn't spend some time to understand its characteristic and try to learn something in it. Theoretical interest of an algorithm should sustain one's interest of an algorithm. If one just think programming practically, why not just skip the whole algorithmic study?
For people who are unconvinced, they should spend sometime to take a look of the sorting chapter of TAOCP. Knuth is a well-respected figure in computer science and I always find that reading his book make me understand certain things more. I think my linear search is refined because I read his book. (Again, if you think this is stupid, you will be surprised on how deep linear search can be.)
This is the mindset which keeps me going as a researcher, programmer and generally a human. I hope this is a good attitude to share with everyone of you.
33_P
Tuesday, September 13, 2011
Some thoughts on CLRS's treatment on recurrence relation
As you may observed, I have been stuck in Chapter 4 for quite a while. Notably on Section 4.3 and 4.4. There are exercises which I don't fully grok. That obviously makes me think of why. This usually gives me some insight.
When you take a look of teaching material on recurrence relations, most of the honest text will tell you that solving general recurrence relationship is in essence a guess job. This is where the substitution method shines.
Of course we all know that there are useful exceptions. There is the divide-and-conquer type. That is when you have the situation where there is a term T(n/a). Basically, tree method, the master method shine.
Now of course, if you talk about Math, many interesting things could happen. So for example, just on the divide-and-conquer type of recurrence - so what if we have a linear combination of the term T(n/a)? This is where master method will not work and you need to retreat back to tree method.
If you are looking for a standard method, then you have to use Akra-Bassi method which states the general solution of T(n) = Sum T(n/a_i) + f(n) . This is the stated in the bibliographical references but not covered in CLRS.
Now how about another important class where. T(n) = Sum T(n-a_i)? This is usually known as linear recurrence relation (ref: the famous "Discrete Mathematics and Applications"). In that case, one needs to introduce powerful method such as generating function to solve this kind of question. Again, this is not something which is not covered in CLRS.
So here you have it, CLRS basically hadn't covered many standard techniques in solving recurrence relation. But its exercises are a bit unforgiving because it has question such as 4.3-6 which require solving recurrence such as T(n) = T(n/2+17) + n or 4.4.5 which requires solving T(n) = T(n/2) + T(n-1) + n. In a ways, both of them are kinds of recurrence relation which are both linear and divide-and-conquer. The goal is to train the reader to learn "how to guess?".
That is perhaps why some of these problems are not easy. 4.3-6, for example, takes some space to explain if you try to solve it using substitution method.
In a way, CLRS's treatement on recurrence is both too simple and too difficult. I don't blame the authors. In my opinion. its real strength, especially in 3rd edition, is that it motivates the reader how to think of recurrence relation and how they occur. Concrete Mathematics reads similarly but it would take 7 chapters before the readers can reach the point of learning how to solve recurrence using generating function. So as an introductory text, CLRS is doing a fairly good job.
But for readers who are looking for an encyclopedic text, do bear in mind that, CLRS needs to be supplemented by other books. If you want to understand the "full" story, you still need to read TAOCP and CMath.
Ah learning, learning.
When you take a look of teaching material on recurrence relations, most of the honest text will tell you that solving general recurrence relationship is in essence a guess job. This is where the substitution method shines.
Of course we all know that there are useful exceptions. There is the divide-and-conquer type. That is when you have the situation where there is a term T(n/a). Basically, tree method, the master method shine.
Now of course, if you talk about Math, many interesting things could happen. So for example, just on the divide-and-conquer type of recurrence - so what if we have a linear combination of the term T(n/a)? This is where master method will not work and you need to retreat back to tree method.
If you are looking for a standard method, then you have to use Akra-Bassi method which states the general solution of T(n) = Sum T(n/a_i) + f(n) . This is the stated in the bibliographical references but not covered in CLRS.
Now how about another important class where. T(n) = Sum T(n-a_i)? This is usually known as linear recurrence relation (ref: the famous "Discrete Mathematics and Applications"). In that case, one needs to introduce powerful method such as generating function to solve this kind of question. Again, this is not something which is not covered in CLRS.
So here you have it, CLRS basically hadn't covered many standard techniques in solving recurrence relation. But its exercises are a bit unforgiving because it has question such as 4.3-6 which require solving recurrence such as T(n) = T(n/2+17) + n or 4.4.5 which requires solving T(n) = T(n/2) + T(n-1) + n. In a ways, both of them are kinds of recurrence relation which are both linear and divide-and-conquer. The goal is to train the reader to learn "how to guess?".
That is perhaps why some of these problems are not easy. 4.3-6, for example, takes some space to explain if you try to solve it using substitution method.
In a way, CLRS's treatement on recurrence is both too simple and too difficult. I don't blame the authors. In my opinion. its real strength, especially in 3rd edition, is that it motivates the reader how to think of recurrence relation and how they occur. Concrete Mathematics reads similarly but it would take 7 chapters before the readers can reach the point of learning how to solve recurrence using generating function. So as an introductory text, CLRS is doing a fairly good job.
But for readers who are looking for an encyclopedic text, do bear in mind that, CLRS needs to be supplemented by other books. If you want to understand the "full" story, you still need to read TAOCP and CMath.
Ah learning, learning.
Monday, September 12, 2011
Changed detailed description of the blog
I have just made a change in the detailed description of this blog. So far, appealing to audience is not my key concern. In a way, I am still struggling in going through the fundamentals of algorithms......
Life is a bit slow for me lately. Sometimes I would have the following dark thought - I would think solving a little recurrence relationship probably won't help me in my career too much. This is an illusion based simply on greed and impatience. Learning a subject in either Math or Computer Science is always an epic struggle, no matter what you are learning.
In my own field, I have struggled for many years without getting my peers or my supervisors approval. Then I realized my search has been too narrow. Computers doesn't serve just on things like machine learning. There are wide varieties of applications which are interesting and improve human's life.
The betterment of human's life is my true concern and life's goal. What is better if your skill can make other people feel happy? That's why we write game, we automate things, we attempt to control other objects, we engineer.
So I changed my description, I no longer just want to read the book CLRS. I hope that my story of struggle and growth in the process of reading (which is well-known to be hard) can be beneficial to other people.
Life is a bit slow for me lately. Sometimes I would have the following dark thought - I would think solving a little recurrence relationship probably won't help me in my career too much. This is an illusion based simply on greed and impatience. Learning a subject in either Math or Computer Science is always an epic struggle, no matter what you are learning.
In my own field, I have struggled for many years without getting my peers or my supervisors approval. Then I realized my search has been too narrow. Computers doesn't serve just on things like machine learning. There are wide varieties of applications which are interesting and improve human's life.
The betterment of human's life is my true concern and life's goal. What is better if your skill can make other people feel happy? That's why we write game, we automate things, we attempt to control other objects, we engineer.
So I changed my description, I no longer just want to read the book CLRS. I hope that my story of struggle and growth in the process of reading (which is well-known to be hard) can be beneficial to other people.
Sunday, September 11, 2011
Half a year of self-study - what did I learn?
I spent last half a year just to read a single book and finish 2.5 chapters of the exercises. If I told myself this half a year ago, I would think I am crazy.
Of course, now I think different. It is a good textbook and I found that reading it taught me many things. The major change is this - I see algorithm and programming differently.
In the past, I would probably just go to copy an algorithm. Now most of the time I will think about how to solve a problem first before I do anything. The thinking time could be as short as 10 seconds or can be as long as 1 - 2 hour.
Should I go on? Absolutely yes. Learning is always one big grinding process. It always reward the patience.
In last half a year, I also learn one more thing : it's not just trying to work in a bigger company, it is a matter of whether you getting skills to improve your career. My honest reason to start doing all sort of data structure learning is because I want to get a better job. But now, after reading glassdoor though, that illusion is gone. It might still be a good thing to get a job in big company but the goal is no longer that it is a better job. More than likely, it is a worse or a similarly bad job as what you are working on.
But why do I still keep on learning Data Structure? Here is the answer, it is something that you can use in many facets of computer science. If you want to start up, you need to have better skill in Data structure. If you want to go back to academia, you need to have better skill in Data structure as well. If you want to get promoted in your company, your skill of Data structure will also count. If you are in a deadend, why not finish your job faster and do something else quickly?
That's the mind set, don't give up, my fellow. Your job may be a deadend, but your career is most certainly not.
Of course, now I think different. It is a good textbook and I found that reading it taught me many things. The major change is this - I see algorithm and programming differently.
In the past, I would probably just go to copy an algorithm. Now most of the time I will think about how to solve a problem first before I do anything. The thinking time could be as short as 10 seconds or can be as long as 1 - 2 hour.
Should I go on? Absolutely yes. Learning is always one big grinding process. It always reward the patience.
In last half a year, I also learn one more thing : it's not just trying to work in a bigger company, it is a matter of whether you getting skills to improve your career. My honest reason to start doing all sort of data structure learning is because I want to get a better job. But now, after reading glassdoor though, that illusion is gone. It might still be a good thing to get a job in big company but the goal is no longer that it is a better job. More than likely, it is a worse or a similarly bad job as what you are working on.
But why do I still keep on learning Data Structure? Here is the answer, it is something that you can use in many facets of computer science. If you want to start up, you need to have better skill in Data structure. If you want to go back to academia, you need to have better skill in Data structure as well. If you want to get promoted in your company, your skill of Data structure will also count. If you are in a deadend, why not finish your job faster and do something else quickly?
That's the mind set, don't give up, my fellow. Your job may be a deadend, but your career is most certainly not.
Friday, September 9, 2011
Creativity and Society
When you are a creative person, the biggest pain in life would be someone disallows you to do anything creative and constructive for the world. That's a big waste of a person's time and life.
The biggest sin of one human being is to waste other human beings' time. That's why unemployment is a social problem and bureaucracy is despicable.
It is a real sin for anyone try to impose their view to other people. That's why we humans have a universal feeling where only one opinion, only one thought, only one religion or only one philosophy is not right. Because every man is entitled to their own opinion, their own thought, their own religion and their own philosophy. This should be an explicit boundary. No human being should cross it. We just let too many people to cross this boundary......
The biggest sin of one human being is to waste other human beings' time. That's why unemployment is a social problem and bureaucracy is despicable.
It is a real sin for anyone try to impose their view to other people. That's why we humans have a universal feeling where only one opinion, only one thought, only one religion or only one philosophy is not right. Because every man is entitled to their own opinion, their own thought, their own religion and their own philosophy. This should be an explicit boundary. No human being should cross it. We just let too many people to cross this boundary......
Wednesday, September 7, 2011
Another thought about studying CLRS
Hmm. When I think about this, this is probably a point I said it couple of times. But you come to think of it, it should be trivial.
Normally, you read a textbook in order to take a course, but for a book like CLRS, you actually take a course in order to read the textbook. The former is the mindset for students, undergrad or grad alike, who want to get good grades from a class, getting good GPA and so on and so forth. In real life : it's equivalent to "meaningless".
The latter is the mindset for practitioner who want to refine the skill and push it to a certain extreme. That, again, is probably the reason why not many people are willing to read the CLRS as a book.
Normally, you read a textbook in order to take a course, but for a book like CLRS, you actually take a course in order to read the textbook. The former is the mindset for students, undergrad or grad alike, who want to get good grades from a class, getting good GPA and so on and so forth. In real life : it's equivalent to "meaningless".
The latter is the mindset for practitioner who want to refine the skill and push it to a certain extreme. That, again, is probably the reason why not many people are willing to read the CLRS as a book.
Tuesday, September 6, 2011
How difficult is CLRS?
While I started this reading project 6 months ago, one question has always been in my mind - how difficult is to read CLRS?
My background is not straightly from computer science. The first few comments I heard is that "it is impossible to read CLRS as a book." .
Yet during my reading, I have stumbled upon several individuals who tried to the similar things as I do. That is to deep read the whole book once -> i.e. browse, read, finish all the exercises and (optional) research.
None of them really finish such a feat (nor I would claim I come closed) but many of them can finish couple of chapters with what I consider as correct answers.
If they can do it, how come most cannot? I am not inclined to blame talent as the reason because I always think if you are not talented, you can simply learn better.
When I start a course in famous extension school, CLRS is listed in two advanced Data Structure courses. They are in two different topics. Then I start to realize what really happens.
CLRS is probably not difficult but it will take almost 6-7 graduate courses to cover the whole book.
And of course, most do not have the time to take 1-2 graduate courses because they can be very time-consuming. And time is precisely what many people perceive they have little.
But bear that in mind, CLRS is completely readable if you are used to read Mathematical text and long books. (If you are not, are you really a programmer?), the rest is just patience and persistence.
Monday, September 5, 2011
I have changed......
In the past, if I knew the homework set has changed, I would be so unhappy. I would curse the instructor why he/she couldn't just stick to the old syllabus.
I have changed. Now I see programming as a life time career. Although I tried to avoid doing programming at work (because it's a waste of time), I do hope that I can use programming to do a lot of fascinating thing that enriched everybody's life (me included).
With that line of thinking, who cares about the 20 hours were used? It is a good use of time because this 20 hours will mean a lot for me as a programmer. How would I know more Java before this 20 hours? How would I know backtracking before this 20 hours.
In ZAMM, Prisig discussed education systems. And how come a motorcycle technicians will eventually be interested in deeper knowledge such as Mathematics and Mechanics. The answer is he no longer feel satisfied by the shallow knowledge shown to him by cheap manuals and folklorish wisdom. He become something actively accept and reflect on how he can do better.
This is everything bit as philosophical as one goes to reflect on problems such as why life exists, why do we live or whether there is another being exists in the world. In fact, this active absorption of knowledge may by itself, make us humans as we are.
I have changed. Now I see programming as a life time career. Although I tried to avoid doing programming at work (because it's a waste of time), I do hope that I can use programming to do a lot of fascinating thing that enriched everybody's life (me included).
With that line of thinking, who cares about the 20 hours were used? It is a good use of time because this 20 hours will mean a lot for me as a programmer. How would I know more Java before this 20 hours? How would I know backtracking before this 20 hours.
In ZAMM, Prisig discussed education systems. And how come a motorcycle technicians will eventually be interested in deeper knowledge such as Mathematics and Mechanics. The answer is he no longer feel satisfied by the shallow knowledge shown to him by cheap manuals and folklorish wisdom. He become something actively accept and reflect on how he can do better.
This is everything bit as philosophical as one goes to reflect on problems such as why life exists, why do we live or whether there is another being exists in the world. In fact, this active absorption of knowledge may by itself, make us humans as we are.
Sunday, September 4, 2011
After last exercise
I start to feel mildly tired. Compare to CLRS, the course is on the simpler side. There are two courses which are more advanced in the famous extension school. Despite the problems are simpler, they are more tedious and take more time to resolve. To me, it is a test of patience and endurance. The truth is in real life, I don't usually like to think of a problem to its ends. In my work, I simply hope to finish of the work due to the fact the task is not so motivating.
It takes time, I tell myself. And indeed, it takes time. But I tend to believe I have certain degree of talent as well. So I think this chunk of time is well spent.
My goal is still to finish HW2 today and work out the rest of the problem set in the rest of next week. I don't think I can make it before Thursday (so I can do late registration for other courses) but I can certainly try.
It takes time, I tell myself. And indeed, it takes time. But I tend to believe I have certain degree of talent as well. So I think this chunk of time is well spent.
My goal is still to finish HW2 today and work out the rest of the problem set in the rest of next week. I don't think I can make it before Thursday (so I can do late registration for other courses) but I can certainly try.
Thursday, September 1, 2011
A sudden feeling
I suddenly feel I am quite elated with the simple questions I solved in the Data Structure class for the famous extension school. Famous extension school is famous because its programs are one of the top of the world. But famous extension school is still a worthwhile place to study for a moment because it charges a large sum of fee for courses. Studying there may not be the most-valued thing in the world but the education is decent. You can think of its graduate program as at least in the top of the 2nd tier.
Some of its graduate exhibit a trait which I dislike : that is to claim they are graduated from the university itself. But extension school is still an extension school. Its quality is still poorer than the core. It's pretentious to claim you graduate from the core which only a few very talented can do. So I always refer it to the "extension school" because I don't like to brat with the name.
In such a context, being able to finish the homework with ease is a pretty encouraging thing. That might mean I might really able to apply jobs in some Big shots company. But well, let's wait and see. Programming skill is something it takes time to refine.
Another interesting feeling I have when I walked home is that programming could be something fun and interesting. Unlike work in my job which is dull and super-uncreative, a lot of programming tasks are artistic and challenging. This makes me feel happy about my choice to admit to the famous extension school. It really adds something positive to my life and balances out my rather s*ty work life.
Some of its graduate exhibit a trait which I dislike : that is to claim they are graduated from the university itself. But extension school is still an extension school. Its quality is still poorer than the core. It's pretentious to claim you graduate from the core which only a few very talented can do. So I always refer it to the "extension school" because I don't like to brat with the name.
In such a context, being able to finish the homework with ease is a pretty encouraging thing. That might mean I might really able to apply jobs in some Big shots company. But well, let's wait and see. Programming skill is something it takes time to refine.
Another interesting feeling I have when I walked home is that programming could be something fun and interesting. Unlike work in my job which is dull and super-uncreative, a lot of programming tasks are artistic and challenging. This makes me feel happy about my choice to admit to the famous extension school. It really adds something positive to my life and balances out my rather s*ty work life.
Friday, August 5, 2011
Stuck in further reading and its solution
I have stuck in further reading of the book. Mainly because there are just some background knowledge I don't fully grasp.
For example. In reading B-tree, since I don't fully understand red-black tree. I am not really sure about what is it about.
So I think it's time to turnaround and re-read the book from chapters I have done any exercises yet. That is Chapter5. This time I can be a bit deep on each chapter. When I get back to Chapter 19 again, there should be a brand new understanding of what's going on.
CLRS is indeed quite difficult to read. I am ready to take several courses in order to understand it.
For example. In reading B-tree, since I don't fully understand red-black tree. I am not really sure about what is it about.
So I think it's time to turnaround and re-read the book from chapters I have done any exercises yet. That is Chapter5. This time I can be a bit deep on each chapter. When I get back to Chapter 19 again, there should be a brand new understanding of what's going on.
CLRS is indeed quite difficult to read. I am ready to take several courses in order to understand it.
Friday, July 1, 2011
Chapter3 (Read 1)
After every exercise read of a Chapter, I would like to write an after-thought post on how I think. I wrote one for Chapter 2 so I will also write one for Chapter 3.
I finished Chapter 3 much faster than Chapter 2. Mainly because Chapter 3 is more mathematical than algorithmic. So I usually spent less time in implementation. Though it's interesting to see that Chapter 3 gave me more pain because some of the problems simply requires more than normal amount of creativity.
There was once I read a post by Prof. Terrence Tao, widely known as the "Mozart in Mathematics" and the youngest professor in the history of UCLA's Math. department. In the post, he encourage young researchers to think and innovate. At the same time, he also suggest when you got stuck, you should revisit old proofs, old exercises.
When I first read it, I am quite surprised. These kinds of advice are usually from Math Tutor to non Mathematical inclined students. But when you think about this, this is actually a great advice.
We usually think Math and Science as a kind of chain process - one reason is derived from another. You can visualize this by thinking the arrow of implication go from one argument to another. And progress in Math and Science is simply whether we create a new arrow. And the speed of progress depends on how fast these arrows create.
So if you thought in this mode, then what really matter is who is working on a problem. Because if a person a "smarter", then they can certainly solve a problem faster.
I believe this view is wrong. Why?
In real-life, people who can solve problems in a particular field (or a task) are usually people who associate more. That is to say, if you can associate concepts to your problem, you would be more likely to resolve an issue.
That explain a lot of sayings in Math learning like "You should learn the fundamental well".
At a certain level, a different point of view will bubble up. Like Prisig, let's call it the Romantic point of view, that is to say ideas such as Intuition, Creativitiy become more important. I believe there is certainly degree of truth. But intuition and creativity always mean somebody has a mysterious hunch to get a problem solved. It doesn't really explain why such hunch exists in the first place. That makes me believe the theory of association is a better view. Another advantage of it: it is something one can acquire by hardwork and it's learnable.
That is why I believe my read in Chapter 3, though a bit painful, it won't be a flop. I learned something in that process. To really quantify, I need to count how many factoids I acquired. But it is how human learn.
Similar issues will come up in Chapter 4. I hope I can use the same mind set to resolve the problems
I finished Chapter 3 much faster than Chapter 2. Mainly because Chapter 3 is more mathematical than algorithmic. So I usually spent less time in implementation. Though it's interesting to see that Chapter 3 gave me more pain because some of the problems simply requires more than normal amount of creativity.
There was once I read a post by Prof. Terrence Tao, widely known as the "Mozart in Mathematics" and the youngest professor in the history of UCLA's Math. department. In the post, he encourage young researchers to think and innovate. At the same time, he also suggest when you got stuck, you should revisit old proofs, old exercises.
When I first read it, I am quite surprised. These kinds of advice are usually from Math Tutor to non Mathematical inclined students. But when you think about this, this is actually a great advice.
We usually think Math and Science as a kind of chain process - one reason is derived from another. You can visualize this by thinking the arrow of implication go from one argument to another. And progress in Math and Science is simply whether we create a new arrow. And the speed of progress depends on how fast these arrows create.
So if you thought in this mode, then what really matter is who is working on a problem. Because if a person a "smarter", then they can certainly solve a problem faster.
I believe this view is wrong. Why?
In real-life, people who can solve problems in a particular field (or a task) are usually people who associate more. That is to say, if you can associate concepts to your problem, you would be more likely to resolve an issue.
That explain a lot of sayings in Math learning like "You should learn the fundamental well".
At a certain level, a different point of view will bubble up. Like Prisig, let's call it the Romantic point of view, that is to say ideas such as Intuition, Creativitiy become more important. I believe there is certainly degree of truth. But intuition and creativity always mean somebody has a mysterious hunch to get a problem solved. It doesn't really explain why such hunch exists in the first place. That makes me believe the theory of association is a better view. Another advantage of it: it is something one can acquire by hardwork and it's learnable.
That is why I believe my read in Chapter 3, though a bit painful, it won't be a flop. I learned something in that process. To really quantify, I need to count how many factoids I acquired. But it is how human learn.
Similar issues will come up in Chapter 4. I hope I can use the same mind set to resolve the problems
Thursday, June 9, 2011
Relaxation before going on
Spent a bit of time to review a French textbook. It's funny that the Japanese class is no longer available in my area. So based on the rules that I will learn 2 languages at a time, I decided to pick French. (The other would be my main thread.)
Language always make you ask deep questions about human being. For example, does learning two languages give positive or negative effect on learning. Would it make one better/worse in one of the language learning?
In the place where I came from, as well as many places in the world. Students are usually exposed to bilingual teaching. In some strange place such as Singapore and Hong Kong, students are even exposed to three languages (e.g. Singapore : Bahasa, Cantonese, Mandarin and English). When you visit these places, there is no lack of people who can master all the languages they got exposed. This sounds like a plus for bilingual learning. That's also the basis why I tend to always learn two things together.
In languages which have the same origins, for example, Italian and Spanish. Learning the structure of the language from one or the other is also quite helpful. For example, professoressa and professora are based on the same root. So once you learn one of the languages, after some practice you can get another one.
In fact, this is perhaps the basis of why textbooks usually teach students the concepts of cognates and false cognates when they teach European languages. Because a romance language X is likely to have tons of cognates with English. So if you are a good speaker in English, you will automatically acquire a bunch of words very quickly.
If we believe that English can be a language which gives cognates, then why not another romance language? That's another plus for bilingual learning.
Now are there any downsides? From my experience, there seems to be some indeed. To summarize it,
If the two languages are closed, then learner confusion increases. Whereas if the two languages are distant, then learner's cognitive load will increase.
Let me first talk about the case when the two languages are closed. e.g. Let's say the Spanish/Italian pair, when I tried to learn both together, one obvious effect is that sometimes I mixed up the answer for the languages. Mainly because they are so closed. To counter this issue, I have to constantly construct a 3-column table to make sure I can differentiate the subtle difference between the two languages.
An interesting effect is that my Spanish actually turns out to become better during this process. For example, I have stronger grasp of digit words and words because I need to make sure both sets of rules are correct in my head. The downside of this is that I have less time to learn Italian. So there's is indeed a trade off. This will happen on closed language or dialect pair. Example, I can think of including French vs Spanish, Spanish vs Portuguese, Spanish vs Italian and Cantonese vs Mandarin. These pairs are all very closed but slightly different.
What if the language are distant? Other than you need to spend extra time, in my opinion, the real issue is that usually the languages are not just linguistically different but they are also culturally different.
For example, what if you want to learn both English and Japanese together? Think about it! Easy going English and the whole frigging polite system of Japanese! This is what make learning difficult.
Though at the end of the day, I am still a mild advocate to learn two languages together. My reason , ultimately, is this - learning a language tends to open a person's mind. Some people say this is a Mind Hack. With my own experience, there seems to be basis on it.
Language always make you ask deep questions about human being. For example, does learning two languages give positive or negative effect on learning. Would it make one better/worse in one of the language learning?
In the place where I came from, as well as many places in the world. Students are usually exposed to bilingual teaching. In some strange place such as Singapore and Hong Kong, students are even exposed to three languages (e.g. Singapore : Bahasa, Cantonese, Mandarin and English). When you visit these places, there is no lack of people who can master all the languages they got exposed. This sounds like a plus for bilingual learning. That's also the basis why I tend to always learn two things together.
In languages which have the same origins, for example, Italian and Spanish. Learning the structure of the language from one or the other is also quite helpful. For example, professoressa and professora are based on the same root. So once you learn one of the languages, after some practice you can get another one.
In fact, this is perhaps the basis of why textbooks usually teach students the concepts of cognates and false cognates when they teach European languages. Because a romance language X is likely to have tons of cognates with English. So if you are a good speaker in English, you will automatically acquire a bunch of words very quickly.
If we believe that English can be a language which gives cognates, then why not another romance language? That's another plus for bilingual learning.
Now are there any downsides? From my experience, there seems to be some indeed. To summarize it,
If the two languages are closed, then learner confusion increases. Whereas if the two languages are distant, then learner's cognitive load will increase.
Let me first talk about the case when the two languages are closed. e.g. Let's say the Spanish/Italian pair, when I tried to learn both together, one obvious effect is that sometimes I mixed up the answer for the languages. Mainly because they are so closed. To counter this issue, I have to constantly construct a 3-column table to make sure I can differentiate the subtle difference between the two languages.
An interesting effect is that my Spanish actually turns out to become better during this process. For example, I have stronger grasp of digit words and words because I need to make sure both sets of rules are correct in my head. The downside of this is that I have less time to learn Italian. So there's is indeed a trade off. This will happen on closed language or dialect pair. Example, I can think of including French vs Spanish, Spanish vs Portuguese, Spanish vs Italian and Cantonese vs Mandarin. These pairs are all very closed but slightly different.
What if the language are distant? Other than you need to spend extra time, in my opinion, the real issue is that usually the languages are not just linguistically different but they are also culturally different.
For example, what if you want to learn both English and Japanese together? Think about it! Easy going English and the whole frigging polite system of Japanese! This is what make learning difficult.
Though at the end of the day, I am still a mild advocate to learn two languages together. My reason , ultimately, is this - learning a language tends to open a person's mind. Some people say this is a Mind Hack. With my own experience, there seems to be basis on it.
Tuesday, May 31, 2011
Long Weekend
Three things happened during the weekend.
- I was sick. With headache and temperature,
- Finished ZAMM,
- Watched the first lecture of MIT "Introduction to Algorithm".
Sunday, May 29, 2011
My recent stuckness.
For the first time, I have come to a point I feel stuck when I try to proceed in CLRS. In my case, that means the three threads (browse read, exercise read and deep read) I have been working on are not moving.
Naturally, I am thinking about why. For each read, there are different reasons and I also figure out their solutions.
Naturally, I am thinking about why. For each read, there are different reasons and I also figure out their solutions.
- For my browse read, my understanding of tree, or generally my understanding in discrete mathematics, need to be improved quickly. Many of the questions require some intuitive understanding of trees. I will not open the daunting Rosen's Discrete Mathematics and Its Applications. Because I am fully aware of the damage of studying two text books at the same time. I will feel too burn out and feeling not learning anything. What I will do is to study Appendix B of CLRS and perhaps read the whole Chapter 2 of TAOCP. Then reread, chapter 12 and 13. This should prepare me better on the next reread.
- For my exercise read, as I mention before, I am beaten up by the exercises. My solution is to go to sleep and take some mental break from Algorithms In fact, I already line up couple of things to do while I am taking the mental break from algorithm. That includes memorizing 80 Kanjis and also read El Alquimista in Spanish. Both are within reach and fun to do.
- For my deep read, I just need to work on it one item by item. It is meant to be a deep connecting study to try to combine everything I know. This is a phase which takes time. I am just going to take my time and enjoy the process.
Subscribe to:
Posts (Atom)