Teaching & Learning

Design Concepts in Programming Languages

Design Concepts in Programming Languages

Below are all current draft chapters of Franklyn Turbak and David Gifford's Design Concepts in Programming Languages. This is a book based on MIT's graduate programming languages course (6.821). Many people helped in developing parts of the book, especially Mark Sheldon, Trevor Jim, Brian Reistad, and Jonathan Rees.

Haskell for C Programmers

Many people are accustomed to imperative languagues, which include C, C++, Java, Python, and Pascal....For [beginning] computer science students,...Haskell is weird and obtuse....This tutorial assumes that the reader is familiar [only] with C/C++, Python, Java, or Pascal. I am writing for you because it seems that no other tutorial was written to help students overcome the difficulty of moving from C/C++, Java, and the like to Haskell.

I write this assuming that you have checked out...the Gentle Introduction to Haskell, but...still don't understand what's going on....

Haskell is not 'a little different,' and will not 'take a little time.' It is very different and you cannot simply pick it up, although I hope that this tutorial will help.

If you play around with Haskell, do not merely write toy programs. Simple problems will not take advantage of Haskell's power. Its power shines mostly clearly when you...attack difficult tasks....Haskell's tools...dramatically simplify your code....

I am going to put many pauses in this tutorial because learning Haskell hurt a lot, at least for me. I needed breaks, and my brain hurt while I was trying to understand....

Now I'm working on a video game in Haskell...and we've written a short tutorial...on HOpenGL....

Haskell has both more flexibility and more control than most languages. Nothing that I know of beats C's control, but Haskell has everything C does unless you need to control specific bytes in memory. So I call Haskell powerful, rather than just 'good.'

I wrote this tutorial because Haskell was very hard for me to learn, but now I love it...."Haskell is hard!" "You can't write code the way I know how!" "My brain hurts!" "There aren't any good references!" That's what I said when I was in college. There were good references, but they didn't cover the real problem: coders know C.

New explorers might enjoy Eclipse IDE support (version 3.1M7 or later only). Old hands might help improve it.

Haskell compiles to C (cf. JHC) and machine code.

Functional and Declarative Programming in Education (FDPE05)

A one day workshop on Sunday, 25 September at ICFP05.

I don't often post CFPs and the like, but since it's been awhile since FPDE02, and since many here have an active interest in these topics, I made an exception.

Links to interesting projects related to FPDE, are more than welcome.

Richard Hamming - "You and Your Research"

During a discussion on the subject of passion in programming, David Bremner on #haskell pointed out Richard Hamming's 1986 talk You and Your Research. Here's a taste:

At Los Alamos I was brought in to run the computing machines which other people had got going, so those scientists and physicists could get back to business. I saw I was a stooge. I saw that although physically I was the same, they were different. And to put the thing bluntly, I was envious. I wanted to know why they were so different from me. I saw Feynman up close. I saw Fermi and Teller. I saw Oppenheimer. I saw Hans Bethe: he was my boss. I saw quite a few very capable people. I became very interested in the difference between those who do and those who might have done.

Hamming clearly describes both the difference between the two and how you can be one of those who do.

Sam Ruby: Continuations for Curmudgeons

This essay is for people who, in web years, are older than dirt. More specifically, if there was a period of time in which you programmed in a language which did not have garbage collection, then I mean you. For most people these days, that means that you had some experience with a language named C.

It is a pretty safe bet that -- despite your deep technical background -- you find that you have some genetic defect that makes it completely impossible for you to understand articles with titles like Continuations Made Simple and Illustrated. And for some reason, that bothers you.

A nice blog post that explains a number of basic PL concepts (value vs. reference, continuations, closures, coroutines) using examples from a bunch of popular languages (C, Javascript, Ruby, Python, BASIC, Java).

Pugs, Practicing the Theories.

A lot of language theory goes past here on Lambda the Ultimate, but we rarely see that theory directly impacting commercial programmers.

I'm a great fan of theoretical concepts like arrows, but at the same time I'm a self-employed programmer interested in solving my clients' problems.

Pugs is notable in that it profitably uses recent developments such as GADTs and Template Haskell for an implementation of Perl6.

I recently became a regular on the #perl6 irc channel and soon after joined the list of committers.

In just a few days I've seen a lot. I've seen enthusiastic members of the Perl community learning Haskell. I've seen myself learning Perl. I've also seen how daily Perl programmers work with abstractions like monad transformers. I've seen how some structures are easy to extend for programmers new to both the Pugs codebase and Haskell.

The Pugs project was started 64 days ago by Autrijus Tang, as an exercise while reading TaPL. Pugs already includes network and threading primitives. New tests and code are add at an amazing rate, as evidenced by the smoke tests.

I don't know if I'll end up using Perl after Pugs is written, but I am learning how to practice the theory of programming language design and implementation.

Building a Modern Computer From First Principles

A computer science textbook that wasn't discussed here before, and that many of you may haven't encountered yet.

The basic approach is summarized in the title of the authors presentation From Nand to Tetris in 12 Steps (3.5 MB, Powerpoint).

I am sure LtU readers will find a lot to complain about (they authors build an OO language...), but I am fond of the hands on approach, which is kind of similar to the approach taken by our favorites: SICP, CTM, EOPL etc.

Update: The published book is The Elements of Computing Systems, Building a Modern Computer from First Principles. Noam Nisan and Shimon Schocken, MIT Press, 2005.

Don Box: Teaching my kids to program

I think Box should get some input from the LtU community...

Amazon Web Services in Scheme

Phil Windley is having fun with Scheme and XML (SSAX). His latest set of examples show how to use Amazon Web Services from DrScheme, and how to write DrScheme servlets.

Continuations must be next, right? :-)

Getting Started

It seems to me that LtU has many new readers and contributors since moving to the new site. That's great!

Yet it seems to me that the situation right now is that LtU has readers with very different backgrounds, among them many readers who haven't studied PL formally. Others come from academia, and study PL theory for a living.

Since we have such a lively community it occured to me to start a thread for advice on where to begin aimed at those who haven't studied PL theory, yet want to follow the papers and books we discuss.

So the question, mostly directed at old timers, is to which resources would you send a friend asking for advice on learning about the theoretical study of programming languages?

P.S The early LtU archives may be helpful, since I used LtU to organize and collect the papers I read when I began my studies in the field.

XML feed