My housemate has almost completely hacked my brain (liberally apply computer programming and Godel, Escher, Bach to your mind) to think in isomorphisms, efficient algorithms, and the like. This has caused improvements like using a queue instead of a stack for scheduling chores (one bad chore in a stack will cause me to look for other easier chores to stack on top of it) which means my weekly chores get done in an afternoon instead of a week, and a general attitude of thinking about problems instead of solving them. Usually, a bit of thought will reveal some underlying pattern that has an optimal solution ready and waiting.
Rationality gave me this because it told me, at one point, about behavioral hacks. So I looked for my smartest, most effective, and most awesome friend, and made them my housemate.
Djikstra said that computer science is as much about computers as astronomy is about telescopes, so it shouldn’t be surprising that things like algorithms and data structures has relevance to even mundane reality. I think one way I look at myself is an extremely small and limited computer. On the fly, my brain is slow at performing operations, I have a hard time recalling information, and I do so with limited accuracy. Sometimes I make mistakes while performing operations.
So what are we doing when we try to organize ourselves and make plans but trying to compile a program for these very far from optimal circumstances? Obviously, if I make plenty of mistakes, I need to write in plenty of redundancy; and I have to employ “tricks” in order to achieve meta-cognition at the right times (something that goes beyond the computer analogy, I know).
This involves, as I see it, a further way of looking at yourself. You see yourself as both the machine executing instructions, and the programmer writing those instructions (as well as the compiler, trying to translate the program to machine language). Nietzsche wrote that we have to develop as both commanders and obeyers. I thought this was hogwash, but I’ve learned that there is a lot of truth to that.
A quick google tells me “A stack is generally First In, Last Out, and a queue is First In First Out.”
Just to be clear, you mean that you now you will be doing one task then see another needing doing and do it instead. Whereas before you would continue doing the current task, with the intention of doing the other when it was completed?
[Sorry if thats blindingly obvious, my computer science knowledge is fairly sparse.]
Say I needed to vacuum the house and complete an essay. If I stack vacuum on top of essay, I’ll be vacuuming first, and then going to do my essay. But if, while I’m vacuuming, I realise the dishes need cleaning and I need to post a letter, I’ll put those on the stack as well, and they’ll get done before the essay because they’re on top. And as long as I can come up with more tasks, I can stack them on top of the essay, and never get around to it.
But with a queue, I do the vacuuming, realise the dishes need doing, and queue that up behind the essay. The essay gets done before the dishes, removing the temptation to generate mindless busywork for myself.
Ah I see, the task currently being done is not part of the stack.
I can see this working with tasks of similar length and difficulty. But what about when one task is significantly shorter than another and partly time dependent? E.g. in this case, while your essay is more important, it might take several hours to do well, during which the dishes will moulder and annoy your flatmate. Whereas the essay will not e altered during that length of time. I acknowledge that this is a possible way to rationalise procrastination, but there would be cases where it was true.
My housemate has almost completely hacked my brain (liberally apply computer programming and Godel, Escher, Bach to your mind) to think in isomorphisms, efficient algorithms, and the like. This has caused improvements like using a queue instead of a stack for scheduling chores (one bad chore in a stack will cause me to look for other easier chores to stack on top of it) which means my weekly chores get done in an afternoon instead of a week, and a general attitude of thinking about problems instead of solving them. Usually, a bit of thought will reveal some underlying pattern that has an optimal solution ready and waiting.
Rationality gave me this because it told me, at one point, about behavioral hacks. So I looked for my smartest, most effective, and most awesome friend, and made them my housemate.
Djikstra said that computer science is as much about computers as astronomy is about telescopes, so it shouldn’t be surprising that things like algorithms and data structures has relevance to even mundane reality. I think one way I look at myself is an extremely small and limited computer. On the fly, my brain is slow at performing operations, I have a hard time recalling information, and I do so with limited accuracy. Sometimes I make mistakes while performing operations.
So what are we doing when we try to organize ourselves and make plans but trying to compile a program for these very far from optimal circumstances? Obviously, if I make plenty of mistakes, I need to write in plenty of redundancy; and I have to employ “tricks” in order to achieve meta-cognition at the right times (something that goes beyond the computer analogy, I know).
This involves, as I see it, a further way of looking at yourself. You see yourself as both the machine executing instructions, and the programmer writing those instructions (as well as the compiler, trying to translate the program to machine language). Nietzsche wrote that we have to develop as both commanders and obeyers. I thought this was hogwash, but I’ve learned that there is a lot of truth to that.
I am not a native English speaker, and so usually saw these as synonymous. Could you explain a bit what the difference is?
It’s not about English:
http://en.wikipedia.org/wiki/Queue_(data_structure)
http://en.wikipedia.org/wiki/Stack_(data_structure)
Ahh, yes of course. LIFO vs. FIFO. Thank you for explaining.
A quick google tells me “A stack is generally First In, Last Out, and a queue is First In First Out.”
Just to be clear, you mean that you now you will be doing one task then see another needing doing and do it instead. Whereas before you would continue doing the current task, with the intention of doing the other when it was completed?
[Sorry if thats blindingly obvious, my computer science knowledge is fairly sparse.]
Say I needed to vacuum the house and complete an essay. If I stack vacuum on top of essay, I’ll be vacuuming first, and then going to do my essay. But if, while I’m vacuuming, I realise the dishes need cleaning and I need to post a letter, I’ll put those on the stack as well, and they’ll get done before the essay because they’re on top. And as long as I can come up with more tasks, I can stack them on top of the essay, and never get around to it.
But with a queue, I do the vacuuming, realise the dishes need doing, and queue that up behind the essay. The essay gets done before the dishes, removing the temptation to generate mindless busywork for myself.
Ah I see, the task currently being done is not part of the stack.
I can see this working with tasks of similar length and difficulty. But what about when one task is significantly shorter than another and partly time dependent? E.g. in this case, while your essay is more important, it might take several hours to do well, during which the dishes will moulder and annoy your flatmate. Whereas the essay will not e altered during that length of time. I acknowledge that this is a possible way to rationalise procrastination, but there would be cases where it was true.
It’s possible, but I’ve never encountered such a situation.
I have fond memories of implementing Priority Queues, back in the day. The algorithm is rather elegant.