<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ken's Notes</title>
    <link>https://www.xythian.com/notes/</link>
    <description>Ken&#39;s Notes</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <copyright>Ken Fox</copyright>
    <lastBuildDate>Wed, 18 Mar 2026 09:30:22 -0700</lastBuildDate>
    <atom:link href="https://www.xythian.com/notes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Advice for CS students</title>
      <link>https://www.xythian.com/notes/2026/03/advice-for-cs-students/</link>
      <pubDate>Wed, 18 Mar 2026 09:30:22 -0700</pubDate>
      <guid>https://www.xythian.com/notes/2026/03/advice-for-cs-students/</guid>
      <description>&lt;p&gt;Modern large language models (LLMs) are a new kind of power tool that disrupts software engineering. Our field has shifted several times before, but this one is a doozy. A conversation with a friend led to him asking “What would you encourage new computer science graduates or current CS students to focus on to make themselves successful?” It’s a natural question when it feels like a sea change is transforming the field.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pattern pickup in practice</title>
      <link>https://www.xythian.com/notes/2026/03/pattern-pickup-example/</link>
      <pubDate>Mon, 09 Mar 2026 09:15:22 -0700</pubDate>
      <guid>https://www.xythian.com/notes/2026/03/pattern-pickup-example/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://www.xythian.com/notes/2026/02/power-tools/&#34;&gt;my post about AI agents as power tools&lt;/a&gt; I wrote that agents are good at picking up existing patterns. Here&amp;rsquo;s a concrete example of what that looks like—both the strengths and the limits.&lt;/p&gt;
&lt;h1 id=&#34;the-setup&#34;&gt;The setup&lt;/h1&gt;
&lt;p&gt;I have a project using SQLite with a bespoke database versioning and migration system. Nothing fancy, just a version number stored in the database and a set of migration functions that upgrade from one version to the next. The kind of thing you write when you need migrations but don&amp;rsquo;t need a framework.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The agent is not your colleague</title>
      <link>https://www.xythian.com/notes/2026/03/not-your-colleague/</link>
      <pubDate>Mon, 02 Mar 2026 08:45:17 -0700</pubDate>
      <guid>https://www.xythian.com/notes/2026/03/not-your-colleague/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://www.xythian.com/notes/2026/02/power-tools&#34;&gt;my post about AI agents as power tools&lt;/a&gt; I ended with &amp;ldquo;don&amp;rsquo;t confuse the tool for the craftsperson.&amp;rdquo; This is worth expanding, because the confusion runs in both directions and both cause problems.&lt;/p&gt;
&lt;h1 id=&#34;the-mentorship-trap&#34;&gt;The mentorship trap&lt;/h1&gt;
&lt;p&gt;AI agents communicate in natural language. They say &amp;ldquo;I&amp;rdquo; and &amp;ldquo;I think&amp;rdquo; and &amp;ldquo;let me try.&amp;rdquo; They apologize when they make mistakes. This makes it easy to treat them like junior colleagues who work very fast.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Architecture matters more with AI</title>
      <link>https://www.xythian.com/notes/2026/02/architecture-and-ai/</link>
      <pubDate>Mon, 23 Feb 2026 20:05:02 -0700</pubDate>
      <guid>https://www.xythian.com/notes/2026/02/architecture-and-ai/</guid>
      <description>&lt;p&gt;In an &lt;a href=&#34;https://www.xythian.com/notes/2011/03/communicating-in-code/&#34;&gt;earlier post&lt;/a&gt; I wrote that code communicates to the computer and to future readers. With AI coding agents, there&amp;rsquo;s a third audience: the agent itself. The agent reads your code to understand how to extend it. Good architecture makes this communication clearer. Bad architecture makes the agent confidently generate more bad code.&lt;/p&gt;
