Teaching systematic program design to industry folks?

Hello, Racketeers!

I'm part of a new initiative to teach software design at Google, and HtDP's idea of systematic program design has been on my mind lately. I recommended the book recently in an internal mailing list thread, but I felt I had to add the following caveats:

  1. The book is aimed at first-year college students taking a semester-long course, not experienced engineers who only have a few hours (at most) to learn a new idea.
  2. Because the book is targeted at first-years, it's largely focused on "programming in the small", with the largest programs probably being around a few hundred lines. I know one of the authors (Matthias) has thought about writing some sequels, like "How to Design Components" and "How to Design Systems", but hasn't had the time.

Has anyone here had success with teaching systematic program design to folks already in industry? What methods or resources have you found that worked the best?

Self-study of HtDP is certainly one option, but I wonder how useful it is without instructor feedback on the student's code. Self-study would also be a big time investment for engineers who have lots of things they should be learning but very limited time to do so (maybe an hour or two a week). I wonder whether there are shorter options that at least give a taste of the idea, or perhaps a 30-60 minute talk to "sell" engineers on the idea so they want to invest more time learning about it.

Thanks,
Jonathan

P.S. We're also organizing a monthly internal tech talk series about software design. If anyone here is interested in giving a 1-hour talk (including time for Q&A) about some of the ideas in HtDP to an audience of Google software engineers, please let me know!

5 Likes

Gregor Kiczales How to Code: Systematic Program Design (simple exercises, but to learn the systematic design method, that's "a feature, not a bug")

1 Like

I regularly teach FP to industry folks using DeinProgramm, essentially a German-language version of HtDP.

We also teach software-architecture classes as a follow-up, usually using Haskell or Scala, mainly to give the attendees an idea of the variety of languages and approaches. This could be done in Racket, too, though.

Always happy to talk about this.

Regards,
Mike

2 Likes