acm - an acm publication

The rise and fall of a good programmer

Ubiquity, Volume 2008 Issue April | BY Suthikshn Kumar 


Full citation in the ACM Digital Library

Of all the sayings I dislike, the most vapid is one I have heard as long as I have been working with IT: We will have the paperless toilet before we have a paperless office. Normally uttered with a dry cackle and a finger pointed towards my office, which does not lack for paper.

This article is to address the questions such as:

  • Who are good programmers?
  • What are their characteristics?
  • How can all programmers become good?
In software industry we see examples of many good programmers. Some of them keep winning awards. Some of them get praised by everyone as master Java, black belt c etc. It's very difficult to spot a good programmer from mediocre and run of the mill. If some one says that he/she has coded thousands of lines of program, should we call them good programmer? Sometimes, the measures to select good programmer are very subjective. It is overall impressions a programmer creates in the minds of colleagues that can lead to him/her being called a good programmer.

Programming is one of the most competitive and sought after professions. Expert programmers are in high demands and their salaries may be very high. Programming is a somewhat new profession altogether, compared to any other professions. It has different requirements and also comes with its own professional hazards.

Since Computer software is vast area by itself, programmers can be classified by the basis of domains they focus on, languages they use, platforms they code on etc. It is very difficult to find generalists. There are more specialists. One can see variety of programmers:
  • System programmers
  • Application developers
  • Web programmers
  • Embedded programmers
  • Database programmers
  • Network Programmers
  • CAD Programmers
  • Language specific: C, Java, C++, Basic etc
  • Platform Specific: Unix, Linux, Windows
  • DSP Programmers
  • System Administrators
  • ERP programmers
Here we list some of the desirable characteristics of Good Programmer:
  • Skills: Good programmers are highly skilled. They can analyze and develop complex code for applications. Compare yourself to a skilled pilot who can land the plane with such high accuracy. Technical skills encompass programming languages such as C, C++, operating systems such as Windows, Linux, Platform IDE such as Eclipse, Hardware, PC, Networking, Word processing, use of computers, printers, spreadsheet, various other tools. They show willingness to learn new skills. Good programmers have steep learning curve to pick up a new skill.

  • Knowledge: They have depth of unmatched breadth and depth of knowledge. From OS, internals, Processors, Languages, features, companies, people, etc. They need not go to internet/book/documents/help for everything. They should be able to rely on self knowledge.
    They have a balance of Practical Knowledge and Theoretical Knowledge. They are Information Seeking and show insatiable curiosity towards things new in programming.

  • Communication: They are good in speaking and listening. They are easy to get along with. They have good speaking skills, body language, gestures, postures, grammar, usage of words, punctuation, etc. Written, oral, email, phone, face-to face, group discussion. They are armed with vocabulary of foreign languages apart English for Communication with occasional foreign customers.

  • Enjoyment: They enjoy programming and would be happy to spend their vacation too on coding. Those who enjoy their work can work with their hearts. Good programmers keep smiling while taking assignments, working, communicating. They use Humour in communication, fun to work with, get thrill from coding, achieve job satisfaction in completing a programming project.

  • Quality Conscious: They are conscious about the quality of the code they develop and don't seem to compromise. They give attention to details. They Test the code thoroughly, providing good comments, documentation, bug free code, review reports. They are aware of quality processes, practices, and Certification such as CMM, ISO etc.

  • Calm and cool: They are cool and calm even under pressure. Being cool and calm in most circumstances, even stressful ones. Being in control and able to control anger. Speaking with controlled emotion. Being objective and less emotional.

  • Speed of work and productivity: They can work faster and code more lines of program. Everyone respects hardworking people. Hard work and good work always gets recognized and appreciated. They work long hours and deliver more lines of error free code and documentation. (KLOC/hours).

  • Open minded and Updated: They keep themselves updated and continuously learn new tricks and techniques of coding. They are open for new ideas and concepts. They acquire latest knowledge through discussion, reading, web etc. Lot of computer technology is getting obsolete and new technology is coming out everyday.

  • Allrounders: They are not just geeks but are good allrounders too. They can even smile and fix a minor hardware problem or just ready to discuss latest cricket scores. They are well groomed and dressed. Excelling in all aspects of computer software development. Able to deal with diverse work environment and project demands. Able to deliver even in high pressure.

  • Cheerful and full of energy: They are cheerful and show high energy levels. Smiling and cheerful. Ability to co-ordinate in any difficult situation and stresses with full confidence. Full of energy and able to appear fresh all through the day.

  • Attention and concentration: They are all ears and pay good attention to the job at hand. They have good concentration levels and don't easily get distracted or diverted from their task. Long hours of concentration and capability to work in front of the computer and code.

  • Stamina: They can work long hours and still feel fresh with bubbling energy. This requires regular practice. Compare a computer programmer to a marathon runner. Can you run suddenly 10KM? This is similar to developing a large program. They have Mental energy, concentration, refreshed through Good food, sleep, regular exercising.

  • Helpfulness and willingness to share: They are helpful to their colleagues at work. They don't compete by hiding good tips or make them more confusing. They are friendly with colleagues and being helpful and caring. They avoid over competition.

  • Sportive: Taking ups and downs in a sportive spirit and ready to learn from mistakes and failures. To Err is to human.

  • Self Motivated and Enthusiastic: They show lots of interest and enthusiasm to do the company work. Nobody repeatedly tells them like in school or college. People get lot more freedom in work. Offcourse, Self motivation is expected from grown up.

  • Team players and Leaders: Capability to work in teams. Understanding others. Being sympathetic in communication. Able to deal with people of diverse backgrounds. Able to resolve conflicts peacefully. Avoiding conflicts, rough behavior. Taking leadership role in solving critical problems. They are willing to take responsibility.

  • The list goes on.
