Here is how you can become a good programmer according to experts
How do I become a good coder and what should the ideal characteristics of a good coder?
Programming is one of the better career choices available to you. One reasons that many youngsters choose programming is the pay, the high quality programmers command and other is the sheer glamour of building your own ultimate software. As we move towards a global online economy, more and more top notch programmers will be needed in future to fuel this expansion.
While many youngsters aspire to be coders, a few of them actually make it to the list of top rung programmers. There are many reasons for this. One of the prime reasons is however poor choice and lack of dedication. Some blame it on technology while others have their own reasons. But at last it all boils down to how much you can put into coding.
Quora user, Guillermo Schwarz, who has spent over twenty years developing software, has a list of dos and donts for wannabe programmers
- Know the language you are working with. Read manuals. Read all the stuff you can about it. Learn the language inside and out. Doubt what you read, make experiments. This is important: To really learn, you need to test and experiment for yourself. Make up your own mind.
- Check parameters in every function. Learn defensive programming. Make sure your code is solid, in the sense that it is almost impossible to use incorrectly, it is impossible to break.
- Learn best practices. This is different than mere manuals, because manuals have all the important information, everything you can do with the language, but they don’t distinguish between: “this is a good practice” and “this is going to be bring you problems down the road.”
- Learn design patterns. The idea of design patterns is to make your code more dynamic, in the sense that changing requirements can be accepted. See GoF design patterns. If you have time also read the anti patterns.
- Learn object orientation. It is a way to order your code, not a way to “model the world”—that is the wrong approach. You need written requirements and work from there. A design is comprised of design decisions. Number requirements. For every requirement there must be at least one design decision that at least conceptually solves the requirement. Create a prototypes for every design decision to show it works. Use source control to store prototypes.
- Automated unit testing. Unit test everything. This is what makes the difference between wannabes and real programmers.
- Learn make, ant, maven, gradle, or whatever tool you can use to make one step compilation.
- Avoid memory leaks.
- Avoid resource leaks.
- Use issue trackers to store your backlog. That way you can always remember what is missing or how you solved things. If you are using Scrum, Kanban or XP, you can always copy issues from the issue tracker into sticky notes. You will end up doing it anyhow, because looking at a scrum board makes it so much easier to see what is missing.
- Dry and not wet: dry = don’t repeat yourself, wet = write everything twice. No repeated code, period.
- Methods no longer than 10 lines.
- Classes contain no more than 10 methods and 3 instance variables.
- According to Bertrand Meyer, when your design is too complex, you need more classes.
- One responsibility per class, and only one class per responsibility. That responsibility should go in a comment at the beginning of said class.
While another user, Steve Cook, who also has 20+ years of experience in programming doesnt fully agree with Schwarz. Cook says that the first thing a wannabe coder should do is ask a question to himself/herself :
Cook says that the problem with Guillermo Schwarz‘s list is that, he is all about the learning of laundry list items. Cook argues that all things pointed out by Schwarz can be learnt from Google, “Google is there for a reason, it is more important to know where to find answers than “knowing” the answers. In his response he gave lots of “his world” answers, but where is object oriented development going to help you write anything in a C program?”
Cook has a different list altogether for all those who want to learn programming. Cook’s list involves more of human nature than technology and coding itself.
Keep in mind the world does not play by the made up rules of programmers. There will be times where you will need to break standards, skip testing, throw something together so quickly that it breaks all best practices. This is life, life is messy. If you don’t have these conditions, your either really lucky or just playing programmer on tv.
Average programmers love to chase trends and fads, but often have no real idea why they do what they do. I once asked a person “when is Agile not a good solution?” His answer was never, agile was the end all be all to him. If you want to be a good programmer, you need to understand the strengths and weaknesses of things, analyze them, make sure you find the best fit for things instead of just the most popular one at the time. Frameworks, design patterns and philosophies change, as such trend chasers always follow the good programmers, but never become good programmers.
This goes along with inquisitive. The more we experience the more directions we can see things going. Push your limits, if you can’t at your job, then do so at home. If you work in manufacturing, look into banking, often there are solutions applied to a single industry and it takes years before other industries catch on.
Know/Learn your needs instead of buzzwords
It seems today programmers are more about trendy camps instead of being programmers. “I Know java 8”, I use AWS! Funny Amazon’s interview test lets you decide which language, and does not require framework knowledge. AWS takes a week to figure out, maybe 2 or 3 if you’re not familiar with some concepts.
More mind blowing is how many people move to something like AWS because it is a fad, with few or no real use cases to indicate they should. I am sure Amazon does not mind, after all they make good money of the trend.
Being a great programmer is not knowing lambda expression or about cloud computing. It is about knowing how to research the pros and cons of these topics when needed, or researching wants to resolve the issues you are or will be facing. Yes it is important to stay up on new technology, but not always implement it because you can.