Congrats on launching the early access! I'm familiar with data-oriented programming from Clojure and F#, and I'm interested in seeing how you approach it in Java, so I just picked up a copy (ebook). Wish you all the best on completing the book!
I can highly recommend excellent Domain Modeling Made Functional by Scott Wlaschin for an F# book that touches on a lot of the ideas which back data-oriented programming (namely, representing your domain as strongly typed data).
The problems are indeed of very high quality. But it can be a difficult place to start. For example, even the very first problem has an overflow gotcha built into it. Also, Kadane's Algorithm appears as an early problem even though several mathematicians and computer scientists failed to discover it: https://en.wikipedia.org/wiki/Maximum_subarray_problem#Histo...
I share that sentiment. I've been practicing Competitive Programming off-and-on for some years now. I still struggle a lot with it. But sometimes I manage to come up with a nice solution, and that makes it all worth it to me.
When I make no progress at all, I take comfort in an anecdote I once read about the statistician Jimmie Savage [1]:
"Jimmie had what he called 'a long-standing neurosis about Pólya-Szegö' (the most famous and long-lived problem book in analysis). Even when he was working on his first (and major) book in Paris, he was spending evenings on that neurosis. 'Pólya-Szegö humiliates me', he wrote. 'I never really know what's going on, but I can now work quite a few of the problems and seem to learn thereby some things of general interest.'" [2]
You're right that the searching and sorting methods discussed are elementary, but note that the article is about how to prove the correctness of the methods (validity and termination); so it's not just the usual fare about binary search and insertion sort - the article's treatment of those methods actually builds on the transition system theory developed at the beginning. That said, this note is indeed used for CS 101 at Aarhus University - more specifically, it's used in the "Algorithms and Data Structures" course that first year CS students go through.
Interesting. It's a really strange mix to me. They seem to start talking about safety and liveness properties, but only mention them a grand total of 4 times, and avoid mentioning anything related to them after page 17... in an 81-page book whose subject is ostensibly "Transition Systems", in big letters, which are neither algorithms nor data structures, but model of computation. Surely, if the goal is to talk about transition systems, there would be a LOT more that would be said about safety and liveness properties, and the logic surrounding them? They're generally introduced in graduate or advanced undergraduate courses teaching temporal logic. It's kind of bizarre to me to mention them so briefly and then move on so quickly (what would be the point of doing that in an introductory CS course?), but maybe it'll make sense if I actually read the book? Definitely seems like an unconventional approach on its face.
Sure, but I agree with parent's comment that it's a... weird turn?
When one introduces transition systems, I usually expect "yeah, now he's going to define a labeled transition system, then introduce modal logic, maybe temporal logic, definitely bisimulations, maybe Van Benthem".
Obviously one can do proofs of elementary algorithms with that formalism, it's just a bit unusual, that's all.
Those are some very nice insights, thanks for sharing them! Can you recommend a good resource on writing a parser by hand that doesn't bail on the first error? Or would you instead suggest studying the source code for e.g. the rust-analyzer parser?
In that case, they're parsing a haskell-like language and can use indentation as a guide for how far to skip ahead.
In a C-like language, I'd imagine you'd use braces or semicolons to see how far to skip ahead - the error bubbles up to a parser that knows how to recover, like say a statement or function body, it scans ahead to where it thinks its node ends and returns an error node, allowing the parent to continue.
I felt the same way when I first wanted to try the language (have to use Windows for work). I went to clojure.org only to find the message:
Installation on Windows: Not yet available - see Leiningen or Boot instead.
That was a disappointment to me, seeing as the language has been around for more than 10 years now. Also, when I went to try the Leiningen route I found that the installer wouldn't work on Windows 10:
So I decided to try another language instead... But eventually I returned to Clojure and managed to get it up and running by using the fix that's suggested in the GitHub issue above. I'm really enjoying the language, but I fully agree that it can be frustrating to install on Windows.
The leiningen setup has been fairly stable, if still a bit obnoxious these days. It's a bit more difficult to get the supporting tools up than the language, in my opinion.
That's disappointing. I've been using clojure with windows 10 and didn't run into this problem, but I think I used https://scoop.sh/ to install it. I'm not really interested in the clj tool and deps.edn until it's gone through a few releases.
The book doesn't touch on applications. Since you're studying applied math, you might want to supplement it with something like "Calculus with Applications" by Peter Lax and Maria Terrell.
Holy cow, check out that review: don't waste your time trying to teach this to an average undergraduate math major because it "would largely amount to swine facing pearls not meant for them."
I'm familiar with the expression. Its use here indicates that the reviewer believes the world is divided into those who are smart enough to follow the book and those who are wastes of time.
If it's not obvious why that sucks, imagine going to this professor's office hours if you're having trouble following a proof. Imagine that, rather than thinking you might just not have seen this style of proof before and trying to walk you through it, he indicates you aren't cut out to understand it and suggests you change your major.
(If it sounds like I'm being too harsh based on that one data point, after I read the review I went and looked up the professor on ratemyprofessor.com, and that seems to be his approach to struggling students: that he's weeding out people who just can't learn the material, not people who just got stuck because they're lacking the mathematical sophistication or exposure or confidence they need, or people who are learning more slowly and will be fine if they put in more time and effort and come up with better strategies. Not sure how a professor at Loyola Marymount decided he's qualified to be The Gatekeeper of Mathematics, but there it is.)
It doesn't really imply that. He just says, a bit stridently, that he thinks the book is targeted at people who will make maths the primary focus of their study. The other stuff is mostly you extrapolating a lot from a single offhanded remark. Reviews are not office hours. Going out to cherrypick additional 'data' doesn't really make your conclusion more sound. The dude wrote some sentence you don't like and next thing you know he's Vinz Clortho the Keymaster of Office Hours.
Well, if you're going to take the high road and give him the benefit of the doubt, I won't argue further. Maybe I'm just being cynical.
But in the review he wasn't just talking about "people who make maths the primary focus of their study." If he had just been talking about students' areas of interest or work ethic I would never have objected. It was specifically this: "One should pick one's audience carefully... and treat these gifted kids like apprentices." In my experience that approach misses a lot of talented people who were different enough not to get matched by the "gifted" filter.
most serious US math programs have honors sequences that are aimed at students who intend to go for a PhD and who are often starting with post-calc-I/II/III courses from the very beginning. tao says right in the introduction that this text is for such an honors sequence at UCLA. so, yeah, this book is explicitly written for undergrads who are being groomed to enter elite graduate programs because they did the work (before college) to fit that profile.
in the US, i believe the real analysis course for non-honors courses at R1s is often based on something like ross, abbott, or bartle & sherbert, whereas for non-R1s (where most math majors will be teachers) it may be based on something like lay or wade instead. these books are more accessible to students with less mathematical maturity.
i think what the reviewer is saying is that it would be a mistake to use this book in one of those non-honors courses with a poor faculty-student ratio. even if you do have some students who have the interest and ambition, you'd be doing a disservice to the rest. you'd be exceeding the level of interest for most and unable to support anybody adequately.