12 ms·
Lisp: A Language for Internet Scripting and Programming (1998) [pdf]
- jokoon 13y agoI wonder if any teacher already tried to teach LISP as a first language instead of java or C, and what there was to learn about it.
- mjstahl 13y agoMIT's introductory engineering course used to teach Scheme to the students using the excellent SICP text. I believe they now teach their beginning students Java or Python. I am not sure if there are blog posts or papers detailing the benefits of using Scheme in the class room.
- Fishkins 13y agoSeveral other colleges have a similar course. Where I went (U of M - Twin Cities), they still use Scheme. I also would be interested in any papers about it.
- brudgers 13y agoSee the Section "PLT Reports." http://racket-lang.org/learning.html http://racket-lang.org/learning.html
- bitwize 13y agoThey switched the introductory course from Scheme to Python. The reason is because programming doesn't consist of building things up from first principles anymore, as is done in SICP. Now it largely consists of debugging and customizing already existing code, often via frameworks.
- RyanZAG 13y agoMaybe for a fairly standard CRUD web app which seems to be all the rage, but honestly it's not like you need to go to university to build something like that. The people making the frameworks, tools and unique domain specific programs still need to build things up from first principles.
- weland 13y agoReading a short account of the rationale behind the change, described by Sussman himself, paints a very different picture: http://cemerick.com/2009/03/24/why-mit-now-uses-python-instead-of-scheme-for-its-undergraduate-cs-program/ http://cemerick.com/2009/03/24/why-mit-now-uses-python-inste... . It's not that programming now "largely consists of debugging and customizing already existing code, often via frameworks". For one thing, it's only the narrow, web-constrained definition of "framework" that even vaguely works that way. Second, I'd argue that, unless the code which programmers debug has been written somewhere until the late 1990s, new code gets written often enough that programming largely consists of writing new code instead of debugging old one. That there are programmers hopelessly churning on the umpteenth bug because someone at the end of the Internet decided to change the format of their JSON objects and the mapping of their HTTP request handlers (pretentiously calling that "an API") is not a testament to how programming has evolved, it's merely a proof that not every change counts as evolution. Instead, the choice of Python over Scheme -- which has been received with mixed feelings by almost every programmer able to write a Quicksort function without googling for compiler errors -- seems to have been driven by related, but vastly different reasons, such as: * There are vast amounts of interactions spread over multiple languages, machines and platforms. Independently reasoning about objects, while essential to programming, is as central to teaching as integration in already existing architectures is. Unlike the early 1980s, when pretty much every new computer meant a new editor, a new set of programs and more often than not, a couple of new languages, being able to reason about existing architectures is incredibly important. Scheme is able to provide this, but requires fairly intimate knowledge of the implementation, whereas Python pretty much gives this away for free. * A considerable deal of modern CS/CompEng research is centered around studying non-fundamental applications. It's important to have access to tools that allow people to whip up quick experiments. Whether Python does this better than Scheme is debatable, but Python does arguably score better in terms of integration and, therefore, in terms of being able to glue new fundamental discoveries to practical problems that they solve. Perl does that too, arguably better than Python, actually, but there are lines even seasoned teachers would rather not cross. * Many of the so-called real problems come from more specific fields, are sloppier and can often be less rigorously stated than those for which SICP was initially written. Again, this is debatable, but Python is more universal and easier to convey. I don't know how much truth is behind this. I tend to disagree, because personal experience has shown me that this is the argument preferred by the kind of people who think that cool 3D data visualisation programs are a good example of a real-life problem and rotation matrices are a typical example of a useless problem that doesn't stem from real life applications.
- mattgreenrocks 13y ago> Now it largely consists of debugging and customizing already existing code, often via frameworks. This is why web development is so dull to me. You're always coloring by number.
- chongli 13y agoThe popularity of frameworks is largely due to the non-modularity of the languages in use. Frameworks are much less popular in languages that support proper modularity where small, composable libraries are the norm.
- ww520 13y agoScheme used to be and still is the first CS class taught in many universities. See SICP.
- chimeracoder 13y agoMIT is where the legendary "Wizard Book" (SICP)[0] was developed, for teaching their introductory class using Scheme. A few years ago, MIT restructured their entire CS curriculum (not just the intro class) in a way that required redesigning the individual curricula of each of the classes, including the intro class. As a result, they couldn't use SICP, since it didn't cover the same topics. At this time, they ended up switching to using Python for the class. This is sometimes presented by people who dislike functional programming as an indictment of Scheme/Lisp, though this is very misleading. Nobody made the decision to "abandon" SICP - "they" made the decision to redesign the entire curriculum (top to bottom), which meant writing new syllabi/textbooks for all/most of their classes, especially the intro class, and then "they" made the decision to write the new syllabus/book for that new intro class in Python[0]. Some schools (University of Minnesota is one) still use SICP. Personally, I think that SICP is the best way to be introduced to both the fundamentals of computer science and programming. The only caveat is that it requires a certain level of dedication before-the-fact (something that could be reasonably assumed in an MIT intro class). So it's not the best choice for someone who "just wants to dabble" in programming and see if they like it (try Python or Ruby for that), or for someone who wants to understand computer architecture and engineering (try C for that), but for everyone else, it's unparalleled. The nice thing about SICP is that it focuses very little on learning the nitty-gritties of Scheme (partly because there's so little to learn!), whereas most other introductory materials I've seen have to focus on Java-specific, Python-specfic, etc. features. Reading SICP feels more like reading a math textbook that "just happens" to come with a REPL for mathematical expressions, as opposed to learning the ins and outs of a given programming language or environment. [0] Of course, "they" refers to many different people, very few of whom would be in the same "they" as it was in the 1980s when SICP was first written, so one has to keep that in mind before concluding that MIT "changed their mind". [0] https://mitpress.mit.edu/sicp/ https://mitpress.mit.edu/sicp/
- deleted 13y ago[deleted]
- hga 13y agoThere's a bit more that went into all of this: MIT's EECS undergraduate enrollment cratered after the "dot.com" crash, more than halved, after being 40% of the student body for decades. The department panicked. And it was most certainly ordered that Scheme be entirely purged from the base curriculum, even while they claimed they were teaching SICP concepts and functional programming in 6.005, they were using Java, a language that's "not even wrong" for the purpose (that, at least, has been improved to Python, which is only [fill in the blank] hostile to FP). Not one of the department's finer moments, from my no direct interest in EE at all viewpoint, but from a less biased one you can safely say a MIT EECS degree now means something quite different. And it's a damned shame for those outside the department, for whom 6.001 was truly valuable, that MIT no longer offers anything in its niche (outside of a rearguard 1 month version of it during January).
- Tyr42 13y agoWe use Racket[1] at the University of Waterloo. We use HTDP [2] instead of SCIP. [1]: http://racket-lang.org/ http://racket-lang.org/ [2]: http://htdp.org/ http://htdp.org/
- agumonkey 13y agoIt's subtle. For instance my university taught us scheme basics (no higher order functions, no macros) in the very first computing module[1]. Before teaching us x86 assembly, HTML, VBA. [2] IMO nobody [3] considered it programming. I was a geek and thought it was pure vapor [4], programming needed to be cpp with graphics or GUI or memory cells. I don't know what other people thought about it but I'd bet they forgot about it the minute they left the class. I mean pairs and cons cells ? what can you do with that ? ... beside map/fold/compose/curry. But that would need to talk about closures... can 20yo handle hot thangs like these ? ---- [1] in my days, first 2 years were 80% math/phys 20% programming [2] casual introductory modules, at that point students don't know if they go pure science CS or IT. [3] except the wearing IOCCC tshirts teacher [4] infinite idiocy of my young self
- hajile 13y agoProgramming and bit fiddling are different. One is a logical analysis and breakdown to simple elements while the other is a method of implementing that breakdown in a specific manner. Student's inability to understand this is their own failure and ignorance. As to the topic at hand, in JS, those ideas of higher-order functions which don't exist in C (to any meaningful extent) are the primary means of abstraction. I've seen very many C++ or Java programmers think they can handle JS just fine. It's never too long before those functional concepts they considered useless (or even worse, were never taught) begin to haunt them.
- agumonkey 13y agoAll I wanted to point out is how legacy computer use[1] shapes your understanding, and how candid introductory courses can bounce against that like a rubber ball. [1] growing with computer as a user, what amaze you is what you can perceive : gui, games, external devices. Which are all designed to amaze. When you get to know how computers are made, your first desire is to reproduce these things. Abstraction, expressiveness aren't on your map yet.
- pjmlp 13y ago> Abstraction, expressiveness aren't on your map yet. Not only that, there are multiple levels of abstraction to fully grasp everything. For some people thinking in the abstract way of computing is already too much. Then those think they have mastered the basic concepts of computer abstractions like loops, decisions, data structures, there is the next level of meta-abstractions. Meta-abstractions used to manipulate the said abstractions to fully mold the whole computer system like clay. The same way mathematical abstractions reason about the common man mathematics. Very few are able to move between abstraction levels, and those that do forget how it was their view of the world before they fully grasped it.
- craigching 13y agoScheme via SICP was the introductory OO language/book circa 1990 at U of MN. It is probably the best class I took and remains the one class that has influenced my programming the most.
- jfb 13y agoSure. They did at Chicago when I was there, lo these twenty four years ago. CS 115-116 was just MIT's SICP 6.005 or whatever. Of course, when I was there there wasn't a CS degree -- you got a math degree with a concentration in CS. So times have undoubtably changed.
- brudgers 13y agoLisps have been used continuously for university level introductory programming courses at least since MIT's 6.001 in the 1980's. Today, PLT (the group responsible for Racket) might be considered to be the leader in research into the pedagogy of computer programming and Felleisen's How to Design Programs and student language sequence are used by several schools. I believe they include Rice, University of British Columbia, Brown, and Felleisen's Northeastern University. The PLT Group's homepage: http://www.ccs.neu.edu/racket/ http://www.ccs.neu.edu/racket/
- Morgawr 13y agoAt my bachelor university (University of Bologna, Italy) we used to have Scheme with htdp for the programming 101 course. That's what I did when I studied there but apparently now they (unfortunately) changed it to C++. The day I found that out was a very sad day for me.
- bjourne 13y agoFunnily enough, the PLT group is working on a new language for education called Pyret http://www.pyret.org/ http://www.pyret.org/. It's not very similar to Scheme, it is very similar to Python.
- samth 13y agoIt would be more accurate to say that that Shriram Krishnamurthi and his group at Brown, which are one part of the large PLT "collective", are working on Pyret. The rest of us are still working on Racket.
- sparkie 13y agohttp://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/ http://ocw.mit.edu/courses/electrical-engineering-and-comput... Full lecture series based on the first edition of SICP. I viewed and read after nearly 10 years programming in more mainstream languages (self-taught), and honestly think that 10 years was partly wasted because I didn't learn Scheme earlier.
- asgard1024 13y agoNote to any future academic paper writers: Please include a date in your paper. Thanks. Judging from Norvig's employment, this is at least 10 years old. And also from SILK, which later evolved to JScheme, which is now used in e.g. Scheme Droid interpreter for Android.
- Create 13y agoY2k
- pekk 13y agoBrowser makers like Mozilla have had the option, at any time, to enable the use of Lisp (or any other language) in the place of Javascript. Nothing uniquely qualifies Javascript.
- lisper 13y agoNot even "in place of" but "in addition to". There's a reason that the script tag has a language attribute as part of the standard.
- patrickmay 13y agoThis I would love to see. I'm not aware of any project working to enable Scheme or Common Lisp in the browser, though. Anyone else?
- ctdavies 13y agoClojureScript is a subset of Clojure that compiles to Google Closure-optimized JavaScript, so close enough, right?
- lgas 13y agoGoogling turned up several on just the first page of results: http://www.biwascheme.org/ http://www.biwascheme.org/ http://sisc-scheme.org/sisc-online.php http://sisc-scheme.org/sisc-online.php http://lisperator.net/slip/ http://lisperator.net/slip/ http://alex.nisnevich.com/ecmachine/ http://alex.nisnevich.com/ecmachine/ But the parent is really the right answer -- ClojureScript is actually targeted at meeting modern web development challenges and has a thriving ecosystem of powerful tools for the same.
- patrickmay 13y agoCompiling to Javascript isn't what I find interesting. I'd like support for <script type="text/lisp" language="common-lisp" src="web-ui.lisp">. Pure Lisp, compiled for the user's browser and OS. No Javascript anywhere.
- fsloth 13y agoOOoh, nice. Is this is a direct intellectual precursor to Clojure (although I have no idea if the authors have had any collaboration)?
- wging 13y agoRich Hickey is probably not the same as Timothy J. Hickey.
- mark_l_watson 13y agoI remember when Peter Norvig wrote the first cut at Silk - I think he wrote it in one weekend.
- S4M 13y agoI think he wrote it to teach himself Java.
- pge 13y agoHere's a link to PG's essay and speech excerpts on why Lisp is great for web-based applications (2001) - http://www.paulgraham.com/lwba.html http://www.paulgraham.com/lwba.html PG delivered a similar message to my undergraduate CS class in 1996/7 as a guest speaker when he was working on Viaweb and extolling the virtues of LISP for server-side web applications.
- nswanberg 13y agoIt's strange that it took so long for someone to mention pg. Viaweb was written in lisp, and the site we're on is in arc, a lisp dialect.
- stiff 13y agoThis is from 1998, and Peter Norvig has long since switched to Python. "LISP - a Language for Internet Scripting and Programming", Timothy J. Hickey, Peter Norvig, and Ken Anderson LUGM'98: Proceedings of Lisp in the Mainstream, Nov. 1998, Berkeley, CA. As per http://www.cs.brandeis.edu/~tim/ http://www.cs.brandeis.edu/~tim/
- informatimago 13y agoAny lisper who needs to make a living will switch to anything. Usually, that doesn't remove any merit to lisp or the lisper.
- zoowar 13y agoSILK - Scheme In 50 KB
- q2 13y agoFor a moment, it really appeared LISP is acronym: <L>anguage for <I>nternet <S>cripting and <P>rogramming rather than LISt Processing.
- dmunoz 13y ago> Simple debugging. This is an area where AI techniques could be quite helpful. Detecting and explaining common syntax and runtime errors is a crucial step in teaching a new language. Tools which provide this type of support could increase the interest in this language in the mainstream. Our current debugging support is minimal and provides only the basic commands: step, skip, and continue. I have given some thought to this in the past. Has there ever been a serious attempt at this? Sometimes the error messages for really simple mistakes (missing semicolon, wrong punctuation, etc.) are obtuse and almost completely meaningless. Of course, if it were easy to give simple, clear error message in such cases, they resulting message would be simple, so it's other complexities that get in the way. The biggest problem I see is that having labelled training data, e.g. source code that fails compilation along with the specific actual error, is unlikely, and having an expert provide small, self-contained examples is unlikely to be useful (really, enough training data to be effective) in real world errors, even when novice programs are fairly small. Edit: I was just thinking about this, and with prudent use of a VCS, labelled training data would just be pairs of the form <commit that fails, next commit that compiles>. It would be interesting to see if it's possible to pull useful data from exiting history, or if some level of restraint is necessary in practice. Really, I'm just thinking about the precipice of supervised and unsupervised learning here.
- chubot 13y agoFor syntax errors, check out: http://research.swtch.com/yyerror http://research.swtch.com/yyerror It's not "AI" but I think it's a much more practical approach that any parser could implement, with enough work and feedback. I haven't used Go enough to know if this technique makes a qualitative difference on the friendliness of error messages. Interested to hear opinions.
- ansimionescu 13y agoI've used Go for a personal project for a bit now and the compiler output is pretty good and consistent; beats Python and C++, I'd say.
- brudgers 13y ago
- deleted 13y ago[deleted]
- brudgers 13y agoAs I was reading, I couldn't help but thinking about why the world didn't turn out this way, and I came to the conclusion that in 1998 the only two companies who realized that the future of the web was the browser were Microsoft and AOL. [1] The rough isomorphism between HTML and Lisp S-expressions [2] was an obvious technical advantage over JavaScript and among the Lisps, though tellingly not the case with Scheme, the association list was already in place to do all the work that JSON has come to perform in exactly the same way but for syntax. AOL of course destroyed Netscape after purchasing it by encumbering itself and all it touched with an East Coast Big Dumb Company mindset. It wasn't until years later when Google started seeing Microsoft as the competition that anyone else treated the browser strategically. By that time, JavaScript had won just by showing up in IE 6 and in the legacy Mozilla carried from Netscape. What might have happened if Yahoo had decided the browser was strategic instead of living off banner ad revenue at the expense of increasing irrelevance? They had Graham and the Viaweb team, and so some manager decided to port their code to C++ and the rest, as they say, is history that never was. [1] It is interesting to think that Apple would build its future in ways that treated the browser as a commodity - first with the iPod and then with the app store. [2] See Slava Akhmechet's The Nature of Lisp. It's definitely worth reading: http://www.defmacro.org/ramblings/lisp.html http://www.defmacro.org/ramblings/lisp.html
- klibertp 13y ago> among the Lisps, though tellingly not the case with Scheme, the association list was already in place An association list is just a list which elements are conses. I'm fairly certain that cons, car and cdr were part of Scheme since the beginning and they are all you need to build assoc and friends. Scheme lacked a proper hashtable datatype though, which was present in some other Lisps.
- brudgers 13y agoAgreed. I was thinking of property lists which are not part of Scheme symbols. Would that I had been clearer.
- rurban 13y agohe was talking about scope here. hashes do not help much. assoc lists were important to implement dynamic environments simple and fast, which is not so easy with hash tables. In assoc lists you tolerate duplicates, but by putting new at the beginning you override/"shadow" the old ones, until you leave scope and use the old assoc list. and share the data! with hashes you have to actively delete or copy the tables. non-efficient and very complicated.
- coldtea 13y ago>The syntactic and semantic simplicity of LISP enables non-experts to quickly master a basic level of LISP programming. For Scheme this might hold true. But most Common Lisp programs I've seen are beyond hairy. Plus, the (classic intro-to-LISP) notion that "it has a simple syntax with few constructs so it must be easy to program in" has to die. Assembly has very simple syntax too. I wouldn't write a large program in it.
- Crito 13y ago> "Plus, the (classic intro-to-LISP) notion that "it has a simple syntax with few constructs so it must be easy to program in" has to die. Assembly has very simple syntax too. I wouldn't write a large program in it." Suppose we amend that to simple high-level constructs? I don't think I've ever picked up a language as fast as I picked up scheme. Not even python.
- bunderbunder 13y agoScheme's extremely simple* but it's a perverse simplicity. My experience from tutoring CS students in Scheme back in the day was that it usually either clicked immediately, or not at all. The folks who'd perhaps never get good at it aren't necessarily poor programmers. I don't know that any of them were great programmers, but that might be my prejudice as someone who was having a hard time teaching them a programming language. Some of them went on to get more impressive ones than the one I have, so probably definitely it was just prejudice. Anyway, the point remains, I've met a lot of people who struggled with Scheme, and it was most certainly not for want of smarts. My best guess is that it's just that the language is only suitable for people who have a certain approach to thinking that's perhaps unusual. * And beautiful - easily one of the most lovely languages I know.
- hajile 13y agoI believe this is where Common Lisp got it right and scheme got it wrong. The scheme designers wanted a more pure language when often, the dirty imperative method is desirable. Common lisp has many features to make programming of real, large-scale projects easy (a great example is looping constructs which are often more obvious and easier than the more 'pure' tail recursion preference of scheme).
- einhverfr 13y agoI was thinking about this too. I am somewhat of a lisp newbie, but one of the people on the LedgerSMB team also maintains Armed Bear Common Lisp (i.e. Lisp in the JVM). I remember talking with him about teaching languages to kids. Like me he has three kids. I was noticing that many of the beginner languages were quite Lispy, including Logo which I had been teaching my oldest and I asked about the suitability of various lisps beyond this (I would end up going the direction of Rebol instead at this point, but plan to come back to Lisp). His response was that for a beginner, Lisp is nice, but Common Lisp was, in his words, "too big" to be an early programming language, so one has to start small and work up. I can't help but wonder at this. "Simplicity in the eyes of the user" is not something I have ever associated with Lisp as a whole but it seems like part of that is jumping into Common Lisp directly. Now, none of this means one couldn't have a lisp for the web. However, we don't have one right now.
- hajile 13y agoBrendan Eich made the statement (speaking of JS as the asm of the web): "Source as 'bytecode' also avoids the big stupid Java bytecode mistake: freezing a poorly designed lowered form of Java, then being unable to evolve the high-form source, i.e., the Java programming language for fear of breaking Java bytecode compatibility. This severely messed up the design of inner classes and then generics in Java -- and then Sun broke bytecode compat anyway!" [Source](http://www.hanselman.com/blog/JavaScriptIsAssemblyLanguageForTheWebPart2MadnessOrJustInsanity.aspx http://www.hanselman.com/blog/JavaScriptIsAssemblyLanguageFo...) We are at a point where JS is following the same path. Ideas like ECMAScript 4 were rejected because they would break compatibility and we are still working around the problems of JS. We need that clean break now rather than later. Such a clean break would be at it's best now rather than later. We could simply continue supporting the current JS compilers 'as is' for old code (or provide a JS to new language compiler) and replace the language with another which is designed correctly (we could perhaps break the DOM too). While I would like to see a scheme r7rs used (except with support for OOP, built-in actors, and static typing), I suspect that M-expressions (more like dylan) would be necessary (though for the record, I've seen more nested parenthesis/braces in JS code than I've seen in a lot lisp code). Such a language could also be interpreted via JS (or compiled to JS) for old browsers (though I suspect telling people to upgrade or go without would promote suitable updating more akin to telling everyone to change to digital TV or go without). We need a clean break and lisp is worthy of consideration rather than being cast to the side like last time.
- ThePhysicist 13y agoWell, if using Lisp in the browser sounds tempting, you should have a look at Clojurescript: https://github.com/clojure/clojurescript https://github.com/clojure/clojurescript
- vinalia 13y agoLISP is still a great language for web programming! [1] Lately it seems like more people are doing compile to JS (like asm.js and Mozilla's emscripten work in Odin Monkey [2]) which fits in perfectly with LISP dialects. Programmers can still create their own DSLs, macros, compilers, etc. in LISP and use them for modern web apps today. Just because this is a less popular/documented route doesn't mean it isn't possible. I hope we'll see a rise in LISP web programming pretty soon. It would be fun if someone could write a compiler for a new ClojureScript dialect that targets asm.js and takes advantage of CPS for recursion like Scheme does. [1] https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS#wiki-lisp-scheme https://github.com/jashkenas/coffee-script/wiki/List-of-lang... [2] https://wiki.mozilla.org/Javascript:SpiderMonkey:OdinMonkey https://wiki.mozilla.org/Javascript:SpiderMonkey:OdinMonkey
- vijaymathew 13y agoI've been working on a Scheme that might be more welcoming to people with a ()-phobia: http://vijaymathew.github.io/slogan/index.html http://vijaymathew.github.io/slogan/index.html
- hajile 13y agoWhat advantage does this have over dylan?