The concepts of autonomous agent and multi-agent system appropriate levels of abstraction for the design, implementation and simulation of many complex, distributed computational systems, particularly those systems open to external participants. Programming such agent systems presents many difficult challenges, both conceptually and practically, and addressing these challenges will be crucial for the development of agent technologies. We discuss, at a general level, some of the issues involved in programming multi-agent and open, distributed systems, drawing on the recently-published AgentLink III Roadmap of Agent Based Computing Technologies.