A good programmer is a good human being. Nerds, geeks, eccentrics, even they may be genius, but cannot be termed as good programmers. A good programmer is a well groomed social being. Good programmers have pleasant personality, positive attitude, caring in nature. They are noticed in their work and in their life. Their behaviour exhibits professional ethics.

How programmers can rise to become good:
  • Hard work: there is no shortcut to success. Plenty of hard work and sleepless nights. Constant practice, application of knowledge.

  • Continuous learning and training: Those who are aspiring for good programmer title, should keep learning from books, reports, journals etc. They should also spend extra time by attending advanced training programmes, courses, etc.

  • Seminars and Discussion: One should participate in seminars and conferences, discussions related to programming topics. Whenever a person meets a colleague or a friend, it will help a lot to focus discussion on topics related programming.

  • Persistence: One should keep trying. The quote "Quitters don't win and winners don't quit" applies.

  • Planning: One should plan the time judiciously. With so many distractions and diversions, it is very easy to waste time. But good systematic planning will help achieve the goal.

  • Exposure: One need to work with good experienced programmers to learn the trade.

  • Discipline: Even though programming profession is somewhat informal, and doesn't require the military discipline, one should observe nominal discipline to be successful. Refer to the article on "A Disciplined Approach to Computer Programming" by the author.

  • SWOT: Strength, Weakness, Opportunities and Trends Analysis will systematically help oneself upgrade and achieve improvement to near the goal of good programmer.
Computer programming is considered as an intellectual activity. Not much of an physical activity can be observed when a programmer is working. The programmer seems to be busy looking at the computer screen and typing something. But should we assume that programmer is productive? Is he/she writing some quality code? What if the programmer is playing computer game or watching a video?

Computer programmers do get distracted a lot given the current day internet, computer games, various multimedia entertainment programs etc available. Also the cell phone revolution creates a speed of connectivity to friends and relatives. With this kind of distractions and diversions, it is hardly possible for anyone to concentrate at work. Added are the addictive nature of internet and computer games.

As the programmer sits down to his/her routine task of programming, a phone call, an unattended email, latest score from a sports game, a song from a hit music album, a trailer of the hottest new release, etc bombard them. The programmer can hardly write few lines of code, with so many other activities to attend to. The productivity and quality of work goes down. The programmer also starts feeling stress at work as he/she starts lagging in the project. The programmer may sometimes over work in order to get in line, hence developing job related hazards such as back pain, RSI, neck pain, dry eyes, high BP etc. How can the programmer cope up with this modern day work pressure and still contribute quality code with high productivity levels? Only answer to this is discipline in work and life.

It is easy to observe discipline in physical activities such as eating, walking, sitting, travel etc. But programming involves lot of mental work. The discipline to be observed in programming is somewhat different from other professions such as army, policemen etc. Programmers' dress code is informal unlike in armed forces where military uniform is a must.

