Martin Fowler writes about “Software Development Attitudes”:http://www.martinfowler.com/bliki/SoftwareDevelopmentAttitude.html, distinguishing between Directers and Enablers. That links nicely with something Ward Cunningham said about “problems vs. difficulties”:http://www.artima.com/intv/simplest.html.
As Martin says, some people like tools that force the issue, so you can’t do Bad Things or ignore failures, and some people like tools that make new concepts possible. Then he says,
bq. You might think that all restrictions on what a developer does imply a directing attitude, but it’s not that simple. As an example, consider memory management. You can think of this as a directing feature: programmers can’t be trusted to manage memory correctly so take away their ability to allocate memory. But I look at memory management as an enabling technology – it takes away something I don’t want to worry about, so I can concentrate better on those things I do care about.
Which, to me, maps nicely to Ward’s view on problems.
bq. A friend of mine once said that there are problems and there are difficulties. A problem is something you savor. You say, “Well that’s an interesting problem. Let me think about that problem a while.” You enjoy thinking about it, because when you find the solution to the problem, it’s enlightening.
bq. And then there are difficulties. Computers are famous for difficulties. A difficulty is just a blockage from progress. You have to try a lot of things. When you finally find what works, it doesn’t tell you a thing. It won’t be the same tomorrow. Getting the computer to work is so often dealing with difficulties.
To me, memory management is a difficulty. A fiddly task to perform because we don’t after all have infinite RAM. It once took me three weeks to chase a memory smash in a (very well written) runtime library I was working with. Do I miss it? Hell, no. I think the same case could even be made for static typing. A good type system, such as “the one I trained on”:http://research.compaq.com/SRC/modula-3/html/home.html, should help to focus your code and make it more expressive.