After reading this post, I decided to send a message to Gurkenglas.
This was the best decision I made. I have been developing a mobile software for the last 120 days, and this is my first experience developing something this big. Sharing my screen on Discord, he was able to:
- Completely change my debugging workflow, which is likely to save me hundreds of hours in the long-term
- Teach me a new testing ritual
- Make it easier to identify useless pieces of code
- Refactor hundreds of lines with simple intuitions and good regex
- Teach me dozens of useful keyboard shortcuts and IDE features
- Give me some useful career advice
I wasn't expecting to level up that fast, but in retrospect it seems obvious that accepting a group invitation from a more experienced player would allow me to level up much faster and learn new tricks. Great learning experience.
I am one of those people that have benefited from working with Gurkenglas this way.
For me in particular the main benefits have been two-fold.
Now if I had seen this post before I had worked with Gurkenglas I would most probably not have reached out for mainly two reasons
If you are thinking something similar, I'm here to tell you that you should probably try it out anyway. The risk of trying and finding that it wasn't worth it is probably much lower than the risk of not trying and missing some good level up opportunities.
"Disclaimer" - I have no relationship with Gurkenglas outside the ~2hr session we just went through. But I got the feeling I should tout his skills to the community, so I'm doing it. He did not solicit my comment.
This was fun. We didn't do maths so much, because I don't have a maths problem. I have several major problems. We identified some of them.
Gurkenglas has a pretty good handle on looking at completely foreign code, grokking some high-level problems (need to refactor) and some low-level problems (useless conditionals) and even backing off and not fixing a low-level problem when it turns out it might just be idiomatic to the language (Golang and the omnipresent "if err != nil...") These are reasonably sophisticated habits/skills.
I got the impression he's pretty passionate about alignment and other AI-related topics, so if you've got an important AI project that needs someone who's willing to do whatever it takes to add value, schedule time on his Calendly and let's get this going!
as they code I notice nested for loops that could have been one matrix multiplication.
This seems like an odd choice for your primary example.
Is it perhaps worth writing a (short?) top level post with an worked out example of the refactoring you have in mind, and why matrix multiplication would be better than nested for loops?
It's not my one trick, of course, but it illustrates my usefulness. It's more maintainable not just because it is shorter but also because it has decades of theory behind it. Drawing the connection unlocks inspiration from entire branches of math. And the speedups from standing on the shoulders of giants go far beyond the constant factors from vectorized instructions.
I'm not disagreeing with you (I don't think?), but just pointing out a mistaken lesson someone new to programming might draw from your comment.
it's more maintainable not just because it is shorter but also because it has decades of theory behind it
Being shorter is way down the list of things you should consider when you're thinking about how to make your code more maintainable. In fact, longer code is often more maintainable. As a trivial example, imagine a variable called x
and the alternate name for it: seconds_since_midnight
I'm not sure there is a good rule of thumb wherein you say "shorter/longer is more maintainable".
I had similar thought, but then most of the languages I use don't support matrix operations directly in the language anyway. Great believer in "tried and true" numerical analysis libraries though.
Does your offer stand for learning math instead programming something? Some possible examples are:
Sure, I'll try it. I don't expect to be an order-of-magnitude power multiplier in that case, though.
At AI safety camp I noticed that people are bad at math and when I look over their shoulder as they code I notice nested for loops that could have been one matrix multiplication.
Therefore I'll try offering this service to the public: You screenshare as you do your daily tinkering, I watch for algorithmic or theoretical squiggles that cost you compute or accuracy or maintainability.
Maybe some people are less effective pair programming than alone. You choose whether we pretend I'm not there, whether you think out loud, or whether we talk theory instead.
We might learn engineering from each other. I have shown multiple people IDE features such as debuggers, and I still don't know a way as elegant as I feel it should be to, say, spin up a minimal transformer implementation for tinkering in a few minutes.
If your workflow is embarassing, that's fine: You are particularly likely to benefit, and I expect this is actually quite common. Edit: For every person so far, I would prefer one like them scheduling a session to not.
I did Java years ago, Haskell less years ago and Python the last few months. Of course, pseudocode is the real language. Here's examples of me rewriting other people's Haskell code: https://codereview.stackexchange.com/users/84131/gurkenglas
Edit: I got 5 meetings from this post out of ~280 views. I'd like that percentage to be higher! My current criteria for accepting people are: If you've found this post, I'm accepting you.
Schedule here: https://calendly.com/gurkenglas/consultation