Programming for Design: From Theory to Practice