I've been enjoying the break between semesters and the quiet that only seems possible in the days between Christmas and New Years. This fall has been one of the busiest most challenging I can remember and I've needed this time to pause and recover. However, since I'm not capable of relaxing as such, I thought I'd add a bit of year-end reflection. What was 2023 for me?
Professionally, 2023 was the year I fell in love with AI. I've actually tried to break into AI a number of times before, but the technology wasn't yet geared to programmers like me. I'm not a data scientist or statistician, and to be honest, I don't care that much about algorithms for optimizing loss, the merits of various model architectures, or the many other things that go into creating machine learning models; nor do I want to become any of this. Instead, I want to use AI, to bolt it into programs and workflows the same way I use open source libraries and tools.
Amazingly, in December 2023, the version of me that is writing this post is doing exactly what I always hoped would be possible and I'm now immersed in all kinds of technologies that make this way of working with AI possible. I can finally do the kind of work I've always wanted to, without needing to transform myself into something I'm not. Ironically, my ML-adjacent skillset is allowing me to go faster than many who were focused solely on ML-proper.
One such skill has been my previous investment in learning AWS, which has been an excellent foundation, enabling me to build things much larger than before. While teaching open source still occupies the larger place in my heart, I think my AWS course has likely become the more popular of my advanced courses at Seneca. I get why, too, since it's helped many former students jump into great jobs immediately upon graduation--something I find very satisfying. Being able to scale-up ideas in code is becoming an important skill.
At the start of last year, I was very much still finding my way with AI, trying to square it with my teaching practices, and feeling skeptical about its utility for programming. I spent many months writing about it, sitting on academic committees exploring it, discussing it with peers, and trying to use it myself. Those posts, and the discussions they began (both online and offline) were formative in my transition toward embracing the possibilities of AI in my work. However, by far the most significant outcome of that period was that it reconnected me with an old friend, and launched me in a direction I couldn't have anticipated.
Since my Mozilla days, I've understood the importance of writing about the work you do. It might seem pointless, since it's often unclear how a thing you're thinking about or building will connect with someone else's work. Writing in this way is a kind of intellectual fishing, whose aim is to lure interesting conversations and relationships into your life. Over 15 years ago I was doing the same thing, writing about my work, when I bumped into Taras Glek and started DXR .
In early 2023, Taras and I were both finding it hard to engage our peers on the possibilities we saw with AI and programming. Each of us was writing about it in our blogs, and seeing the other do the same. For me, what was starting to feel obvious, was still too far removed from the familiar patterns and "best practices" of academia. In industry, Taras was having similar frustrations. I think it was our lack of community, combined with a prior understanding of how to work on experimental things quickly, that allowed us to rebuild our relationship so effectively around exploring AI together.
Taras had a baby AI web project he was having fun building, and wanted me to contribute. I really hated the idea of getting sucked into a front-end programming project on the side of everything else I was doing (CSS, really?), but I agreed to help him improve it. Together we built ChatCraft.org and used it throughout the summer as a laboratory for exploring the many evolving features of LLMs, often in real-time as they were released.
Since then, ChatCraft has become the most productive tool I've ever built. I use it daily, as do hundreds of other people, amazingly, given how saturated this space is. I checked just now and I have nearly 900 separate chats in my local ChatCraft database! I realized earlier this week that I use ChatCraft more than Google and Stack Overflow combined. It's shocking how deeply integrated it has become into my software development workflows. Surprisingly, I don't use any other AI tools (e.g., Copilot). Being able to shape how my AI tooling works has been extremely powerful. When I've needed ChatCraft to do something new, I modify the code (usually with ChatCraft's help) and it does it. I can't think of another software project that I've worked on that has had this much value to me personally.
AI is part of what made ChatCraft so successful, but it's only one ingredient. Like all successful applications of AI, how well you connect it back to humans is what ultimately determines its usefulness. ChatCraft is AI, yes, but it's also the working dynamic I have with Taras. He and I are completely different in our skills, approaches, preferred tech stacks, backgrounds, etc. If I was going to engineer a partnership, I'd never think to start it this way. And yet, our different approaches, when combined, have been the key to our success.
For example, I'm obsessed with doing things The Right Way and Taras revels in being completely unorthodox. Where I know that you're supposed to build things this way using these prescribed technologies, Taras uses whatever will let him go the fastest, mercilessly switching when he reaches the limits of an earlier choice. Where I rule out using tools I don't know, Taras is fearless in adopting previously unknown tech.
But my careful, buttoned-up, read-the-manual approach has also influenced him, and the effect we each have on the other has moved us both to an amazing new productivity plain. The same pattern happens over and over: one of us will start a branch in git, get stuck, and ping the other, who will push 5 more commits to unblock it, and throw it back. What I can't do, Taras is an expert at, and vice versa. All of this happens asynchronously, remotely, across multiple timezones. In fact the effectiveness of this style of working is amplified by our timezone differences--you go to bed stuck and wake up to a solution in your inbox. Lots of people talk like remote work can't be as productive as in-person, but this way of working is the most productive either of us has ever been.
A few times in my career, working on software projects has felt more like playing in a band than doing "computer science" or "software engineering." In 2023, my work on AI with Taras has very much been "making music with a friend." The fuzziness of AI has also made the experience more creative. I've enjoyed it all immensely and learned so much. Thank you, Taras.
Ultimately what this work made possible was for me to explore more areas of interest by expanding my abilities. Many of the tools and technologies I've been using this fall look vastly different to what I've used in the past:
- TypeScript is now my favourite programming language (sorry JavaScript). I never thought I'd say that, but working on and maintaining larger code with TS has been a dream. TS + pnpm + vite/vitest has become my typical starting point.
- I can finally use Python productively, and have used it to fulfill a personal goal and build multiple conservation AI projects for audio and video analysis of acoustic recorder, and camera trap data. A secret weapon in the fight against Python dependency problems has been pixi, which I love and always use now.
- IaC tools like Terraform, Terragrunt, Ansible, GitHub Actions and many more have allowed me to build reliable cloud infrastructure more quickly. I'm eager to find ways to bring more of these into my teaching this year.
- Docker and Containers in general have been increasingly important as I've worked on deploying AI models. I've been using containers in non-traditional ways and even in development with Development Containers (this has been a fascinating way to share knowledge across a dev team). In 2024 I'm going to be adding Kubernetes to this list, which is another one of those "not for me" technologies I've avoided that I'm having to contend with now.
On a more personal note, another major theme of 2023 has been learning more about what it means to be part of the Sandwich Generation. My dad isn't well, and we've been helping he and my mom pack up and move out of the home they've lived in together for 50+ years. That's been hard for everyone, and it's helped me understand more about my own limits and how fragile we all are as we age.
The reality of life for my dad (and my mom, who is caring for him) has had a profound impact on me. Because I've been so connected to the plight of an immunocompromised senior, and paired that with personal learning about the evolving science on Covid and stayed connected with data like this recent wastewater graph in Toronto, I've found it hard to make sense of the total collapse of public and personal health in 2023:
The disconnect between what's actually happening and how people are dealing with it (or not dealing with it), has been made worse by my refusal to pretend. I've literally taught thousands of students during the pandemic, and with that many people coming and going in my life, the variety and severity of stories I've heard has been heartbreaking. So many have lost parents, spent weeks or months in hospital, had to drop out due to their own long covid or so that they can care for loved ones suffering the same. Just this past week I got an email from a woman in my class who is withdrawing after spending the entire fall at a local children's hospital with her 1 year old, who never recovered from Covid in September. Maybe in my position, I've seen more than most people; or maybe I've just been willing to see what others have decided to avoid looking at altogether. In either case, it's changed me.
There's not a lot one can do anymore, but for my part, I spent all of 2023 lecturing in a mask, and I was grateful to the students who joined me, despite my school removing all protections and helping to re-enforce a culture that ignores the most vulnerable amongst us. I'll continue do the same in 2024. Despite the obvious challenges, masking has kept our entire family from getting sick with anything since March 2020 (no Covid, no RSV, no flu...nothing), which is remarkable given where our society has been and is heading right now. Masks have worked for me.
Another reason I wanted to write this is that I've really missed my professional connections on Twitter and learning from my friends and colleagues--I realize I have to write in the same ways I wish others would do for me. So many people I used to read on a daily basis are gone from social media now. I can't say I blame them. Twitter died in 2023, and I've found its demise a sad one. I still use it, because certain communities I value only exist there; but I'm there less and less, and I wonder if I'll still be there a year from now. Like so much of my life, I'm learning how to exist and be happy in smaller spaces. So I'm thankful for this blog, which is turning 20 soon.
Thanks to so many who wrote and maintained the code I relied on this year. Thanks to those who taught, encouraged, and supported me. I've appreciated you. May God bless you in 2024.
Happy New Year, internet.