Rabbit Holes, Preliminaries
Preliminary rabbit holes
This will be our starter hutch of rabbit holes
RC-hole: critical; get into it!
RO-hole: optional; but it’s good stuff that helps
RFYI-hole: for your information; interesting side-trip
. Keep in mind
that the length of this “preliminaries” list may be long, but you
should do what you can when you can. After all, this is open-ended,
with you as the timekeeper and the pacesetter. The goal is, again, to
climb the on-ramp to college-level comp-sci, e.g., computational
methods.
There will be two main texts:
- The Haskell Road to Logic, Maths and Programming by Kees Doets and Jan van Eijck, (Amazon) and
- Thinking as Computation by Hector Levesque, (Amazon) .
We will work through these at a beginner’s, secondary-school level.
Math rabbit holes
It’s really important that we get familiar with the math of the computer science world. Luckily, most of comp-sci math comes directly from, builds on top of long-established abstract algebra, discrete math, and math logic, i.e., there are plenty of good introductory materials. Most of this is just getting familiar with the definitions and terminology. We’ll start with set theory, which is a must. Then we’ll learn about mathematical logic. Then we’ll branch out into the other areas of a typical comp-sci discrete mathematics curriculum.
⌜🐇
- The LibreTexts series on Mathematical Reasoning - Writing and Proof by Ted Sudstrom at Grand Valley State University is a good starting point for us. Start here with Set Theory, the concepts of which we’ll be diving into straightaway. Then go back and start at the beginning with the chapter Introduction to Writing Proofs in Mathematics and make as much progress as you can through the book. (RC-hole)
- …or try LibreTexts’ Applied Discrete Structures (Doerr and Levasseur), which combines many comp-sci preliminaries very well. Again, Haskell, probably more than any other language, is based on this stuff. (RC-hole)
- Another great treatment of sets, etc. is from Oscar Levin’s online Discrete Mathematics: An Open Introduction. Sudstrom, Doerr/Levasseur, or this Levin treatment would be great to start with. And as mentioned with the previous two, once done with sets, go back and start at the beginning. (RC-hole)
- We need to learn mathematical logic, since logic is simply baked into every programming language. Try this LibreTexts series on logic to get more thorough than the previous rabbit hole. Pay particular attention to the notation used on logic operators and the terminology as well. This stuff comes up all the time in programming. (RC-hole)
- Jessica Sklar is a math professor at Pacific Lutheran and her online book First-Semester Abstract Algebra: A Structural Approach is meant for college math majors, but here we can get another view of sets and then functions. Do something between a grok and a skim for the first two chapters. (RO-hole)
- These basic set theory slides with their tie-in to Haskell at the end are very good as well. Do something between a grok and a skim. We’ll eventually be covering all the material therein. (RO-hole)
- Browse through this Wikipedia Set article Mathematics as experienced in Wikipedia’s articles can be like trying to drink from a full-blast fire hose; still, good can be gleaned. And it’s good to learn how to deal with the Wikipedia way of handling math and CS. , paying special attention to the Basic Operations section—maybe even rabbit-hole into the union article to understand some basic algebraic operations on sets. You’ve probably seen this stuff before with Venn diagrams; this is some of the algebra behind the diagrams. (RO-hole)
- Make sure you get comfortable with LaTeX math typesetting. What’s that you ask? Watch Trefor Bazett’s excellent intro video. After that, have a look at the MathJax basic tutorial and quick reference. At this point you should open up Emacs, open up a test org mode buffer and start experimenting. We’ll concentrate on MathJax since it
🐇⌟
Programming rabbit holes
We will start experimenting with Haskell in the first chapter Numbers. Make sure you’re getting along with the first rabbit hole, Learn you a Haskell…. Try to get through it ASAP. You can’t know Haskell enough. We include so many learning sources mainly because if you didn’t get something first try from one source, you can try it in another source. But yes, LYAHFGG should be start-to-finish grokked.
⌜🐇
- Learn You a Haskell for Great Good! (LYAHFGG) is a widely-used, often-suggested beginners site for starting out with Haskell. Work through at least chapters 1 and 2 to understand a lot of what we’ll be doing with Haskell below Truthfully, this will be your go-to reference/tutorial for the immediate CIMIC future. Get going with it and try to self-pace your way through it all. It’s not in-depth per se but will get you in the Haskell ballpark, so to speak. . Pay particular attention to lists and list comprehensions. (RC-hole)
- A site haskell.org is suggesting is the UPenn course CIS194. We suggest the Spring 2015 version since it includes haskell source files. This is a college course, but for beginners. Click on the Lectures & Assignments link at the top. (If you’ve got our github repository there’s a directory containing all the Haskell files.) (RO-hole)
- An older but still go-to site recommended by many is the Real World Haskell site (also book). As the title suggests, it has a more real-applications slant, and yes, the material can get into heavy lifting, but one great advantage is it has prodigious comments attached to ever web page section. So if you didn’t understand something, typically somebody has already explained it in depth.
- Book-wise, a nice, well-paced text would be Get Programming with Haskell by Will Kurt. Will bridges a lot of chasms between beginner, intermediary, and advanced ideas. In other words, GPWH gives plain-English explanations of things other treatments might go deep into theory on. Really helpful, that. (RO-hole)
- Maybe try the Australian National University Haskell course COMP1100. It came highly recommended.
- Another big favorite for Haskell starters, but slightly more challenging is A Gentle Introduction to Haskell 98. AGITH uses more math terminology, which is what we’re doing, but from the shallow end first. (RO-hole)
- You might take a look at the Haskell Wiki article The Haskell Wiki can be like trying to drink from a fire hose, but good can be had for the brave and virtuous. too, especially the examples, but don’t expect to fully understand it yet. (RO-hole)
- Another big-league site to be aware of is the Rosetta Code site. Here you can search on hundreds of algorithms and numerical analysis articles, each task done in the code of dozens of programming languages Category:Haskell. . Here you get to compare Haskell with other languages. One thing you’ll notice consistently is how much shorter Haskell programs are than other languages. That’s because Haskell is very powerful and packs a large punch when solving tasks. (RFYI-hole)
🐇⌟