Deepening My Go Skills
I am continuing to develop my distributed systems, systems programming, and sandboxing skills to learn how to make agentic coding platforms. To keep my learning scope focused, I selected Go as the language to deepen these skills with, and I am extending my go knowledge. I have used this language for years at work, and I have created software like a distributed commit log, web app servers, and some other code outside of work in Go.
AI as Coach
I worked through and finished reading System Programming Essentials with Go recently. As I worked through the examples, I wrote the code by hand and made sure I understood it. While writing the examples in the book, I create 2 internal packages. My manual code was written in the "human" package, and I created another package called "ai". After I wrote code, I would have AI(Opus 4.8) create its own version of the same code and explain the tradeoffs and how it was "better". I would then study the AI generaated code . This helped me figure out more intricate ways to leverage signaling, buffering to send more data per sys call, using channels more intricately, and to also spot bugs I didn't notice in my implementation. Opus 4.8 helped me deepen my experience in working through that book.
I also leveraged this approach when working through Concurrency in Go. This pattern was just as beneficial there because that book taught some verbose approaches to leveraging channels, mutex locks, wait groups, and for/select loops.
Conclusion
As we get away from hand rolling code in our day to day jobs, I still think its important to flex our minds with the gaps of software engineering we have by occasionally hand coding, designing systems, drawing UX mockups, writing, etc. to learning more traditionally. I feel the combo of this traditional approach and using AI as a coach is a great way to get the best of both worlds. You can think of problems, solve them, and use that traditional flow to lock in the reps to learn, but you can still learn from AI, take the AI approach, or merge both approaches if your approach and the AI approach have benefits worth keeping.
From my perspective, this approach is more beneficial for learning as opposed to doing this with a skillset you have largely mastered. In that case, chatting about how you would like something implemented or planned, and then steering during review is more practical.