Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Unfortunately, when MIT moved from 6.001 in Scheme to 6.01 in Python, they also changed later courses to Python because now students wouldn't have Scheme experience.

This results in: 6.005 ("software engineering") in Java 6.006 (intro to algorithms) in Python 6.034 (intro to AI) in Python 6.035 (compilers) in Java

(6.005 was 6.170 which used Java and 6.035 has always used Java afaik so this list isn't all the new curriculum's fault... but it does give a good overview of MIT's undergrad CS decline)

Frankly, this is unacceptable. I'm not sure I would hire an MIT CS grad that did the new curriculum. It is absolutely absurd that MIT (which purports to have one of the best CS programs in the world) is teaching Java and Python in their undergrad CS curriculum even in places where Java and Python are not the best suited (compilers!? algorithms!? AI!?). For instance, one 6.005 pset is to build a Sudoku solver... in Java. Every MIT undergrad should have the ability to learn a new programming language. 6-3 students (CS majors) should especially be able to do this. MIT is getting watered down.

Students don't learn other programming paradigms and they learn to accept the bloat and poor design decisions of the required languages. Where once students would build a text adventure and a metacircular evaluator in Scheme for 6.001, they now build what amount to Lego Mindstorms kits. Seriously?



The program I was in didn't even try to do things like this. Web course? Use perl. OS course? Use C. Soft Eng? Use Java (people demanded at least one Java course). If you can't learn the appropriate language within the first week of the course, you probably should have a different major.

Naturally some people were very upset about this, but it definitely made for a better program all in all.


This was the same at my university (Santa Clara University, http://www.scu.edu/engineering/cse/): introductory courses used C++ (for "intro to computing" and data structures), assembly (for a computer organization course) and Haskell (for the SICP equivalent -- not sure if it's still a requirement).

Upper level courses would then expect students to pick up Verilog/VHDL, regular C, assembly, lex/yacc, Scheme/Lisp, Java and Perl/Python as needed.


Where did you go?


I agree - after freshman year, don't worry about whether the students have prior experience in a language or not. My first experience with Java was in a Database class: The teacher gave us a project, said "use Java". She linked to the Java tutorial, and I learned enough for the project in a day or two. I learned Perl the same way (for a bioinformatics course)

Of course, if they had been languages in a different paradigm, (e.g., Scheme, Prolog) it may have taken me a bit more time to get going. Still, no reason to not use these languages.

Any computer science student should be able to learn a new language quickly to get a project done. It's an important practical skill for their careers anyway.


Frankly, I know I would never hire anyone with your view of CS.

While I understand the fondness many people feel for Scheme, building an entire CS curriculum around it strikes me as particularly problematic. Scheme and Scheme's approach to programming can, I'm sure, be useful as one part of a larger curriculum, but more often it feels as if I'm talking to someone who, say, learned how to take a derivative via limits, and then decided that it would be all right never to learn anything more about calculus in the course of a mathematics degree. By analogy, building a REPL given only a small set of atomic language bits to start with simply is not the totality of either theoretical or applied computer science, and should not be pushed as such.


You don't believe in using the right tool for the job? In learning a variety of paradigms?

Perhaps we have misunderstood each other. I'm not pushing Scheme or the metacircular evaluator as the totality of theoretical or applied computer science. My interest is entirely in the educational value of building a REPL versus, say, a robotic control system. MIT has a lot of robotics opportunities from clubs to IAP (winter term) competitions to UROPs (undergrad research). MIT doesn't have a lot of REPL building opportunities.

In fact, I believe it is possible with the new curriculum to graduate from MIT with a degree in CS and have never built a REPL or a compiler. That seems a little... misguided.

I don't rail against this change because I mourn Scheme or hate Python. I rail against this change because I feel it fundamentally weakens the quality of an MIT CS education.


I rail against the railing because, frankly, so much of it consists of "how dare anyone call themselves a programmer if they didn't build their own Lisp from scratch in 6.001!"

This simply is not a useful approach. And, honestly, as a working programmer there are lots of things that aren't compilers or REPLs that I can think of, all of which would be at least as useful for students to have experience with, and none of which are, so far as I know, part of MIT's or anyone else's curriculum.

But I manage to live with that, rather than demanding that MIT build a curriculum around what I happen to think is important.

(and, honestly? I still feel like Scheme is the derivatives-by-limits approach to programming -- yeah, you can do it that way your whole life, but that doesn't mean you should)


In fact, I believe it is possible with the new curriculum to graduate from MIT with a degree in CS and have never built a REPL or a compiler

Hasn't this been the case since at least 1999?


6.001 was required and at least walked you through the construction of a metacircular evaluator. While this isn't building a compiler or interpreter (Scheme cheats), it seems to be more than we have now. :-(


I have been taking Carnegie Mellon graduate CS classes part time, and for the most part I have been able to use any programming language I want for assignments (within the bounds of "The TA knows at least enough of that language to read and understand your code"). I have used this as a fun excuse to learn a new language just to do the projects and assignments for a course. I've done this with Common Lisp, Python, and Clojure so far. Some times the source code isn't even required, just your answers to the questions and an idea of how you arrived at them.

It seems a much more grown up and civilized approach to me. Maybe this is because it is graduate level and not undergrad? I remember CMU undergrad classes requiring C, Scheme, Prolog, and Pascal, but that was over 20 years ago.


This is indeed because it is graduate level and not undergrad.


Quite frankly I'd rather be working with robots than building text adventure games (been there, done that: when I was 13). And while building a meta-circular evaluator is interesting, I don't see how it can be considered a central tenet of introductory computer science. Also, both Python and Java have implementations that are meta-circular (PyPy, Jikes RVM, and Squawk), so it's not like you're shutting the door on these concepts to beginner students by bootstrapping them with conceptually-limited languages.


silentOpen - The only class in which the language has been changed due to the lack of Scheme in 6.001 is 6.034. As students branch out and take electives, there are plenty of opportunities to learn other programming languages - the UI class this year, 6.813/6.831 (undergrad/grad), had problem sets using Adobe Flex. My current Distributed Systems class (6.824), the Graphics class (6.837 - an undergrad elective), and the Operating Systems class (6.828) all use C++. All have the mentality, "don't know C++? Here are some links, go learn it."

There are constant opportunities within the MIT curriculum to learn other languages, and while I had the pleasure of taking 6.001, frankly - if an undergrad doesn't take advantage of any of those opportunities and leaves college only having used Python and Java, that's their flaw - not the Institute's.

Finally - to play devil's advocate in response to the REPL / compiler argument, of all of the assignments in 6.001, writing the metacircular evaluator gave me the least accurate representation of the power of computer programming as a whole. While it was an interesting exercise, if I had been interested in language design, I could have taken an elective more focused on the topic - as is still an option at the Institute.

I think your claims about the tragic decline of the quality of an MIT CS education are a bit dramatic - few MIT students seriously considering a career in computer science graduate as lopsided as you seem to believe. Your efforts may be better spent railing against why 40% of all undergrads graduate to take jobs in finance and consulting, despite the vast majority of students graduating with engineering degrees. (Source: http://web.mit.edu/career/www/infostats/graduation.html)

ubernostrum - a point of clarification, the "entire CS curriculum" was never built around Scheme. 6.034 was the only class that used Scheme after 6.001. I believe a graduate class existed in the recent past that also focused on Scheme and its interesting properties as a language.


6.828 uses C. C++ and C are still the same paradigm as Python and Java. I'm glad these courses use the right language for their topic but they don't really expand your horizons.

I want to know where Lisp, ML, Prolog, and Smalltalk are. I'm particularly concerned about Lisp and ML (incl. Haskell and ML derivs). Does MIT just not care about FP any more?

If you're a CS student and you haven't seriously worked with functional languages by the time you graduate, something is wrong. There is nothing to prevent this now. Many students will not seek out these languages on their own but it is decidedly in their best interest to acquire experience with them and MIT, to produce 'well-rounded' computer science graduates, should require/encourage it.


Your efforts may be better spent railing against why 40% of all undergrads graduate to take jobs in finance and consulting

I was going to make a snide comment wondering why Scheme was necessary for training future investment bankers and lawyers, but I just had anecdotal experience and didn't want to spread false information. Thanks for the numbers.

(Through chance I was a TA at MIT at the turn of the millennium. Pretty much everyone I taught had plans of working on wall street or going to law school.)


> I'm not sure I would hire an MIT CS grad that did the new curriculum.

I want to know what line of work you are in where being an MIT grad is considered a drawback.


It's not "being an MIT grad", but the "new curriculum" he's commenting on.




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: