4 ms·
I've been through the Udacity CS101 and progressed well with their programming languages and design of programs courses. These are all in Python but I have cove
by br3w5 12y ago
I've been through the Udacity CS101 and progressed well with their programming languages and design of programs courses. These are all in Python but I have covered interpreters, compilers, regex, recursion, types, etc. These all treat python as a tool to learn CS not just the language in itself. Alongside these courses I've also been building my own websites using Django and I'm now at a stage where I feel I can solve any problem in any technology (even though it will take me longer than someone experienced in that technology to learn it and get stuff done).
I've started exploring other languages (C, Lisp, even Java at work, Haskell next, javascript) and feel much more confident with the software engineering stuff that CS courses don't necessarily cover, having managed development teams (git, deployment, CI, TDD, etc). I agree with other commenters that python gets out of the way so that you can explore CS concepts.
Javascript could be a good intro language but students might want to move onto something else fairly quickly. I already tried js first and quickly started CS courses because I didn't feel that learning javascript was helping me understand how to solve problems with programming. I also don't think you can teach all of the core CS concepts with javascript as effectively as you can with other languages (e.g. OOP), so when you do start teaching js they will still come to you and say "how do I put this on a website", "use node", "ok but how does that work? why does that work? etc, etc". And when it comes to websites are you going to teach students to build a webserver in vanilla js (?!) or reach for node that abstracts so much that is going on under the hood?
Smart students are always going to ask questions and I've found in my experience that I've been able to either get the answers or know where to get the answers, by knowing core CS concepts. So whatever language you choose to start off with it needs to be couched in terms of what CS it exposes.