Home > development > Some lesser-known truths about programming

Some lesser-known truths about programming

My experience as a programmer  has taught me a few things about writing software. Here are some things that people might find surprising about writing code:

  • Averaging over the lifetime of the project, a programmer spends about 10-20% of his time writing code, and most programmers write about 10-12 lines of code per day that goes into the final product, regardless of their skill level. Good programmers spend much of the other 90% thinking, researching, and experimenting to find the best design. Bad programmers spend much of that 90% debugging code by randomly making changes and seeing if they work.
  • A good programmer is ten times more productive than an average programmer. A great programmer is 20-100 times more productive than the average. This is not an exaggeration – studies since the 1960′s have consistently shown this. A bad programmer is not just unproductive – he will not only not get any work done, but create a lot of work and headaches for others to fix.

    “A great lathe operator commands several times the wage of an average lathe operator, but a great writer of software code is worth 10,000 times the price of an average software writer.” –Bill Gates

  • Great programmers spend little of their time writing code – at least code that ends up in the final product. Programmers who spend much of their time writing code are too lazy, too ignorant, or too arrogant to find existing solutions to old problems. Great programmers are masters at recognizing and reusing common patterns. Good programmers are not afraid to refactor (rewrite) their code  to reach the ideal design. Bad programmers write code which lacks conceptual integrity, non-redundancy, hierarchy, and patterns, and so is very difficult to refactor. It’s easier to throw away bad code and start over than to change it.
  • Software development obeys the laws of entropy, like any other process. Continuous change leads to software rot, which erodes the conceptual integrity of the original design. Software rot is unavoidable, but programmers who fail to take conceptual integrity into consideration create software that rots so so fast that it becomes worthless before it is even completed. Entropic failure of conceptual integrity is probably the most common reason for software project failure. (The second most common reason is delivering something other than what the customer wanted.) Software rot slows down progress exponentially, so many projects face exploding timelines and budgets before they are mercifully killed.
  • A 2004 study found that most software projects (51%) will fail in a critical aspect, and 15% will fail totally. This is an improvement since 1994, when 31% failed.
  • Although most software is made by teams, it is not a democratic activity. Usually, just one person is responsible for the design, and the rest of the team fills in the details.
  • Programming is hard work. It’s an intense mental activity. Good programmers think about their work 24/7. They write their most important code in the shower and in their dreams. Because the most important work is done away from a keyboard, software projects cannot be accelerated by spending more time in the office or adding more people to a project.

    Comment pages
    1 3 4 291
    1. August 20th, 2010 at 10:06 | #1
    2. August 20th, 2010 at 17:15 | #2
    3. August 21st, 2010 at 08:05 | #3
    4. August 21st, 2010 at 22:43 | #4
    5. August 23rd, 2010 at 11:15 | #5
    6. August 23rd, 2010 at 14:01 | #6
    7. August 24th, 2010 at 05:26 | #7
    8. August 24th, 2010 at 15:11 | #8
    9. August 24th, 2010 at 19:38 | #9
    10. August 25th, 2010 at 08:10 | #10
    11. August 25th, 2010 at 10:19 | #11
    12. August 25th, 2010 at 14:55 | #12
    13. August 26th, 2010 at 00:31 | #13
    14. August 26th, 2010 at 08:17 | #14
    15. August 26th, 2010 at 22:13 | #15
    16. August 28th, 2010 at 10:41 | #16
    17. August 29th, 2010 at 23:32 | #17
    18. August 30th, 2010 at 08:31 | #18
    19. August 30th, 2010 at 12:31 | #19
    20. September 2nd, 2010 at 23:36 | #20
    21. September 4th, 2010 at 04:13 | #21
    22. September 5th, 2010 at 05:04 | #22
    23. September 5th, 2010 at 07:41 | #23
    24. September 5th, 2010 at 08:00 | #24
    25. September 6th, 2010 at 04:39 | #25
    26. September 8th, 2010 at 00:26 | #26
    27. September 13th, 2010 at 05:19 | #27
    28. September 16th, 2010 at 07:45 | #28
    29. September 20th, 2010 at 00:00 | #29
    30. September 27th, 2010 at 17:19 | #30
    31. October 20th, 2010 at 09:27 | #31
    32. November 5th, 2010 at 10:46 | #32
    33. November 8th, 2010 at 19:04 | #33
    34. November 19th, 2010 at 02:42 | #34
    35. November 20th, 2010 at 21:51 | #35
    36. November 21st, 2010 at 04:04 | #36
    37. January 24th, 2011 at 12:20 | #37
    38. March 27th, 2011 at 22:09 | #38
    39. April 3rd, 2011 at 08:08 | #39
    40. April 4th, 2011 at 11:09 | #40
    41. April 4th, 2011 at 17:45 | #41
    42. April 7th, 2011 at 09:43 | #42
    43. April 7th, 2011 at 19:41 | #43
    44. April 22nd, 2011 at 08:13 | #44
    45. April 30th, 2011 at 06:16 | #45
    46. May 2nd, 2011 at 20:06 | #46
    47. May 3rd, 2011 at 20:33 | #47
    48. May 5th, 2011 at 01:32 | #48
    49. May 7th, 2011 at 13:24 | #49
    50. May 9th, 2011 at 09:30 | #50
    51. June 24th, 2011 at 21:01 | #51
    52. June 25th, 2011 at 10:57 | #52
    53. July 10th, 2011 at 21:08 | #53
    54. August 2nd, 2011 at 20:37 | #54
    55. August 18th, 2011 at 05:16 | #55
    56. October 3rd, 2011 at 22:24 | #56
    57. October 20th, 2011 at 11:10 | #57
    58. October 20th, 2011 at 11:17 | #58
    59. October 20th, 2011 at 11:19 | #59
    60. October 20th, 2011 at 11:19 | #60
    61. October 20th, 2011 at 11:27 | #61
    62. October 20th, 2011 at 11:29 | #62
    63. October 20th, 2011 at 11:42 | #63
    64. November 18th, 2011 at 10:57 | #64
    65. April 16th, 2012 at 08:18 | #65
    66. May 2nd, 2012 at 00:55 | #66