<p>Scheme or LISP is such an obscure language that nobody uses and has wierd commands like car and cdr. It relies a lot on recursion instead of loops, which is not recommended. Why don't they start off with C at least?</p>
<p>LISP requires a totally different mindset than traditional object oriented programming. Object Oriented programmers have a hard time getting their heads around it. LISP’s mindset helps a lot with concurrency and parallel processing; which is the future of computing during the next decade or two. So it is better to learn fresh than trying to unlearn and relearn it a new way.</p>
<p>My guess (be aware this is just a guess) is that they teach you the hardest language in school so when you learn other languages on your own it is very easy to pick up. If they teach you the easy stuff first, everything else may seem really hard. A lot of schools are now teaching kids Java first, which is easier than C++ (many can agree with this). People who learn C++ first can pick up Java easily, but not vice versa. I think the same logic goes with lisp.</p>
<p>No, that is not it. Comparing LISP to C/C++ is like comparing apples to oranges… Sorry for the cliche but it is true. They are both programming languages, but they are so different.</p>
<p>I’ve never programmed in LISP, but I have heard someone answer this question before. If I recall correctly, they said something along the lines of:</p>
<p>LISP is a pretty syntactically simple language and does a good job of abstracting you from from the computer. Learning how to program in this language lets you focus on how to organize your programs. It doesn’t matter that LISP isn’t used that much commercially: MIT and Berkeley are in the business of teaching students about the principles of computer science and not just how to use programming languages.</p>
<p>to OP</p>
<p>Which MIT course? I thought 6.01 was Python…
The other day I was watching the stock market simulation demo online.</p>
<p>Yeah, I don’t think mit uses scheme anymore either. There was a small uproar in the lisp community a while ago when they switched to python. Another famous example is reddit. There a large storm when reddit switched from lisp to python.</p>
<p>Anyway, lisp is great. I love it very much. I learned it in high school using my mom’s books that I found from her college days. It changed the way I think. You should read some essays by Paul Graham. He wrote the precursor to yahoo stores in lisp. He then sold his company to yahoo for $50 million. He knows a thing or two about lisp.</p>
<p>Its all about bottom up programming. Lisp’s power comes from abstraction. The idea is that you want to build the language around the problem you are trying to solve. The language should be transparent and not get in the way of what you’re trying to do.</p>
<p>The main problem with lisp is that because its so old there is a lot of cruft in the language. There is also a huge barrier for entry, since the standard ide is emacs and slime. The other thing that kinda sucks about lisp is there is sometimes a lack of libraries for things.</p>
<p>There is a new language that attempts to solve these problems. Its called clojure and runs on the jvm. I don’t know a ton about it though.</p>
<p>MIT’s introductory courses aren’t really about teaching programming. They use Lisp as a supplement for showing computer science at a more abstract and theoretical level. So, the reason then, is I guess they think it’s better at giving the basic ideas about computer science.</p>
<p>
</p>
<p>Why is that a barrier to entry? Scheme / LISP interpreters are free to download and install on your computer. So it EMACS if you want to use it.</p>
<p>In any case, as others have said, computer science courses for computer science majors are about computer science, not about programming or the computer language that happens to be used in the course.</p>
<p>It can be very intimidating to use emacs after having used something like visual studio or eclipse. Emacs isn’t exactly user friendly. It takes a long time to become an emacs master. On top of that if you want to do any sort of customization you need to learn emacs lisp. </p>
<p>In its favor though, there is nothing as powerful as emacs and slime. The things you can do are amazing. One of my favorites and most useful is connecting to a lisp instance running on a remote machine, and using tramp to transfer files back and forth over ssh. It runs as if you were doing development locally.</p>
<p>Also, I should mention to the people above, you can compare lisp and other languages. All you’re really comparing is language features. For example, lisp is dynamically typed, while c is statically typed. As to which is better, there is no right answer, thats why both exist. Lisp supports multiple paradigms, such as functional programming, object oriented through lisp’s meta-object protocol (on a short aside, if you really want to learn oop, then the best way is to study the meta-object protocol and wrap your head around how to actually implement an object system in terms of objects and classes), and imperative. While on the other hand, c is strictly imperative. </p>
<p>The point of learning lisp is that whether or not you use it, it changes the way you think. Many features of modern languages, garbage collection for example, came from lisp.</p>
<p>Excellent points made in this thread, but another very important reason for using scheme is because LISP is the language used in the “magic book” - The Structure and Interpretation of Computer Programs. That’s probably one of the best books written on how to think about programming even though that’s not the book’s direct goal.</p>
<p>I also completely agree with arcadefire1027. Their goal is not to teach programming but rather show glimpses of the potential in computer science. Yale’s intro CS course was entirely in scheme and we implemented a Turing machine, a TC-201 computer, our own grammar, and various other things. The idea was to show different ideas in CS and implement it via scheme - not to learn scheme :P</p>
<p>I find Lisp/ML derivatives to be extremely pleasant to work with, even when some of the concepts commonly used by these languages are a bit difficult to grasp at first. CS isn’t really about learning the syntax of some arbitrary language, rather, it’s about how you use whatever tools are available to you. To that extent, functional languages pushes the border on what you may find to be impossible in conventional ways of thinking.</p>
<p>Basically, the syntax may not be the prettiest and maybe it doesn’t feature the (oh so overused) OO paradigm, albeit Scheme exposes its AST (which it retains even in runtime, cool eh?) as Scheme code so you can get pretty close to the gist of OO, which is basically syntax sugar over its conventional imperative subset anyways, but that’s a whole nother rant. I’m getting off track, but the point is, if you get over the massive amount of parenthesis attempting to suffocate you, you’ll learn the biggest lesson of your life: think before you touch that keyboard.</p>
<p>Also, the abstraction power of Scheme and ML is really impressive. Trees and recursive types are almost native to the language. We had a project to implement scheme as well (in ML though), and minus lexing, it only took ~200 lines to implement almost the entirety of the language.</p>
<p>They use LISP/Scheme because computer science isn’t about learning how to program in a commercially viable language, but about understanding enough about computation that you can learn languages and solve problems they don’t cover in school.</p>
<p>To that end, it’s useful to use languages and discuss kinds of computation that are less directly useful (according to industry, historical accident, etc)… It helps students understand the goal isn’t to become an expert in LISP.</p>
<p>C is such a horrible first language to learn for someone with no programming experience. Part of the reason why they learn Scheme (and MIT doesn’t follow SICP anymore…they use Python now) is because it abstracts away many of the unnecessary things that would confuse a beginning programmer. What’s an int? a char? a pointer (by the way…would you rather beginning students who have presumably no previous programming experience learn how to make linkedlists through pointer manipulations)? What does malloc do? Why do we need to compile? Why is there a main function?</p>
<p>The whole point isn’t to learn the internals of computer (which learning C forces you to do, to some degree). There are separate classes for that. It’s about learning the abstract ideas of computer science.</p>
<p>Did I miss a point?
Which first: Scheme or LISP? For novice, and professional?
Isn’t Scheme a dialect in LISP?</p>
<p>It’s been awhile since I used LISP, but I recall it requiring no overhead. Just to get to “Hello, World” in C++ takes a whole screen of code – most of which the professor has to dismiss with “I’ll explain it later” the first time you see it.</p>