On Tue, 2011-08-09 at 10:42 -0400, Robert Levy wrote: > > > > Another likely factor is that Google (where Norvig works) > supports > Python but not Lisp. > > > With some exceptions I guess? > > http://www.itasoftware.com/ > http://en.wikipedia.org/wiki/Google_App_Inventor > > http://groups.google.com/group/clojure/browse_thread/thread/156da03edd630046?pli=1
I interviewed at Google. They stated that they only support 3 languages in production, Java, C++, and Python. I've worked commercially in all three and one of my 3 open source projects is in C++ (Magnus). That said, my "native language" is lisp as I've been writing lisp code for 40 years in a dozen dialects. The interviewers did not know lisp. I suspect this will get even worse as the top universities teach Python rather than Scheme. I believe that ita software has only recently been bought by Google. I tried to apply to ita software, a lisp shop, but they have the "hiring puzzles" barrier. I simply refuse to work at a place where management thinks this is a good idea. I have a resume. I have open source work, publicly available, where I modify a million line, lisp based, computer algebra system. In my experience with interviews, the places with "puzzles" and "MS/Google quizes" are not really bothering to evaluate the candidate (i.e. me). They are usually unfamiliar with my resume (nobody at Google knew what was on it even though they had a copy at the interview). The whole idea of such approaches shows (a) a lack of respect for the individual and (b) an arrogant attitude of "you should feel LUCKY that we even CONSIDERED talking to you"...Google even have me a t-shirt when they rejected me :-). It smells like a hazing ritual for a frat club. It should be interesting to see how the culture changes at ita. I might interview just to get the t-shirt. I could end up never buying shirts again :-) Enough of the war stories... back to Clojure. Languages affect the way that you think. For example, in my Java job everyone talked about "design patterns" (e.g. "the singleton pattern", "the visitor pattern"). Even though Clojure is Java based I don't see the same design pattern discussions. Singletons are just eqs. Visitors are mapping functions. See Norvig's talk: http://norvig.com/design-patterns/ppframe.html This seems to be a subtle difference in thinking but it leads to a profound difference in approach. Java "design patterns" try to shape the solution to the patterns. Lisp-based solutions try to shape the solution to the problem. I call this the "impedance mismatch". Impedance mismatch is when you hook a firehose to a soda straw. Or when you try to solve your problem by expressing it in bits. Some languages are very close to your problem, like R for statistics. They rely on a smart compiler to cross the chasm to the machine. Some languages are very close to the machine, like assembler. They rely on a smart programmer to carry the problem to the machine. Most languages are "general purpose" and sit in the middle. Lisp is the only language I know that allows you to completely cover the chasm as you see fit. It is possible to write (integrate (car x)) where (car x) is the 0th offset from x and integrate is a huge hairy function. Other languages do this (e.g. a[0]) but I find there is a strong language-based focus (design patterns) rather than a problem-based focus. So Lisp seems to have the lowest impedance mismatch of all of the languages I know. It is easier to match the solution to the problem without the language being a barrier. Watch the postings on this list and see how often people are tangled in design pattern discussions. I don't remember seeing that thread. Doesn't that seem odd, given the Java connection? So I think that, on the whole, the universities have made a bad choice not from a language perspective but from a "thinking" perspective. I have taken the online SICP course from the authors and it had little to do with Lisp and a lot to do with thinking. I don't know how to teach the same way of thinking in a non-lisp course. How can you re-express a data representation (cons) in lambda form in Python? You don't even have the words to begin. See http://lispy.wordpress.com/2007/10/13/how-studying-sicp-made-me-a-better-programmer Clojure would be ideal for this kind of teaching as you can start with Java or Clojure and show both ways of expressing things. Rich has been very clever to use the benefits of OO programming ideas without the downsides found in OO languages. I don't see the golf-ball problem showing up in Clojure where I see it a lot in Java: http://www.perlmonks.org/index.pl?node_id=645261 > > In my spare time I am working on completing a computer science MA > program in natural language processing, which I am roughly 1/2 of the > way through. So far all of my courses have made Python the default, > but every professor has allowed me to do my work in Clojure instead. > I'm sure we can do the same for the online course. If you know > Python, it's not a big deal to have to read their examples in an > inferior language, but do your actual work in Clojure, IMHO. ;) When I did natural language work I found that the chart-parser we wanted was easier to express in Lisp functionally but since the rest of the system was in C I wrote it in C. Python isn't a bad language, it is just the MSBasic of its time. Program in Python and Lisp and then listen to your own thought processes. You'll find that you think in different ways. Pick the language that matches the way you think. Some people really do think in Python and find Lisp hard. Language wars are based on the misunderstanding that there is a right way to think. Programming is thinking. Find your "native language". Norvig is very well aware of this so I don't anticipate language issues being a problem. Tim Daly -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en