Live data from Hacker News

Why MIT switched from Scheme to Python

wisdomandwonder.com

121–130 of 140 posts

Re: Why MIT switched from Scheme to Python

#121

It it just me who is seeing a cowardly surrender to cultural decay here? From the renowned Sussman, no less. The glorious MIT of the 1980s and prior appears to be dead. Erased, in fact, without a trace. Consider the following: http://mitpress.mit.edu/catalog/browse/browse.asp?btype=2 These are the latest releases from MIT press. Among them you will find nothing remotely like SICP, but plenty of postmodernist/related…

"You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts." Is this not an atrocity, to be fought to the last bullet?" I think it's an acceptance of reality. There is a phase change when systems become too complex for a single human to ever understand them in their entirety. Dealing with systems at that level is a different beast than dealing with…

>I think it's an acceptance of reality.

All of technological progress consists of refusing to roll over and "accept reality" - instead, attacking it and modifying it to suit our needs.

>There is a phase change when systems become too complex for a single human to ever understand them in their entirety.

This is how innovation dies. The disease is preventable:

http://naggum.no/erik/complexity.html

> To them, MySql is the hardware. Is it a bad thing?

Yes! It is. A programmer's finite mental capacity for dealing with complexity is consumed by an ever-greater load of accidental complexity - inconsistencies in the medium learning about which teaches you nothing. They are holes in reality. The thing that made modern technology possible is that physics, chemistry, etc. do not have "bugs." A correctly set up experiment will yield the same results when done a week from now, in Australia, etc. And in the end, there are unifying principles governing it, which will explain everything that happened in a way that teaches you something permanent. A medium with "holes", like a buggy programming system, is a universe where "science does not work":

http://xkcd.com/298/

> Some of them hopefully will dig down the stack

Wading in sewage.

> languages are not all that important

This statement is true when the languages are all equally crippled - as they increasingly are, through their reliance on an ever-sinking foundation of 35-year-old rotting OS.

Re: Why MIT switched from Scheme to Python

#122

Earlier quoted context omitted.

This took me quite a bit of googling to "confirm" so I thought I'd save the next guy some trouble. Lucene is sort of Doug Cutting's Java version of Text Database (TDB), which he and Jan Pedersen developed at Xerox PARC, and which, to complete the circle, was written in Common Lisp (see "An Object-Oriented Architecture for Text Retrieval"). http://code.google.com/p/montezuma/

Please put newlines in the above, or don't put the two spaces in.

sorry, It seems I can't edit it now. Is there a timeout?

Re: Why MIT switched from Scheme to Python

#123

Earlier quoted context omitted.

Please put newlines in the above, or don't put the two spaces in.

sorry, It seems I can't edit it now. Is there a timeout?

Yes, but I think I also triggered it by responding, which means only an admin can change it.

Re: Why MIT switched from Scheme to Python

#124
post #98

Earlier quoted context omitted.

Don't tell me. Show me. Please translate the example into s-expressions.

