# Vibe Learning

I'm switching main programming language for work for the first time since I started ruby over a decade ago. I've worked with a lot of languages to some extend, but I've never before had a single language consume a bigger part of my work life than ruby. In a month's time, it's going to be Elixir instead, which I'm really excited about. 

So, I set out to do some elixir in preperation, as  you do.

My first app was [forgetmenot](/content/forgetmenot.md), which was phoenix with a somewhat simple single-state live-view board of task reminders. This was grand, but out of habbit (a habbit that has developed scary fast) I had copilot on the entire time. And this was a mistake, because of course I can't remember how to do a damn thing. I also used claude code for a bunch of things (especially the frontend), and this tends to mean that I stop caring about understanding every line of code in a project very fast.

It's no surprise that when I sat down to start my next phoenix project, [Alchemical Life](https://github.com/kholbekj/alchemical_life/), I was kinda unsure where to start wiring things together. No problem, I though, I'll just disable copilot and not use chatgpt and claude code. Well. Turns out that ship has kind of sailed. My brain cannot go and search stack overflow for what I know my editor can spit out in a chatgpt session in a second. Also, as much as I want to be a disciplined person, discipline is a terrible strategy for defeating habbits. Especially when I'll be using all the AI jazz again right after. 

Rather, I needed to find a learning mode with the right amount and balance of tools. Luckily I use emacs and can modify my environment easily. 

`wet-brains-only-mode` was born. This is a global emacs mode which makes the following changes:

- Copilot is banned, and trying to start it will instead tell me to use my brain.
- Claude code is banned, similar message
- gptel (the emacs chatgpt wrapper) has it's context replaced so that it refuses to give me code answers, but rather tell me what functions or documentation to look into.
- if currently using a light theme, switch to a dark one to underscore that _real_ hacking is now taking place. 

Since every emacs has it's own workflow for integrating LLMs, I'm not really motivated to make this sharable. I assume most lisp hackers can whip something like this up without much effort (to be honest, probably claude code can do this in less, it's pretty decent with elisp). 

It feels weird to write this, it would have been obvious to me a few years ago.. but it is a _joy_. Actually writing even the dumb code is such a different feeling, and I'm really scared to forget it in the haze of roleplaying a toxic micromanaging project manager of my army of LLMs. 

If like me you've leaned into LLM-assisted coding, when you find yourself wanting to learn something, try to change the setup. Don't just disable it for a second. Create a path of least resistance for yourself. It's crazy how fast I forget that between me and the LLM, _someone_ needs to actually _understand_ what is happening. And an LLM can't do that part.

>  The mind is not a vessel to be filled, but a fire to be kindled.

—Plutarch
