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.
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.
IMO that's the wrong way to do it. Using myself as an example it took me far longer to learn things like data structures than it should have. Why? Because I still hadn't wrapped my head around pointers. The fact that the two are coupled is an implementation detail IMO. It turned out that I never had a problem understanding the structures, I had trouble writing code which didn't segfault.
I'd prefer to see CS education start with the more theoretical constructs and then start diving towards the metal as the basic concepts are known. In other words, treat it more like computer science and less like computer engineering.
How do you expect to understand anything about data structures if you fail to wrap your head around one of the most basic data structure mechanism around: referencing a memory address?
In fact, how exactly do you expect to implement a data structure if you fail to understand the very basics of accessing and managing memory?
I don't see how that's a problem caused by a particular pick of programming language. In fact, that seems to be a major failure to understands the very fundamentals of CS.
Agreed. They aren't just learning to program but they are learning how computers work so the less abstraction the better.
On the plus side, I imagine this will be great for our salaries in 10-20 years.
And unlike C it is easy to get started programming in it. Thus a good choice for an intro language if you ask me.
Do you need to know all of the corner cases in order to write a simple script? No. But good luck trying to get someone to debug a JS program without a solid foundation. JS is a pedagogical disaster.
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.
While the coding itself was relatively smooth, we spent a majority of our time consolidation which Python version works with which packages and how to create code that can be executed by computers that use Python 2 vs Python 3. Some people had to use packages that only worked with P2, others only worked with P3.
There's still not really a solution for this. We'll probably just switch to Julia once it gets enough support in areas we need..
So I disagree, Python is actually not a good language for beginners. The language is great but the ecosystem can be extremely frustrating.
Students who start by learning Javascript won't learn solid principals.
Everything depends how the course is taught, not on the language used.
Usually this statements holds true, but not in this case. I mean, after all we are talking about language where `'0' == false` is `true`.
- 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)
- the follow up course, 106B, is in C++ and focuses on OOP, pointers, memory, data structures, etc.
- 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.
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.
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.
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.
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.
Javascript is just a very mediocre language in virtually every way. There is only one thing it's good at, webapps, and it's only good at that by virtue of the fact that it's the only game in town for complicated front-end stuff.
The only thing that could be said in Javascript's favor as a teaching language is that it has basically no standard library, so teaching the entirety of the language can be done quickly.
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.
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:
https://web.stanford.edu/~ouster/cgi-bin/cs142-winter14/inde...
Now it's taught with MEAN (Mongo, Express, Angular, and Node): http://web.stanford.edu/class/cs142/info.html
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.
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.
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.