The 2008 NIST results [1] show that Google's translator swept every category with unconstrained training sets. That is, when Google was allowed to use all of the data that they collected, they smoked the competition. When the training sets were constraint to a common set for all competitors, better algorithms prevaled. You can be sure that the very talented team at Google will be improving their algorithms to ensure that never happens again. But you can also be sure that competitors will be collecting even more data to counter Google's victories.
[1] http://www.nist.gov/speech/tests/mt/2008/doc/mt08_official_r...
There are also interesting parallels with REST vs RPC as well. You can create a rich API of function calls for accessing and manipulating data, but it's nearly always less flexible than just exposing the data and letting people manipulate it directly.
I think the tendency to favor algorithms when it might otherwise not be wise to do so comes from how our minds work: we remember things primarily in terms of stories, scenarios, sequences of events. This causes us to interpret the world in terms of behavior as if behavior is the primary construct on which the universe is modeled. But of course behavior is not primary, data is primary, things are primary - behavior is just a fiction we impose on them. This often leads our instincts in the wrong direction.
# Algorithms
def double(x): return x*2
def square(x): return x*x
def fact(x): return (x*fact(x-1) if x > 1 else 1)
# Data
choices = { 'A': double, 'B': square, 'C': fact }
# I/O
choice = raw_input('Choose A, B or C: ')
x = input('Enter a number: ')
if choice in choices:
print choices[choice](x)
else:
print 'Initiating self-destruct sequence.'
It's actually similar to how a switch block works, if each case in the switch statement just calls a function or evaluates one expression.Also worthwhile: Instead of functions, let the dictionary values be lists of arguments for another (multi-argument) function. Then the lookup is like choosing from a set of possible configurations for that function. A little redundancy is OK, since the table is so easy to read and edit.
Humans work neither on simple deterministic rules nor on huge amounts of data. It's something else. Some very smart "algorithm" that we haven't found yet (Bayes nets don't get there either but they look promising).
If there's a way for humans to be smart without much data there must be a way for machines to do the same. That is unless you believe in some kind of spirit/soul/god cult and I don't.
- we get tons of data, just not all textual. We have visual (~30fps in much bigger than HD resolution all day long), audio (again, better than CD quality all day long), smell, taste, and touch, not to mention internal senses (balance, pain, muscular feedback, etc). By the time a baby is 6 months old, she's seen and processed a lot of data. Don't know if it's more than Google's 18B pages, but it's a lot.
-we get correlated data. Google has to use a ton of pages for language because it only gets usage, not context. Much (most?) of the meaning in language comes from context, but using text you only get the context that's explicitly stated. Speech is so economical because humans get to factor in the speaker, the relationship with the speaker, body language, tone of voice, location, recent events, historical events, shared experiences, etc, etc, etc. Humans have a million ways to evaluate everything they read or hear, and without that, you need a ton of text to make sure you cover those situations.
-we have a mental model. Everything we do or learn adds to the model we have of the world, either by explicit facts (A can of Coke has 160 calories) or by relative frequencies (there are no purple cows but a lot of brown ones). My model of automobile engines is very crude and inaccurate while my model of programming is very good. Also, because I have (or can build) a model, I have a way to evaluate new data. Does this add anything to a part of my model (pg's essays did this for me)? Does it confirm a part of the model that wasn't sure (more experimental data)? Does it contradict a weakly held belief? Does is contradict a strongly held belief? Is it internally consistent? Is the source trustworthy?
This mental model might just be a bunch of statistically relevant correlations, but that sounds like neurons with positive or negative attractions of varying strength. Kind of like a brain. I believe Jeff Hawkins is on to something (see On Intelligence http://www.amazon.com/o/asin/0805078533/pchristensen-20), but there needs to be correlated data (like vision/hearing/touch are correlated) and the ability to evaluate data sources.
I agree that if humans can do it, machines can do it, but I think you're vastly underestimating the amount and quality of data humans get.
So maybe you could say it's about the quality of information not just the amount of data of one particular kind.
In any event, this is a debate that is only at the very beginning. I don't claim to have come to a conclusion. I just think those brute force statistical techniques are not the end of the road but rather a practical workaround for the brittleness and the complexity of traditional rule based systems.
Millions of years worth of data has been reified into hard-coded algorithms by a process, evolution, that is perfectly happy working with the most horrendous spaghetti code in existence.
Humans use this, but computers ought not to.
http://www2.computer.org/portal/web/csdl/doi/10.1109/TPAMI.2...
In restricted environment, human don't outperform the machines.
Does this mean all Lisp code is good? :)
Note that Codd's model is not Turing-complete, while all but the most trivial definitions of code lead to Turing-complete systems, hence the parenthetical most in my "data replaces (most) code". Data is easy, code is hard could be another way to state that.
We have experimented with such ideas, and we can report that they do significantly improve clarity and therefore productivity.
As an aside to a pg essay, I believe clarity is not the same as succinctness and as a corollary, succinctness does not imply productivity except in the somewhat trivial sense of ease of typing.
But when writing for others, abstractions kill clarity.
It's true in language too. You use fewer words explaining something to yourself than to others.
For example I can say to myself, "Our election are no different than high school elections (decided on popularity, not issues)."
It would be seen as heretical to most, and wrong to others. But I'd be sure that I'm right.
They can't see that behind that thought is long reflection on high school popularity, evolutionary psychology, and more things than I can recall.
Incidentally, Paul makes this same point in, It's the Charisma, Stupid. And while reading it I thought, "He's just saying that things don't change (after high school). What an elegant theory; Occam's razor at it's best."
The reverse can also be true, though; data "is" code, in that if you design a data structure sufficiently well, for example, the necessary code to work with it should be self-evident. (Interestingly, "data is code" is probably more characteristic of Forth and (in a very different way) the relational paradigm.)