End tip mode

22 March 12. [link] PDF version

A tip every other day on POSIX and C. Start from the tip intro page.

Hey, thanks for reading. It was a fun challenge to produce a new tip every other day. I don't envy columnists whose job is to say something interesting every Monday, Wednesday, and Friday.

I'd resolved to keep at it until I reached a certain goal, which I reached just a few days ago (hint: see tip #83 on m4 macros to generate docbook XML). I'll let you know when there's a publication date.

So what's next for this blog? My real interest is in better modeling. I've blogged this before, and it still holds: I'm one of the people who learned a ton of computing technique for the purpose of going somewhere with it, and for me that somewhere is models of the world that go beyond simple linear fare for something more elaborate.

Multilevel models (which go under several other names) are built around taking one model and using its output as an input to another model. That seems like a simple enough sentence, but you're not going to get there until you can generate objects with the appropriate functions in them, and you may further need to conveniently extend an existing struct. Now that you're doing one potentially computationally expensive operation nested inside another, both had darn well better be fast, so you had better know how to thread and how to speed up your database. You're not going to write all this from scratch, so you'll need to know how to use libraries, which you can't do unless you can write a decent makefile.

It may not be evident, but I'm human, and I want to have an easy time at the computer, so within C's grammar, having functions that can take in lists of arbitrary length and functions that take named and optional arguments saved my life. Partially-featured debuggers are like walking around a dark room with sunglasses on (R debug(), I'm looking at you), so you'll be using GDB and you'll need to know how to print all these elaborate structures in the debugger. Having a decent shell and knowing how to use it will also make all this less painful.

And you'd darn well better well have a decent documentation system, or else you'll get lost in your own maze.

So that's how I wound up here. The goal has always been the same: I want to be able to go beyond computationally cheap models and more accurately portray the world around us. It's 2012, and you'd think that we'd be able to do that without knowing anything about all this low-level stuff, but we're not there yet. Maybe the stuff I'm working on will help us to get there. I'll write more on the goal of better modeling in future, sporadic blog posts.


[Previous entry: "How to learn a new programming language"]
[Next entry: "The book version"]