3 ms·
CMU transitioned from Java to Python when I was an upperclassman there. I'm not sure what other similar places do, but CMU splits introductory courses into 2 pa
by arihant 12y ago
CMU transitioned from Java to Python when I was an upperclassman there. I'm not sure what other similar places do, but CMU splits introductory courses into 2 parts - 110, 112. 110 is the basic programming with gradual intro to OOP and stuff. 112 is where the datastructures come in - it's a programming primer to implementing datastructures and algorithms, so to speak.
Here is the issue I feel goes unnoticed as most people place out of 110 and never take it - CMU moved both courses to Python. While this helped 110 in a way by making it more accessible, it also resulted in people getting out of 110 with far less OOP principles than they did before. On the other hand, python works great in 112 because you spend more time building datastructures rather than running into the wall with Java OOP layers over and over. It's also cleaner so how a datastructure works becomes more transparent. But since the curriculum assumes OOP mastery from that point on, with no software engineering course required - I always wonder if replacing Java from 110 (a course for people with no coding background) was a mistake.
They put the transition to vote and Python won very clearly. But I always wished they continued 110 in Java (or shifted to Scheme, or anything that follows a stricter regime than python - so one gets comfortable with one way of abstracting problems, be it OOP or Functional) and taught 112 with Python. It probably isn't worth even discussing given how few CS majors take the course, but it always makes me wonder why we needed same language for both courses.
- z1mm32m4n 12y agoI think that's another thing to note: around two thirds or more of the CS freshman at CMU actually take 15-122 Principles of Imperative Computation, which is taught largely in C0 (a type safe subset of C), and then later they transition to full fledged C.
- klodolph 12y agoI think the intense focus on OOP is a problem, and it is symptomatic of teaching students Java as their first language. Just as if you learn BASIC first you love GOTO, if you learn Java first you love classes and think everything should be a class. What especially concerns me is that some people are interested in whether a program or language is object-oriented, and endeavor to make their programs more object-oriented. Object-oriented programming is a design aesthetic, perhaps one of the most nebulous design aesthetics, and it should not be considered a goal or a dogma but rather a source of inspiration for design. Java is a particularly bad example because Java's brand of OOP conflates encapsulation, data structures, and polymorphism. The languages we'll be seeing in the 2020s and beyond will probably be more sensible about these things. Look at the new languages with the most mind share these days (Go, Rust, Swift) if you want an idea of where the wind is blowing. The other problem is that the farther you get from being a freshman, the farther you get from understanding which concepts are necessary in an introductory curriculum. As a senior you might say that OOP must be taught to the freshmen because so many freshmen don't get it, as a junior developer you might want the program to teach the standard library, and as a senior developer you might want to teach people about testing. This is all wrong. The most important things to teach freshmen CS students are very simple. Control structures, data structures, references / pointers, and recursion. Never forget that while OOP is warm and fuzzy and makes you feel good, the number one priority of the intro CS courses is to get the freshmen to write programs that work correctly. Or, since OOP is a design aesthetic, it is only useful once design becomes important. Design is not important for small programs that freshmen write. Let them get off the ground with correct programs, and teach them paradigms once they have enough context to understand them.
- dragonwriter 12y ago> Just as if you learn BASIC first you love GOTO I learned BASIC first and started hating GOTO before I was even in my teens. Who likes GOTO, seriously? > The other problem is that the farther you get from being a freshman, the farther you get from understanding which concepts are necessary in an introductory curriculum. I don't know, the farther I've gotten from being a freshman, the broader my experience of other people learning programming has been (and, even though I've never been an instructor in a formal introductory course, the more experience I have teaching other people, including programming.) Even if my freshman classes were my first introduction to programming, I don't think I would have had a better idea what an intro course needed then than I do now.
- partomniscient 12y agoYou love GOTO for as long as it takes you to find your love for the (almost always) superior GOSUB.
- dgacmu 12y agoSpeaking as one of the people who helped lead the push for moving to Python in 15-110 and 15-112, the reduction of OOP was extremely deliberate. At the end of the day, Python won because it could be used to express programming concepts quite clearly in both an imperative and, to a slightly limited degree, functional manner, in ways that were appropriate for a variety of domains. And it did it in a way that substantially reduced the "boilerplate" syntax burden, which most of us take for granted, but is a large pain for newcomers to programming. print "hello, world" is very easy for a beginner. Depending on what your background is, [(i*3) for i in [1, 2, 3]] may be a very clear way to multiply every element of an array by 3. Or it may be confusing as heck. :) Our general hope is that by the time our current first years make it through the program that there will be even less of an emphasis on OOP needed. C0, for example, introduces an additional component of formal reasoning, and my shift of 15-440 replaced C++ with Go, which has a modestly less "OOP"-centric flavor. The big drawback now is that the transition from 110/112 to the formality of C0 and the functional intro with ml is rather jarring. That's partly by design, to get people to think about computer science differently than what they might have learned about "programming" in high school, but we'll see if we can optimize it. (I'm posting about this because I'll be teaching 15-112 with David Kosbie next Spring.)
- aniruddhc 12y agoProfessor Anderson, You should go back to teaching Distributed Systems in Go next semester. Pretty please.