&lt;p&gt;AI agents are very good at &lt;em&gt;using&lt;/em&gt; well-designed components. They are not very good at &lt;em&gt;designing&lt;/em&gt; them. They can implement against a clear interface, follow established patterns, and generate code that fits into an existing structure. They struggle with deciding what the interfaces should be, knowing which abstractions will age well, and understanding the domain deeply enough to decompose it correctly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing for AI coding agents</title>
      <link>https://www.xythian.com/notes/2026/02/testing-for-ai-agents/</link>
      <pubDate>Mon, 16 Feb 2026 09:30:02 -0800</pubDate>
      <guid>https://www.xythian.com/notes/2026/02/testing-for-ai-agents/</guid>
      <description>&lt;p&gt;AI coding agents can move fast. The constraint on their productivity is correctness. They are always confident, but they need clear, automatic signal about correctness otherwise a human ends up providing all of that signal (slowly). A robust test suite can ensure the confidence aligns with correctness. The &lt;em&gt;shape&lt;/em&gt; of the test suite matters as much as its existence.&lt;/p&gt;
&lt;h1 id=&#34;interface-tests-vs-internal-tests&#34;&gt;Interface tests vs internal tests&lt;/h1&gt;
&lt;p&gt;Tests that cover publicly exposed interfaces without depending on internal implementation details are a force multiplier for AI agents (and humans). These tests define what correct behavior looks like without dictating how that behavior is achieved. An agent can refactor freely, restructure internals, rewrite implementations entirely—and as long as the tests stay green, the changes are probably safe. A “perfect” test suite would cover the entire set of visible behavior, so a green suite would mean correct software. Don&amp;rsquo;t let the difficulty of a perfect suite prevent building a good one, and consider how lower development costs and higher ROI on tests may mean aiming closer to “perfect” than you might have once.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI agents are power tools</title>
      <link>https://www.xythian.com/notes/2026/02/power-tools/</link>
      <pubDate>Mon, 02 Feb 2026 08:15:22 -0800</pubDate>
      <guid>https://www.xythian.com/notes/2026/02/power-tools/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://www.xythian.com/notes/2026/01/solving-problems/&#34;&gt;my last post&lt;/a&gt; I called AI coding agents &amp;ldquo;power tools for software developers.&amp;rdquo; The characteristics of power tools explain the capabilities, current limitations, and exciting opportunities of coding agents.&lt;/p&gt;
&lt;p&gt;A table saw doesn&amp;rsquo;t know what you&amp;rsquo;re building. It doesn&amp;rsquo;t care if you&amp;rsquo;re making a bookshelf or a coffin. It will cut whatever you feed it, exactly where you guide it, with tremendous speed and force. The saw has no judgment. It has no taste. It won’t tell you that your design is ugly or that the joint you&amp;rsquo;re about to cut won&amp;rsquo;t hold weight. It does precisely what you tell it to do, including cutting your fingers off if you put them in the wrong place.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solving problems</title>
      <link>https://www.xythian.com/notes/2026/01/solving-problems/</link>
      <pubDate>Thu, 29 Jan 2026 12:15:22 -0800</pubDate>
      <guid>https://www.xythian.com/notes/2026/01/solving-problems/</guid>
      <description>&lt;p&gt;Years ago I wrote about &lt;a href=&#34;https://www.xythian.com/notes/2006/03/saving-time&#34;&gt;my enthusiasm for automation of toil&lt;/a&gt;. The advent of coding agents is the first time I’ve faced automation of a task &lt;em&gt;I&lt;/em&gt; enjoy. I enjoy developing software, and I enjoy coding.&lt;/p&gt;
&lt;p&gt;For fun projects, the &amp;lsquo;return&amp;rsquo; on the investment is &amp;lsquo;fun&amp;rsquo;—and sometimes the fun is in the coding, sometimes it&amp;rsquo;s in solving the problem, and sometimes it’s in solving the problem by coding.&lt;/p&gt;
&lt;p&gt;I found programming fairly young. I was lucky to have a computer and a technologist father who encouraged my interest. I enjoyed coding: making something “go”. I also enjoyed solving problems. Initially these were problems like “how do I make it do what I want” or pursuing an interest in a language or tool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MAVEN Launch</title>
      <link>https://www.xythian.com/notes/2013/11/maven-launch/</link>
      <pubDate>Thu, 21 Nov 2013 22:57:24 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2013/11/maven-launch/</guid>
      <description>&lt;p&gt;It was Monday, November 18, 2013 around 10:00 a.m. and I was standing in a humid Florida parking lot in the midst of a large crowd of people. We were all waiting to get on one of the many buses that had gathered there.&lt;/p&gt;
