views:

251

answers:

5

As an industry we tend to have a short attention span and be easily distracted by "new" things—which often turn out to be old things, effortfully re-invented.

Tony Hoare said that if we could learn the right lessons from the successes of the past we wouldn't have to learn from the failures.

What were those successes, in terms of techniques and approaches?

What effective (thinking)tools and programming techniques did you learn back in the day that you wish were used more often on the systems of today?

+3  A: 

Loop invariants, loop variants (a non-negative value that's guaranteed to decrease at every leg through the loop thus guaranteeing it will end), weakest preconditions, class invariants, and the like, are what I mostly miss from the old days.

Pre- and post-conditions of functions/methods, thanks maybe to the cool rebranding as "contracts", are still reasonably popular, but I see hardly any reference these days to these kinds of assertions which have more to do with the internal working of one component, than with the interface between components (I'll admit the latter is intrinsically a harder and more pressing issue, but ensuring each component is working soundly is hardly wasted effort;-).

Alex Martelli
"contracts", I don't like rebranding :P
Aiden Bell
+11  A: 

I miss programming languages that compile to machine code.

Everything these days seems to run in virtual machines or be interpreted. I bought a computer to run programs, not to have to load a virtual computer to run programs.

I know the benefits, I am just fed-up and grumpy.

Before anyone (smart arses :P) points out that the CPU microcode can be thought of as a virtual machine ... it doesn't stall for garbage collection or cost me 20% performance :)

Aiden Bell
An interesting opinion, but the prob.........Segmentation fault.
cherouvim
It does cost you a sensible amount of performance. Intel could used transistors that are decoding complex instructions for more useful stuff.
Mehrdad Afshari
Virtual machines and garbage collection are independent. You can have either one without the other.
Nosredna
@Nosredna - I know.
Aiden Bell
@cherouvim - I know
Aiden Bell
@Mehrdad - How about a JVM on-a-chip (ties noose)
Aiden Bell
I'm thinking it's not that the JVM is slow. Java is very fast nowadays. In benchmarks it's often right there with C++. I think the problem is Java programmers. Or rather that Java programmers can just generate so much code so fast, and not worry about the performance. 20% performance loss isn't what you are noticing. What you're noticing is bad code.
Nosredna
@cherouvim: A VM doesn't sol... ... ... NullPointerException.
Roger Pate
@Nosredna - I don't write bad code ;) I have seen meta-object protocols that are massively abstract and beautiful that are comparable to C in speed (with inline caches). I would be interested to see the performance comparisons you refer to on JVM.
Aiden Bell
@R. Pate - Nice ... also I don't mind Java as a lan YouDidntCatchThatException Exception
Aiden Bell
+2  A: 

What about using more basic network technologies, instead of adding piles of protocols embedded in other protocols like SOAP over HTTP on SSL on TCP/IP tunneled on HTTP over SSL ?

wazoox
+1, although protocol stacks do make application development more agnostic (of many things) and aid in the proliferation of web-innovation we see today by programmers who just know Java or PHP.
Aiden Bell
+2  A: 

Stop and plan things out before you write any code.

Slapout
When was that popular?
Nosredna
http://en.wikipedia.org/wiki/Waterfall_model
Roger Pate
Back in the time when you had to wrote your code on paper, punch a card with it, and got the actual results the day after, you had to be extremely careful or you wouldn't have been a coder for long :)
wazoox
That is all good, but when I am planning I am planning for more complex eventualities than FORTRAN_C STOP
Aiden Bell
+1  A: 

Languages that 'compile' to C code so that they're automatically portable but also end up generating efficient machine code.

R..