Some time ago, in response to my asking what I should write about on this blog, Sumana suggested I write about what my typical day is like. I demurred, saying that there was no typical day. For the last month and change, though, I’ve been doing an exercise in which, each day that I’m at work, I take some notes about what I did on the previous work day and what I plan to do that day. So, here’s a month (plus a few days) of daily check-ins, and you can conclude for yourself whether there’s such a thing as a “typical” day.

What I’ve been doing at work for the last month

A brief disclaimer: what’s here has been sanitized for public consumption. I’ve removed things like people’s names and the details of projects that aren’t public, and I’ve altered the wording in other ways, too. The sanitization makes it more boring, but hopefully some interesting bits remain.

  • Monday, June 29
    • Early this morning, I met with someone who is going to help my lab set up an external collaboration.
    • Today I plan to read about Delite – I need to figure out how the project I’m working on relates to it. I read one of the Delite papers a long time ago, but I need a refresher.
    • I have some code (basically a Python script and a collection of shell scripts) for doing benchmarking that I made a bunch of not-yet-pushed changes to last week. I need to confirm that it works and actually push it.
  • Tuesday, June 30
    • I meant to read about Delite yesterday, but never got to it. I’m sort of dreading it because I’m afraid the papers will be really dense and that it will be hard to distill the information I actually need.
    • Yesterday I pushed the changes to my benchmarking code. Today I had a lot of meetings, but I managed to make some fixes to one of our benchmarks – we had been including random number generation time in the part of the code we were timing, which was unfair because the different systems we’re comparing take different approaches to RNG, and that’s not really what we want to benchmark.
  • Wednesday, July 1
    • I ran into a mysterious issue in one of the benchmarks that I tweaked to not include RNG time yesterday. Unfortunately, moving the rand() call outside of the timing calls made it interact badly with some other code, most likely due to a bug in the Julia runtime (not mainline Julia, but the experimental branch I’m on). So today I fixed that, although just by moving things around until they didn’t segfault – the underlying reason for the segfault is still a mystery. I also tried to set things up so that my benchmarks will get run every night.
    • Today I chatted with a colleague who wants to improve one of the proof-of-concept tools we have. The conversation meandered into dependent types. Well, more specifically, I brought up dependent types and he didn’t run away screaming, so that’s good. I should probably dig into trying to understand what he’s done so far, but it’s pretty intimidating.
    • For the rest of the day I’m going to work on cleaning up and reorganizing another benchmark (I’ve done three so far; there will be ten or twelve total) and also send an important email about a committee that I agreed to chair.
  • Thursday, July 2
    • Yesterday, as promised, I worked on cleaning up a benchmark. Unfortunately, I’m pretty sure it’s unusable.
    • Today I thought about what kinds of benchmarks we have and how I can tell a coherent story about them.
    • I also spent a lot of time thinking about the committee I’m chairing. I need to decide who to invite to the committee, and I’ve decided not to invite any close friends, in order to avoid favoritism or the appearance thereof. That makes it harder, but I’ll figure it out.
  • Friday, July 3 was a holiday.
  • Monday, July 6
    • This morning I futzed a bit more with my benchmarking scripts.
    • This afternoon I’m going to try to do some actual writing for the paper these benchmarks will be part of.
  • Tuesday, July 7
    • I got an intro and outline written for our paper yesterday.
    • Next I’m going to investigate a breakage in one of my benchmarking scripts, and after that I’m going to either try benchmarking some more things or I’m going to take some time to read a paper I’ve been promising to look at for some time.
  • Wednesday, July 8
    • The breakage yesterday turned out to be not in my benchmarking script, but rather that the thing I was benchmarking segfaulted on one of five runs. We’ve been seeing a lot of intermittent segfaults like this. Later in the day I worked on a different benchmark and got even more intermittent segfaults, and then I tried yet another one and ran into a Matlab license issue that I’m trying to sort out.
    • Today I had another meeting about the external collaboration I’m trying to get set up.
    • For the rest of the day, I might go off in the corner and read the Delite papers I’ve been promising to read. They seemed intimidating, but they now seem less intimidating than the other things I have to do.
  • Thursday, July 9
    • Yesterday I meant to go off and read papers all afternoon, but then I remembered I needed to write a report which took most of the rest of the afternoon. I also ran into some issues doing benchmarking due to being out of /tmp space on the machine I was using, but that seems to be fixed now.
    • So far today, I’ve been dealing with administrative stuff. Later today I’m attending a talk, and after that I’ll probably finally go off and read Delite papers. I probably won’t write any code today.
  • Friday, July 10
    • The talk yesterday was great! My plan hadn’t been to write any code, but then my co-worker asked me if something I was working on was done and I had it really close to being able to share, so I ended up spending much of the rest of the afternoon finishing it up just so that I could tell him that it was done.
    • Both yesterday and today so far, I’ve had a bunch of back-and-forth with various people about how we’re going to resolve the mysterious intermittent segfault bug that’s impeding our progress. It’s not clear who’s responsible for fixing it, because it involves a subtle interaction between three parties’ code.
    • Today I’m looking into the two benchmarks that went wrong when they ran last night, and I’m probably going to make some paper tweaks. I still probably won’t get to these Delite papers I’ve been meaning to read forever…
  • Monday, July 13
    • On Friday I got a couple more benchmarks set up to work with the benchmarking infrastructure (read: “pile of shell scripts”) that I’ve come up with.
    • Today I chatted with a UX researcher about possible future collaboration opportunities. It was really fun to chat with her and learn about what she works on.
    • This afternoon, I’m going to make a small simplification to how some of my code handles file names (that I realized was possible because of a commit my co-worker made over the weekend – it seems obvious in retrospect, of course). And then I’m either going to look at setting up more benchmarks to work with my infrastructure – I only have three or four more to go, depending on how you count – or I’m going to work on fleshing out the related-work parts of our paper.
    • And there’s one other bug I want to try to characterize. Sometimes a benchmark run fails due to a segfault, which is bad, but every now and then there’s something that happens during a benchmark run that causes all subsequent runs to fail. I want to try to figure out what exactly is going on here.
  • Tuesday, July 14
    • This morning we had a meeting to discuss our paper. Today I need to write the related work section, and I’ll probably also spend some time working on the “motivating example” section of the paper, as well. I’m about to go sequester myself with some coffee and work on it all day.
  • Wednesday, July 15
    • Yesterday I got some work done on our paper: I wrote a large chunk of the related work section and part of the motivating example section.
    • Today I was trying to find a good citation for the “efficiency, productivity, generality: pick two” notion in language design, and I spent a while poking around the web and asking people before I realized that the perfect citation was in fact the Delite PACT ‘11 paper that’s been sitting on my desk in front of me and that I’ve been putting off reading for ages!
    • I had another meeting with the people I’m setting up an external collaboration with. We still need to hammer out some details, but it’s looking like that’s what I’ll be working on in the fall, and I’m pleased about that.
    • Today I might do some more work on the paper. For the motivating example section, I need to understand enough physics to explain what one of our benchmarks actually does, so I’m reading Wikipedia and various people’s lecture notes to try to get up to speed.
  • Thursday, July 16
    • I had ambitious plans for working on my paper yesterday, but didn’t actually get much done. Some people were nasty to me on Twitter and it made me sad and unmotivated. I did manage to get a bit of administrivia done, and I was able to pull and build Julia and finally got a build working after seven or eight tries. (It’s an experimental branch where builds fail a lot, due to an LLVM issue.)
    • I had a meeting this morning, and for the rest of the day, I’ll probably do more work on benchmarks. There are basically two benchmarks left that I need to get running, and they intimidate me, but it has to get done sometime.
  • Friday, July 17
    • Yesterday I had some good discussions with various colleagues where we tried to hash out where we’re going with our paper. I also managed to set up one more benchmark to run under my own infrastructure. This involved documenting a lot of previously undocumented information about how to actually run the benchmark.
    • For the rest of the day, I’m going to try to get one more benchmark set up.
  • Monday, July 20
    • This morning I listened to a hiring talk.
    • The thing I have to get done today is submitting an abstract for an internal conference, so I need to write that. After that, more benchmarking, or maybe I should work on the paper some more. I also need to review some papers, but it’s not urgent.
  • Tuesday, July 21
    • Yesterday I got the abstract submitted for the internal conference, just barely in time. I didn’t get that much done otherwise.
    • This morning I listened to another hiring talk and interviewed the candidate, and then went to a meeting about a new potential project which was interesting. I also managed to formulate a list of questions to ask when we discuss our paper tomorrow.
  • Wednesday, July 22
    • Today we had a meeting where we made some decisions about our paper. I have a lot of work to do on the paper between now and next Tuesday when we sync up again. I’ll try to work on it for the rest of the afternoon today.
  • Thursday, July 23
    • Yesterday, I said I’d work on our paper, but instead I did more benchmarking infrastructure work. Today I’m happy to report that it appears that all nine of the benchmarks I’m set up to run actually ran successfully in my overnight trial. (This is unusual! There’s typically some sort of weird error or failure.)
    • I’m about to dig into making plots for our paper based on the results, which might take the rest of the day.
  • Friday, July 24
    • I spent the most of yesterday plotting benchmark results – which always takes longer than you think it’s going to take – and then doing some tweaking to the paper abstract and intro.
    • I got some valid complaints about my choice of plotting tool, so today I’m going to try a different one. They’re each bad in their own way, but at least the plotting process will be more automated (or that’s the theory, anyway). I wanted to do more paper-writing today, too, but at the moment the plotting thing seems more urgent.
  • Monday, July 27
    • On Friday I pretty heavily refactored my benchmark results-munging code and made it so I could easily add plotting. Then I added plotting (I decided to use matplotlib) and set it up so the plots are generated automatically on the overnight benchmarking runs.
    • When I came back today, seven of the nine benchmarks had run successfully and produced plots (hooray!), and two had weird failures (ugh!). I added the seven successful plots to our paper, re-ran one of the two busted benchmarks and got it to spit a plot out, and have been investigating the other failure today.
    • I’ve also had various conversations with people about the paper; I’m still flailing around trying to understand parts of the system well enough to write about it.
  • Tuesday, July 28
    • Yesterday I learned something new about our system that made me think that our whole way of framing the paper was no longer coherent, but I talked about it with a few people, and we had a meeting this morning and figured out a way to tweak the story we’re telling.
    • Also, as of today, other people are starting to contribute prose to the paper, so I’m going to take a break from writing and just focus on data collection for today (since there’s a lot more data that it turns out we want). There’s one more benchmark that we want, and we also want some more detailed data about the ones we already have.
  • Wednesday, July 29
    • Yesterday I got the tenth (and final?) benchmark running under my infrastructure, and I spent some time working on improving our benchmark plotting (with mixed success getting matplotlib to do what I want).
    • I also switched over to our new compiler backend and tried to make sure my benchmarks ran under it. It worked fine in my limited testing, but unfortunately, they didn’t run overnight due to a silly mistake I made, so there were no results when I got here this morning. Trying again now.
    • Today, I’m probably going to spend some more quality time with matplotlib. Also going to tweak my benchmarks to collect information about compile time as well as running time.
  • Thursday, July 30
    • Yesterday I made our benchmark plotting a lot better. I got matplotlib to do something that I hadn’t known was possible, which was exciting!
    • Overnight, all ten benchmarks ran without any major problems, but they’re still only logging running time; I’m still working on collecting data about compile time.
    • Yesterday afternoon and this morning have been lots of meetings and administrivial tasks. This afternoon I’m going to write up documentation on how to run the benchmarks in an effort to encourage other people to do it.