&lt;p&gt;We all had good reason to be waiting in that parking lot. The buses were going to the NASA Causeway where we would get to see a rocket launch a spacecraft on its way to Mars.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mock service dependencies</title>
      <link>https://www.xythian.com/notes/2011/04/mock-service-dependencies/</link>
      <pubDate>Fri, 15 Apr 2011 21:34:34 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2011/04/mock-service-dependencies/</guid>
      <description>&lt;p&gt;Suppose you&amp;rsquo;re building a service that depends on several other
services to work. You write a bunch of code and carefully include
error handling code and have a plan for what happens if each
service your new service calls fails. Naturally, you want to test
your code. These services are invoked over a network. Perhaps
they&amp;rsquo;re web services but they may be some other network protocol.
Suppose further your code is nicely factored so there&amp;rsquo;s a &amp;ldquo;client&amp;rdquo;
class that presents the network service as a library API to the
rest of the service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Communicating in code</title>
      <link>https://www.xythian.com/notes/2011/03/communicating-in-code/</link>
      <pubDate>Mon, 28 Mar 2011 21:42:09 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2011/03/communicating-in-code/</guid>
      <description>&lt;p&gt;Code is communicating. Communicating with the computer to make it
do something useful. Communicating with the future people that will
read and maintain the code.&lt;/p&gt;
&lt;p&gt;The former doesn&amp;rsquo;t care how clever you are. The latter may know
where you live. The latter may be you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Make a decision</title>
      <link>https://www.xythian.com/notes/2011/03/make-a-decision/</link>
      <pubDate>Sun, 13 Mar 2011 17:22:43 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2011/03/make-a-decision/</guid>
      <description>&lt;p&gt;You&amp;rsquo;ve got a choice to make. You&amp;rsquo;ve carefully written down the
various attributes you care about and how well each choice lines up
with those attributes. You&amp;rsquo;re having a hard time making a decision
because with the information you have now they all look very
similar. One of the following is true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You&amp;rsquo;re missing attributes with which to evaluate the choices,
attributes which would differentiate the choices for you&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;re incorrect about how well the choices match your evaluation
criteria&lt;/li&gt;
&lt;li&gt;There really is no difference between the choices given
information you &lt;strong&gt;can&lt;/strong&gt; have now (ruling out somehow getting future
knowledge)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&amp;rsquo;t discount the possibility that the situation is the last one.
Due diligence is important but don&amp;rsquo;t block forever waiting for some
flash of information that will never come. Don&amp;rsquo;t discount the
opportunity cost of not making the decision and moving on to the
next thing to do &amp;ndash; sometimes that outweighs any potential cost
caused by picking the &lt;strong&gt;worst possible&lt;/strong&gt; choice among those you
have selected. Never spend more energy on a decision than the cost
of being wrong.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning debugging</title>
      <link>https://www.xythian.com/notes/2011/01/learning-debugging/</link>
      <pubDate>Thu, 06 Jan 2011 22:57:24 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2011/01/learning-debugging/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;https://www.xythian.com/notes/2011/01/learning-programming&#34;&gt;learning programming&lt;/a&gt;
post I wrote about some approaches for learning to program and
linked to a bunch of resources.
Some of my insightful friends pointed out that most programming
teaching doesn&amp;rsquo;t cover debugging and that lack leads to a lot of
frustration. This is particularly hard on those working alone or
with other people that don&amp;rsquo;t know how to debug.&lt;/p&gt;
&lt;p&gt;Debugging is the art of figuring out why a system doesn&amp;rsquo;t work. The
skills of debugging apply not just to errant programs but to any
system that needs diagnosis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning Programming</title>
      <link>https://www.xythian.com/notes/2011/01/learning-programming/</link>
      <pubDate>Tue, 04 Jan 2011 23:22:48 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2011/01/learning-programming/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m interested in how people learn to program. Over the past few
