Category Archives: Books

Book review: What The Best College Teachers Do

Someone told me something a while ago. I wish I remembered who it was. I think it was someone on IRC – probably in #haskell on Freenode or #math on EFNet.

Teaching is impossible. All you can do is help people to learn.

At the time I likely dismissed it as trite and meaningless, because I have a tendency to do that that’s taken me a long time to reign in, but it was a good turn of phrase so it stuck with me, and over time I’ve come to realise just how true it is.

What The Best College Teachers Do, by Ken Bain, is a book about how you can help people to learn.

It starts from the novel perspective that rather than trying to fit education to some preconceived notion about how things should work, we should instead look at what actually happens in practice and see what did and didn’t work.

I tend to disagree with people. Even when I think they’re mostly right there’s usually something I think they’ve not thought through properly, or that is simpler or more complicated than they think. It’s nothing personal, it’s just a thing that happens.

That’s not what’s going to happen here. I pretty much agree with everything in this book. And not in a “Oh, well, yes, that’s obvious” sort of way. It’s more of the excited jumping up and down sort of way where you’re shouting “This. Yes. This. What they are saying is exactly what I wanted to say only properly thought out and way better put”, only where that’s usually about one particular turn of phrase or short essay this is an entire book. Very little of the information in it was surprising per se, but it’s the lack of surprise you get from having a whole bunch of things you knew but didn’t know you knew suddenly clicking together into a coherent framework.

If I had to draw some highlights from the book other than “Go read the entire thing”, they’d be as follows:

  • Attempting to pour knowledge into peoples’ brains simply doesn’t work
  • Very few people have learned to learn or to engage critically with a subject, because there’s no class for it and you’re just expected to sort of pick it up (or, worse, it’s not considered important for you to pick it up). This is such an essential skill that in order to teach someone anything you must also teach them this
  • Students have built up mental models of how things work which may be wrong and may need to be unlearned. It is important to make sure that they are not just learning to parrot knowledge but are learning a new way of thinking about the world.
  • The best way for a student to learn a subject is for them to be interested and engaged with it
  • The best way to get someone interested is to connect it to questions and subjects they care about and to use it to study those questions
  • The easiest way to kill someone’s interest is to destroy their confidence in their ability
  • You can bolster peoples’ confidence by setting high but achievable standards and maintaining unwavering confidence that they can achieve them. This is also a good way to avoid problems of stereotype threat, where someone is reminded that “people like them” aren’t “supposed to” be good at this subject and do worse as a result
  • Treat your students as human beings and engage with them as equals.

The above is only a bit of a random and paraphrased collection of some of the best bits of the book. Seriously, if you have any interest in the subject of how to teach people, go read the whole thing.

This entry was posted in Books, Uncategorized on by .

What books have made you a better person?

This post is largely an aggregation of some conversation on twitter that I want to preserve for posterity and share with a wider audience.

Yesterday I asked:

Question: What books have you read that you’d say improved you as a human being? (Ethically, rationally, creatively, whatever),
I’m aware that’s a bloody hard question. I’m not sure I can answer it.

Here are the responses, in roughly chronological order.

  • @alexjs: 1984 taught me at an early age to question misinformation. HHGTG taught me that ignorance can be even better…
  • @mdreid: Singer’s How Are We To Live. DFW’s Infinite Jest. Feynman’s QED. Mandelbrot’s Fractal Geometry of Nature. Coetzee’s Youth.
  • @etorreborre: I think it was this one: http://amzn.to/kl9Mjv (psychology)
  • @davidpeto: American Psycho.
  • @riffraff: excluding others already suggested, “King Solomon’s Ring” by konrad lorenz, taught me “human” behaviour is not so human after all
  • @wgren: Stephen J Gould – “The Mismeasure of Man”. Charles Stross – “Accelerando”. Carl Sagan – “The Demon Haunted World”.
  • @newsmary: In that case, Faulkner’s Absalom, Absalom! tends to be the first one I recommend to storytellers.
  • @illyrica: I Fought the Law, Dan Kieran. Chinese Whispers, Hsiao-Hung Pai. Contingency Irony & Solidarity, Richard Rorty
  • @cemenzel: 1984; The Demon-Haunted World; The God Delusion. None really changed me much, but made me more aware.
  • @lordcope: Full Catastrophe Living; Getting Things Done; The Little Schemer; Crucial Confrontations; 7 Habits; Getting to Yes.
  • @reyhan: Neuromancer and The Adventures of Endill Swift
  • @channingwalton: zen and the art of motorcycle maintenance, Tao te Ching,Timeless Way of Building (look at things differently)
  • @jarhart: Working backward – Learn You A Haskell; Sex, Ecology Spirituality; No Limit Hold ‘Em Theory And Practice; Rich Dad, Poor Dadu
  • @wgren: Also- Diamond: “Collapse”. Wright: “Remembering Satan”. And ofc 1984, Brave New World, Postman: “Amusing ourselves to Death”
  • @toluju: Not sure if it’s been mentioned, but Sophie’s World has a pretty big effect on me.
  • @kssreeram: “If you want to write” by Brenda Ueland. More than just writing, that book is about self-expression and creativity.
  • @DanielJMaxwell: Domain Driven Design by @ericevans0. It looks technical but really it’s about communication. Every human being should read it.
  • @dylanbeattie: ‘Chess for Young Beginners’ – the book that taught me that you can learn things from books. I can remember every page vividly.
  • @dylanbeattie: Chaos (Gleick). Every Rough Guide I ever read. Andrew Martin’s “How To Get Things Really Flat”, the first Dirk Gently novel…
  • @obs3sd: To Kill A Mockingbird has stuck with me for over 30 years
  • @dylanbeattie: …and Leonard da Vries Book of Experiments. Neuromancer. Neal Stephenson’s Baroque Cycle. Does the Jargon File count?
  • @paraseba: If “Les Misérables” doesn’t improve you, I bet you’re a statue
  • @runarorama: Ethically: Getting Things Done. The Virtue of Selfishness. Hávamál. And of course The Nicomachean Ethics.
  • @palfrey: Godel, Escher and Bach
  • @dcsobral: The Players of Null-A, Hellspark

