Debugging is twice as hard as writing the code in the first place. If you automate a mess you get an automated mess. Measuring programming progress by lines of code is like measuring aircraft building progress by weight. There are only two hard things in computer science: cache invalidation and naming things. Walking on water and developing software from a specification are easy if both are frozen. Software is a gas it expands to fill its container. Any fool can write code that a computer can understand. Good programmers write code that humans can understand. First learn computer science and all the theory. Next learn a programming style. Then forget all that and just hack. The best programs are written so that computing agents can perform them efficiently and people can read them easily. Premature optimization is the root of all evil. The most dangerous phrase in the language is we have always done it this way. Computers are incredibly fast accurate and stupid. Human beings are incredibly slow inaccurate and brilliant. Together they are powerful beyond imagination. If debugging is the process of removing software bugs then programming must be the process of putting them in. The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time. It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. In software development it has always been more like dwarves standing on the toes of other dwarves.