I've been a professional programmer for about 11 years now. I have happened to work with many companies & technologies in such a short professional career. During all these years, I've learned and experienced a few things, that I think, are very necessary that any (good) programmer should possess.
What makes you a good programmer?
Learning a new programming language doesn't make you a good programmer, but your knowledge of how to effectively use that language to solve a given problem does.
Writing code that you understand doesn't make you a good programmer. Writing code that others can also understand does.
Using the best computer or the biggest monitor doesn't make you a good programmer. Your approach to identifying and solving an issue does.
TLDR; you should be following if you want to evolve as a (good) programmer.
- Quick Learner
- Good Listener
- "Au courant"
- Learn Makeshift
A programmer's mind should keep asking questions. There are so many things going around us. Right now, for example, the world is locked out due to pandemic. I thought How did they decide on the shape of the virus? Do all the viruses have the same shapes?
All big minds have been curious about various things in their lives. It does not always have to be about things related to tech or computers or programming.
Why that politician might have said that? What is his intension behind that?
What will happen if there is no Google?
Do aliens exist? Can dinosaurs be brought back?
What will be the trending tech in 2030?
What can be done to make Earth a better planet to live for our kids?
See where I'm going with this? You might feel why should I as a programmer have these questions? I don't know. But that's how I think. I am curious about things. I want to know how things work. I want to know if there is a parallel universe or a black hole to pass through into another timeline. I want to understand why that superstition exists that people believe without thinking twice.
I'm not necessarily searching for someone who can answer these questions. Rather, I'm happy that I have these questions. And I put them to someone interested to answer. And if I ever get answers to some of these questions, I'll probably have more questions to ask.
I don't think it's the right career path for me.
I've tried but don't understand a thing in programming.
I have been an engineering professor for about 5 years and a private trainer for about 1 year. I used to teach many things ranging from simple HTML & CSS to working with CMS systems like WordPress. I've seen students giving up on programming after only trying it for a few days. They are just afraid of going out of their comfort zone. Their goal at the end boils down to just clear the subject. I would often tell them to have patience.
Things don't automatically work. Rome wasn't built in a day. Your father didn't earn money overnight.
It takes time to learn, just as much as it takes time to earn. It requires patience. It requires perseverance. Stick around to solve those issues. You didn't learn 26 alphabets in your kinder-garden in one week. But then, you were not this impatient at that time, were you?
There will be a lot of days in your programming career and even more so during your initial learning days when you will be stuck to a problem. You will forget writing semi-colons, you'll be confused between using single or double quotation mark. Curly brackets will be scaring the shit out of you. You'll not know why that code is not compiling and what that scary error code is popping up.
Keep yourself composed. It's just the first step. Things are going to get better as you move up the ladder. If it's not working right now, take a break, play football, watch television and then with a fresh mind, look at it again. Spend some time again on it. Keep doing that, and eventually, you'll find the issue. That's when you learn.
Don't dismiss things at their face value. A book with a very bad cover can be a best seller. The person junior to you can also have life-changing advice for you. A non-programmer can unknowingly give you some idea that can become your next big startup.
Always be aware of your surroundings, ready to accept ideas wherever they come from. You will be able to find so many people having problems, that you can provide solutions for. Now which ones to pick and which ones to let go, is your choice.
I've created so many tiny apps to solve minor problems for my friends and relatives. Sure they didn't pay me for that. Some ideas even were not that good either. And I don't know if they are still using those apps or not. But that's not what I used to think then. My intention was to help them with a solution that I provide.
Now when I look back, I am amused to know, how those small ideas and solutions helped me during my career.
4. Quick Learner
I'm always ready to learn new things. Right now I'm learning to be a better writer. On the weekends, you may find me learning Guitar. When playing with my kid, I may be learning poems and rhyming.
Learning is fun. Learning should never stop. It's one emotion that all human beings carry. You, me, everybody.
When you are a good (quick) learner, you become a programming bird. Fly anywhere your want; Not scared of any heights; Not scared of the world around you; Not scared of anything.
Programming is like a daily workout. You see your muscles building up, not after one day or one week. It requires that you are consistent and regular with your routine. Programming is no different. You do it on day one and then you do it every day. You learn something new regularly. It's these gradual learnings that help you gain enough experience to create solutions.
Discipline is the key. To keep things interesting and easy-going, look for problems, and create small programs that solve those problems. This will keep you motivated to program more.
This approach has worked for me to maintain consistency because I also used to solve those bookish programming problems, which instead of teaching the concept, tend to teach the single-problem-solution, which can get boring after a few programs. Solving real-world problems induces better consistency in your programming routine. It also becomes more interesting after this.
Expecting different results, doing the same thing again and again, is sheer foolishness. Determination means you need to solve a problem and you'll solve it, however it works. You should be firm on your purpose. The obstacles are everywhere. Your relationship can be an obstacle. Your low bank balance can be an obstacle. Your noisy boss can be an obstacle as well.
All those obstacles should not stop you. If something doesn't work one way, you'll try it the other way. In the end, even if you don't find success, you'll know all the ways where it doesn't work.
Nothing is permanent. Technologies keep changing. The programming language that you are learning today, may become obsolete tomorrow. What will you do then? Stop working?
I'm not showing-off here (:D pun intended). What I'm trying to say is I've not restricted myself to one technology or language. As and when required, I've adapted myself to that technology and worked my way around it. Sure it's good to have an expertise in something, but that doesn't mean you can't learn something else.
8. Good Listener
It's important to know when you should speak. However, it's more important to know when you should keep quiet. Being a good listener is a trait that very few have.
You should not interrupt a person talking with you while they are saying something. Even so, if you feel that they are not saying something right. Let them complete their version before reacting to it. Not only is it respectful to the person, but it also gives you a little more time to understand their perspective.
Maybe they are talking sense, but because you didn't listen to them properly, you missed their perspective? When you are working in a team, everybody in the team is expected to share their opinions, feedback, and suggestions. To make sure that each member of the team has the same objective for the project, all voices must be heard. A better listener manages a team better than the other.
9. 'Au courant'
'Au courant' is a french phrase that means 'Well Informed', the one who is up to date with the latest trends.
What's working today may not work tomorrow. In fact, it may not be usable at all. As a programmer, we should make sure that our approach towards solving the problem, be it technology selection, language selection, architectural decisions etcetera should ensure that the provided solution is usable for at least the next 5 years.
When I discuss any project with a client, I try to identify what he is not saying, more than what he is saying. That is important because there are things that may look trivial to them (because they are doing it every day, so flawlessly that they feel it's very obvious and doesn't need to be told) and they subconsciously avoid talking about that. They tend to assume things in their head. Apparently ignoring those things may be injurious for the product in later stages.
Again, keep yourself updated with everything, said or otherwise.
10. Learn Makeshift
You need to make things work. No, I'm not talking about programming problems here. But general day to day issues that we face.
What do you do if your fan is broke? What alternative can you propose while the electrician is not available to fix the fan?
What if one of the tires of your car gets punctured? Do your work stop and you don't try to find any alternatives to reach the destination?
Try to learn makeshift. We face so many problems daily, for which immediate solutions may not be available. How we make things work with whatever resources are available makes us a better thinker and a problem solver.
It takes immense hard work to become a good programmer. You need to do your bit every day. You need to program every day. It will not happen overnight, but if you don't stop, it will surely change your perspective towards programming.