Feel free to add more answers in the comments.

Myself, I still don’t have a good answer. But maybe when I’ve got through the above list I will.

This entry was posted in Books, Uncategorized on by .

Book Review: The Art of Assembly Language

I’ve been meaning to get a handle on a lot more low level programming details for a while. I can do C, more or less, but I only had the vaguest notion of the lower level CPU architecture and assembly language. While I was over in the states, Victoria made the mistake of taking me into a book store. I emerged several books later. Among them, The Art of Assembly Language. This post is a review of the book. Well, ok. It’s more of a rant about the book.

First off, let me say this: I liked this book. I read it cover to cover (although a few of the chapters I only skimmed), which is extremely rare for a programming book. I can’t offhand think of another example of one I own (of which there are many) which I’ve read that thoroughly. Most of them I dip into and read chapters out of order as I feel like it. I came out feeling like I had a much better understanding of the way the x86 architecture works and various details that had previously escaped me. It’s interesting and largely well written.

So, it’s a good book, and I’m glad I read it. And that’s the last positive thing I’m likely to say about it in this post. The rest of the post is me being mean about its flaws.

First off: After reading this book, one comes out with a good sense the way various aspects of assembly are constructed and used. It clears up a lot of misconceptions you might have had if you don’t already know assembly and provides a high level sense of what makes up an assembly program (Examples: I had previously assumed that the stack was purely a higher level construct and didn’t have any specific CPU support. I also hadn’t realised quite how significant registers were for… well, everything, or the way the FPU was set up in relation to the rest of the CPU instructions). What it doesn’t teach you to do is write assembly.

The text uses High Level Assembler. This is an interesting pedagogical tool, as it certainly helps to remove a lot of the scariness of writing assembler (compare the hello worlds for example). The problem is that it’s not really an assembler. Instead it’s the bastard offspring of a highish level language (well, low to mediumish. Somewhere a little above C but below C++) and x86 assembly. Worse, the bits that look like x86 assembly often aren’t. Some of this takes the form of relatively harmless little extensions. e.g. in x86 assembly the mov instruction may only move data between registers or a register and a memory location. You can’t mov between two addresses in main memory. In HLA you can. mov(x, y) translates to push(x) pop(y).

If you know your assembly, you’ll just have spotted the other far more insidious way in which it’s different (I do not know my assembly, hence only discovered this on a) Reading some NASM source and getting very confused and b) Reading FAQ entry 8). The operands are backwards from intel’s mnemonics. Mostly. Except when they’re not. So in other words if you learn to write HLA you will most likely completely destroy your ability to write other assemblers because you will constantly get fuddled by operand order (ok, that’s probably not true. I suspect a few weeks with an assembler and someone standing over you with a big stick would cure that).

But that’s ok. I mean, surely HLA is a mature and well tested product? It’s been around for over a decade. If it’s that much better than existing approaches to assembler, what’s the harm in doing things differently?

Um.

Setting aside any philosophical issues with the way HLA does things, the author repeatedly and insistently describes the current implementation of HLA as horrible, not designed for performance and a prototype. This does not exactly fill me with confidence.

So, what does HLA add on top of x86 assembly?

  • A nice standard library.
  • In particular, good String handling (better than C’s in my opinion).
  • Support for composite datatypes (records, unions, pointers, arrays)
  • A calling convention for passing arguments to procedures. I’m not thrilled by this – something like it is definitely useful to have, but the calling convention chosen suffers from the C problem of making it all too easy to copy large amounts of data around on the stack (more so: It passes arrays by value).
  • A macro language (the author seems to be convinced that this is the most advanced macro language ever. It’s not. It’s a half assed scripting language built into a preprocessor. It’s not really better than using something like fmpp or similar. It’s not even close to lispy macros).
  • Ten thousand different types of loop.
  • Exceptions ?!
  • Objects ?!?!

The exception subsystem makes me particularly mad. The book goes into a great deal of detail (too much detail) about how all the different control flow extensions are implemented and is completely silent on the subject of exceptions. I assumed that this was an advanced subject left to the HLA manual. Not so much – no description of detail there.

So, we have a high level feature whose implementation is undocumented and which is used in many places in the standard library. It’s good that we’re writing assembly here – it really lets us see what the close to the metal programming is like.

The objects section is just sad. I don’t really have anything more to say about it than that.

As a tool for teaching, HLA serves its purpose, but it would work a lot better if it were heavily trimmed down and made less of an attempt at being higher level than normal assembly and more of one at being a lot of useful libraries, some extensions for procedure calls and a better macro language. As it is, I certainly wouldn’t want to program in it.

This entry was posted in Books, programming on by .