Computer Science I [pdf]
cse.unl.edu
cse.unl.edu
> PHP is a dirty, ugly language held together by duct tape, cracked asbestos-filled spackle and sadness (http://phpsadness.com/). It is the cockroach of languages: it is invasive and it is a survivor. It is a hydra; rewrite one PHP app and two more pop up. It is much maligned and a source of ridicule. It is the source of hundreds of bad practices, thousands of bad programmers, millions of bugs and an infinite abyss of security holes and vulnerabilities. It is a language that was born in the wild and raised in the darkness by two schizophrenic monkeys. But its got character; and in this world, that’s enough.
I think "practicality should beat purity" for an introductory course. The students usually will have a chance to catch up on Python in a data visualization class anyway.
PHP is much simpler in terms of understanding, you do not need to explain what WSGI is, what routing is, what template engines do etc. Put your code into <?php and ?> and you're all set.
The very first language I was ever formally taught was Lisp. I haven't used it even one time since then, but it forced me to understand recursion at a cellular level, which has painlessly translated to every language I've used since then.
There's a significant distinction between "I understand how [inheritance|recursion|functional programming|etc] works in <language of choice>." and "I understand how [inheritance|recursion|functional programming|etc] works, period."
By choosing a non-mainstream language, I suspect that it makes it slightly more likely to end up in the second category than the first.
[0] Note that this applies only to formal computer science training, NOT developer bootcamps, where the end goals are totally different.
I think Lisp or Scheme is great for that kind of pedagogy, though the trend lately has been to use "practical" languages.
I would love that to happen and I think Harvard's CS50 is one such example. Assignments will cover C, Javascript, and Python. However, most 101's goal is to teach students to just learn to code. The "think like a computer scientist" is inaccurate (looking at the famous Python book: How to think like a computer scientist).
I honestly do not think teaching PHP in 101 will achieve the latter case. Combining Lisp/Scheme/Racket and a non-functional language like PHP will probably do.
Also, we need to educate each other that despite all the insecurities with PHP in the 2000s era (because there were plenty of free PHP hosting providers, a gem for kids like me back then), PHP has improved, and let's criticize poor LAMP stack configuration and bad practices. Anyway, I heard, and maybe not true at all, more PHP code at FB are now written without HHVM? Someone from FB please correct me if I am wrong.
To extend your translation analogy, it's rather like learning a natural language in that at first you might think in your native tongue and translate on-the-fly, but to become fluent you must really internalize the new language and learn to "switch" your thoughts into it. I feel like the linguistic concepts of "registers" and "code switching" apply well to formal languages as well as natural ones.
Anyway, there are various websites which list an "online curriculum" for Computer Science, e.g. https://mindweb.network/board/computer-science-a-full-bachel...