March 05, 2021
If you ask me, “Choose one thing to research for the next 5-10 years”, it would be brain-computer interfaces.
Not for gaming, not for accessibility, not for augmented reality or whatnot. High-bandwidth brain-computer interfaces.
Because currently, the speed with which I can type is a hard upper limit of how much (or how complex) code I can write, AND it will work on the first try.
See, I can design and visualize crazy complicated stuff with great detail, but I don’t type fast enough to write down and freeze even 1% of it in a day.
Then eventually I have to go to sleep, and poof, the other 99% is gone!
Sure, I can re-imagine the design from scratch the next day, but the mind has moved, and pieces won’t fit with yesterday’s ones! I tried the brute-force approach (to stay awake as much as possible), and it works. But you can stretch it only so far.
That’s also one reason I became interested in very-dense-programming-languages like K, Q, APL, and so on.
But this “one-shot limit” includes documentation. That is, how you are supposed to use this code, whether it’s READMEs, tests, or assertions that check input data. How exactly should it fit with the code I write tomorrow.
Otherwise, the next day you’ll be staring at the blob of line noise trying to decipher what this code should do. And for the code to be automagically composable, you want to have good docs even more.
So realistically, you can get like 2-3x improvement this way, not 100x.
You can break down some apps into tiny modules with unified interfaces, and it will be fine. For example, with GUIs, React was a real game-changer for me.
But there are still many scenarios where parts do not compose: encryption, security, performance, overall user experience, all other kinds of emergent phenomena. You can’t check them when you review each feature separately because they emerge only through interactions between parts.
And reducing the level of detail on what you can intuit turns the fine clockwork into useless generalities :(
Static typing, simulations, other kinds of automated testing that slice and verify one specific aspect still work, of course. Still, there is a very hard cliff and a giant gap between what I can complete in a day and everything else.
I mean, it’s awful. I see the problem, see the solution, completely sure solution works, but I know it won’t ever see the light simply for the damn stupid reason I have to go to sleep at some point.
I don’t know why I forget the details by the next day. Maybe the long-term memory just doesn’t work fast enough to capture all the details, or something like that.
For years, I tried dozens of different note-taking tools until I finally faced the fact that the main roadblock is that every morning I wake up with slightly different puzzle pieces that don’t fit yesterday’s ones, and attacking them top-down just doesnt work.
I still try. For maybe with time, I will find or build a tool, or an approach to organize ideas outside of the brain and shuffle them like a game of cards or whatnot. Like Zettelkasten for code.
Meantime it feels like being paralyzed.
I’ve used to this feeling, of course. But it never leaves me completely.
Anybody else had a similar experience? Or maybe you know of a lab that managed to outrun your old and trusted keyboard? Shoot me a message anytime.