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

Reply via email to