
Dynamic Programming: The Name (1984) - akanet
http://learning.cis.upenn.edu/cis520_fall2009/index.php?n=Notes.DP
======
zik
Another example of bureaucratically named concepts is one used heavily in
FPGAs - what programmers would call a library or a package in FPGA-land is
called an "IP core". I don't know where the naming comes from but it really
smacks of some bureaucrat telling his bosses "We create IP! We create IP
cores!". I guess to bosses it sounds more valuable and marketable than a
library.

[https://en.wikipedia.org/wiki/Semiconductor_intellectual_pro...](https://en.wikipedia.org/wiki/Semiconductor_intellectual_property_core)

~~~
Cyph0n
It's "IP" (intellectual property) because it's something the company designed,
and it's a "core" because it's a circuit that performs a computation.

I don't really see how it's comparable to the linked example.

~~~
amelius
> It's "IP" (intellectual property) because it's something the company
> designed, and it's a "core" because it's a circuit that performs a
> computation.

The same can be said for software.

~~~
Cyph0n
And your point is?

~~~
amelius
That the term "IP core" is not sufficiently narrow.

~~~
Cyph0n
Probably not, but this whole discussion is about a technical term whose origin
does not reflect its usage or nature. To me, "IP core" reflects the nature of
HDL libraries quite well, and is not at all similar to how the term "dynamic
programming" was coined.

~~~
amelius
Ok, fair enough, but the term is still bad :)

------
QuercusMax
In a similar category is Shellsort[1]. When I learned about it, they helpfully
neglected to mention it was created by some guy named Shell; unlike bubble
sort, insertion sort, mergesort, etc., the name has nothing to do with the
technique. I spent way too long trying to figure out what it had to do with
shells.

1\.
[https://en.wikipedia.org/wiki/Shellsort](https://en.wikipedia.org/wiki/Shellsort)

------
Strilanc
I try to call it inductive programming whenever possible. Because that's what
it is: a programmatic form of proof by induction.

The analogy isn't exact (e.g. it could also refer to just recursion), but it's
a lot more apt than "dynamic".

~~~
jordigh
But the "programming" part of "dynamic programming" is the older synonym for
"optimisation" like in linear or quadratic programming, not for writing
general computer programs. It's not the same kind of "programming" as in OOP
or FP.

~~~
AstralStorm
In fact, many linear and quadratic programming problems are solved using
dynamic programming. Go figure.

------
praptak
I remember an interview with Alan Kay where he described what are the
conditions to enable the kind of innovations he is known for. Quote:

 _" The shortest lived group at Xerox PARC was `Office of the Future,` because
Xerox executives would not leave them alone. I chose the most innocuous name
for my own group, the Learning Research Group. Nobody knew what it meant, so
they left us alone to invent-object oriented programming and the GUI."_

------
userbinator
I wonder how many, who never heard of the original concept, would think it
simply means using languages like JavaScript, Python, PHP, etc.

 _It also has a very interesting property as an adjective, and that is its
impossible to use the word, dynamic, in a pejorative sense. Try thinking of
some combination that will possibly give it a pejorative meaning. Its
impossible._

Dynamic memory allocation, in the context of realtime/embedded systems. :-)

~~~
TeMPOraL
Dynamic constant? ;).

~~~
DonHopkins
I just hate it when variables won't, and constants aren't.

------
threepipeproblm
That is hilarious.. I vaguely remember thinking, when I encountered this class
of algorithms in college, that it was not particularly well named.

~~~
chamakits
Oh my me too. Every time I come across the concept, I get bothered and feel
like I must have missed a core concept of it, as the naming never made any
amount of sense for me.

For some reason, this truly brings me some amount of peace. Both that the name
was applied for non-obvious reasons, and that I'm not the only one to find the
name misfitting.

~~~
akanet
I am genuinely happy to bring you thus tiny closure, friend

~~~
chamakits
You really did! I never would have thought to check out the history behind it.
Would have remained confused if not for you. Thanks!

------
santaclaus
Don't even get me started on memoization...

~~~
Cyph0n
\- "You mean caching?"

\- "Nope, memoization."

\- "Uh ok."

~~~
tdb7893
I like that it's not called caching because caching for me makes me think that
there is some sort of eviction policy. I generally talk about "storing" data
in "lookup tables" if I'm talking to someone not familiar with the jargon

~~~
Cyph0n
Good point. Caching does usually refer to a temporary memory store.

------
DonHopkins
The story I heard was that Adobe's Type 1 font encoding [1] used obscure names
like BlueValues, OtherBlues, FamilyBlues, FamilyOtherBlues, BlueScale,
BlueShift, and BlueFuzz, so that Adobe employees could discuss their
proprietary font hinting algorithms in public while they were in line for
burritos at La Costeña [2]. That way nobody from Apple or Sun or SGI who was
standing in line next to them could understand what they were talking about.

Yes THAT World Famous La Costeña: Guiness Record Holder for the World's
Largest Burrito! [3] On May 3rd, 1997 La Costeña of Mountain View, California
created the world's largest burrito. The burrito weighed in at 4,456.3 pounds
and was measured at 3,578 feet long. It was created at Rengstorff Park in
Mountain View.

