How to create applications that look right, behave properly, and fit into the GNOME user interface as a whole, covers specific advice on making effective use of interface elements, and the philosophy and general design principles behind GNOME interface.
Guy Steele's keynote at the 1998 ACM OOPSLA conference on "Growing a Language" (mostly about JAVA) discusses the importance of and issues associated with designing a programming language that can be grown by its users.
Almost every application with GUI needs icons. And they better be sexy. And stylish. And consistent. And small. Here are few tips for programatically creating icons using Java 2D features