Domain: norvig.com
Stories and comments across the archive that link to norvig.com.
Comments · 215
-
Re:java/android sdk/eclipse programming howto
Perhaps your friend could have a read of this: http://norvig.com/21-days.html . It's not what he/she wants, but that's life.
-
How To Teach a 12-Year-Old To Program?
Firstly he has to want to do it, I mean really want to because it is hard. Show him this its pretty inspirational (what ever you think of the author), this got me into programming.
Peter Norvig says Python or Scheme (he's an old lisp guy) but he needs to get to the point of codding his own apps ASAP so a language with lots of examples is good (Python has the oreilly publishers cookbook and numerous applications out there). -
Re:A total farce
The consensus among climatologists is that we'll see warming over the next century. You can see the results of Peter Norvig's experiment to determine if there is a consensus on global warming and a survey which shows that 97% of active climatologists agree humans are causing warming.
-
(Trivia) knowledge?
He's probably into subject since he was 3 or 4, kind of Mozart phenomenon
:).Seriously, I just hink you were blitzed by trivia-type expertise. To become expert in anything, time's required.
-
Re:That Analogy Falls Apart
You're sending them there on a one trip for one reason and one reason only: saving money.
One reason? Consider the expression "opportunity of a lifetime."
Typical NASA Mars mission profiles have astronauts returning after only one year on Mars (yes, "only"). A scientist who needs or even wants to spend a longer period of time there is SOL. With virtually no chance of making a return trip the obvious solution is not to return to earth; retire there.
The astronauts, however, are
... heading to a place of no resources. None for living anyway. ... This isn't little house on the prairie, this is the cold deadness of space.It's not Space, it's Mars. All the necessary elements needed to survive are there. Try reading a book written by Robert Zubrin; he's done the math.
All other things being reasonably equal, given the choice between a one way trip to Florida for retirement versus a one way trip to Mars, I'm going to Mars.
"Faith is no substitute for arithmetic" -- Henry Spencer
-
Gettysburg PowerPoint address ..
Just think what it would have done for Abe Lincoln's presentation at Gettysburg
-
Listen to NorvigRead this:
Teach Yourself Programming in Ten Years
Peter Norvig knows what he's talking about.
-
Re:What about a big ball of fire in the sky?
Yes, solar output has been making the Earth warmer. But it doesn't seem to account for most of the warming over the past fifty years. There is a consensus that there's at least a 90% chance that most of the warming has been due to increased greenhouse gasses in the atmosphere caused by humans burning fossil fuels and forests.
-
reminds me of...
pretty cool, off topic but it made me think of peter norvig's sudoku solver which is about 100 lines of python code and can solve even the hardest puzzles in <.02 seconds. btw, brute force approaches to diabolical sudoku puzzles are not physically possible, follow link to find out why.
python is fantastic for writing concise, functional, and simple solutions to many search problems. -
Re:Try lisp
-
Re:Lisp SyntaxHello? Pot? Yeah, this is kettle. I just called because I wanted to tell you that you are so black.
Ah, but you did replay. Fortunately for me, the complete lack of content in your comtemptuously unresponsive reply means that I can ignore your humble proclamations of The Way Things Are.
Now, I wasn't claiming that all language exploration was, is, or ever will be done exclusively in Lisp. However, the fact that Lisp syntax so throughly supports macros and other forms of syntactic abstraction makes it very good for exploration. Consider, for example, Context-Oriented Programming. Pascal Costanza has been very active in this area of language research, having worked on both ContextJ* and ContextL, the former an implementation of aspect-oriented programming in Java and the later being AOP in Lisp. He had the following to say about AOP and Lisp:
It's no wonder that the Java crowd likes AOP so much. In Java, you neither have macros, nor higher-order functions nor a serious reflective and/or metaobject API. In other words, there are no (convenient) ways to do metaprogramming, except for some mild versions thereof in java.lang.reflect, or the cumbersome ways via inner classes, or if you dare to do this, via hacking around with custom class loaders. (Ah yes, together with annotations, Sun has also introduced some tools to do program transformation...)
Compared to those options, tools like AspectJ, Spring AOP, and so on, are a breeze. (And due to clever marketing, the Java people don't even realize that they are using a (limited) subset of metaprogramming techniques here.)
It's interesting to note that in C#/.NET world, AOP hasn't caught on. I suspect that this is due to the inclusion of first-class methods from the start.
Lispers and Schemers are, in general, not impressed by AOP because macros, higher-order functions and, in CLOS, a full-fledged metaobject protocol make metaprogramming very convenient and, after an admittedly steep learning curve, very straightforward.
And it is exactly Lisp's homoiconic syntax which makes macros so convienent in the language. In my apparently not so humble opinion, Prolog is another one of the few homoiconic languages. One of my favorite examples of the power of Lisp macros comes from Paradigms of Artificial Intelligence Programming , in which Peter Norvig implements a Prolog as Lisp compiler in Lisp which effectively introduces a new dialiect of Lisp with support for unification. Franz weaponized it and now includes it in their Lisp as Allegro Prolog . How many languages allow for one to completely and seamlessly embed another language in it?
Allegro Prolog does not attempt to be ISO compliant or implement the entire language. Many standard Prolog arithmetic, predicate operators, and I/O operators are not implemented, as they are a subset of the standard Common Lisp operators
But they could, if they wanted to bother to write reader macros for ISO Prolog syntax. But what's the point? They don't have the Prolog syntax but they've got all of the Prolog semantics. So, yes, perhaps Lisp will never become a mainstream programming language because it has an atypical syntax that many programmers don't like. However, I think that is being just a little bit full of one's own petty preferences for things like {$@.->*!%?} over () to dismiss all that flexiblity just because of syntax.
-
Re:Candidate Summary
Wow, you must be from such a Pro-America part of the country that you feel the need to 'take it back by force' from people who think differently than you. You have still not done your homework either I see. Here, let me help you: Household income in the United States
Non-Partisan Comparison of the Candidates and Policy
Under Obama, people making less that $250,000/year are going to PAY LESS, no matter what the Republicans tell you. Obama is talking about letting Bush's tax cuts for the richest (Top 1%) expire, not raising the their taxes. So what he is proposing for that top 1% is the same as what we had in the Clinton administration's days. I don't know about you, but the economy seemed pretty good back then (lower unemployment, middle-class earnings up, upper-class earnings way up, and a budget surplus). Was Clinton a Socialist too? -
Re:yes and no
Here it is again: http://norvig.com/oreskes.html
-
Re:yes and no
AGW is a religion in the US (mostly). I prefer science over both politics and religion.
No, it's just denied most vehemently in the US. First, there is a worldwide consensus among climate scientists that AGW is the cause of most of the warming in the past 50 years. Second, there is an American Denial of Global Warming.
-
Well, I wouldn't start here
Personally, I really like Peter Norvig's eassy, "How To Teach Yourself Programming in Ten Years"
-
Teach Yourself Programming in Ten Years
Peter Norvig has a thoughtful list of suggestions.
-
Re:No Bias?
It's not just the IPCC saying that global warming is likely due to human activities. That conclusion is also endorsed by the National Academy of Sciences, The American Meteorological Society, the American Geophysical Union and its parent organization, the American Institute of Physics, the national science academies of the G8 nations, Brazil, China, and India. and the American Association for the Advancement of Science. Very few scientists seem to disagree.
-
Re:Splitting Hairs
The "Propagating Constraints" section of this article is quite a bit less brute force than the "search" section:
-
Re:Let's have some context, please
Looking at this NOAA graph it looks like it's been hotter since the 1990s. 1998 may not have been hot compared to other years in the 1990s, but it was hot compared to 1938. Looking at the graph, I can easily see how 2008 can be colder than every year since 2000, and yet hotter than every year in the 1980s.
Do you have a source for these temperature statistics you keep referring to? From the graphs I've seen, it does look like the Earth's temperature is increasing. Scientists even think it's likely that most of the warming is due to the carbon dioxide we're putting into the atmosphere from burning fossil fuels and forests.
-
Re:Cue the rationalists....
Climate change is a real, recurring, natural phenomenon. Human induced global warming is greatly exaggerated. IPCC still won't explain the fudge factors they had to include to make their models work.
Yes, the climate changes naturally. On the other hand, most climate studies show that humans have been the cause of most of the global warming observed during the past fifty years. I'll point you to an analysis of scientific papers done by Peter Norvig as evidence. It's not just the IPCC that says global warming is occurring. As Peter Norvig says, if you have any doubt, you can do your own research.
-
Re:10,000 hours
That's 5 years of 9-to-5. Seems a bit low, but could be right.
According to Norvig:
"Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology."
-
Re:Off the top of my head?
From what I can tell, the python community is not particularly obsessed with quoting monty python. More than 0, but much less than all the time. So maybe only hold that against the language a little bit.
No doubt these would be faster in C, but I don't think they would be particularly clearer:
http://norvig.com/sudoku.html
http://norvig.com/spell-correct.html -
Re:Off the top of my head?
From what I can tell, the python community is not particularly obsessed with quoting monty python. More than 0, but much less than all the time. So maybe only hold that against the language a little bit.
No doubt these would be faster in C, but I don't think they would be particularly clearer:
http://norvig.com/sudoku.html
http://norvig.com/spell-correct.html -
Re:I don't really get the Java hate around heresee http://norvig.com/python-lisp.html section 10
the author looks like he is inexperienced, and unaware of the function "reduce", ... (along with map ...) Maybe you should send the author a note about map and reduce. As director of Research at Google, he's probably in a position to influence some of their programmers to make use of map and reduce. -
Re:I don't really get the Java hate around heresee http://norvig.com/python-lisp.html section 10
the author looks like he is inexperienced, and unaware of the function "reduce", ... (along with map ...) Maybe you should send the author a note about map and reduce. As director of Research at Google, he's probably in a position to influence some of their programmers to make use of map and reduce. -
Re:I don't really get the Java hate around here
see http://norvig.com/python-lisp.html section 10
the author looks like he is inexperienced, and unaware of the function "reduce", which was added initially as a patch to python 1.5 by an experienced lisp programmer (along with map, lambda and filter) and so his example in section 10 could be replaced with:
from operator import add
reduce(add, [1,2,3])
but the point of mentioning this is that java is extremely verbose - and consequently cumbersome.
there is a class of programming language which python 2.x, lisp, smalltalk and other extreme-OO languages fall in to, which have an incredible elegance of expression and a level of empowerment that is wayyyy beyond anything else.
it is not possible to count python 3000 in amongst those languages with extraordinary power, because the developers - primarily guido - believe that the functional-language-based primitives (map, lambda, reduce, filter) are "unnecessary".
i initially thought that this was a joke - it was announced on april 1st.
unfortunately it turns out to be true. the removal of these key features is profound: the language (python 3000) is dead before it is completed. it's difficult to explain but these functional-language primitives are extraordinarily powerful, providing a kind of "zeroth dimension" of data manipulation.
on a single line, you can do incredible data manipulation. i regularly do things like this:
from string import strip
for l in open("file.csv").readlines():
l = l.strip() # take off newline especially
l = l.split(',') # split by comma
l = map(strip, l) # strip white space
l = map(int, l) # convert everything to ints
of course you could fit that all on one line but i deliberately kept it to 4 lines in order to include the comments. you could also equally do this:
l = l.strip().split(',')
l = map(lambda x: int(x.strip(), l)
the flexibility is just... amazing, in python.
the other thing about python is that it tends to be self-documenting, and also, there appears to be a tendency of coders to actually write _some_ documentation.
that, and the fact that it is possible to walk the source code (or, more usually, the object-code) and 'read' it from inside a program, such that you can access the documentation strings and in fact the entire program...
so things like happydoc can auto-generate you HTML documentation, by walking the code itself and collecting all the module, class and function documentation strings - just .... just... incredible!
i regularly do things like this:
import os
print os.path.__doc__
i don't bother to look up online how the function os.path works, i print its documentation string!
you just don't get these kinds of things with java. -
Re:Whenever anyone says 50%
In probability theory, "p" has a specific meaning which is roughly stated as "the ratio of the total number of positive outcomes to the total number of possible outcomes in a population". So for the number of 50% to be right, it must be known that if this research was repeated a million times, 500,000 times there would be success and 500,000 times there would be failure. But this makes no sense because the thing being measured is not a stochastic property. It is simply an unknown thing.
This is true, if by "probability theory" you mean "Frequentism". Frequentism is nice, for those cases where you are dealing with nice, neat ensembles. For a lot of real world situations which require probabilistic reasoning, there are no ensembles, only unique events which require prediction. For that, we often use Bayesian Probability.
Take the assertion "I'd say there's a 10% chance that there was once life on Mars." Well, from a Frequentist point of view, that's complete bullshit. Either we will find evidence of life, or we won't - either the probability is 100% or 0%. There's only one Mars out there.
In order to deal with this limitation, Bayesian Probability Theory was born. In it probabilities reflect degrees of belief, rather than frequencies of occurance. Despite meaning something quite different, Bayesian probabilities still obey the laws of probability (they sum/integrate to one, etc), thus making them mathematically compatible (and thus leading to confusion by those that don't study probability theory carefully.) Of course there are issues with paradoxes and the fact that prior distributions must be assumed rather than empirically gathered, but that does not prevent it from being very useful for spam filtering, machine vision and adaptive software.
As someone who professionally uses statistics to model the future performance of a very large number of high-budget projects at a major U.S. defense contractor, I can assure you that his statement was much more in line with the Bayesian interpretation of probability than the Frequentist view you implicitly assume.
Sorry for the rant, I just get very annoyed when people assume that Frequentism is all there is to statistics - Frequentism is just the beginning.But it gets even more complicated. One cannot state a probability like this without stating how confident one is in the estimate of the number.
Of course! But where did the confidence interval come from, and how much confidence do we have in it? It's important to provide a meta-confidence score, so that we know how much to trust it! That too, however, should be suspect - indeed even moreso because it is a more complex quantity to measure! So a meta-2 confidence score is in order, for any serious statistician... But why stop there?!With that as background here is what I humbly suggest 50% really means: it means "I have no idea how to quantify the error of this estimate. It doesn't matter what the estimate is because the error band could possibly stretch between 0% and 100%. So I'll split the difference and call it 50%".
So, if someone does not give an error bound on an estimate, we should assume that the error is maximal?So whenever anyone says there is a 50% chance, or a 50/50 probability of something happening, they might as well talk in made-up Klingon words, the information content of their statement will be equivalent.
Or, it's entirely possible that that 50% number is somewhat accurate, because they know something about the subject that you do not. -
Re:Wrong QuestionThe question is flawed. Anyone worth their weight as a programmer doesn't care what language they program in. False, I don't think there's one programmer on earth who sees all languages as the same, without having one predilect language. Knowing how to use tool X in situation Y != don't caring about our tools. That "school" of thinking comes from SE101 courses where they teach you how to draw a lot of diagrams thinking that code and progamming don't matter in the real world, get rid of it. But Programing Methodoligy should they work with. Some of us program using various paradigms at the same time so this is not as important as you think. Btw, it's methodology. Assuming that you use to Object Orianted Languages Oriented. deveation Deviation? Assuming that you use to Object Orianted Languages which are a deveation of Procedural Based Languges. We could have a nice discussion about that. They may have their personal favorates but, can code sucessfully in any language even if they never coded in it before Favorites. And making something "kinda work" in a language is not the same as knowing a language. You can start reading some of Peter Norvig's thoughts on the subject: http://norvig.com/21-days.html Because once you understand the classes the rest is just a google search from finding the right command and syntax of the languge. Yeah...ehh....no, sorry but no. Quoting that article from Norving:
"In 3 days you might be able to learn the syntax of Pascal (if you already knew a similar language), but you couldn't learn much about how to use the syntax. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using Pascal syntax, but you couldn't learn what Pascal is actually good (and bad) for..."
And about your code examples: One thing is writting an "if", something common to every single language, another one's really using a language. A Ruby programmer could give you a block while some Haskell weird dude is throwing crazy ass STM Monads at you, would you be able to write them in another 5 languages as easily as you did with your if's?
Knowing a language's "while", "if" and ";" tokens is not knowing a language. -
Re:Fail
1) Hibernate makes Active Record look like a toy.
A real object database makes any ORM look like a toy. If you're dealing with objects, why are you still dorking around with tables?Those are the modern sensibilities - design patterns that haven't yet caught on in any other language.
"Design patterns" is just a cool-sounding way to say "repetition that my language is too wimpy to be able to represent in source code". You don't hear Lisp programmers talking about The Visitor Pattern, or Smalltalk programmers discussing The Abstract Factory Pattern.More like a rich man's rails - where "rich" means "well educated in design pattern theory."
Too bad it's built on top of Java, which isn't well-educated in language design (thus requiring extensive use of a hack called "design pattern theory").For that matter, Java projects tend to be better funded and less buggy than rails projects, so rich man's rails probably fits in the traditional sense of "rich."
I've worked on both Java and Ruby projects, and I can't say one was generally "less buggy". It is true that you do tend to need to pay people more to work on Java programs, but I wouldn't exactly go around bragging about that!
Disclaimer: I've got no particular love of either Ruby or Java. It simply pains me to hear any argument that is "we got it all right, and you got it all wrong (for these few specific reasons, which are the only things that matter)". -
AI is more alive now than ever
And even more so, AI, which was so promising to so many of us in the 80s turned out to be so hard that it is basically impossible.
You must have been asleep for the past 2 decades. AI is, to every generation, the stuff that we don't know how to do yet. In 1985, a chess computer being world champion seemed like AI. In 1995, a computer answering the telephone when you ask if your flight is on time seemed like AI. There are still things that seem like AI, but I doubt my children will believe it.
You might be thinking of Strong AI, but even that isn't completely lost yet.
basically AI never got going,
No, we just don't tend to call it "AI" much any more because it was hard to get funding for things labeled "AI" after the AI Winter. It's no coincidence that the guy who wrote the book on AI is now Director of Research at one of the top software companies. -
AI is more alive now than ever
And even more so, AI, which was so promising to so many of us in the 80s turned out to be so hard that it is basically impossible.
You must have been asleep for the past 2 decades. AI is, to every generation, the stuff that we don't know how to do yet. In 1985, a chess computer being world champion seemed like AI. In 1995, a computer answering the telephone when you ask if your flight is on time seemed like AI. There are still things that seem like AI, but I doubt my children will believe it.
You might be thinking of Strong AI, but even that isn't completely lost yet.
basically AI never got going,
No, we just don't tend to call it "AI" much any more because it was hard to get funding for things labeled "AI" after the AI Winter. It's no coincidence that the guy who wrote the book on AI is now Director of Research at one of the top software companies. -
Re:will AJAX development finally be easy?
-
Re:powerpoint
Also see this powerpoint presentation by Abe Lincoln in 1863
:). -
Buy a book (Norvig, PAIP)
Peter Norvig, now CTO of Google, agrees with you. Coding, like writing, is best improved by an alternating diet of writing and reading good works. He collected a few of the best he'd found in a book called Paradigms of Artificial Intelligence Programming, available from his web site or from Amazon: http://norvig.com/paip.html
It talks about AI because it was the 80s (92 by the time it hit shelves) and AI was cool---but the applications involved are now just what we call computing. It's not perfect: fifteen years have passed since it was written. In that time, C++'s STL and Boost have caught up with many features of Common Lisp. Java's come along and done well. Other interactive dynamic languages than Lisp exist: Python, for example. So you'll have to do some translating in your head---but for the same reason that Cicero is read by students of English rhetoric, Norvig should be read by C++ and Java programmers seeking mastery. -
Re:Who's at fault though?
While we're slinging links around, no discussion on powerpoint is complete without The Gettysburg Presentation
-
Power corrupts, Powerpoint corrupts absolutely
What are you talking about? PowerPoint is awesome! Lincoln should have used it for the Gettysburg address!
-
The Gettysburg Powerpoint Presentation11/19/1863
And now please welcome President Abraham Lincoln.
Good morning. Just a second while I get this connection to work. Um, my name is Abe Lincoln and I'm your president. While we're waiting, I want to thank Judge David Wills, chairman of the committee supervising the dedication of the Gettysburg cemetery. It's great to be here, Dave, and you and the committee are doing a great job. Gee, sometimes this new technology does have glitches, but we couldn't live without it, could we? Oh - is it ready? OK, here we go:
Click here to start
-
Re:Sudoku Solvers
Or just read the devastation of it:
http://norvig.com/sudoku.html -
Re:Looking forward to it.
will it support animations?
God, I hope not!
On the other hand, most of the animations that are used in Powerpoint don't belong there anyway.
Amen!
On a semi-related note, here's my favorite PowerPoint presentation, which someone posts a link to every time PowerPoint is discussed at work.
-
And now please welcome President Abraham Lincoln
-
Teach Yourself Programming in Ten Years
Teach Yourself Programming in Ten Years
http://norvig.com/21-days.html
Fred
http://all.net/books/IP/evolve.html
GNU Source-highlight 2.5
http://www.gnu.org/software/src-highlite/source-hi ghlight.html -
Re:It may prove useful.
Only if you're allowed to write an interpreter or compiler for the more powerful language in the less powerful one.
This is what has been called the "Turing Tarpit." In a formal logical sense, all turing complete languages are equivalently powerful. But that means that punching holes in a paper tape by hand is technically as powerful as a high level language. We have high level languages so that we don't have to twiddle ones and zeroes.
High level languages themselves differer in expressiveness. They can all accomplish the same tasks, but some languages make certain tasks a whole lot easier. For some language pairs, the only way to easily accomplish certain tasks in the less powerful language is to write what amounts to "an ad-hoc, informally-specified bug-ridden slow implementation of half of " the more powerful language.
As a consequence, there is no "basic" or "generic" list of programming tasks. Tasks that one has become accustomed to do in many languages are a non-issue in some other languages. "Design Patterns" in some languages don't exist in certain others because the language itself makes them unnecessary (see Google's director of search quality, and AI expert Peter Norvig's treatment of the subject especially this slide)
A site like Rosetta Code could only be useful for languages that are so similar that they essentially differ mostly in surface syntax. For languages much different than this their whole paradigms are different, and many of the tasks themselves are no longer the same. -
Re:It may prove useful.
Only if you're allowed to write an interpreter or compiler for the more powerful language in the less powerful one.
This is what has been called the "Turing Tarpit." In a formal logical sense, all turing complete languages are equivalently powerful. But that means that punching holes in a paper tape by hand is technically as powerful as a high level language. We have high level languages so that we don't have to twiddle ones and zeroes.
High level languages themselves differer in expressiveness. They can all accomplish the same tasks, but some languages make certain tasks a whole lot easier. For some language pairs, the only way to easily accomplish certain tasks in the less powerful language is to write what amounts to "an ad-hoc, informally-specified bug-ridden slow implementation of half of " the more powerful language.
As a consequence, there is no "basic" or "generic" list of programming tasks. Tasks that one has become accustomed to do in many languages are a non-issue in some other languages. "Design Patterns" in some languages don't exist in certain others because the language itself makes them unnecessary (see Google's director of search quality, and AI expert Peter Norvig's treatment of the subject especially this slide)
A site like Rosetta Code could only be useful for languages that are so similar that they essentially differ mostly in surface syntax. For languages much different than this their whole paradigms are different, and many of the tasks themselves are no longer the same. -
Re:Slashdot positionPeter Norvig (who I presume most readers are familar with) was interested in just that question: how can you quantify scientific consensus? So he did exactly what anyone should do when faced with such a problem:
When faced with a controversy like this, the great thing is that you can do your own research. If you suspect Oreskes or Peiser (or both) might be biased, you can look at the data yourself.
There is no reason to have partisan hack papers think for you when you can do it yourself. -
Go down a level
I feel that my programming skills haven't really progressed to the next level as I had hoped
One poster suggested facetiously to try going down a level. However, there is merit in this suggestion. Try going back to something more basic than programming. Go deeper into the math, the algorithms, the machine architecture. These are the things that a CS degrees prepares you do and they should give you insights into problem solving that programming cannot.
For most programmers, progress is quantitative. The more they know, the more they can do. They may not be better programmers but they are better employees. Many of us understand that while there is no limit to how much we can learn, there is a limit to how good we can get. You may have simply reached that limit. Now, you have to settle in for a lifetime of typing code (not as bad a fate as you might think), or take a step back and revisit the fundamentals.
If you don't find inspiration there, maybe you should be looking outside the profession altogether.
-
The Powerpoint Version of the Gettysburg Address
http://www.norvig.com/Gettysburg/
OK, so everyone has alreay seen this... -
Re:Paper's for the thoughtless and lazy.
Power Point does NOT by default enhance your presentation
No shit: Gettysburg Address -
Hey, Don't Knock Peter Norvig!
The guy is brilliant. He wrote my 4th year AI text (Russell & Norvig).
Also one of my favorites: Teach Yourself Programming in Ten Years -
Re:Canonical Terms of Academia
For a good overview of this, see http://www.norvig.com/design-patterns/
16 of 23 patterns have a qualitatively simpler implementation in Lisp
-Visitor is unnecessary in Multi-dispatch polymorphism (as mentioned in the book it is a hand written implementation)
-To be cheeky singleton is unnecessary when you have globals :) -
Scheme and Common Lisp...
are both tools of beauty that have taught me more about programming and problem-solving than all other languages combined. SICP and PAIP are both classics in this regard that everyone should rush out and get now.
It's just such a pity that, since they're both standards which anyone can implement, lots of people do, and as a result, finding one you like and then getting it to talk to other languages and libraries can be a very frustrating experience. And languages like Python with one canonical implementation driven by a BDFL and with exceptional library support are just getting more Lisp-like, which can't be good news for for a renaissance in Lisp or Scheme. Pity really, since I really like 'em both...