I'm just about to pack for holidays and while browsing my library for one or two books to take with me I spotted an old time favourite: The Design of Everyday Things.
This book is important for two reasons: (a) it makes you realize that software design is not much different than any other kind of design, and (b) when you find it difficult to operate some device, it's really the designer's fault -- not yours!
The same ideas that have been used for years now in the design of simple things (e.g. doors), to complex stuff (e.g. nuclear reactor control panels) or even more complex stuff (VCRs :), can be applied to User Interface design. Even the design of a good internal interface (API) shares many properties with the design of successful everyday objects: it should have a clear purpose, it should be obvious to use, difficult to abuse, indicative of how it works, informative about its status -- in other words it should look and feel simple!
Carried away by features, aesthetics, technological innovations and the fact that from a designer's point of view everything look reasonable, we end up with difficult to use, error prone devices and tools. Design for usability should be a primary goal for all everyday objects, and that includes computer software.
Reading this book in the beach is not only enjoyable but it could prove useful for improving your coding skills and help you realise the design genius (or stupidity) incorporated into everyday objects.