Thursday, February 17, 2011

What I have been reading lately

Here are a few of the articles that have caught my attention recently:
  • Googler and AI guru Peter Norvig on what artificial intelligence has been able to do and what was a surprise ([1])

  • Watson's performance in Jeopardy was impressive, but even Google and Bing get the right answers to Jeopardy questions more often than the average human ([1])

  • The Google Translate app is downright amazing. Almost a babel fish in my ear, just remarkable. ([1])

  • Kicking off a project to rewrite code is a really bad idea, but people want to do it all the time ([1] [2])

  • Excellent answer on why Dropbox succeeded ([1])

  • Dilbert on the morality of using web click data. Ouch! ([1])

  • Old but good Slate article on why we don't have ubiquitous free Wifi. Makes me sad. ([1])

  • Enjoyable rant against stealth mode startups ([1])

  • Internet investment funds and unprofitable companies going public? The dot-com bubble is back, baby! ([1] [2])
More in my shared items microblogging stream or, better yet, if you use Google Reader, search for me and follow my shared items there.


Jorrit said...

Regarding the rewrite piece of Joel: I still wonder how Firefox would have looked like when they didn't throw away the Netscape code. However, his point is of course that if Firefox had been developed as a commercial product, the company would have gone broke before Firefox 1.0

ted-herman said...

I haven't tried the Google Translate app, and I trust you that it is remarkable. But I use regularly and usually find it lacking; I nearly always have to post-process the results manually to get something that works.

Bob Carpenter said...

I liked the list, but have to disagree with the one on code rewrites.

Like other code activities, refactoring or major rewrites of code can be useful. Over 8 years, I rewrote large chunks of LingPipe twice. The first time was for version 3.0 when Java introduced generics; I waited until Sun had removed support for JVMs that didn't handle generics. The second time was for version 4.0 when I got rid of all the old-style deprecated code that resulted from 3.0.

I borrowed the two-stage refactoring idea from Lucene -- they used it to bridge their 2.4 to 3.0 transition with a 2.9 that had all the features of 3.0, but was still forward/backward compatible.

While at SpeechWorks, we rewrote the code base twice over two years. First was to refactor some component interfaces and add more flexible semantic grammars and introduce wide chars. The second was to completely rebuild the lower-middle stages of speech rec using finite state transducer libraries licensed from AT&T.

Greg Linden said...

Hi, Bob. I think we might be agreeing more than disagreeing on the code rewrites. Specifically, I think refactoring is great, just that it should always be done with some other goal in mind.

Taking your SpeechWorks example, improving the speech recognition by rewriting the lower layers was an example of refactoring with a larger goal in mind, improving the performance of the speech recognition.

I (and I think Joel Spolsky) object to refactoring for the purpose of refactoring, without any other business goal. But, spending time refactoring as part of every and any project is a very good thing to do.