I'm confused why you don't see this as obvious. (There are several possible ways to represent mappings. I picked one that was close to something that you're happy with.) { ("x" ( { ("y" "a") ("z" 23) ("q" ( 54 32 45 )) } )) ("r" 43) }

Clojure uses {} for maps, #{} for sets, and [] for vectors, and vectors are used in function definitions, let statements, etc. This slight decrease in regularity makes a lot of functionality more visible. For example:

SBCL:

(defun f (x y) (let ((z (gethash x :a))) (+ z y))

Clojure

(defn f [x y] (let [z (get x :a)] (+ x y)))

Having syntax for maps is a huge win. Like ML's pattern matching, it's one of those things that changes your coding style entirely for the better, in a way that you wouldn't predict just by looking at the feature.

The only think I miss from CL when I work in Clojure is keyword arguments to functions. There, the Clojure way is a bit worse:

(defun f (x &key y z) (list x y z)) (f 2 :z 3) => (2 nil 3)

(defn f [x {y :y z :z}] (list x y z)) (f 2 {:z 3}) => (2 nil 3)

Re: Why MIT switched from Scheme to Python

#125
post #33

Earlier quoted context omitted.

People often say that Java has great libraries, but is it true? AWT is crufty and ugly. Maybe there are impressive XML parsers (Xerxes is 188,000 lines of Java!), but I don't want those. Numerical libraries seem bad. So what is the library that might convince me to use Java for something?

No, they aren't very good. I think the problem is cultural. Programming Java gets you comfortable with extreme verbosity and tons of structure so its libraries end up like this: http://ws.apache.org/xmlrpc/apidocs/org/apache/xmlrpc/server... (In extreme cases.) Lucene was mentioned earlier - it, at least, is very good. I have the same impression about the numerical computation and machine learning libs too.

There's a lot of "enterprise" crap in the Java libraries: extreme verbosity is the most notable problem. Object-orientation is also just the wrong metaphor for many problems. Finally, camelCaps are uglyAsFuckAndNotVeryReadable.

However, the JVM libraries are well-supported and generally can be trusted to work. For a lot of the wheels I'd rather not reimplement, they're quite useful. I don't think that the Clojure of 2020 will be as reliant on Java, but for now, the JVM libraries are very useful.

Re: Why MIT switched from Scheme to Python

#126
post #71

Earlier quoted context omitted.

http://freshmeat.net/tags/java-libraries I'm not saying they are all are high quality, or relevant to your task, or that there are no C++ or Python equivalents - just that there is a high quantity of Java projects. Why not have a quick search? Maybe there is a project there that will convince you. AWT is about the most prejudiced example imaginable - it was rushed out, disowned by its authors, and quickly replaced. I…

"AWT is about the most prejudiced example imaginable - it was rushed out, disowned by its authors, and quickly replaced." Ahh yes -- replaced with Swing. Do I need to spell it out?

[deleted]

Re: Why MIT switched from Scheme to Python

#127
post #71

Earlier quoted context omitted.

http://freshmeat.net/tags/java-libraries I'm not saying they are all are high quality, or relevant to your task, or that there are no C++ or Python equivalents - just that there is a high quantity of Java projects. Why not have a quick search? Maybe there is a project there that will convince you. AWT is about the most prejudiced example imaginable - it was rushed out, disowned by its authors, and quickly replaced. I…

"AWT is about the most prejudiced example imaginable - it was rushed out, disowned by its authors, and quickly replaced." Ahh yes -- replaced with Swing. Do I need to spell it out?

[deleted]

Re: Why MIT switched from Scheme to Python

#128
post #71

Earlier quoted context omitted.

http://freshmeat.net/tags/java-libraries I'm not saying they are all are high quality, or relevant to your task, or that there are no C++ or Python equivalents - just that there is a high quantity of Java projects. Why not have a quick search? Maybe there is a project there that will convince you. AWT is about the most prejudiced example imaginable - it was rushed out, disowned by its authors, and quickly replaced. I…

"AWT is about the most prejudiced example imaginable - it was rushed out, disowned by its authors, and quickly replaced." Ahh yes -- replaced with Swing. Do I need to spell it out?

Please elaborate.

Re: Why MIT switched from Scheme to Python

#129

Earlier quoted context omitted.

"You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts." Is this not an atrocity, to be fought to the last bullet?" I think it's an acceptance of reality. There is a phase change when systems become too complex for a single human to ever understand them in their entirety. Dealing with systems at that level is a different beast than dealing with…

>I think it's an acceptance of reality. All of technological progress consists of refusing to roll over and "accept reality" - instead, attacking it and modifying it to suit our needs. >There is a phase change when systems become too complex for a single human to ever understand them in their entirety. This is how innovation dies. The disease is preventable: http://naggum.no/erik/complexity.html > To them, MySql is t…

I believe I categorically disagree with every point you make. You are pissing in the wind if you think you can treat a system with 100M LOC the same way you wrote assembly on a 6502. They are different beasts, with totally different emergent properties. It's like claiming that you can understand the weather if you just stick to thinking about individual molecules.

[edit:] I believe the xkcd strip can be read two ways. Unknowable complexity equals magic (a riff on Arthur C Clarke). I strongly believe that exactly what's been wrong about software is our clinging to the idea that it is reducible and manageable. We don't think that way when we work in the physical world; we do rely on science, but it's empirical science, with statistically useful models at appropriate levels of abstraction. We don't rely on quantum mechanics to build bridges.

Re: Why MIT switched from Scheme to Python

#130
post #98

Earlier quoted context omitted.

I'm confused why you don't see this as obvious. (There are several possible ways to represent mappings. I picked one that was close to something that you're happy with.) { ("x" ( { ("y" "a") ("z" 23) ("q" ( 54 32 45 )) } )) ("r" 43) }

Clojure uses {} for maps, #{} for sets, and [] for vectors, and vectors are used in function definitions, let statements, etc. This slight decrease in regularity makes a lot of functionality more visible. For example: SBCL: (defun f (x y) (let ((z (gethash x :a))) (+ z y)) Clojure (defn f [x y] (let [z (get x :a)] (+ x y))) Having syntax for maps is a huge win. Like ML's pattern matching, it's one of those things tha…

> (defun f (x y) (let ((z (gethash x :a))) (+ z y))

vs

> (defn f [x y] (let [z (get x :a)] (+ x y)))

The CL defn of f is a function that is called with two arguments. That function is called like "(f a b)" If the Clojure definition is comparable, that is, the call looks like "(f a b)", why are []s used in the definition and the let?

> This slight decrease in regularity makes a lot of functionality more visible.

What functionality? x,y aren't part of a vector and neither is z. (x,y may come from a vector in the caller, but I'll assume that the defn works if they don't, so that shouldn't matter.)

Post reply on HN