What can we conclude from this?

I’m not sure, but here are a few comments and reflections:

  • Apparently, a “typical” day at my job in the last month involves benchmarking – so much benchmarking. I’m not sure if much can be concluded from that, though, since all this is very different from what I was doing at work half a year ago.
  • I can’t say it better than this tweet did: <blockquote class="twitter-tweet" lang="en"><p lang="en" dir="ltr">Note to people following me 'cuz I "do typed functional programming": I'm currently using Matlab, Python, Julia, and bash. At the same time.</p>— Lindsey Kuper (@lindsey) June 17, 2015</blockquote>
  • Not that long ago, a benchmark segfault or a Matlab license checkout failure was enough to really mess up my benchmarking infrastructure, whereas now it’s robust to those sorts of things. A week ago, we didn’t have plotting, but now we do. Day-to-day change can be too slow to perceive, so it’s encouraging to look back at the last month-and-change and see that progress really was made.
  • It took me a whole month to get ten benchmarks running and producing plots in a basically automated way. I’m really glad I didn’t wait until the last minute before the paper deadline to work on this, because I would have ended up having to do things in a much more manual and error-prone way. I’ve been there before, and it’s miserable.
  • I put off looking at the Delite paper for half a month and only ended up looking at it when I had a particular question I really wanted to answer. If I had looked at it – even just the introduction! – at the first moment that we thought it might be relevant, then I could have saved time. But I’m not sure how I would have motivated myself to do that. The trick might be to get questions like “who formulated the generality/productivity/efficiency tradeoff?” to occur to me sooner, but I’m not sure how to do that either.
  • I mentioned that I was sad at work one day because people were nasty to me on Twitter. The nastiness was in reaction to this tweet, which really surprised me.
  • I usually don’t do “work” work on weekends, although sometimes stuff like reviewing papers eats into my weekends, and lately I’ve been using weekends to try to finally finish my dissertation. But I didn’t take any notes on that – if anyone cares, there are commit logs!

Comments