Famous eponymous programming techniques [closed]
In some sports certain techniques or elements are named after the athlete who invented or first performed them—for example, Biellmann spin.
Is their widespread use of such names for programming techniques and idioms? What are they? To be clear, I am explicitly not asking about algorithms, which are quite often named after their creators.
For example, one is Schwartzian transform, but I can't recall any more.
- The functional programming technique currying is named after its (re)-inventor, Haskell Curry.
- Boolean logic is named after George Boole
- Duff's device is pretty famous and seems to me to qualify as technique/idiom.
I used to do a "Carmack" which was referring to the "fast inverse square root" but according to the Wikipedia entry the technique was probably found by the smarties at SGI in 1990 or so.
Even if it doesn't fit your description, it's still a pretty amazing read :)
- Kleene closure: it's the
*
operator in regular expressions. It means "0 or more of what precedes it". - At one point in time, the Karnaugh Map could have been considered a technique to facilitate programming (albeit at a low level).
Markov Chains are named after Andrey Markov and used in programming to generate:
- Google PageRank
- Generating Spam-Mail Texts
- Mnemonic Codewords to replace IDs/Hashvalues
The graphics world is full of eponymous techniques:
- Bresenham's line algorithm
- Bézier curve
- Gouraud shading
- Phong shading
- Fisher-Yates shuffle, the standard way to implement an in-place random shuffle on an array.
Please edit to add more if found...
In Standard ML and other functional programming languages which use tuple and record literals, I sometimes see literals written thus:
( first
, second
, third
)
or
{ name = "Atwood"
, age = 37
, position = "founder"
, reports_to = NONE
}
This highly idiomatic layout, as opposed to layout where the commas or semicolons appear at the end of the line, is something that I have always heard referred to as MacQueen style, after Dave MacQueen (formerly of Bell Labs, now at the University of Chicago).
K&R (Kernighan and Ritchie) and Allman indentation styles.
I think timsort would qualify. It's used in python and open jdk 7
How about anything related to Bayes: Bayesian filtering, Bayesian inference, Bayesian classification. While rooted in statistics, these techniques have found their ways into plenty of programming-related applications.
Carmack's Reverse:
Depth fail
Around 2000, several people discovered that Heidmann's method can be made to work for all camera positions by reversing the depth. Instead of counting the shadow surfaces in front of the object's surface, the surfaces behind it can be counted just as easily, with the same end result. This solves the problem of the eye being in shadow, since shadow volumes between the eye and the object are not counted, but introduces the condition that the rear end of the shadow volume must be capped, or shadows will end up missing where the volume points backward to infinity.
- Disable writes to the depth and colour buffers.
- Use front-face culling.
- Set the stencil operation to increment on depth fail (only count shadows behind the object).
- Render the shadow volumes.
- Use back-face culling.
- Set the stencil operation to decrement on depth fail.
- Render the shadow volumes.
The depth fail method has the same considerations regarding the stencil buffer's precision as the depth pass method. Also, similar to depth pass, it is sometimes referred to as the z-fail method.
William Bilodeau and Michael Songy discovered this technique in October 1998, and presented the technique at Creativity, a Creative Labs developer's conference, in 19991. Sim Dietrich presented this technique at a Creative Labs developer's forum in 1999 [2]. A few months later, William Bilodeau and Michael Songy filed a US patent application for the technique the same year, US patent 6384822, entitled "Method for rendering shadows using a shadow volume and a stencil buffer" issued in 2002. John Carmack of id Software independently discovered the algorithm in 2000 during the development of Doom 3 [3]. Since he advertised the technique to the larger public, it is often known as Carmack's Reverse.
ADL - Argument Dependent Lookup is also known as Koenig lookup (after Andrew Koenig although I don't think he appreciates it, as it didn't turn out the way he originally planned it)
Exception guarantees are often called Abrahams guarantees (Dave Abrahams) see (http://en.wikipedia.org/wiki/Abrahams_guarantees)
Liskov substitution principle http://en.wikipedia.org/wiki/Liskov_substitution_principle - Barabara Liskov
I am shocked that no one has mentioned Backus–Naur Form (BNF), named after John Backus and Peter Naur.
The method of constructing programs by computing weakest preconditions, as expounded in Edsger Dijkstra's book A Discipline of Programming, is usually referred to as Dijkstra's Method. It's more of a programming methodology than a technique, but it might qualify.
Several hard to fix or unusual software bugs has been categorized after famous scientists. Heisenbug could be the most known example.
Boyer-Moore string search algorithm: it can find a string inside a string of length N with fewer than N operations.
Seriously shocked to see that no one yet has mentioned Hindley Milner Type Inference.
In C++, the Barton-Nackman trick.
The BWT (Burroughs Wheeler Transform) is pretty important in data compression.
Jensen's Device
How about: Ada named after Ada Lovelace the first computer programmer??
Perhaps Hungarian notation might qualify? It was invented by Charles Simonyi (who was Hungarian).
In C++, the Schwartz counter (aka Nifty Counter) idiom is used to prevent multiple, static initialization of shared resources. It's named after Jerry Schwartz, original creator of the C++ iostreams at AT&T.
精彩评论