One of my most productive days was throwing away 1,000 lines of code.
There are two methods in software design. One is to make the program so simple, there are obviously no errors. The other is to make it so complicated, there are no obvious errors.
Grant, if we edited Fortran, I assume that you'd put a column thing in there.
Premature optimization is the root of all evil.
In software engineering, we have the term 'technical debt.' When you don't do a job correctly, unaddressed problems become harder and harder to solve.
Don't document bad code - rewrite it.
Writing software is a very intense, very personal thing. You have to have time to work your way through it, to understand it. Then debug it.
My list of basic tools is a partial answer to the question about what has changed: Over the past few years, large numbers of programmers have come to depend on elaborate tools to interface code with systems facilities.
Early in my career, I was involved with engineer-led projects, where designers came in late in the game and were expected to put lipstick on an existing code base. This almost never works.
I used Agitator on some code I had unit-tested, and it made me a better tester. As an Agitar Fellow, I look forward to the leverage of working with an outstanding organization as together we continue to improve the value of developer testing.
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
We have a rule that if you check in code, you have to maintain it. So I mostly code on the side. I don't check in code anymore.
It is easier to tear down a code than to put a new one in its place.
My own perception of that is somewhat colored by where people ask my advice, which is still, of course, about changes to Python internals or at least standard libraries.
Many people think that open source projects are sort of chaotic and and anarchistic. They think that developers randomly throw code at the code base and see what sticks.
Some of these isolated applications that sit on one machine are a million lines of code. How do you deal with that? Most people have no way to wrap their head around it.
All programming is maintenance programming, because you are rarely writing original code.
The problem is, in software design, often the consequences of your decisions don't become apparent for years.
Adding functionality is not just a matter of adding code.
It is easier to change the specification to fit the program than vice versa.
After releasing Mono 1.0, we started work on a new edition of Mono that will be released later in the year.
Personally, I look forward to better tools for analyzing C++ source code.
No matter what, the way to learn to program is to write code and rewrite it and see it used and rewrite again. Reading other people's code is invaluable as well.
The second stream of material that is going to come out of this project is a programming environment and a set of programming tools where we really want to focus again on the needs of the newbie. This environment is going to have to be extremely user-friendly.
In the practical world of computing, it is rather uncommon that a program, once it performs correctly and satisfactorily, remains unchanged forever.