years, friends or relatives have asked me about resources for
learning to program for themselves or for people they know. I&amp;rsquo;ve
collected and refined that advice here.
It&amp;rsquo;s hard to know what approach will work for someone to learn to
program. It&amp;rsquo;s hard work so it&amp;rsquo;s important that each step be
interesting and rewarding enough to keep going particularly when
there&amp;rsquo;s no external force such as formal courses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Robustness Principle and internal APIs</title>
      <link>https://www.xythian.com/notes/2010/01/robustness/</link>
      <pubDate>Fri, 15 Jan 2010 20:48:40 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2010/01/robustness/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://tools.ietf.org/html/rfc761#section-1.2.2&#34;&gt;RFC 761&lt;/a&gt; section
1.2.2.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2.10. Robustness Principle
TCP implementations should follow a general principle of robustness:  be conservative in what you do, be liberal in what you accept from others.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://tools.ietf.org/html/rfc1122#section-1.2.2&#34;&gt;RFC 1122&lt;/a&gt;
elaborates with section 1.2.2.:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1.2.2  Robustness Principle&lt;/p&gt;
&lt;p&gt;At every layer of the protocols, there is a general rule whose application can lead to enormous benefits in robustness and interoperability: &amp;ldquo;Be liberal in what you accept, and conservative in what you send&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Saving time</title>
      <link>https://www.xythian.com/notes/2006/03/saving-time/</link>
      <pubDate>Sat, 18 Mar 2006 15:55:10 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2006/03/saving-time/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m pretty passionate about automating tasks. I don&amp;rsquo;t think people
should spend time doing things that computers can do, especially
when automating those things is easy. I have, in the past, slid
down expansive, deep ratholes writing a program to automate some
grunt work or another. Sometimes the time to write the program
takes longer than doing it by hand, but I believe the time was
still well spent because of learning during the automation or
because of how unlikely it is that the grunt work will really only
have to be done once.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Being a software developer</title>
      <link>https://www.xythian.com/notes/2006/03/being-a-software-developer/</link>
      <pubDate>Wed, 15 Mar 2006 22:14:30 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2006/03/being-a-software-developer/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a software developer. There are tools I like and have
successfully built applications using but I also enjoy learning new
tools and languages.&lt;/p&gt;
&lt;p&gt;My goal is to use the best tool for the job. Most of the time the
&amp;ldquo;best tool&amp;rdquo; is not a choice based entirely on the merits of one
platform over another. If I want to hack my WordPress install, I
have to use PHP. If I want to use Lucene for something, I have to
use Java.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Engineering yourself out of a job</title>
      <link>https://www.xythian.com/notes/2005/03/engineering-yourself-out-of-a-job/</link>
      <pubDate>Thu, 31 Mar 2005 16:28:42 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2005/03/engineering-yourself-out-of-a-job/</guid>
      <description>&lt;p&gt;I once presented my vision for how a group could automate enough of
a bunch of content publishing tasks to allow the people that
created the content to take care of publishing site refreshes
rather than requiring the involvement of engineering folks and
doing code-and-content pushes.&lt;/p&gt;
&lt;p&gt;The person I was talking to responded, &amp;ldquo;Are you trying to engineer
yourself out of a job?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It was a startling moment because our new product development was
usually gated on engineering effort &amp;ndash; freeing up our time to focus
on product development and making the content creator&amp;rsquo;s job more
rewarding by allowing them to make and publish content on their own
seemed like a win for everybody. Of course I wanted to engineer us
out of the job of pushing content so we could focus on improving
the code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The future audience</title>
      <link>https://www.xythian.com/notes/2005/01/future-audience/</link>
      <pubDate>Sat, 08 Jan 2005 13:02:35 -0753</pubDate>
      <guid>https://www.xythian.com/notes/2005/01/future-audience/</guid>
      <description>&lt;p&gt;The future audience weighs heavily on me when I&amp;rsquo;m writing things to
post to the Internet. I assume virtually everything I post to the
Internet could eventually be read by anyone I know now &lt;strong&gt;or may
know in the future&lt;/strong&gt;. I am fortunate that I went through the most
pronounced part of my angry, stupid new Internet teenager phase in
a forum with less robust archiving than Usenet.&lt;/p&gt;
&lt;p&gt;It should matter less to me but it&amp;rsquo;s hard to post something that
says anything at all when all I can think of is how will this seem
years from now to people I don&amp;rsquo;t even know yet.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
