Friday 20 May 2011

What makes a good programmer?

        The success of any project depends on many factors: strong manager, effective process, good planning, good support… And lastly, an important factor: strong team members. Without good individuals, the confidence about the success of a project will go down. That is why the best people are always chosen for the hardest tasks/projects, like you have seen with the Seal Team 6 recently (although it finally turned out that it was not really a tough battle for them).

1.       Introduction
        In software development industry, good programmers are valuable “properties” of a company. Many software companies treat interviews and tests really seriously when recruiting people, because they want to have the best person out of the bunch of applicants.

        It is the company/project perspective. Regarding personal perspective, if you are a good programmer, you can get your job done in a quick timely fashion; the output absolutely meets your boss’s expectation even though he has given you the toughest task. Then you have very good advantage and opportunity to move fast to success and gain big achievement for your profile. However, not all developers are aware of what makes a good programmer, or what is the “essential luggage” on the road to destination.

        From my own point of view, good programmer should have a couple of core values as below:
  • High work quality and productivity
  • Good job knowledge
  • Good soft skills
  • Strong English skill
        Those are my top-of-mind items. I often talked to my new project team members or new staff in my line about them so that they are aware and can prepare a plan to improve those values. So far the outputs of their preparation have been pretty good.

Victory loves preparation
The Mechanic

2.      What makes a good programmer?
             2.1. High work quality and productivity
            This is one of the most important keys to success. The work quality of each member contributes to the success of the whole project. As you know a software framework is formed from various modules, layers and components. Even when 99% of the modules are perfect but only 1% fails, the project is still in a high risk of failing.

            I have read a very impressive study from the “Code Complete” book, which I consider a very clear example of how quality should be taken with high care. The study was done on professional programmers with 7 years of experience in average. The chart below shows the comparison on the output between the best and the worst programmer:



         The result above shows us that there is no relationship between years of experience and quality/productivity of a developer. Number of working years cannot say a programmer is good or bad.

             So how can we have good work quality?

             2.1.1. Equip yourself with good coding skill
            Make your code simple, readable, modularized, layered, well designed, robust, elegant and clear. That code usually runs with high performance and has fewer bugs. There are nowadays loads of books that teach us how to write good code. You should have from basic to advanced knowledge on code refactoring, code smells, anti-patterns, design patterns, coding principles and best practices.

             2.1.2. Always test your functionality with high care.
            Test carefully your functionality yourself before you hand it to testers. Always try to test all the cases. People usually do happy-path-testing but forget exceptional cases, in which most of the bugs appear. Make sure there is no silly or careless-mistake bug. In most of the cases, number of bugs can indicate a developer good or bad.

             Some programmers think that they don’t need to test too much because QC team will always do the full test. This is a wrong idea. Programmers have to be responsible for their functionality first. Several well-known companies have even eliminated the existence of QC/QA team.

           2.1.3. Be responsible for the productivity of your work
            It is very important to keep your work productive especially in project types that don’t have deadline or fixed target. For example you are assigned to work on a list of 300 bugs in 2 months. Your boss didn’t say you must fix how many of them. Therefore you can end up 2 months with one of these 2 scenarios:

             -    Have 40 bugs fixed (1 bug per day, spend most of the time reading news or chat chit, or get stuck for a long time with difficult bugs)
      
           -    Have 150 bugs fixed (concentrate on the task, define a smart strategy to fix as many bugs as possible)

           Both scenarios are still fine for you because there was no target at the beginning. However the more bugs you fix, the more you show your ability to work with high productivity and effectiveness (which is definitely good for your project).

            2.2. Good job knowledge
            A programmer needs to know as much as possible about the system of the project he is working on. Dig deep inside into its framework to know its components, layers, components, understand how each component works and how all of them run together. The more he masters it, the easier for him to work on the task assignments. Once he knows the most important sections of the framework, he will soon be the key person of the project and can gain creditability more easily.

         Besides, invest your time to practice and research on the technologies, frameworks, languages or methodologies required by your career path. You don’t have to try to know everything unless you plan to become Solution Architect or Technical Manager. However, you have to know well the ones you work on daily.

             2.3. Good soft skills

    Hard skills will get you an interview, soft skills get you the job (and help you keep it).

           You can’t be good programmer by just coding and coding. Soft skills take an important role in your success. This value helps you make the difference and can be a very strong point of yours if you have really good soft skills.

         Soft skills include many individual skills such as: communication, time management, problem solving, decision making, critical thinking, team spirit, presentation, delegation… Every skill has its own importance.

           Apply your soft skills to work the following things:
           -    Manage your time to complete the tasks on time
           -    If you can complete task before schedule, it is brilliant and is a plus sign to your manager.
           -    Don’t keep silent in meetings. Make the meeting productive by contributing your ideas.
          -    Be active in your work. Communicate with PM when you are overload or feel the project plan has problem. Let PM know when you run out of work (don’t just sit and play games).
           -    Willing to support others
           -    Always treat any colleague with respect.

            Each programmer should know which of his skills are good and which one should be improved. The skills can be developed on an on-going basis through trainings, reading, observation and practice.

              2.4. Strong English skill
            This is a highly important skill required by software companies in Vietnam, especially the outsourcing ones. Good English helps you to have more confidence in communicating with English-speaking people. In other hand, bad English speaking and listening skill will reduce the productivity of your work when you have to talk directly to customers frequently. It may even make the customers feel unhappy whey they work with you. You may misunderstand their idea and cause things to go wrong. Furthermore, if you are good at technical but bad at English, you still can’t move fast to success.

           Learning or improving English is a time consuming work. It takes years and requires everybody’s patience. No one can be an English master over night. So if you think your English skill needs serious improvement, don’t hesitate to register English classes. From my experience, English classes are the best places to improve the skill. And as I mentioned above, it needs years of continuous learning. But you will gain benefit from what you invest.

    3.       Conclusion
             Coding skill is just a small part of good programmer’s skill set. In order to get your job done well, you need to prepare for yourself some important core values. They will make the difference. You may find some of my points are useful, but you may also have your own ones. My points are very basic ones that target the junior programmers. With higher levels, there are a lot other values waiting out there.

    4.       About the author

    Cuong Luc
    Principle Software Engineer
    Harvey Nash Vietnam








    2 comments:

    1. Excellent article, well done!

      I wish I read this article 10 years ago ;-). I hope more and more developers/programmers will read this and apply to their job.

      Re: “2.1.3. Be responsible for the productivity of your work”, the current post only focuses on the case when programmers work in maintenance projects. In general, we should complete work less than the estimated effort to be more productive. Once completing one task early, informing to the manager to take next tasks. “Don’t ever wait until all estimated effort consumed to move to the next task”.

      ReplyDelete
    2. "Re: “2.1.3. Be responsible for the productivity of your work”, the current post only focuses on the case when programmers work in maintenance projects."

      I wanted to keep this article short so I only listed out one example. Your additional point is exactly what I missed.

      ReplyDelete