I have been neglecting you. That’s because I started a new job last month, at a place called Smartleaf, doing Ruby on Rails development for 20 hours a week. It is fantastic. It is a lot of fun. It’s great people, good food, easy commute, and coding. I haven’t been an employee for years, so it’s quite a change for me, and in a good way. (It turns out that you can write better code without children yelling in your ear.)
But I’ve got these kids and this life and this job and I’m kinda busy.
Also, I’m supposed to be writing a book about computer science for practicing programmers. It’s meant to be an overview and sourcebook for people who didn’t get CS degrees but are working as programmers. Which, it turns out, is most of us. And when I signed on to write it, I hadn’t actually anticipated that a great job opportunity would drop into my lap, the way this one did, so I thought I’d have four or five hours a day to work on it. But suddenly I have about three minutes a day to work on it, and I’m having a really hard time. The subject matter is not easy. It is not just something I can write in my sleep. I don’t know the stuff I plan to write about. And even though I’ve lately become a big believer in the idea that you can accomplish an awful lot in just fifteen minutes, I fear that it is turning out not to be the case that you can write a book about computer science in just fifteen minutes a day.
Actually I emailed Steve Yegge about the book (partly because he was an inspiration for my wanting to write it, and partly because I wanted to use some quotes from his blog in it and wanted his approval) and he wrote back and said something like (I’m paraphrasing here): Hah, good luck. Many have tried, all have failed to write such a book. Which was a little bit depressing and discouraging, but honestly, what do you expect from Stevey?
Still, my editor is getting restive (hi Daniel!) and with good reason. Maybe we should put the book on hold, he asked, and see if it’s actually going to happen? Ick, I said. That is a terrible idea. I am going to write the damn book. Of course I can do it.
But I don’t know how. I don’t know how to do it, internets. I need your help, hive mind. I asked my friend John if he wanted to write the book with me, and he was like “hah, no.” All he does is send me links to stuff that I should read for the book, and recommend books that would be helpful, and talk about how much he wants to read the book. I asked Max to make me work on it for an hour every morning before the kids wake up, but the kids somehow magically sense when I am awake and wake up with me. And I have never been a morning person and I just can’t think at 6:30 a.m. And I have two hours on Saturday morning to myself when the kids go out to the French library with Max, so today I managed to clean the bedroom, set the robot to vacuum, and dump all the clean laundry on the bed in an enormous mountain so that I am forced to fold it before bedtime. I also went for a short walk and stopped in at the bookstore. And finally started typing this and as I am writing the family is returning, and a baby is running down the hall crying for me. So that was my morning.
And I realize how obnoxious it is that, out of amazing good fortune, I have a book contract, an actual book contract, with people who are my programming heroes, and here I am complaining about it, and basically just screwing it up.
So this is what happens: i get some bursts of energy to work on the book — like I spent two weeks reading and learning a bunch of stuff about C, and figuring out all the different ways to get segfaults, and I wrote a few pages of notes for a chapter on C, and I found awesome documents like the ANSI C Rationale on the internet, and I also read a bunch of stuff about machine architecture and cache memory and pipelining and bitwise operations and analog computing and I took a bunch of notes, and I thought a lot, and I wrote some stuff, and I made what progress I made by basically doing nothing but that, work, and cooking dinner. I mean, I basically ignored my children. I’d be like “uh huh, that’s great, but I’m really trying to understand the semantics of arrays in C right now, sweetie pie.” Oh, and I didn’t get quite enough sleep. After a couple of weeks of that I needed to do things like make plans for our trip to Europe in May (for my oldest friend’s wedding, not just because we’re decadent francophilic wine-and-cheese freaks, although we are that too, but man, that Euro is PAINFUL now) and get the taxes ready to send off to the accountant, and fight with the insurance company about various claims they refuse to pay for various ridiculous reasons. And read to my kids, and spend ten minutes alone with my husband, and parent help at Ari’s preschool, and everything else. And honestly, our lives aren’t even that busy. Our kids are not in a ton of activities. We don’t schlep around to baby music and movement classes. Ari is in no organized sports. He goes to preschool three mornings a week. Max and I each work 20 hours a week, and we have about 18 hours of babysitting.
But somehow I just can’t manage it.
What this tells me, first of all, is that nobody out there is managing it. We have far, far more time than most other parents with two children under five, and it’s still not ‘enough’. There’s an endless pile of stuff that I think should be getting done that isn’t getting done. This tells me that my ideas about what has to actually get done are just wrong, because I’m not getting a lot of these things done but things go on just the same. So I should probably just drop that stuff off my list. Like “inventory our crap for insurance purposes.” And “clean out the basement storage room”. And “start tomato seeds.”
But honestly, I’ve already dropped all that off my list. I’ve even dropped baking bread off my list, for the time being, and I’m someone who has an actual grain mill sitting on her counter. I grind my own damn wheat to make my own damn bread, and I haven’t done it in a couple of months.
I don’t watch TV or movies. The entire season 3 of Lost is sitting on my dresser waiting to be watched, but it’s an enormous commitment and I just don’t see how I can make the time. I’ve cut my newsfeeds down. I do no recreational reading except that I sometimes give an hour to the New Yorker.
Look, internets, I really want to write this book. It’s a lot of fun, except when it’s so painful I want to die or puke or something. I’m learning a lot. I think I could help other programmers figure out how to learn the stuff about computer science that they want to learn, and help them figure out why they should care. But it turns out, unsurprisingly, to be really, really, really hard to write a book. At least this kind of book. Well, I’m sure any book, really.
But am I just a big lazy whiner? I honestly don’t know. I thought maybe the book would be a year-long project, and it looks to be more like a five-year-project, especially at the pace I’m going. Now it’s true that Don Knuth is still working on his opus, but I’m not Don Knuth. Does the world need what I have to offer, or am I torturing myself and my family for an unnecessary project?
I keep thinking, okay, well, I didn’t make much progress that way, I’ll try some other way. And so I try all the hacks I know of to motivate, and make time, and make progress. And I keep trying in different ways. And when I drop it for a few days and fall off the wagon and stop meeting my goals, I just try again. So I’m sorta impressed with myself about this, that I keep trying, even in the face of basically constant failure and what feels like a pathetic lack of progress. But boy does it take an emotional toll. Writing this book (or mostly not managing to write it, as the case may be) is incredibly emotionally and intellectually taxing. Not to mention time-consuming.
I know we don’t have a ton of blog readers out there, really. But if anyone out there wants to offer some encouragement, or has any suggestions, I’d love to hear from you.
Popularity: 71% [?]
So we got some really nice links this week, and with the links, a bunch of click-throughs. And some wonderful comments, all of which we deeply appreciate. And now of course, I’m choking . I have about 20 posts in various states of readiness, from “just an idea” to “nearly done but I suddenly think it sucks and wasn’t a good idea for a post in the first place”, but nothing ready to go.
Oh wait, here’s something to keep you from dumping us off your feedreader (or dumping us faster, who knows?!). A snippet of a column by Cary Tennis, Salon’s advice columnist , responding to someone who can’t decide whether to give up a career opportunity for his girlfriend, whom he loves passionately:
You say one cannot calculate the value of a job or a relationship, but I do not think that is true. I think one must calculate it. Courts are called upon to do so. Moreover, intuitively we do it anyway. For instance, suppose that you and she settle down and have a good relationship and good jobs. Say that one day a supernatural being comes to the door and says that you must give up either the job or the relationship. Which would you choose? Which would you consider expendable? Which would you consider replaceable?
While in science many problems are difficult because they are complex, in life many problems are difficult because they are simple, but we are human and we want everything. While in the conduct of science we would never suspend physical laws to get the result we seek, in life we try that all the time: Can one person be in two places at the same time? Well, people say no, but maybe in this case … I don’t know … if I accumulate enough free miles maybe I could fly from Toronto to Oakland enough times that I could appear to be in two places at once …
I don’t think so.
If you’re reading this blog and wondering why Max and I have this crazy idea that we’ll somehow each work part-time, or consult together, or work out of the house, or do something weird and web-worker-daily-ish, and we don’t want to travel much for work and we don’t want long commutes and we don’t want to be these people, toiling away in the “Silicon Valley salt mines” — that’s why: We’ve got one life to live here, people, and we can’t be in two places at once.
Popularity: 14% [?]
The other day we put a prototype build of a web app up for our clients. Fire away at it, we said. Tell us what is wrong with it! We even had a section in the release notes called “How to be a QA person” (It’s a small project, we don’t have QA, hence our clients are, basically, QA).
Of course, we were pretty proud of our app. Of course, they came back with lists and lists of embarrassing bugs, complaints, features they didn’t understand, etc. The lists were not bracketed by nice polite “we love the app, we’ve just got a couple of teensy little issues with it.” Although the emails they came back in were entitled “Bugs 1, 2, 3, etc.” not everything in the lists were actually bugs. Developers are very defensive about “bugs”. The typical user considers anything that doesn’t work the way he wants/expects it to to be a bug. The typical developer considers bugs to be only things where they, personally, wrote code whose logic was not correct.
So Max comes in to me and says “wow, what do we do about the clients and all their bug reports?!” Our immediate emotional reaction to their emails was that they were irrationally pissed at us and didn’t understand anything about how software development works and were a pain in the ass and were probably going to fire us for giving them such buggy code.
But then we were able to sit back, take a deep breath, and reason together:
First, our clients did exactly what we asked them to do, and they did it well. They gave us fantastic feedback on the app that would help us focus on the most valuable changes we could make for them. When clients don’t give feedback, you’re screwed, because you don’t know how to make them happy. Our first emotional response is normal, and we’ll probably never get rid of it. In fact, we probably shouldn’t get rid of it, because the emotional response is there to kick our asses.
However. (And this is my completely based-on-popular-science-books-by-eminent-yet-readable-professors-theory). When dealing with other humans, we humans expect a fat pipe. We evolved for person-to-person, face-to-face contact. Our faces, bodies, and voices are unbelievably expressive. Compared to the fat pipe of person-to-person contact, words in email are a trickle of information. So when we get an email that elicits any kind of emotional response at all, our brains start flailing around wildly, looking for all the meta-information we expect to come along with it: the expression on the face, the tone of voice, the direction they were looking, and so on. And when we can’t find it, we make stuff up. In no time, we’ve filled up the fat pipe and satisfied our “what do we do now?” programming with _entirely false, absolutely imaginary information_. Those of us who are naturally pessimistic generate false, depressing information. This makes our initial, proper and correct ass-kicking emotional response escalate into a neurotic, counterproductive, self-perpetuating emotional response. Not good for business.
One moral of this story is that developers should not take user complaints personally. This is obvious but easily forgotten. The other moral of this story is the one I’m really interested in: when our brains don’t have the information they expect to have, they just make it up. And it’s really easy not to notice when it happens, because the made up information looks just like all the actual-based-on-fact information our brains have collected. Hence the unreliability of witnesses.
The lesson, then, is that, for stuff that matters, _don’t assume your brain has the facts right_. Take the time to sort out what you can possibly have evidence for from what you just made up because you _didn’t_ have any evidence.
Popularity: 7% [?]
Here we are, in Internet Boom 2.0. As they are fond of saying on Battlestar Galactica, “all of this has happened before; all of this will happen again.” Join a fabulous startup, get rich quick. Take your dogs to work. We have a work hard, play hard atmosphere, and all the free $junk_food you can eat. Just completed our second round of funding.
And so goes the business cycle.
Meanwhile, how do we figure out what we want to do? We can do many things. We could advertise ourselves as general all-around techie problem-solvers, but isn’t that a bit vague? A friend with an interactive agency keeps trying to convince us to learn ActionScript 3. We keep trying to get it up for the idea, but we just can’t. If one of us could, the other could go along, but neither of us can.
We wouldn’t call ourselves expert at anything. We’re generalists by temperament, and by circumstance. It’s harder and harder to be a specialist these days: you start specializing, and your specialty goes overseas, or out-of-style. Or someone discovers that you are great at requirements analysis and there you are, talking to users, when what you wanted to learn to do better was write code.
On the other hand, our non-specialist skills are a lot better than many people’s specialties. I keep thinking my skills must be a bit rusty, given that I’ve been working mostly as a hausfrau for a couple of years now. Then a friend will tell me some story about how he discovered that the reason someone’s code was running so slow is that it was making a ton of completely unnecessary database calls. And I think, “well, duh.” Which reminds me that actually, I may not be up-to-date on my technologies, but I’m not, fundamentally, a dumbass. Which a disturbing number of software developers are. I like solving problems with code. I like solving problems with other peoples’ code even better. I like working with other people to solve problems with code. And I like working with people to solve their problems without code. And finding out exactly what problem they’re trying to solve when they come to me with some ill-conceived notion about some code they want me to write.
In general, I’m remembering how much I truly enjoyed writing software.
Which, getting back to figuring out what I’m passionate about, should tell me that even though I write great documents, I don’t want work that’s just about writing documents. I want work where I get to write code.
When I was a kid, I thought I’d be a novelist when I grew up. I was very sure of that. In college I instead became very sure that I would be a university professor, an anthropologist. My friend Nitzan and I would start a new school of thought, neo-structuralism. It would be all the rage. We would be incomprehensible and profound.
I ended up writing code because Max thought I’d like it. I don’t think he thought I’d end up a software developer. Who knows what it means to end up anything, anyway, these days, when everyone tells us to be flexible and expect to have a dozen different careers in our lives. What does ‘career’ even mean in those circumstances? Actually, what did career ever mean? Max’s father says that the whole concept of a career, as we think of it, was invented in the 70s to get more unpaid work out of white-collar employees. It’s not enough to put in our hours at the office – we also have to advance our careers. We do this not just by putting in extra hours, but by having an advertorial online presence. We have to brand ourselves and then sell sell sell. I resent this. Working on a SafeForWork blog, building my online brand, networking… there are so many things I’d really rather do with my time. And yet.
One must have money.
So I consider my brand. I consider Max’s brand. I think about what **our** brand would be, the secret that would make hiring us, as more than two minds (a *bit* more, you see), attractive.
When I figure it out, I’ll be sure to let you know.
Popularity: 4% [?]
One reason Max is not so sure that we should ever go into business ourselves is that it obviously requires sales (“You had your own corporation back in the day, sweetie,” I say to him. “Yeah, but I didn’t have to sell myself much.” says Max. Or, as another friend of ours says, you can just barnacle yourself to some other business that takes care of the sales and farms work out to you.)
People who are good at sales seem to be from some alternate universe, and the idea of having to spend a lot of time selling ourselves is just ick. We resent the idea that not only are we forced to work for a living (and do all the stuff that actually accomplishing stuff at work entails, not to mention sitting through ugly slideshows with fancy and useless ‘effects’, eating Trader Joe’s cookies that someone left by the water cooler just because they’re there, and waiting for three days for the helpdesk to finish setting up a login that you know takes exactly two minutes of effort to accomplish) — not only are we forced to work for a living, but in our free time we must work on working. See my thoughts on the meaning of “career” (is it cheating if I add a link to something later, when I’ve actually written it?) We have a bunch of other stuff we’d like to do besides sell ourselves. For example, here I am, writing this blog entry for our “professional presence” blog, which, as noted previously, everyone says we have to have these days. But we have an unprofessional blog too (no, I’m not telling you where it is, go find it yourself if you’re so damn nosy. Or just click here to read all the deep dark secrets about us that you’d discover on it. ) And maybe I’d rather be spending this time working on the other blog, or studying my French verbs, or weeding my garden, or playing with my kids. But noooo, we have to have a brand.
How will we come up with a brand when we resent and distrust the whole notion of brands?
Why should I even be writing about this? Because I’m sure we’re not the only shy marketing-averse techie people who are hung up on the whole “creating a brand” thing everyone’s always telling us to do, and are thus holding ourselves back from being able to make money in the simplest, most pleasant, most efficient way possible.
First we have to get past all these marketing types telling us we need to have a brand. Brands are fine for those people, obviously, from some other universe, but why should we have to have one? We don’t want to do marketing. We just want to interview our users to see what their ridiculous desires (uh, I mean requirements) are, draw some screen mockups and non-UML-compliant app diagrams, write some code, configure some stuff, make some useful docs, and be done. (See how sneaky I am: Reqs. Code. Docs. Done.)
Once again, Amy Hoy comes to the rescue. (She gave me my first Ruby pep-talk, on the first day I started learning Ruby, oh, a month ago. Not that she knows me or anything.) Amy Hoy tells me all about pimpin’:
Oh blech, I can hear you thinking, an article on marketing. But wait a moment. Among geeky types, the word “marketing” has an evil reputation, I know. But pimpin’ ain’t marketing.
Pimpin’ goes oh-so-much further.
The act of marketing products is often taken to mean creating desire where there isn’t any, creating dissatisfaction in the viewer/reader/whatever, manufacturing needs and generally trying to create a false image of a product that will convince a viewer he just haaaas to have that thing. Archetypes: misleading beauty ads, “lifestyle” soda ads, and Ronco.
Now, I disagree with the above definition, but that’s the reputation the word has and I’m going to just let that one lie.
The act of pimpin’ products, on the other hand, never involves any kind of questionable tactics. Pimpin’ means putting your product’s best foot forward. Accen-tuate the pos-it-ive. It means not shirking from self-promotion, and shouting your product’s position, features and benefits loud and clear. It means making the acquisition (download, purchase, whatever) process as simple as possible. It also means having a very non-murky message. Archetype: any time when you can get in, download the product/information you want, and get out in under 60 seconds.
And, unlike marketing, pimpin’ has no “g” in it. You have to know that’s a point in its favor.
Of course, we don’t have an actual product to sell. Just us. But we need to sell Us, or at least one or the other of Us. So the advice applies. We need to have a brand, and we need to pimp it. There’s no use complaining about how we don’t wanna, cuz we have to. Even if we never go into business for ourselves full-time, people don’t stay in jobs anymore like they used to (so we hear). We’re gonna have to keep finding other jobs, and keep coming up with new ways to get people to pay us.
So there it is. We must have a brand. Ideally, of course, we end up with too much business to keep up with, and we don’t spend much of our time selling ourselves. People just email us to ask if they can hire us. But if we want that to happen, they have to find us, they have to read us, they have to know us, and they have to know what’s great about us. And they won’t find us, read us, know us, and know what’s great about us unless we tell them.
As long as we’ve got bills to pay, and as long as we don’t want simply to be cogs in a corporate machine, over-working ourselves in our cubicles, we’ve got a brand to build. Or rather, some pimpin’ to do. Sorry Max, but that’s just the way it is, and it doesn’t have to be as painful as all that. We know we’re awesome, and we just have to be able to tell a good story to everyone else about why that is.
Popularity: 6% [?]
Why are we learning Ruby on Rails? Let’s ask _why.
The problem here is: the author of the article is trying to do academics, to gain knowledge, to build a career. And my cartoons and stories have patronized him, belittled him, by treating him as if he wasn’t a real professional. This is a terrible breach of conduct. He has accolades innumerable. He has done no small deed. His peers are all gathered around him, wishing him the best and swelling with nothing but respect and esteem for him. NOW WHAT IS THIS CARTOON BOOK DOING HERE??Programming is for world commerce. It is like agriculture or fossil fuels. It is lot a like baling hay. I’ll give you an example: You wouldn’t write a cartoon book with a plot and running narrative just to show a guy how to bale hay! That would frustrate the guy! He would throw that book in the pig’s pen! He just wants to get straight to the nitty-gritty and, for once in his life, just bale hay, straightway!
It’s not just _why, of course. We’d be pretty pathetic if we decided to devote lots of time and effort to a new programming language just because of a cartoon book. I mean, we have to have serious, professional, career-oriented reasons for learning ruby. And Rails, of course. Not that ruby doesn’t exist without rails. Ruby doesn’t need rails to justify its existence. Matz is not DHH, after all. Matz came first. And then, presumably, came _why. 37signals was later.
Learning a new language takes a lot of effort. I’m trying, lackadaisically, to learn french, since Max speaks French and Ari is learning it, primarily by having Barbapapa books read to him over and over again. And we have a bunch of french friends, and it’s really depressing at dinner parties how I’m never quite sure what people are saying. It’s hard, though, and what would make it even harder is if I didn’t like french culture.
Learning a new programming language is a lot like learning a new human language. It comes with a culture. You have to like the culture to want to put in the effort.
So, you know, we have a friend who’s making fistfuls of money because he’s a crack ActionScript 3 developer. Every time we turn around he gets another promotion, and another raise, and he says the world is desperate for ActionScript 3 programmers. We hear this from other people we know, people with jobs. We don’t have jobs right now. Well, Max consults. And I consult to Max on his consulting. But not a 401(k) plan between us. So I keep thinking “fine, let’s learn actionscript”. Except that it’s like trying to have sex with someone you’re just not attracted to. close your eyes and think of Ruby. Oh wait, I swore I wasn’t going to mention sex on this blog. Note to self: blog is for professional presence. Sex: not professional. Well, except for sex workers, for whom sex is professional. But I’m not a sex worker. Am I calling my actionscript friend a sex worker? Not sure. We love you, actionscript friend! And I will be quiet now.
What I’m trying to say here is that we like the Ruby culture. No doubt we’ve come to it too late, and in about two weeks it won’t be cool anymore and people will be all ‘ewww, you’re a ruby person? Rails is soooo 2006. Didn’t you know that Twitter proved it wasn’t scalable? And it’s s…l….o….w.” But that’s okay. When I first started programming, it was because I fell in love with a heapsort. Heapsort had been around for a pretty long time then, but I felt like I was the first person who’d discovered how cool it was. (Kind of like teenagers and sex. Oh wait, there I go again. Shut. Up. Amy.)
Anyway, here we are, immersing ourselves in Ruby culture. We’re gonna go to a Boston Ruby Meeting, where Hackety Hack will be demo-d. I’m subscribed to all these Ruby blogs. We’re studying the idioms and learning about the people and the projects in the Ruby world. And, of course, learning the language. We’d like to contribute to the conversation at the Ruby table.
As for Rails, we’re learning it because we need to write our own web-based to-do list. I’m joking, I promise. Rails comes along with Ruby because most of our experience in IT has been web-related. So we’re leveraging our experience with web technologies and increasing our skillset with Rails, an agile Ruby-based framework that dramatically increases the speed and ease of web app development. See: serious and professional. Ignore the cartoon foxes and sex workers.
Popularity: 6% [?]