Recently I have started reading two books, well one book and one collection of stories, on open source software and interaction design. This is all in an attempt to suck a little less at working on software, open source in particular i.e become a better person, programmer, and open source contributor.
The Books
About Face 3
The first book I started reading was About Face 3: The Essentials of Interaction Design. In my opinion this is a must read for anyone building software, or at least those who work with the UI and users.
One design principle the book covers is not leaking the Implementation Model into the UI. The Implementation Model is when the UI is designed around how the code works in the background, rather then the users mental model of the task. Most users don't understand complex structures, or nested hierarchy, but yet we see it a lot within UI design due to it fitting the code design and the programmers view of the world perfectly well. Try explaining the branching, merging, and rebasing model of a Git tree to a non programmer and you will see what I mean.
That one design principle alone echoes strong with me, as lets be honest, most programmers are not UI designers and tend to do a pretty bad job at it, even me. When working on a feature the UI tends to be the last thing that is thought of and is just a quick interface for the code underneath.
Loss of orientation is another big thing. And what is the quickest way to get lost in a program? Dialog boxes! They popup, get in your face, most of the time have to be dismissed before you can see the results. Generally just a bad idea and people tend to get lost quick once you have more then one on the screen.
Those two principles alone are not going to make you a good UI designer but at least they give you something to ask yourself when working on a UI:
Do I really need that button. Can't I just do it for the user.
Is there a reason this needs to be shown as a nested tree. Why not just a flat list. Can I do the same action with a different control.
Do I really need a another dialog here. (This applies to annoying the user when something happens e.g non-fatal warnings or errors)
Open Advice
The second (free) book was brought to my attention by Brian on my Google+ feed, entitled Open Advice. Open Adivice is a collection of stories from people with differencing experience working on open source projects telling their stories on what they learnt and what they wish they had known when they started. The book aims to cover the answers to ""What would you have liked to know when you started contributing?", which it does quite well.
It's not heavy reading, but the story telling works well to bring home some of the things that everyone working on open source. Some of the stories cover things like; getting your first patch rejected; having a bad first IRC experience; writing good documentation; how to be a better community.
The book covers a range of topics so it's a good read for everyone, regardless of your experience or knowledge area.
Those who don't know history are destined to repeat it
Summary
So they are my two books for the start of 2012, hopefully they are a good read for you. I think in order to be good at anything you should strive, every year, to suck a little less at everything you do, even just a little bit. My role model in the software world is Scott Hanselman, generally a pretty cool dude, and has echoed a lot on his podcast this notion of learning sometime new every year to just get a little better at what you do, to become a better person and programmer.
So even if your not into learning or reading a lot, just reading these two books I can almost guarantee you will come out a better person for it.