I've TA'd all of Stanford's intro programming classes, including the first course in programming CS 106A, so a few things:<p>- unlike a lot of other schools, CS 106A is mostly taken by non-majors (90-something percent of undergrads take at least one CS course before graduation, and for non-majors that means 106A)<p>- the follow up course, 106B, is in C++ and focuses on OOP, pointers, memory, data structures, etc.<p>- 106J was crafted as a replacement for 106A by in JS. It had limited enrollment, and word on the street is 106J's first offering this past spring was an experiment and it didn't go all that well, so who's to say if it'll still be around next year.<p>Maybe they should switch from Java to something hipster and trendy, but there's about 10+ years worth of assignments that will need to be rewritten, including autograding infrastructure for the 600-800 people who take it every quarter.<p>I personally feel like JS is an awful language with few opinions or guard rails, and thus a bad language to teach people who are looking for programming principles. It works for the web but I think for a course almost entirely consisting of non-majors it's not a good first language.
I'd say Python would've been the 'safe' and 'sane' choice, but maybe it's just my bias against Java and JavaScript talking.<p>Just curious, has anyone ever heard off choosing to teach something like bash / PowerShell? It might seem less intimidating than downloading a lot of stuff and students can play around with stuff already in their computer. Hell, maybe even something like VBA (as much we might dislike it) since non-majors will likely encounter it in MS Office anyway.
I went to a completely unranked school, not even a CS major. But took Programming I anyway. It was for freshmen, and was in C++.<p>IMO, for an intro language, you need either something close to the metal, so that students can work their way up the abstraction chain, or something very high-level with flexible constructs if it's desired to teach things from the algorithmic level.<p>I also think that any dynamically typed language is a bad choice for a first language. We're all used to holding the types in our heads, but beginning programmers don't even know what they are, and it's a really core construct.
I am really curious if this actually makes things better..Maybe I am just getting old..<p>But this seems like everything else. Let's dumb it down so people can get it. But if you really want to be a programmer, you will get it. You will spend hours debugging and feeling like you know nothing. That is what makes you grow.<p>On the other hand....I ran into some Senior CS students who were incapable of programming in javascript...so...maybe it is not so bad.
I'm sure I'm biased, but I'm a huge fan of how they taught our first two semesters where I went to school. Semester 1 freshman year was imperative programming in C (learning pointers, bits, the stack and heap, memory, ...). Semester 2 was functional programming in SML (learning recursion, types, function composition, formal reasoning, ...).<p>When it comes to other programming language features, there are few that can't be understood as some combination of imperative and functional features. Introducing them freshman year, students take these lessons with them to every subsequent language they learn.
I teach at Stanford though not in CS. I think this headline is a bit off. There is a CS 106J class that follows the CS 106A curriculum using JS instead of Java, but as far as I know, the CS 106A Java curriculum has not been tossed out for the academic calendar of 2017-2018 (syllabuses aren't up yet, so I can't confirm).<p>As the article states, CS 106J was spearheaded by Professor Roberts this past year. I would imagine it'd take some more time for it to become a curriculum that all of the profs teach, though JS is being used in several other CS classes. For example, CS 142: Web Applications, used to be taught with Rails:<p><a href="https://web.stanford.edu/~ouster/cgi-bin/cs142-winter14/index.php" rel="nofollow">https://web.stanford.edu/~ouster/cgi-bin/cs142-winter14/inde...</a><p>Now it's taught with MEAN (Mongo, Express, Angular, and Node): <a href="http://web.stanford.edu/class/cs142/info.html" rel="nofollow">http://web.stanford.edu/class/cs142/info.html</a>
Students who start by learning Java will learn solid principals which may be applied to Javascript (or any other language).<p>Students who start by learning Javascript won't learn solid principals.
They could have chosen a thousand better languages for starters like Python or Ruby to mention some useful ones or Scheme for example which has literally no syntax. They chose an abomination instead. Now we'll have even more influx of javascript-only coder hussars who have never seen an ecosystem which is not rotten to the core. Congratulations.
It's funnny how, when java first came out, everyone was writing applets and not doing a good job of it (incl myself). This was due to it being way easier to code and deploy as opposed to C/C++ at the time. This gave ppl the impression that java was slow, when in fact the code was terrible (and ms was constantly submarining sun).<p>Now I'm sitting here with 16GB of really terrible Javascript code running in my browser using 5% constantly of the fastest intel chip you can buy today. No one says it's slow probably because no one knows it's running.<p>If chrome and ff put a task in the process list with all the Javascript CPU usage I'm guessing things would be way different.<p>I really do think K&R C should be taught to university level students. It's important to understand pointers and mallocs, even if you don't use it often.