I only scanned it, and it seems like a solid book; however, I found that PHP is an odd choice for CompSci I book. From the book:
> 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.
Although I agree that PHP is an odd choice, I do think there's something to be said for teaching computer science with a language that the students (probably) won't end up using professionally. In some sense, this permits a decoupling of the language ergonomics from the underlying principles, thereby emphasizing 'learning' over 'training'.[0]
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.
> 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."
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.
I see your but many students will end up using PHP for work. In my NYC college a good amount of people I graduated with are doing PHP, there's probably more PHP jobs between the coasts.
I think Lisp or Scheme is great for that kind of pedagogy, though the trend lately has been to use "practical" languages.
I think the first language people cut their teeth with will be the language they use to reason about new problems. So it helps for it to be close to the language they will eventually end up using, unless you want to waste a lot of time translating the solution you have in your mind to the language you are required to program in
There's no way this is true. I cut my teeth on Microsoft QuickBasic, and I promise you that QuickBasic has been far from my mind for many years. At this point, I've written programs in about 50 different languages (not all of them professionally): procedural, object-oriented, applicative, concatenative, relational; different paradigms require different "modes of reasoning" to properly wield.
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.
On the other hand C, Java and PHP complement each other. Whereas Python is a general purpose scripting language PHP is built for Web. It will be a huge motivation for a first year comp sci student to be able to write together a simple site in PHP and find some free host to put it in.
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.
JavaScript would also be suitable, it is easy, it is ubiquitous. The kids would need to be introduced to the basics of tcp/ip and HTTP and then be able to use Node.
Exactly my thought. It Starts with basic principles, then shows how those principles are applied in three selected programming languages: C, Java, and then PHP?! There are a dozen alternatives that are more suitable.
I have no opinion about the quality of this book, but just by looking at the contents, it has almost nothing to do with computer science. It doesn't deal with computing models, theory, algorithms, automata, or anything you'd expect an introductory book to cover. This is a book about (specific) programming languages.
Is there a service that can print out these massive PDFs into a bound copy? I spend enough time on screens for work that I really prefer a book for learning material.
I've used https://www.lulu.com/ for a couple similar projects and the experience was fine. IIRC the PDFs were on the order of 100 pages. I live in the US.
As someone who's new to CS, I love this resource, and while I've been coding for about a year now I've come across most of these topics, but as someone who wants to go deeper into CS, what topics would you all expect to see in a Computer Science II book?
I didn't read the book, just the TOC, but it seems like this book is only about programming, not so much about theory (automata, discrete math, calculus, linear algebra, etc), and not even so much about the engineering side of it (automated testing, algorithms, DevOps, etc).
In case anyone was wondering as I was before I searched around for it, Dr. Bourke actually has a good number of other resources available on his faculty site including lecture notes/PDFs for searching/sorting, data structures, security/cryptography, trees, and more.
> 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.