Programming sensor networks is currently a cumbersome and error-prone task since it requires programming individual sensor nodes, using low-level programming languages, interfacing to the hardware and the network, only supported by primitive operating system abstractions. There is a strong need for programming abstractions that simplify tasking sensor networks, and for middleware that supports such programming abstractions. We outline challenges in the design of such abstractions and middleware. Also, we present and discuss currently examined approaches to sensor network programmability.