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
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)
Wednesday, November 30, 2011
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.
Subscribe to:
Posts (Atom)