In terms of intelligence, it’s an absolute pleasure working with intelligent people. Everything runs smoothly and everything just works. You should always surround yourself by people that are smarter than you are, because it’s really wonderful to have people that you can learn from and count on. Working with less intelligent people is more difficult because they may not easily grasp certain concepts and you will require more patience and management skills to make up for their lack of intelligence i.e. relative to your own intelligence. However everybody can teach you something, and everybody has different sets of skills, and sometimes perhaps for financial or practical reasons you may need to also work with people that are less intelligent than yourself. You should be kind to these people and learn from them too.
Having said that, one must keep one thing in mind that if you’re working with someone that is less skilled/intelligent, you can always teach this person what they need to know, but you cannot change an a**hole.
So the more important question is not whether or not someone is intelligent, but rather what kind of personality do they have … and more importantly, how wise they are. You will find narcissistic people on both sides of the intelligence spectrum and you need to stay away from them at all costs, regardless of whether they are geniuses or idiots.
- First prize: intelligent people that have empathy and wisdom.
- Second prize: less intelligent people that have empathy and wisdom.
- Third option: intelligent people that do NOT have empathy and/or wisdom. Work with these people only if you’re forced into it, in which case try to limit your interactions with them as well the power you give them. If you cannot limit their power or limit your interactions with them, then rather don’t bother.
- Fourth option: less intelligent people that have no empathy and/or wisdom. This shouldn’t really be an option. It’s best to stay clear of these people for the sake of your own mental health.
All of the above “options” should be relative to your own intellectual and emotional intelligence.
My personal philosophy is that in the software business there are three things that need to be focused on and their priority should be as follows:
Product and its source code: the features of the product and its quality determine how happy you make your customers. If your customer is happy he will purchase the product, which in turn means you have a profitable business. So one should always listen to the customer’s needs. Conversely, the product being yours means you as the founder know more about the product than anybody else, meaning you’re the boss of your own product. Therefore if a customer submits a feature request, it is just that, a “feature request” – not a direct order by the customer i.e. it is up to you as the founder of the product to decide whether the feature will be implemented or not and when it will be implemented because that feature or your prioritization of the feature could negatively impact another customer. That is why I believe the product should be prioritized ahead of the customer, which in the grand scheme of things will prove to be beneficial for both you and all the end customers even if you upset one or two customers along the way.
Customer: always prioritize the customer’s needs over making a quick buck by ripping them off: Many amateur sales people do a “hit & run” with a customer. However I feel that the best sales people have empathy for customers providing them with good deals… but not too much empathy that one gives things away for free or too cheaply.
Profit: personally I believe that money is just a by-product of one’s work and success. Focus on the work; do the work for the work itself because you enjoy it and you have a vision. This in turn will result in the money being made. If you’re going to run the comrades marathon, there is no way you are going to run all those kilometers if your only goal is to win the race so you can get a prize. With that mentality you will quit as soon as you realize you’re not in the lead. Instead if you run for the sake of running because you enjoy it, then you will finish the race and you will feel satisfied with yourself … that’s intrinsic motivation.
Firstly, I’ll tell you what you shouldn’t do to become a good programmer. No matter what anybody tells you, if you spend too much time doing any of the following things it might improve your skills a little, but you will never be a good programmer:
- You won’t become a good programmer by just reading books.
- You won’t become a good programmer by memorising code and algorithms. Programming is about thinking not about remembering. You can have the best memory, but if you’re not thinking for yourself you’ll NEVER be a good programmer i.e. we have computers and the internet to remember things for us, so there’s no need for you to remember anything – you just need to know where and how to find the information you need.
- You won’t become a good programmer by writing single functions and algorithms from the books you read i.e. writing stupid bubble sort functions and similar useless algorithms.
- You won’t become a good programmer by testing other people’s code e.g. whether testing software by using it or writing unit tests etc.
- You won’t become a good programmer by reading and debugging other people’s code. This might help in the short term, but only if the other person’s code is well written so you can pick up some good habits, but using bad code as examples will teach you bad habits that you will ultimately have to unlearn. In the long term spending too much time reading and debugging other people’s code will be detrimental to your growth.
- You won’t become a good programmer by allowing others to micro manage you … because again programming is about thinking for yourself.
There’s only one way to become a good programmer: you have to take on a project and start it and finish it yourself from beginning to end. Don’t focus too much on reading books, syntax, algorithms and functions i.e. don’t focus on details at the beginning. Simply sit and think about an app/system you’d like to develop for yourself … something you’d really enjoy building and using for yourself. Ask your friends/family/lecturers for an idea if you need to, but you must start the project from scratch and finish it by yourself from beginning to end. Once you’ve gotten the idea, keep the idea in your head and be passionate about finishing it … from there everything will slowly start to come together. You will have features in your mind that you want to implement at which point you will start researching how to implement this or that. It’s only at this point that you should pick up a book or search the internet for answers about how to implement this cool feature you’ve thought of doing. As your app/system grows you will slowly by yourself start thinking about writing cleaner code to maintain it in the future to make your own life easier.
It is only through the process and struggle of bringing your own idea to life that you will learn how to become a good programmer. You should see yourself as an artist, not just as guy who writes code to get it to compile and run. If you’re only working on someone else’s code, or only reading books etc. you will lose your motivation very quickly and you will never find or utilize your talent.