TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Why Did M.I.T. Switch from Scheme to Python?

96 点作者 l0stman大约 16 年前

11 条评论

lincolnq大约 16 年前
This issue is a fundamental one that everybody teaching programming or computer science must answer. Is it better to teach CS from the ground up or top down?<p>The ground up approach is something like SICP, with fundamentals in lambda calculus or Turing machines. Students learn rules such as how a Lisp evaluates an expression and write programs which apply the rules. It's not necessary that this be taught using Lisp, but it seems to be popular, because it greatly reduces distractions when understanding and writing actual programs. In any case, the ground-up approach generally teaches first a system of rules, and only once the rules are understood does it move on to programs.<p>The top-down approach, on the other hand, starts with programs. Often the students are given a partially written program and are asked to improve it. The curriculum doesn't focus on rules because they all have exceptions. It's much more like engineering and less like mathematics. As the article says, nowadays "a real engineer is given a big software library, with a 300-page manual that’s full of errors. He’s also given a robot, whose exact behavior is extremely hard to characterize...."<p>What's better? Some schools (such as my alma mater, Brown) have two intro classes, one for each method of teaching. I chose the rules-based bottom-up approach when I was an undergrad, and it was very good, and I was convinced it was the better way to go.<p>But I'm losing my conviction, partially because MIT is changing it and they must know what they're doing (heh), and partially because I'm coming to the understanding that everybody uses libraries and this is not going to change. The top-down approach doesn't really provide any sense that there should be libraries, that code should be organized, that you can write to an interface and document your code. People can learn these sorts of things later, though.
评论 #602468 未加载
评论 #602442 未加载
评论 #602430 未加载
silentOpen大约 16 年前
I'm graduating from MIT (hopefully) in under a month with a degree in CS. The new curriculum is an abomination. If you are teaching some of the (supposedly) brightest students in the world, you shouldn't worry about teaching marketable skills or using popular languages. Your students should be able to pick up a new language easily.<p>Luckily, I took all old-curriculum classes. If I were a student entering college for CS now, I would not choose MIT. I don't know other schools' curricula in depth but some place has got to be more rigorous (Berkeley? Stanford? CMU?).
评论 #602608 未加载
评论 #602646 未加载
评论 #602800 未加载
评论 #604217 未加载
评论 #602672 未加载
cia_plant大约 16 年前
I find this justification downright weird. Yes, a class like 6.001 is an extremely purified and unrealistic view of modern software engineering. But the same could be said of any theoretical subject. The people at the Large Hadron Collider are probably spending a lot more time reading 300-page technical manuals than they are reading Feynman.<p>A lot of the charm of academia, to me, is that it gives you some breathing room to step back from the mess, and look for unifying principles. There might be a bit of a shock when the student first graduates, but in the long term they're often better off with the kind of knowledge that they couldn't easily pick up through osmosis.
评论 #602448 未加载
Mongoose大约 16 年前
I'm in the middle of taking the undergrad PL class at the University of Washington and I've come to the conclusion that classes of this sort can be whatever you make them. We spent the first five weeks learning/using ML, recently switched to Scheme, and will dive into Ruby for a few weeks before the quarter ends. While I'm sure many of my peers will leave the course thinking of functional languages as a quirky set of under-developed relatives to the tried-and-true OO family, I've spent the last 6 weeks breathing functional programming, both in my coursework and in places like this thread. I feel that I'm taking more away from the class and that much of introductory computer science works this way. The burden of learning is on the student to become engaged in the subject matter and make use of the resources the school and professor provides.<p>At the end of the day, the department won't make the student great. To a degree, a driven and talented student can succeed anywhere, regardless of how many ooh's and aah's a name-dropping of their school will produce.
mkramlich大约 16 年前
An intelligent person, particularly one with natural aptitude for programming will end up fine regardless of which language they start with. Also, anybody that truly starts programming in college is a rather sad candidate to begin with.<p>Also, Python is a much more practical choice than Scheme, and has technical merits which are at least as attractive as Scheme, and arguably more so. Scheme is elegant. But Python is also elegant, yet more practical. From that angle, looks like a net change for the better.<p>MIT also strikes me as a school oriented more towards producing engineers rather than programmers. And if you're going to school at MIT just to get into a career in programming, that sounds like a terrible waste of money. Robotics or electrical engineering? Probably a good choice. But programming? Come on.<p>Then there's the whole argument of why anybody needs to go to MIT, or even get a college education in CS. We live in a world with the Internet and scads of free books in libraries and documentation online. Follow that line of thinking and the whole controversy over this tweak in some random school's class content seems silly. It is as if nobody can learn anything outside of a class, so if it is not taught in that particular class at MIT, it will never be learned, and the world will end. Hilarious. :)
Tritis大约 16 年前
Every time this story comes up I'm shocked at the number of CS MIT grads there are on the internets. MIT must be graduating something like 50% of the total internet.<p>Also the comments on this story are always of the type "Well when I was in school things were taught right. The day I graduated it all started going downhill and now I wouldn't hire someone graduating from that school."
gengstrand大约 16 年前
The title is a bit misleading. The gist of TFA is that MIT is switching from Scheme to Python in its INTRODUCTION TO PROGRAMMING course. That would seem to me to be a bit of a no brainer. I find python to be a much more acceptable alternative than BASIC in introducing people new to coder in a way that is more in line with sound computer engineering practices.
评论 #602431 未加载
评论 #604095 未加载
评论 #602445 未加载
wingo大约 16 年前
See also, <a href="http://news.ycombinator.com/item?id=530605" rel="nofollow">http://news.ycombinator.com/item?id=530605</a>.
asciilifeform大约 16 年前
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:<p><a href="http://mitpress.mit.edu/catalog/browse/browse.asp?btype=2" rel="nofollow">http://mitpress.mit.edu/catalog/browse/browse.asp?btype=2</a><p>These are the latest releases from MIT press. Among them you will find nothing remotely like SICP, but plenty of postmodernist/related pablum.<p>"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? Is this not an argument for declaring all existing software obsolete and starting from scratch? Why are we - even luminaries like Sussman - so willing to give up on the future without a fight?<p>As argued in some of PG's essays, in order for creativity to bear fruit it is not enough for a given individual to possess a creative mind. The culture has to be hospitable to creativity. And there are processes which come close to stamping out creativity without any overt or deliberate suppression involved. Specifically, a transition to a medium where one cannot get reliable, understandable "small parts" having predictable behavior.<p>Take note: <a href="http://xkcd.com/298/" rel="nofollow">http://xkcd.com/298/</a><p>Programmers have indeed created a universe where "science doesn't work." Learning where the permanent bugs and workarounds are inside a phonebook-length API teaches you nothing. It is anti-knowledge. Where your mind could have instead held something lastingly useful or truly beautiful, there is now garbage.<p>There is no longer a "what you see is all there is" Commodore 64 for kids to play with:<p><a href="http://www.loper-os.org/?p=16" rel="nofollow">http://www.loper-os.org/?p=16</a><p>No one is working on, or sees the need for a replacement. This is just as well, considering as one would have to start from bare silicon - and avoid the use of design tools built on the decaying crud of the past. Only a raving lunatic would dare contemplate it... Outside of programming: Linus Pauling developed an interest in chemistry by experimenting incessantly throughout his childhood. Today, he would have been imprisoned:<p><a href="http://memepunks.blogspot.com/2006/06/americas-war-on-scienc.." rel="nofollow">http://memepunks.blogspot.com/2006/06/americas-war-on-scienc...</a>.<p>The new generation will have no Linus Pauling, unless the Third World - where one might still purchase a beaker without a license - supplies us with one. Likewise, we will see very few truly creative programmers. What creativity can there be when your medium is shit mixed with sawdust?
评论 #603959 未加载
drawkbox大约 16 年前
I think this is a technology evolution natural move. This will probably happen every few decades to the most capable new language or platform.<p>There is a strong religious backing to Scheme being the only way to teach core CS fundamentals at MIT. I think that is an emotional almost fanboy reaction at times probably filled with heavy bias.<p>Python is a great balance of showing many sides of programming, it can be as eye opening as Lisp. Python is functional and object-oriented. Python is a simplifying tool and culture. All platforms used here should be simplifying.<p>Python can get you building market ready desktop applications, web applications, building robotics, scientific computing, game development, algorithms and AI and nearly anything out there Python is at the tip of the spear. Python is rapid iterations and prototype friendly. The frameworks of Python are more capable to wrap nearly anything, that is what software engineering is about now. It is the same evolution software process has taken from the CMM, to CMMI (supporting modular and libraries), to Agile and a more natural iterative process rather than top down design everything from the bottom up approach. You can still do that, it is just not the majority of software engineering today, and it will continue to simplify.<p>Are Scheme and Lisp programmers who are biased because they had that more hardcore bottom up technique really thinking this degrades the experience or is this more of a bias that is being attacked. Or has software engineering fundamentally changed?<p>Scheme will not go away. This does not mean that people will stop making compilers or REPL. It simply means the starting place is different. It might even drive some better compilers and multi-platform tools because of the quirkiness of many compiler systems out there will drive good engineeers to simplify that process.<p>That is what we do, we simplify problems.<p>I would argue Python makes for more marketable and capable graduates to be successful almost immediately after school, but I don't think it harms the fundamentals much. Good developers and engineers still take time to get better. No one is the best programmer in college, it takes time and experiences after the academics to be highly skilled. Python fits closely with computer science and is very capable of taking the torch.<p>I do think that there is a benefit to learning from a more difficult and core understanding because it is more downhill from there but Python is hardly the worst case scenario here.<p>I think that Python is perfect for teaching CS because of the flexibility, libraries, open source but support by Google (they are big on CS and like Python) and many other reasons.<p>What can you make in Scheme that you can't make in Python, very little.<p>Would you rather it be Java or C# they are teaching?
评论 #604100 未加载
polos大约 16 年前
Teaching has always to do with bringing something really new and perfect to a still quite fresh mind.<p>So, when teaching, you always need to bring the simple and perfect theory.<p>Practice is what your students will make out of your 'perfect' theory -- slumming down quite a bit -- but if you start with bringing a 'practical' theory to begin with, your students will never learn to fly high (bringing in some really fresh new ideas).