[1]
[https://partners.adobe.com/public/developer/en/font/T1_SPEC....](https://partners.adobe.com/public/developer/en/font/T1_SPEC.PDF)

[2] [http://www.costena.com](http://www.costena.com)

[3] [http://www.costena.com/famous.html](http://www.costena.com/famous.html)

~~~
wiredfool
There was a large blob in the installers for System 7 (mac) that was named
Cerulean Data. I wonder if that was truetype related data.

------
evincarofautumn
> Try thinking of some combination that will possibly give it a pejorative
> meaning. Its impossible.

“Dynamic typing”, to some! But it was definitely a clever move to use
terminology with positive and concrete connotations.

------
DonHopkins
James Gosling published a 1981 SIGPLAN paper titled "A Redisplay Algorithm"
[1], that used dynamic programming to solve the string to string correction
problem [2], which he implemented in Gosling Emacs [3].

>Wikipedia: "Gosling Emacs was especially noteworthy because of the effective
redisplay code, which used a dynamic programming technique to solve the
classical string-to-string correction problem. The algorithm was quite
sophisticated; that section of the source was headed by a skull-and-crossbones
in ASCII art [4], warning would-be improver that even if they thought they
understood how the display code worked, they probably did not."

>Abstract: "This paper presents an algorithm for updating the image displayed
on a conventional video terminal. It assumes that the terminal is capable of
doing the usual insert/delete line and insert/delete character operations. It
takes as input a description of the image currently on the screen and a
description of the new image desired and produces a series of operations to do
the desired transformation in a near-optimal manner. The algorithm is
interesting because it applies results from the theoretical string-to-string
correction problem (a generalization of the problem of finding a longest
common subsequence), to a problem that is usually approached with crude ad-hoc
techniques."

In essence, it finds the shortest path through a twisty little maze of text
and terminal escape code sequences (so different terminals would have
different optimal routes to updating the display, depending on what was
already on the screen, the length of their escape sequences, if they supported
features like character/line insert/delete, cleol, extra padding for slow
terminals and commands, etc).

[1]
[http://dl.acm.org/citation.cfm?id=806463](http://dl.acm.org/citation.cfm?id=806463)

[2] [https://en.wikipedia.org/wiki/String-to-
string_correction_pr...](https://en.wikipedia.org/wiki/String-to-
string_correction_problem)

[3]
[https://en.wikipedia.org/wiki/Gosling_Emacs](https://en.wikipedia.org/wiki/Gosling_Emacs)

[4] [http://donhopkins.com/home/archive/emacs/skull-and-
crossbone...](http://donhopkins.com/home/archive/emacs/skull-and-
crossbones.txt)

------
gbog
"dynamic" cannot be used in a pejorative way? That's a nice challenge. What
about "dynamic" accounting (similar to "creative" accounting)? or "dynamic"
application of the Law? Some things (not a lot) should really be static. Not
talking about typing...

~~~
Retra
Anything put in scare quotes can be used pejoratively.

>dynamic" application of the Law? Some things (not a lot) should really be
static.

We have human judges precisely because a statically enforced law would be
unfair and inappropriate to handling the complexity of human lives.

------
richard_todd
The part about it being impossible to deride anything labelled 'dynamic'
reminded me of the story about naming WordPerfect in the "Almost Perfect"
book[1]:

> Despite its initial unpopularity, the name proved to be a good one. It was
> so positive sounding that it made any criticism sound untrue. It was like
> naming a soap, "Makes You Look Younger," so the competition would have to
> say something like "Use our soap instead of the Makes You Look Younger
> soap." "WordPerfect" also sounded like a very good product.

[1]:
[http://www.wordplace.com/ap/ap_chap03.shtml](http://www.wordplace.com/ap/ap_chap03.shtml)

------
zde
> its impossible to use the word, dynamic, in a pejorative sense

The Times They Are A-Changin'.. No bullshit bingo is complete without
mentioning "dynamic" few times.

------
rfrey
Dynamic programming is, embarrassingly, one of those topics I've never quite
grokked. Any recommendations for a "OH... I get it now" explanation?

~~~
friendlygrammar
Dynamic programming is when you break a problem into sub problems and then
cache the solutions of the sub problems so the work is only done once.

Some common situations where dynamic programming is useful are when you need
to do anything involving finding combinations or permutations of a series of
possible actions.

My recommendation for you if you really want to _get_ it is to read and
program for yourself the problems on this website

[http://www.geeksforgeeks.org/fundamentals-of-
algorithms/#Dyn...](http://www.geeksforgeeks.org/fundamentals-of-
algorithms/#DynamicProgramming)

Try solving them both recursively and iteratively and by the time you reach
the 5th or 6th problem you should have built something of an intuition for
when to use dynamic programming.

------
taeric
I was beginning to think it meant that the decision lookups of the algorithm
were dynamically generated.

------
ttflee
> It also has a very interesting property as an adjective, and that is its
> impossible to use the word, dynamic, in a pejorative sense.

Such a wise consideration!

~~~
copperx
I would have liked examples of pejorative uses of "dynamic" that don't work.

------
murbard2
To add to the confusion, a good way to implement dynamic programming is lazy
evaluation.

------
pif
OT:

> Its impossible.

Please, please, please: correct that "it's", please!

------
sctb
We updated the link from
[https://en.wikipedia.org/wiki/Dynamic_programming#History](https://en.wikipedia.org/wiki/Dynamic_programming#History),
and the title from ‘The term “Dynamic Programming” was chosen as a
bureaucratic hack’.

~~~
akanet
How DARE you tone down my click bait headline. This would have never flown
when pg was in charge. He would have just banned me immediately, like God
intended.

