I have read plenty of articles where experienced programmers talk about skills and qualities that every good programmer should have. Usually, they suggest some tips and books that are strictly related to programming.
But, I think there are also some non-programming skills and qualities that makes a good programmer. These skills won't necessarily improve your programming skills but, they will really help in making you an all-rounder programmer(if such a term does exist!)
Also I have recommended a book for each skill, which I have read and found to be useful. Coming down to one book was a bit tough, because I have actually read several books in each category.
So, here are some skills and qualities that may help you in having a better life as a programmer.
This is probably the most obvious one and that's why it's highly ignored. I can tell this from my personal experience. Whether you are in college or a company, being social always works in your favor.
Often times, we ignore small things like saying a simple 'Hi' to a coworker or greeting them with a simple smile. I had this problem during my school days, and also for some part of college life.
I can't tell you how many hours of my life I have wasted, just in thinking about what others think of me. All it takes is just to be yourself and being friendly with others. It's that simple.
You might ask, why minding your own business can create a problem for you? The problem is, others can misinterpret your behavior and attitude. Sometimes, people mistake an introvert for an arrogant person.
I am not saying to go out of your way to please someone, even if you don't mean it. I am sure there would definitely be someone in your office who does that.
I am only saying that you give a little smile, say 'Hi' to your colleagues and just try to be a friend. Still better, help someone with a problem, guide them and be genuinely interested in their lives. It's actually not that difficult and you will be more aware about things going around you.
Recommended book: How To Win Friends and Influence People by Dale Carnegie.
Basically, designing means how your software looks and how it works. The purpose of designer is to make software that's better than what already exists. A designer makes sure that a software is as simple to use as possible, execution is smooth and bug-free, and user never has any confusion in achieving his goals when he uses that software.
In my earlier posts, I have always mentioned about the importance of designing in creating great software. Thinking like a designer can be simple or difficult, based on how you are used to thinking while writing programs.
I started learning programming in 2002, when I was about 18 years old. But it's only been a year, since I came to understand the importance of designing. If I had spent some part of my college time in learning about designing, I surely would be designing better apps than I do now. I hope you don't do that same mistake.
A programmers aim shouldn't be to simply write good programs, rather it should be developing really great products. Even the basic knowledge of designing can help a long way in accomplishing that.
Recommended book : The Design of Everyday Things by Donald Norman.
Creating software is a business. Senior managers and team leaders expect you to behave in a certain way with your clients and partners. It's about having proper email etiquettes, behavior and responsibility when dealing with clients.
Also, it's good to have some management and leadership skills. You should be aware of the latest trends and activities in your area of specialization.
I think it's a good idea to consider yourself as a brand that stands for something. It's not enough to say you are a good programmer or great with a particular technology. When applying for a new job, show how you can increase the value of the company.
If, in addition to being a good programmer, you can also get some of these skills, it would help you become a better negotiator and advance further in your career.
Recommended book : What They Don't Teach You at Harvard Business School by Mark McCormack.
Few years back, I would have never considered working for a startup or even making something on my own. I thought it was better, and easier to get into big companies and get a good pay package and that's about it.
But, after about a year of learning things on my own and trying to build something independently, I can't tell you how great it feels when you work for yourself. You are free to make that software or game that you always wanted to, but didn't have time or resources.
Today, I would highly recommend any young graduate to consider working for a startup, as his first job. Though it's not exactly like working independently, still, you are much closer to making things that you believe in, which is simply not possible in big organizations.
The experience that you get and the things that you learn will be much more valuable, than that extra pay you get by working for some big company. Also, if you ever plan to create your own product, you will know the proper way to start and finish building it.
Recommended book : Made in Japan by Akio Morita.
Perhaps, the best book on startup and management that I have ever read. The reason this book stands out is Mr.Akio Morita(co-founder of Sony) shares his experience on creating a business with value and integrity that also supports innovation.
I have read many management books but most of them focus on the American style of management. This book explains the Japanese style of management which is completely different from the American style. It makes you think and challenge your basics on managing a company. Simply superb.
You should also check essays by Paul Graham and Hacker News to get some invaluable resources and tips on startups.
It's a bit difficult to explain this exactly. But, I think being creative helps you a lot, in coming up with new solutions, or looking at problems through different angles.
You can be creative in any field, and the best thing is, this quality stays with you when you try to solve tough programming problems. Recently, I started learning drawing(on my own) and think it's a good break from programming.
You can choose your own creative pursuit. It can be drawing, playing guitar, writing, or simply anything that brings out the creative person inside you.
Recommended book : Keys to drawing by Bert Dodson.
I am still not sure whether I should have included this one or not. The only reason I am including this is because, I have personally benefited a lot from this single quality more than any other skills/qualities I have mentioned before.
For those who don't care about being spiritual, please note that it has got nothing to do with any religion, country or society. Anyone can be a spiritual person without even being religious(I am one).
It’s very easy to get frustrated when you sit in front of your computer for most part of your day. I know how irritating it is when you are deeply involved in doing something, and someone suddenly pops up and starts talking about trivial stuff.
This is where you will see the difference that it makes, when you become a more spiritual person. You can just start with meditation by focusing on your breathe for 10-15 minutes daily. I would love to talk more about this. But it's best if you learn it from the experts, who are a zillion times better than me at explaining it and also integrating it in their lives.
Believe me, you will feel more calm, peace and satisfaction by being a spiritual person. You won't get irritated easily and almost never have stress again if you are able to practice this for a long time.
That also means, you will be able to focus properly in your work and handle office related stress in better way which will definitely help in becoming a better programmer.
Recommended book : Zen Mind, Beginners Mind by Shunryu Suzuki.
This is the toughest one to choose because, I have literally read at least a hundred books on this subject. Honestly, I only recommend this because I am currently reading it and found it really good.