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)
Tuesday, January 22, 2013
Status at 20130122
I went through Chapter 6 again. I still feel some kind of disharmony in it. Especially when I compare heap with binary tree. There are something deeply mathematical I don't grok.
But I decide to move on (again).
Browse reading: (2nd time) 170/1144
Exercises up to 6-1.2. (Skipped Chapter 4 and 5)
Revisit : 4.2-{3-5}, 4-4.3 after section 4.5, revisit Chapter 4 and 5
when time allowed.
Checking : up to P2.1
Needs write up: 2-3.7 (nice solution using merging), P2.1c, 3-2.4,
3-2.8, P3.1
Exercises checked: 2.1-2, 2.1-3, 2.2-{1,4}, 2.3-{3,7}
Exercises which are finished but not on paper: 1.1-2, 1.2-2, 1.2-3,
P1-1, The whole Section 4.4 except 4.4-3, 4.5-{1,3}, P4.4(a-c), P4.6b,
5.1-{1,2}, whole Section 6.1, 6.2-{1,2,4,5,6}, 6.3-1, 6.4-1 whole
Section 7.1, 7.2-{1-5}, whole Section 7.3 and 7.4.{2,3}, 8.2-1, 8.3-1,
8.3-4, , 10.1-{1-4,6,7}, 10.2-{1,2,6,7}, 12.1-{1,2,3,4}
12.2-{1,2,3,5,6},12.3-{2-4} 12.4-4, P12-1a, P12.4(a),13.2-2, 15-1.1,
15.1-3, 15.3-3, 15.5, 17-1.1, 18.1-1, 18.1-2, 18.2-1, 21-1.1, 21-1.2,
22-1.{1-3,6,7}, 23.1-1 and 23.1-3, P30-1{a,b}, P30-2b, 30-1.1,
31-1.{1-7}, 32.1-{1,2}, A.1-{1,2,3,4,5,7}, C.1-{2,4,5,7,8,9,14},
C.2-{1,2,4,5}, C.3-{1,2,10}, all in D.1. and D.2-2.
Second Browse Read So Far......
Not doing great and I am still stuck at Chapter 6.
In fact, I have pretty stopped for the whole last year on algorithm study. Shame on me!
Now saying so, there is something which makes me mentally stuck or simply just getting slower when I try to absorb anything in Chapter 6 to Chapter 9. When I analyzed myself, the reason is
In my work, I start to need to think deeply in terms of algorithm again. I believe it means this blog should be reactivated.
Let's restart! And work on each of these issues slowly.
33_P
In fact, I have pretty stopped for the whole last year on algorithm study. Shame on me!
Now saying so, there is something which makes me mentally stuck or simply just getting slower when I try to absorb anything in Chapter 6 to Chapter 9. When I analyzed myself, the reason is
- I don't have a C linked list package or a tree package at my disposal: Shame on me, because it's never difficult to write one.
- Like sorting, some of the algorithms need to test in practice before I truly grok.
- Also, 1 year after my first browse read, my memory has significantly faded on some material.
- I should start to package all my previous algorithm. It's worthwhile to continue to improve on them. But I didn't so my memory was disrupted.
- I need to express myself mathematically but I never figure out how to write mathematical equations on Blogger. Shame on me, that's why things are slow growing.
In my work, I start to need to think deeply in terms of algorithm again. I believe it means this blog should be reactivated.
Let's restart! And work on each of these issues slowly.
33_P
Monday, December 24, 2012
Looking back at this blog
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
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
Friday, August 31, 2012
status 20120831
Finished 6-1.1, again slowly, painfully I am picking this up again. The rest is
a matter of endurance.
Browse reading: (2nd time) 159/1144
Exercises up to 6-1.2. (Skipped Chapter 4 and 5)
Revisit : 4.2-{3-5}, 4-4.3 after section 4.5, revisit Chapter 4 and 5
when time allowed.
Checking : up to P2.1
Needs write up: 2-3.7 (nice solution using merging), P2.1c, 3-2.4,
3-2.8, P3.1
Exercises checked: 2.1-2, 2.1-3, 2.2-{1,4}, 2.3-{3,7}
Exercises which are finished but not on paper: 1.1-2, 1.2-2, 1.2-3,
P1-1, The whole Section 4.4 except 4.4-3, 4.5-{1,3}, P4.4(a-c), P4.6b,
5.1-{1,2}, whole Section 6.1, 6.2-{1,2,4,5,6}, 6.3-1, 6.4-1 whole
Section 7.1, 7.2-{1-5}, whole Section 7.3 and 7.4.{2,3}, 8.2-1, 8.3-1,
8.3-4, , 10.1-{1-4,6,7}, 10.2-{1,2,6,7}, 12.1-{1,2,3,4}
12.2-{1,2,3,5,6},12.3-{2-4} 12.4-4, P12-1a, P12.4(a),13.2-2, 15-1.1,
15.1-3, 15.3-3, 15.5, 17-1.1, 18.1-1, 18.1-2, 18.2-1, 21-1.1, 21-1.2,
22-1.{1-3,6,7}, 23.1-1 and 23.1-3, P30-1{a,b}, P30-2b, 30-1.1,
31-1.{1-7}, 32.1-{1,2}, A.1-{1,2,3,4,5,7}, C.1-{2,4,5,7,8,9,14},
C.2-{1,2,4,5}, C.3-{1,2,10}, all in D.1. and D.2-2.
Tuesday, August 28, 2012
Slowly, painfully started again.....
It has been closed to a year I didn't read CLRS again. I would say that affects my work significantly. I am drifted back to a kind of shallow thinking when I tried to work out a solution.
For now, things are okay but this is a bad habit. In general, it's always important to think deep about a solution.
There is also something hard to describe - it is a kind of yearning of wanting to learn more in algorithms. For example, I realized I didn't really learn heap the data structure that well. Or ....... I don't think I grok it.
Why do I have such a yearning suddenly? I guess it's because I am back to learning.
After my study in Spanish is finished, I decided to pick up guitar (btw, it's awesome!) and try to learn something about acting. Whenever you go to look at people with other skills and they excel in it, you start to ask what you really know in yours.
One thing which impressed me, when you talk with very experienced musicians who might be playing since their childhood, they always tell you that they still have something to learn.
So when I ask myself "Am I good enough as a technical person?". The answer to myself is that: "I am actually not that good. I still need to learn."
I think that's why I am reading again. Not because I want to get a job in a big company, not because I want to get a medal, not because I want to prove or any stupid reason. It's purely a pursuit of skills.
For this time though, I have deliberately skipped Chapter 4 and 5 and get started in Chapter 6, there are a lot of things I need to think through. Right now, I just finished the first chapters of Chapter 6, those are pretty easy if that's your second read.
33_P
For now, things are okay but this is a bad habit. In general, it's always important to think deep about a solution.
There is also something hard to describe - it is a kind of yearning of wanting to learn more in algorithms. For example, I realized I didn't really learn heap the data structure that well. Or ....... I don't think I grok it.
Why do I have such a yearning suddenly? I guess it's because I am back to learning.
After my study in Spanish is finished, I decided to pick up guitar (btw, it's awesome!) and try to learn something about acting. Whenever you go to look at people with other skills and they excel in it, you start to ask what you really know in yours.
One thing which impressed me, when you talk with very experienced musicians who might be playing since their childhood, they always tell you that they still have something to learn.
So when I ask myself "Am I good enough as a technical person?". The answer to myself is that: "I am actually not that good. I still need to learn."
I think that's why I am reading again. Not because I want to get a job in a big company, not because I want to get a medal, not because I want to prove or any stupid reason. It's purely a pursuit of skills.
For this time though, I have deliberately skipped Chapter 4 and 5 and get started in Chapter 6, there are a lot of things I need to think through. Right now, I just finished the first chapters of Chapter 6, those are pretty easy if that's your second read.
33_P
2nd Browse Read Again
Second Browse read Section 6.3. I plan to do the exercise 6.1. Update pointers.
Browse reading: (2nd time) 159/1144
Exercises up to 6-1.1. (Skipped Chapter 4 and 5)
Revisit : 4.2-{3-5}, 4-4.3 after section 4.5, revisit Chapter 4 and 5 when time allowed.
Checking : up to P2.1
Needs write up: 2-3.7 (nice solution using merging), P2.1c, 3-2.4, 3-2.8, P3.1
Exercises checked: 2.1-2, 2.1-3, 2.2-{1,4}, 2.3-{3,7}
Exercises which are finished but not on paper: 1.1-2, 1.2-2, 1.2-3, P1-1, The whole Section 4.4 except 4.4-3, 4.5-{1,3}, P4.4(a-c), P4.6b, 5.1-{1,2}, whole Section 6.1, 6.2-{1,2,4,5,6}, 6.3-1, 6.4-1 whole Section 7.1, 7.2-{1-5}, whole Section 7.3 and 7.4.{2,3}, 8.2-1, 8.3-1, 8.3-4, , 10.1-{1-4,6,7}, 10.2-{1,2,6,7}, 12.1-{1,2,3,4} 12.2-{1,2,3,5,6},12.3-{2-4} 12.4-4, P12-1a, P12.4(a),13.2-2, 15-1.1, 15.1-3, 15.3-3, 15.5, 17-1.1, 18.1-1, 18.1-2, 18.2-1, 21-1.1, 21-1.2, 22-1.{1-3,6,7}, 23.1-1 and 23.1-3, P30-1{a,b}, P30-2b, 30-1.1, 31-1.{1-7}, 32.1-{1,2}, A.1-{1,2,3,4,5,7}, C.1-{2,4,5,7,8,9,14}, C.2-{1,2,4,5}, C.3-{1,2,10}, all in D.1. and D.2-2.
Friday, May 4, 2012
This blog
For all its purpose, this blog was always meant to be my private diary of algorithmic learning. At a certain point, I may consider to post solutions. Even that I am afraid there is a selfish reason : to show that I can.
Saying so, I hadn't done anything special to keep my blog secretive. If you happened to bump into this place, feel free to write a comment or two. If I happened to know the answer, I will certainly try to write something back.
33_P
Saying so, I hadn't done anything special to keep my blog secretive. If you happened to bump into this place, feel free to write a comment or two. If I happened to know the answer, I will certainly try to write something back.
33_P
Busy, busy, busy.....
Sometimes I feel the impulse of learning algorithm, or for that matter, mathematics and computer science, is not much different from the impulse of literature reading. When you think of why a computer geek decides to figure out an algorithm and why a literature geek decides to read The Lord of the Ring 7 times, the reason is exactly the same : it fills a void in their heart, no matter what they yearn for.
In my case, after working on yet another start up, my time is really eaten up by various exciting work of the company. The episode of me sparring with my previous boss is a good indication that it's time for me to leave the last company. It was a great workplace, but I would say the system is getting too old......
As always, my programming skill still needs to be refined. I will still come back to this blog. I hope that when I come back though, I am fill with joy and curiosity as the kid who tries to learn new things, but not a person who is filled with doubt and anxiety, who tries to learn algorithms to land on a better job.
33_P
In my case, after working on yet another start up, my time is really eaten up by various exciting work of the company. The episode of me sparring with my previous boss is a good indication that it's time for me to leave the last company. It was a great workplace, but I would say the system is getting too old......
As always, my programming skill still needs to be refined. I will still come back to this blog. I hope that when I come back though, I am fill with joy and curiosity as the kid who tries to learn new things, but not a person who is filled with doubt and anxiety, who tries to learn algorithms to land on a better job.
33_P
Friday, March 16, 2012
status 20120316
Second Browse read Section 6.1. I plan to do the exercise 6.1. Update pointers.
Browse reading: (2nd time) 153/1144
Exercises up to 6-1.1. (Skipped Chapter 4 and 5)
Revisit : 4.2-{3-5}, 4-4.3 after section 4.5, revisit Chapter 4 and 5 when time allowed.
Checking : up to P2.1
Needs write up: 2-3.7 (nice solution using merging), P2.1c, 3-2.4, 3-2.8, P3.1
Exercises checked: 2.1-2, 2.1-3, 2.2-{1,4}, 2.3-{3,7}
Exercises which are finished but not on paper: 1.1-2, 1.2-2, 1.2-3, P1-1, The whole Section 4.4 except 4.4-3, 4.5-{1,3}, P4.4(a-c), P4.6b, 5.1-{1,2}, whole Section 6.1, 6.2-{1,2,4,5,6}, 6.3-1, whole Section 7.1, 7.2-{1-5}, whole Section 7.3 and 7.4.{2,3}, 8.2-1, 8.3-1, 8.3-4, , 10.1-{1-4,6,7}, 10.2-{1,2,6,7}, 12.1-{1,2,3,4} 12.2-{1,2,3,5,6},12.3-{2-4} 12.4-4, P12-1a, P12.4(a),13.2-2, 15-1.1, 15.1-3, 15.3-3, 15.5, 17-1.1, 18.1-1, 18.1-2, 18.2-1, 21-1.1, 21-1.2, 22-1.{1-3,6,7}, 23.1-1 and 23.1-3, P30-1{a,b}, P30-2b, 30-1.1, 31-1.{1-7}, 32.1-{1,2}, A.1-{1,2,3,4,5,7}, C.1-{2,4,5,7,8,9,14}, C.2-{1,2,4,5}, C.3-{1,2,10}, all in D.1. and D.2-2.
Back to Self Study
There has been a while I haven't updated this blog. I was mostly busy in my new job and don't have time to read up data structure and algorithms.
When I think back, the experience with the first 4 chapter of CLRS is great. If you followed previous messages, you might notice that I couldn't finish Chapter 4. It wasn't such a bad thing, as you can always come back an learn again.
Iterative reading is the key to learn and read a deep subject such as data structure. I decided to put certain amount of time every day to work on them again.
To this day, I am still thinking about whether there are actual benefits of learning and studying deep on algorithms. My answer is positive. When I observed myself, there are couple of things I have changed,
When I think back, the experience with the first 4 chapter of CLRS is great. If you followed previous messages, you might notice that I couldn't finish Chapter 4. It wasn't such a bad thing, as you can always come back an learn again.
Iterative reading is the key to learn and read a deep subject such as data structure. I decided to put certain amount of time every day to work on them again.
To this day, I am still thinking about whether there are actual benefits of learning and studying deep on algorithms. My answer is positive. When I observed myself, there are couple of things I have changed,
- Deep thinking before doing any programming task.
- Careful planning : this tends to root out mistakes before run time.
- The one-shot completion rate is getting higher.
The 3rd point is worthwhile for some explanation. You see when you program, sometimes you need to modify the code several times to get it right. In these days though, I start to find more cases where I can just code up something and it just works. This is always an amazing experience.
In any case, I will move on. This time I will work on Chapter 6. This will skip Chapter 4 and 5 to avoid very difficult mathematical problems.
33_P
Wednesday, November 30, 2011
I decided to leave. The status of reading CLRS
Gist:
1, I decided to leave my last company. No matter how my boss explained, I think it is B.S. to stay.
2, Still taking the class but I decided to drop it as I want to take a break.
3, The last few lessons on hash and graphs are very interesting. Keywords I learned: hash table, chaining, dijkstra algorithm as well as Prim's algorithm. The last two turned out to be rahter easy to understand.
33_P
1, I decided to leave my last company. No matter how my boss explained, I think it is B.S. to stay.
2, Still taking the class but I decided to drop it as I want to take a break.
3, The last few lessons on hash and graphs are very interesting. Keywords I learned: hash table, chaining, dijkstra algorithm as well as Prim's algorithm. The last two turned out to be rahter easy to understand.
33_P
Wednesday, November 16, 2011
Hashing, linked list
I should keep my very good habit of reading a topic from CLRS after a class. My target this time would be hashing and linked list.
After difficult talk ......
I decided to leave. Why did I decide so late?
I will still go to class in famous extension school but now it's no longer as important......
I will still go to class in famous extension school but now it's no longer as important......
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
Thursday, October 27, 2011
status 20111027
Change the browse read pointer back to Chapter 4. Change the exercise read to chapter 6.
Browse reading: 65/1144
Exercises up to Chapter 6. (After Chapter 4 and 5 are skipped, not start the read yet)
Revisit : 4.2-{3-5}, 4-4.3 after section 4.5, revisit Chapter 4 and 5 when time allowed.
Checking : up to P2.1
Needs write up: 2-3.7 (nice solution using merging), P2.1c, 3-2.4, 3-2.8, P3.1
Exercises checked: 2.1-2, 2.1-3, 2.2-{1,4}, 2.3-{3,7}
Exercises which are finished but not on paper: 1.1-2, 1.2-2, 1.2-3, P1-1, The whole Section 4.4 except 4.4-3, 4.5-{1,3}, P4.4(a-c), P4.6b, 5.1-{1,2}, whole Section 6.1, 6.2-{1,2,4,5,6}, 6.3-1, whole Section 7.1, 7.2-{1-5}, whole Section 7.3 and 7.4.{2,3}, 8.2-1, 8.3-1, 8.3-4, , 10.1-{1-4,6,7}, 10.2-{1,2,6,7}, 12.1-{1,2,3,4} 12.2-{1,2,3,5,6},12.3-{2-4} 12.4-4, P12-1a, P12.4(a),13.2-2, 15-1.1, 15.1-3, 15.3-3, 15.5, 17-1.1, 18.1-1, 18.1-2, 18.2-1, 21-1.1, 21-1.2, 22-1.{1-3,6,7}, 23.1-1 and 23.1-3, P30-1{a,b}, P30-2b, 30-1.1, 31-1.{1-7}, 32.1-{1,2}, A.1-{1,2,3,4,5,7}, C.1-{2,4,5,7,8,9,14}, C.2-{1,2,4,5}, C.3-{1,2,10}, all in D.1. and D.2-2.
First browse-read of CLRS
As I flipped through Chapter 35, I have also finished the first browse read of "Introduction to Algorithms", commonly known as CLRS once. As the name suggests, I only browse through the chapters and occasionally write down solutions I can figure out. The first read is meant to be shallow but fast. That's why it only take seven months to finish. If I read the book by going through every single detail, I probably need to spend many years to go through the book once - That's not a prudent way to read an algorithmic book. Sometimes, you just read it like a book and extract some simple knowledge out of it. Just like what you do to read any book.
Before I go on, let me side-track a bit, as you might also know, I have another two reads known as "exercise read" and "research read". The former is a kind of read which force myself to do all the exercises. Whereas the second include some research problems which popped up from my head. The "exercise read" is closed to a common university graduate course on algorithms and data structure and the former is a bit closed to basic academic research. Normally I recorded the status of exercises in the "Status XXXXX" post and research problem in the "complementary exercises". At this point, I only finish up to the half of the chapter 4 in "exercise read". For "research read", I can barely go through Chapter 2. It sorts of show how difficult when you try to go deep.
My guess is the ratio of chapters they can go through between their "browse read" and "exercise read" could be very different from me. For most, they will just completely discard the idea of reading an algorithmic book from scratch. I can see their points but I always maintain that in computer science, if you think deep enough, you will be bound to touch all the topics found in CLRS including the selected topic. Many people I know have strong algorithmic skills reference "brick" books like CLRS and TAOCP a lot. If you start to read them, you will get benefits from them even if you don't completely grok.
Back to the first browse read, I would say in this read, the amount of exercises I really work out diminish as further back of the book. The three chapters which really stuck me are probabilities, binary-tree and red-black tree. Basic math can always be tough. Basic data structure such as binary tree, can also give one a lot of headache. Red-black tree is a bit of topic which is deeper than the bottom. Given that I am reading them in a relatively fast way so I am not surprised if I don't really grok all of them.
After a class in famous extension school, my understanding in binary tree has tremendously improved. But for the other two topics are still a bit beyond me. Some probability problem can be monstrously tough and famous extension school only teach B-tree (or something like 2-3 tree) so I still need to think through red-black tree quite a bit myself.
For the first browse read, I think those are okay, again you don't want to catch up with tough problems when you get stuck. Sometimes you just want to build context in your brain. That's what I am doing.
But one thing I am sure: I need to change the way I approach the book - a purely linear path can be very difficult. In my case in particular, I found that my exercise read in Chapter 4 turns out to be very difficult. This also means that my mathematical background is not deep enough. So I decided to back up from there. That always take time to improve.
My skill though is more suitable to take care sorting and data structure. I am psyched about it. I also think through a lot of problem from the famous extension school course. That should be a better starting point.
Now my new plan would be this.
1, Turn the browse-read pointer around to the first chapter I haven't finished all exercises. i.e. Chapter 4. After the first browse-read, the second read will always teach you something new as well. During this process, I hope to attain a higher coverage rate on the exercises of the book. This also allows me to identify chapters which are suitable to my level.
2, Abandon Chapter 4, restart the exercise read from Chapter 6 on heap sort. The goal is to finish Chapter 6 's exercise read. Occasionally work on exercises on Chapter 4 if I like.
In any case, let's see how it goes. I hope this work out and the next step is to readjust and try to go through my study.
33_P
Chapter 35: Approximation Algorithms
This is a simpler chapter than Chapter 35 as it describe approximations of many NPC problem. (Ah. start to change the habit of calling an algorithm NPC instead of NP.)
As with many later chapters, it is not a chapter I fully grok. But as always, skimming through a chapter of CLRS always teach your a lot of thing invaluable in computer science. For example, now I have the notion of what approximation is and what type of varieties it can have.
In any case, this particular read follow the theme I have these days: Try to finish 1 round of browse read first, then deepen. During the lighter read, I don't have to learn all the things in the book - I just need to make sure I got some basic understanding of the topic. So talking about it, it's probably ok. But using it will take time to reiterate on a topic. In another words, I leave the grokking a little bit later.
Okay. I finally finished the first browse -read, it's time to rethink how I should proceed with the book.
As with many later chapters, it is not a chapter I fully grok. But as always, skimming through a chapter of CLRS always teach your a lot of thing invaluable in computer science. For example, now I have the notion of what approximation is and what type of varieties it can have.
In any case, this particular read follow the theme I have these days: Try to finish 1 round of browse read first, then deepen. During the lighter read, I don't have to learn all the things in the book - I just need to make sure I got some basic understanding of the topic. So talking about it, it's probably ok. But using it will take time to reiterate on a topic. In another words, I leave the grokking a little bit later.
Okay. I finally finished the first browse -read, it's time to rethink how I should proceed with the book.
Wednesday, October 26, 2011
Tree Traversal
Played with one of these traversal problems of tree. For example, how you can come up with the tree from two different traversal results.
Chapter 34 NP-Completeness
This is a very tough part of the book. It's also very similar to many books I read in computational theory. It's perhaps because there is no definitive answer (yet) on the relationship between the class P and NPC. At the very least I think I understand how P and NPC is defined now. This seems to give me at least a grip of what's going on when people are talking. Many people just talk on this kind of things and it's rather easy to talk. I actually find that most of the proofs are rather difficult and it's not easy to grasp. Let's see if I can sense honesty next time.
I also learned that boolean satisfiability is an important problem because all problems need to reduce to boolean satisfaibility before they can be proved NPC. This is an important concept. So next time, when I read it, I will put more attention.
I am very closed to finish the first browse read of the book. Did I understand everything in algorithms yet? Absolutely not. Oh well, at least I learn some basic sorting algorithm and recursion. They will be useful for life.
I also learned that boolean satisfiability is an important problem because all problems need to reduce to boolean satisfaibility before they can be proved NPC. This is an important concept. So next time, when I read it, I will put more attention.
I am very closed to finish the first browse read of the book. Did I understand everything in algorithms yet? Absolutely not. Oh well, at least I learn some basic sorting algorithm and recursion. They will be useful for life.
Sunday, October 23, 2011
Finished the whole homework
I just need to check whether the answers for written problems can be compiled. Then I am all set.
Subscribe to:
Posts (Atom)