↘↘↘↘↘↘↙↙↙↙↙↙
Checkout my Biography.
↗↗↗↗↗↗↖↖↖↖↖↖
Johannes C. Mayer
What are you Doing? What did you Plan?
[Suno]
What are you doing? What did you plan? Are they aligned? If not then comprehend, if what you are doing now is better than the original thing. Be open-minded about, what is the optimal thing.
Don’t fix the bottom line too: “Whatever the initial plan was is the best thing to do.”
There are sub-agents in your mind. You don’t want to fight, with them, as usually they win in the end. You might then just feel bad and don’t even understand why. As a protective skin your sub-agent hides, the reasons for why, you feel so bad right now.
At that point, you need to pack the double crux out.
But ideally, we want to avoid, any conflict that might arise. So don’t ask yourself if you followed your consequentialist reasoner’s plan. Instead just ask: “What is the best thing for me to do right now?” while taking all the sub-agents into account.
To do it set a timer for 1 minute, and spend that time reflecting about: What do you want to get out of this session of work, why is this good, how does this help?
You can wirte notes in advance, then document your plans, and then read them out loud.
to remember the computations your brain did before, such that you don’t need to repeat some of these chores.
Ideally, the notes would talk about, the reasons for why something seemed like a good thing to try.
But then as you evaluate what next step you could take, drop that bottom line. Treat it as evidence for what your brain computed in the past as an optimal policy, but nothing more. It’s now your new goal to figure out again for yourself, using all the subagents within your shell.
And to do this regularly you of course use a timer you see. Every 30 minutes to an hour it should ring out loud reminding you to evaluate, what would be the next step to take.
If you let everybody influence the decision process that will commence, the probability is high that after you decide there will be no fight, in your mind.
Take a Walk
Taking a walk is the single most important thing. It is really helpful for helping me think. My life magically reassembles itself when I reflect. I notice all the things that I know are good to do but fail to do.
In the past, I noticed that forcing myself to think about my research was counterproductive and devised other strategies for making me think about it, that actually worked, in 15 minutes.
The obvious things just work. Name you just fill your brain with all the research’s current state. What did you think about yesterday? Just remember. Just explain it to yourself. With the context loaded the thoughts you want to have will come unbidden. Even when your walk is over you retain this context. Doing more research is natural now.
There were many other things I figured out during the walk, like the importance of structuring my research workflow, how meditation can help me, what the current bottleneck in my research is, and more.
It’s proven tried and true. So it’s ridiculous that so far I have not managed to can’t notice its power. Of all the things that I do in a day, I thought this was one of the least important. But I was so wrong.
I also like talking to IA out loud during the walk. It’s really fun and helpful. Talking out loud is helpful for me to build a better understanding, and IA often has good suggestions.
So how do we do this? How can we never forget to take a 30-minute walk in the sun? We make this song, and then go on:
and on and on and on.
We can also list other advantages to a walk, to make our brain remember this:
If you do it in the morning you get some sunlight which tells your brain to wake up. It’s very effective.
Taking a walk takes you away from your computer. It’s much harder for NixOS to eat you.
It’s easy for me to talk to IA out loud when I am in a forest where nobody can hear me. The interaction is just better there. I hope to one day carry through my fearlessness from the walk to the rest of my life.
With that now said, let’s talk about, how to never forget to take your daily work now:
Step 1: Set an alarm for the morning. Step 2: Set the alarm tone for this song. Step 3: Make the alarm snooze for 30 minutes after the song has played. Step 4: Make the alarm only dismissable with solving a puzzle. Step 5: Only ever dismiss the alarm after you already left the house for the walk. Step 6: Always have an umbrella for when it is rainy, and have an alternative route without muddy roads.
Now may you succeed!
I made a slightly improved version that adds subtitles and skips silence.
Made a slightly improved version.
Another thing that Haskell would not help you at all with is making your application good. Haskell would not force obsidian to have unbreakable references.
Yes, but now try moving the heading to a different file.
Yes, that is a good point. I think you can totally write a program that checks given two lists as input, xs and xs’, that xs’ is sorted and also contains exactly all the elements from xs. That allows us to specify in code what it means that a list xs’ is what I get when I sort xs.
And yes I can do this without talking about how to sort a list. I nearly give a property such that there is only one function that is implied by this property: the sorting function. I can constrain what the program can be totally (at least if we ignore runtime and memory stuff).
To test whether Drake’s circumvention of his short-term memory loss worked via the intended mechanism, I could ask my girlfriend in advance to prompt me once — and only once — to complete the long-term memory scene that I had been practicing. Then I could see if I have a memory of the scene after I fully regain my memory.
Maybe you need to think the thought many times over in order to overwrite the original memory. In your place, I would try to prepare something similar to what Drake did. Some mental objects that you can retrieve have a predesigned hole to put information. To me, it seems like this should not be that hard to get. Then for ideally 30 minutes or so (though the streaming algorithm experiment seems also very interesting) after the surgery when you don’t have short-term memory, you can repeatedly try to insert some specific object in the memory.
Maybe it would make sense for the sake of the experiment to limit yourself to 3 possible objects that could be inserted. Your girlfriend can then choose one randomly after surgery, for you to drill into the memory, by repeatedly thinking about the scene completed with that specific object.
Then after the 30 minutes, you do something completely different. Then 1 hour afterwards your girlfriend can ask you what the object was that she told you 1 hour ago. Well and probably many times during the first 30 minutes.
Probably it would be best if your girlfriend (or whatever person is willing to do this) constantly reminds you during the first 30 minutes or so that you need to imagine the object. Probably at least every minute or so.
I don’t know about making god software, but human software is a lot of trial and error. I have been writing code for close to 40 years. The best I can do is write automated tests to anticipate the kinds of errors I might get. My imagination just isn’t as strong as reality.
I think it is incorrect to say that testing things fully formally is the only alternative to whatever the heck we are currently doing. I mean there is property-based testing as a first step (which maybe you also refer to with automated tests but I would guess you are probably mainly talking about unit tests).
Maybe try Haskell or even better Idris? The Haskell compiler is very annoying until you realize that it loves you. Each time it annoys you with compile errors it actually says “Look I found this error here that I am very very sure you’d agree is an error, so let me not produce this machine code that would do things you don’t want it to do”.
It’s very bad at communicating this though, so it’s words of love usually are blurted out like this:
Don’t bother understanding the details, they are not important.
So maybe Haskell’s greatest strength, being a very “noisy” compiler, is also its downfall. Nobody likes being told that they are wrong, well at least not until you understand that your goals and the compiler’s goals are actually aligned. And the compiler is just better at thinking about certain kinds of things that are harder for you to think about.
In Haskell, you don’t really ever try to prove anything about your program in your program. All of this you get by just using the language normally. You can then go one step further with Agda, Idris2, or Lean, and start to prove things about your programs, which easily can get tedious.
But even then when you have dependent types you can just add a lot more information to your types, which makes the compiler able to help you better. Really we could see it as an improvement to how you can tell the compiler what you want.
But again, you what you can do in dependent type theory? NOT use dependent type theory! You can use Haskell-style code in Idris whenever that is more convenient.
And by the way, I totally agree that all of these languages I named are probably only ghostly images of what they could truly be. But I guess humanity cares more about making javascript run REALLY REALLY FAST.
And I got to be careful not to go there.
I feel you on being distracted by software bugs. I’m one of those guys that reports them, or even code change suggestions (GitHub Pull Requests).
Yeah, I also do this. My experience so far generally has been very positive. It’s really cool when I make an issue with “I would think it would be nice if this program does X”, and then have it do x in 1 or 2 weeks.
I don’t know where to open an issue though about that I think it would be better to not build a god we don’t comprehend. Maybe I haven’t looked hard enough.
Let xs be a finite list of natural numbers. Let xs’ be the list that is xs sorted ascendingly.
I could write down in full formality, what it means for a list to be sorted, without ever talking at all about how you would go about calculating xs’ given xs. That is the power I am talking about. We can say what something is, without talking about how to get it.
And yes this still applies for constructive logic, Because the property of being sorted is just the logical property of a list. It’s a definition. To give a definition, I don’t need to talk about what kind of algorithm would produce something that satisfies this condition. That is completely separate.
And being able to see that as separate is a really useful abstraction, because it hides away many unimportant details.
Computer Science is about how-to-do-X knowledge as SICP says. Mathe is about talking about stuff in full formal detail without talking about this how-to-do-X knowledge, which can get very complicated.
How does a modern CPU add two 64-bit floating-point numbers? It’s certainly not an obvious simple way, because that would be way too slow. The CPU here illustrates the point as a sort of ultimate instantiation of implementation detail.
Yes, I totally agree. But I kind of got distracted with this post and wanted to get back to work as quickly as possible. But instead of making it a perpetual draft I pushed a bit further and got some MVP thing. I agree it’s not that good, and adding concrete examples, and really making this more like a tutorial would be the first step I would take.
So I am wondering if doing something like this is still useful. Would it be worse if I had made it a perpetual draft or better?
“If you are assuming Software works well you are dead” because:
If you assume this you will be shocked by how terrible software is every moment you use a computer, and your brain will constantly try to fix it wasting your time.
You should not assume that humanity has it in it to make the god software without your intervention.
When making god software: Assume the worst.
If you are assuming Software works well you are dead
Mathematical descriptions are powerful because they can be very terse. You can only specify the properties of a system and still get a well-defined system.
This is in contrast to writing algorithms and data structures where you need to get concrete implementations of the algorithms and data structures to get a full description.
The Model-View-Controller architecture is very powerful. It allows us to separate concerns.
For example, if we want to implement an algorithm, we can write down only the data structures and algorithms that are used.
We might want to visualize the steps that the algorithm is performing, but this can be separated from the actual running of the algorithm.
If the algorithm is interactive, then instead of putting the interaction logic in the algorithm, which could be thought of as the rules of the world, we instead implement functionality that directly changes the underlying data that the original algorithm is working on. These could be parameters to the original algorithm, which would modify the runtime behavior (e.g. we could change the maximum search depth for BFS). It could also change the current data the algorithm is working on (e.g. in quicksort we could change the pivot, or smaller_than_list just before they are set). The distinction is somewhat arbitrary. If we were to step through some Python code with a debugger, we could just set any variables in the program.
Usually, people think of something much “narrower” when they think about the Model-View-Controller-Architecture.
We could also do the same for a mathematical description. We can write down some mathematically well-defined thing and then separately think about how we can visualize this thing. And then again, separately, we can think about how would we interact with this thing.
I like this a lot. You are programming for the human brain now.
It also seems nice that can implement each step in this program in executable code, and then you don’t need to perform that step manually. You might even write little helper programs to perform the tasks, which can then later be used if you decide to automate the script more.
It also seems useful for developing an algorithm. Often I might want to understand what my brain is doing and have an algorithm that emulates what my brain is doing.
Maybe this method can be used to write down a very high-level description of the steps that I think my brain is doing and then see whether me now following that procedure blindly leads to the correct result. If you get the correct result, you can then try to fill in more details, automating each individual step a bit more, and then checking if you still get the same result, and so on.
How to write Pseudocode and why you should
Whiteboard Program Traceing: Debug a Program Before you have the Code
I think this post would be much more effective in achieving its goal if it would provide alternatives.
What are the advantages of posting your research ideas on LessWrong? Are there other ways in which you can get these advantages? Are there maybe even alternatives that give you more of the thing you want?
I expect telling people about these alternatives (if they exist) would make them more likely to make use of them.
One of the main things I think people can get by publishing their research is to get feedback. But you could also search for people who are interested in what you are working on. Then you can send your write-ups only to these people.
Also seeing people engage with things that you write is very motivating.
These are just some rough examples as I don’t think I have very good models about what you can get out of LessWrong and how to get the same benefits in different ways.
I think this is a useful model. If I understand correctly what you’re saying, then it is that for any particular thing we can think about whether that thing is optimal to do, and whether I could get this thing to work seperately.
I think what I was saying is different. I was advocating confidence not at the object level of some concrete things you might do. Rather I think being confident in the overall process that you engage in to make process is a thing that you can have confidence in.
Imagine there is a really good researcher, but now this person forgets everything that they ever researched, except for their methodology. It some sense they still know how to do research. If they fill in some basic factual knowledge in their brain, which I expect wouldn’t take that long, I expect they would be able to continue being an effective researcher.