Looks like I’ve got a busy autumn ahead! Read on for two pieces of news that I’m very happy about.
In September, I’ll be teaching a Haskell workshop at the Strange Loop Conference in St Louis. Here’s the abstract:
Modern programming presents a daunting array of challenges: proliferating technologies, messy inputs, unreliable networks, huge volumes of data, how to verify that results are correct, making it all fast enough. The Haskell programming language is well suited to addressing this broad range of needs, as it uniquely combines conciseness, safety, and high performance.
In this fast-moving, interactive tutorial we will learn Haskell by developing a realistic analytic application: we’ll crawl a web site and rank its pages in order of authority. This combines some very modern concerns: network programming; handling dodgy HTML; big data; and number crunching. With our emphasis on getting real work done, we’ll show off some of Haskell’s compelling features and demonstrate how they help us to develop dependable, easy to understand code.
There’s a ton of other great speakers lined up for this year’s Strange Loop, so if you like learning from, and talking with, people who are excited about software, this will be a great conference to attend.
As if that weren’t enough, I’m excited to be working with David MaziÃ¨res on a new class at Stanford University, "CS240H: Functional Systems in Haskell".
As far as I know, this will be the first academic course of its kind, where we focus on the use of functional programming techniques to build solid, fast, secure systems software. Intrinsic merits of the class aside, it’s going to be a lot of fun to teach this class this in the educational cradle of Silicon Valley, where systems software is the bread and butter of a lot of research and commercial innovation.
We’ll start off with some familiar topics: the basics of Haskell, laziness, monads, parsers, and all that. But from there, we’ll integrate testing, reliability, and debugging; performance tuning; interfacing to native code; concurrency and I/O paradigms; language extensions; meta-programming; and applications to the web and security.
We’re also looking at bringing in some prominent guest lecturers from the Haskell community to talk about topics of interest to them. I’ll name names when we have them confirmed.
David and I are both very much motivated by writing code that’s clean and fast, so as much as we’ll spend time talking about theory, research, and academics, this will be a very hands-on "let’s bang out some awesome software!" kind of affair.
Here’s a rough outline of what the course will involve:
A couple of "Haskell basics" classes.
Laziness: its applications and pitfalls.
Monads and parsers; programming in continuation-passing style.
Tricks for debugging and performance tuning.
Reliability: design for robustness; property-based testing with QuickCheck; code coverage.
The Iteratee/Enumerator paradigm for I/O.
How to use the foreign function interface, build interfaces to native code, deal efficiently with data in various contexts, and generally think about memory. Possibly also coupled with discussion of the Haskell networking API.
Concurrency and parallelism: event- vs thread-based concurrency, Software Transactional Memory, parallel Haskell, data parallel Haskell, repa.
Library-level optimization: function specialization, dictionary passing, RULES pragmas, stream fusion.
All the gnarly things you can do with functional dependencies and type families, as well as other relevant extensions such as GADTs.
How Haskell is implemented, to give students some idea of what is actually going on.
Generic programming: SYB and fun with Data.
Web-related topics? formlets, plus maybe some cool Continuation type tricks. Haskell database interfaces and interesting things you can do with types, HList/HaskellDB.
Language-level information flow control.
Case studies of real systems in Haskell.
I know that some SF Bay Area locals have questions about the possibility of auditing the class, whether materials will be available online, and the like. I don’t have answers yet, but stay tuned.