Tuesday, September 30, 2008

Update And Quotes On Programming

It has been a while since my last posting. We are currently starting a new project and I deeply buried myself into some technology evaluation. So for the meantime, just some random thoughts...

  • How come there is no usable Database-to-HBM/POCO reverse engineering tool for NHibernate out there? I must have tried five or six of them, some didn't work at all (but one Visual Studio Add-In screwed my IDE altogether), some managed do produce some kind of output, but were missing essential parts like relationship definitions, etc. I am really tempted to write one on my own.

  • Entity Framework is nice from an API point of view, but lacks some first-class support for disconnected / n-tier scenarios (yes you can detach entities, but it gets kind of complicated when re-attaching them including change state).

  • Microsoft's new IoC-framework Unity is a big step ahead in comparison to ObjectBuilder. Nice IoC core. Spring.NET is another IoC framework out there, and includes an additional feature stack: support for AOP (e.g. declarative transaction management), NHibernate, Quartz.NET, etc.

I especially like .NET 3.5, Visual Studio 2008 and Team System. Great stuff. WPF is outstanding - what an improvement in productivity!

I am also involved in some old legacy projects. I don't want to go into much detail, but can only reinforce the importance of:

  • Plan for the future, choose wisely which path to take both in a microcosm of software components as in the realm of the whole project.

  • Avoid mistakes at the beginning, or pay for them big time later.

  • People make products. No tools, no process model, no extra hours will counterbalance for poor staffing.

Time and time again I am amazed by the difference in developers' productivity and the variance in code quality. I wonder why our profession is so prone to that dilemma?

These quotes from a stackoverflow.com thread might provide some further insights:

"A computer lets you make more mistakes faster than any other invention in human history, with the possible exceptions of handguns and tequila."

"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult."

"The trouble with programmers is that you can never tell what a programmer is doing until it's too late."

"Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves."

"It is practically impossible to teach good programming style to students that have had prior exposure to BASIC. As potential programmers, they are mentally mutilated beyond hope of regeneration."

"Three virtues of a programmer:

Laziness - The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer. Also hence, this book. See also impatience and hubris.

Impatience - The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer. See also laziness and hubris.

Hubris - Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer. See also laziness and impatience."

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."