On LLMs
AI tools are quickly changing many facets of our industry and our society, and they won’t be disappearing.
I’ve recently been experimenting with LLMs more for programming tasks, both at work and in my personal time. My relationship with these tools will certainly evolve over time, so I thought I’d log some current early thoughts of and impressions about this transformative technology.
On using them
My goal is to be an effective engineer both with and without AI. I’m happy to integrate these new tools where they are effective, but I want to avoid needing them to be productive. (On this point, I wonder how future generations of engineers will fare.) However, I’m interested in leveraging any tool that can help me become a better and more productive engineer, and I’m certainly interested in LLMs’ potential for being force multipliers and time-savers.
Still, software engineering is and will remain a craft, and like any craft, one’s skill can only be honed by an ongoing combination of study and application. Overreliance on AI risks the atrophy of one’s own abilities, so it’s crucial to find that balance between productive use and overreliance.
(Of course, this mostly applies to personal programming. Were my employer were to mandate the use of LLMs at work, I’d use them as required.)
Where they’ve helped most
That said, I have definitely found LLMs useful for some tasks:
Code brush-ups. When I’ve written code that works but that I suspect could be written better, I’ll have an LLM provide suggestions for improvement. Sometimes their responses are entirely unhelpful, but other times they are helpful. (Of course, I always double-check their work and properly investigate any new functions or concepts they present.) Doing this is particularly helpful when learning new programming languages or paradigms (functional programming for me of late).
Converting code between languages. Just recently, as an experiment, I used LLMs to help rewrite a C# application to F#. I might write a bit more in a future post, but ultimately the experiment was very successful, reducing the time necessary by an estimated 80% to 90%, though a lot of manual clean-up was necessary too. (It would be fool-hardy to do this without carefully reviewing the generated code.)
Supplementary reference. While I aim to use actual references whenever I can, I’ve found LLMs can be amazing supplementary reference tools for technical matters. They are helpful more often than not, providing more targeted summaries and explanations than regular search results often do, especially for some more obscure topics—though, of course, they’ve given incorrect information too. Also, LLMs have been massively helpful for breaking down some trickier concepts of functional programming and providing custom code samples for them too. For this, LLMs have become rather indispensable.
Test and test data generation. At least a couple of times, LLMs have saved me considerable trouble by quickly generating unit tests and sample data that would have taken a lot longer to put together manually. Again, all generated code is carefully checked and brushed up.
Where I still avoid them
As an authority. LLMs are in no way reliable sources of information and are sometimes very confidently incorrect. Blindly trusting their output is simply unwise.
Auto-completion. I’ve seen videos of people using autocompletion while they code, and it looks immensely distracting. I currently prefer going to LLMs when I need them rather than allowing them to actively guess what I want as I type.
On this blog
I’ve seen internet users bemoan the increase of AI-generated or AI-augmented content online. I mostly share their consternation, but I think we all know that problem’s going to get much worse…
A small aside: Somewhat amusingly and annoyingly, it appears that usage of em dashes (“—”) is now associated with AI-generated content by many people. How annoying since, as a former grammar dork, I’ve been using em dashes since I was a kid. (I haven’t used Windows in years now, but I still recall the Alt-code for em dashes in Windows (0151), and macOS makes it super simple to type them, so I often do because I’m lovable like that.)
So, to clarify: I will never post any AI-generated or AI-augmented articles on this blog. Any dashes (em, en, or other!), typos, and other creative lexical errors are my own — for better or for worse. 😅 If there’s ever a need to insert some kind of AI-generated content, I’ll label it as such.