The discipline involves:
  • Use of internet and email: regular timing and only for most important work rather than leisurely use of them. One should be aware that internet and emails are addictive and one can get carried away while using them. This may contribute to wasting precious time.

  • Avoiding Computer games and entertainment at work. Its also known fact that computer games are addictive. The computer games contribute to bit of enjoyment on the part of the programmer. It may even help him/her in relaxing after a good amount of work. But long hours of gaming can contribute to fatigue, stress, back pain etc.

  • Attending only most important phone calls and restricting family, relatives and friends calls to outside work time. Usually phone calls from family members can interfere in the programming task and lead to loss of precious work time. It is important to inform the caller to give a call at another free time.

  • Following good work practices such as notes, diary, planner etc. Taking down important points while working, drawing flow charts and block diagrams before getting ahead in coding, will go a long way in making a person more productive and innovative. Diary helps in keeping track of the various tasks being performed.

  • Observing good postures, eating nutritious food, regular exercises, good sleeping habit. Fitness is the most important criterion if one were to look for success in programming. Programming job tends to be sedentary and programmers are more prone to health hazards. Programmers tend to eat junk food such as chips and may tend to gain weight quickly. So, one needs to be careful in eating or drinking while working.

  • Addictions to alcohol and other forms of mind altering substances may be detrimental to careers of programmers. Alcohol should be taken in moderations. The effects of alcohol may last longer and the programmer may carry some of the ill effects to workplace. This may result in lots of errors in coding, misunderstanding the client requirements, miscommunication, rough behaviour with the colleagues etc.

  • Handling irritations and irrational behaviour of colleagues. In an ideal workplace, everyone works in harmony. But ideal workplaces are rare. In a real work place, various members may have many non-linearities which need to be dealt with effectively. Some members' behaviour may be irritating and provocative which needs to be tackled properly.

  • Gambling and betting sports are detrimental to the career of the programmer.

  • Temperament, Emotions, Self-Sympathy and detachment: The programmers are very sensitive people. They should exhibit good temperament. The temper may be attitude, character, disposition, frame of mind, humour, personality, state of mind. One should avoid or fully control anger, churlishness, fury, hot headedness, ill humour, irascibility, irritability, peevishness, passion, petulance, rage, surliness, tantrum, unpredictability, volatility, wrath etc. They need to be detached from their emotional state of mind and work objectively. Otherwise, emotions tend to influence their work and they may not contribute with high quality. Self-sympathy is dangerous in any profession.

  • Avoiding over-attachment: In several circumstances, we tend to get attached too much to either computers we work on, or the programming language or OS or company or project etc. This will cause a comfort zone. When things change such as place of work or OS or programming tool etc, we feel hurt. This may cause difficulty in adjusting to new work environment. It is very important to be aware of things which may be changing in short and long span of time and be prepared for it.

  • Comfortable clothing and footwear: The programmer needs to be dressed in comfortable clothing and footwear. Flashy clothes, tight fitting clothes may better be avoided. Working long hours infront of the computers can be taxing and one needs to be ready for the task. Comfortable cotton clothes ensure proper blood flow and sweat absorption.
After reading this list, it may look like the disciplined programmer is like a saint or a sage. However, one need not be saint or a sage to be disciplined at work. I think constant practice and careful observation will go a long way in programming profession. Being disciplined physically is easy. Such as wearing fresh ironed clothes, shining shoes, neatly combed hair etc. But mentally disciplined is tough and requires proper attention and practice. Habits are formed and we cannot easily undo them. One should be careful in choosing good habits over bad ones.

We have only been discussing how a programmer can become good programmer. However, a good programmer can experience downfall due to several reasons. Once a programmer is recognized as a good programmer, the programmer may develop characteristics such as arrogance and hubris. The programmer also may not carefully observe the market trends and may miss learning technologies that may dominate in the near future. Factors such as aging, diseases, lack of fitness, slide in market demand etc may signal the fall of the good programmer.

To summarize, it is not only important to put lot of efforts in becoming good programmers, but it is necessary to be consistent and persistent in this endeavour.

Source: Ubiquity Volume 9, Issue 14 (April 8, 2008 - April 14, 2008)


Leave this field empty