tag:blogger.com,1999:blog-29172085.post2995400355309670287..comments2024-03-29T00:15:03.243-07:00Comments on updated sporadically at best: The JY Intro CS curriculumJeanhttp://www.blogger.com/profile/10589732756618196545noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-29172085.post-62415562015115333262008-10-16T20:37:00.000-07:002008-10-16T20:37:00.000-07:00my main gripe with your elevated focus on teaching...my main gripe with your elevated focus on teaching people how to write high-performance code (at the expense of increased development/debugging time) is that nowadays even people who are good programmers tend to regularly use high-level languages to interface with modules that are specially implemented for high performance. e.g., for doing scientific data processing, my friends in computational bio/chem use python to manage and manipulate their data then use some API for some heavy-duty machine learning package (that's probably implemented in C, fortran, or whatever, and compiled to run on multi-core or GPUs or whatever) ... so my argument is that most programmers nowadays (unless you're working as a SYSTEMS engineer) don't need to program high-performance stuff ... it's no longer n00bs that write in high-level dynamically-typed languages - expert programmers do too.<BR/><BR/>of course, to your credit, these expert programmers all know C very well and understand what goes on 'under the hood', so they are able to better utilize high-level languages.<BR/><BR/>(arggg i hate typing anything more than a sentence into these text boxes!)Philip Guohttps://www.blogger.com/profile/05989580992597347789noreply@blogger.comtag:blogger.com,1999:blog-29172085.post-29374316956327149632008-10-16T18:02:00.000-07:002008-10-16T18:02:00.000-07:00Scheme is so nice that it does not enforce good pr...Scheme is so nice that it does not enforce good programming habits. I want to teach people to program with a language that requires programmer discipline to produce readable, correct code. The other stuff comes later, or in the "how to think" section. You can't get very far as a programmer without being forced to face ugliness, because in life you will have to. This is the unfortunate truth.<BR/><BR/>Also, notice that you did not say "they will pick up C quickly." Most (programming, serious programming) people will require C at some point in their lives. Also, every job interview I've had has tested me extensively on my understanding of pointers, memory efficiency, and things like that.Jeanhttps://www.blogger.com/profile/10589732756618196545noreply@blogger.comtag:blogger.com,1999:blog-29172085.post-3882143621745687742008-10-16T07:48:00.000-07:002008-10-16T07:48:00.000-07:00Wow, I couldn't disagree with you more. As you ac...Wow, I couldn't disagree with you more. As you accurately point out, Python does not encourage good programming. The problem with people starting in Python is that from the beginning they learn bad style, <I>and</I> they will tend to continue with Python. It's a gross, unprincipled language designed by a guy that says foldl is too hard to understand. Ruby and Perl have all the advantages of Python without the stupidity—though I wouldn't start an intro class with them, either.<BR/><BR/>If your Python isn't fast enough, you should 1) blame Python's implementers for not making it fast enough, and 2) not switch to C, of all things. There's no good reason Python can't be implemented with an optimizing compiler, and then it would at least be competitive with Java for speed, but they don't know how.<BR/><BR/>More to the point, why use an unsafe, pain-in-the-ass like C if there are safe languages that will run just as quickly? We may still need C for a while for writing device drivers and garbage collectors, but if you're writing general purpose code that needs to run quickly, you're far better off with MLton (SML) or OCaml. Safe languages with good abstractions, unparalleled programming-in-the-large features, and it's not hard to write code that runs just as fast.<BR/><BR/>I also think you unfairly malign Scheme. The recent Scheme standard (R6RS) provides a very advanced module system and a real record system, which together mean that Scheme now supports data abstraction. (It already did, but you had to hide everything in a closure—no longer.) There are also several Scheme compilers (Ikarus, Larceny, and Chez Scheme) that produce <I>very fast</I> code, not quite competitive with C, but kicking the pants off Java.<BR/><BR/>What would I start my intro course in? Not Scheme, because it's too complicated; not Python, because it's too stupid; not C, because it introduced too many irrelevant concerns. I am now fully convinced by the HTDP approach, which uses a series of small, Scheme-like languages to teach programming. The HTDP approach teaches a programming methodology that has students writing good, elegant code within the first couple weeks, and they learn to develop their programs from scratch, rather than filling things in. By the third week, HTDP students can design their own data structures, use structural recursion to traverse them, and are writing purely-functional animations. By learning first in a small teaching language, they learn programming techniques that they can use in whatever language they choose, rather than getting bogged down in language quirks and a specific library. I am amazed by how well it works in teaching almost <I>any</I> college freshman to write good programs.<BR/><BR/>It's true that they come out of the course knowing <I>no</I> real programming language, but that's hardly a problem. They pick up real Scheme and Java very quickly, and I'm sure they could learn something like ML with no trouble.Jesse A. Tovhttps://www.blogger.com/profile/05394743293033983187noreply@blogger.com