html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> From the archives: Justin's drunk emails are great, but his sober ones are beautiful.

Saturday, February 24, 2007

Justin's drunk emails are great, but his sober ones are beautiful.

I'm tired of trying to explain this to everyone else, so I'll just explain to you here.

I've been writing software for almost 15 years now, I started when I was in HS. In HS there was no one around for me to talk to about the things I did. I knew the computers stuff better than anyone else, and I probably knew the physics we had learned better than anyone else. I thought all of that would change when I went to college. I couldn't wait, I thought I'd be surrounded by people like me, people who really knew their stuff.

When I went to college, I had already been writing software on my own for a few years, and I was in love with physics. I had written little pieces of software that were kind of neat, but I was still developing a style to it. Still figuring out how to really architect things. It came slowly as I worked on bigger and bigger individual projects.

I was doing the same with math and physics. I loved it when I really understood something. At one point I had derived all of the non-calc based Newtonian physics I knew from I think just 2 basic equations v=at and v=d/t, and then everything I knew in math at the time. I had it all written down on a piece of paper, how everything derived from everything else, I thought it was neat.

Early on in college I realized all of the engineers I knew, and the CS people, they weren't really in love with what they were doing, it was just the hot field to be in, and that's why they were there. I loved the physics majors, they really wanted to be where they were generally, and they were very passionate about what they did.

My sophomore year I met this girl, Alison. I'm sure I've told you about her before. I had a crush on her, she turned out to be a lesbian, she was in love with math and wanted to get Godel's theorem tattooed on her head, then she met another girl who wanted the same thing, etc etc.... I met her in my first higher level physic class, and I got to know her a bit, and we would do our assignments together. And she would sit and talk about how beautiful she thought all the equations were. She was really cute, she took some of her favorite theorems and wrote them out all nice and big, and then had them framed and gave them away as Christmas presents one year, then was all sad when no one put them up.

Back then I considered everything I do to be very technical. I'd never really considered there to be any real beauty or art to any of it. But, that was the way Alison saw things, and she got me to see things that way too. It's obvious to me now. There are an infinite number of ways to write a piece of software, there are tons of ways to solve a problem, it's not just a technical problem, there's an art to it too. And, now I firmly believe you have to see that to be any good at what you do.

What I've found is most people don't see any beauty in what they do, not in the technical world. It's all just a means to an end.

I've actually saved all my code since I was 15, it's still on my hard drive, right now, and in a lot of different backups. Everything I've ever written. Sometimes I sit and just go through it. I love the look of it, the structure of it. But, even more, I love the picture of it I can see in my head, the diagrams of objects and their interactions, and how everything goes together, and how it all works, the part I can't ever share with anyone, it's all in my head, and too hard to explain. Some people can look at it and see the intent and appreciate it. But for the most part, people just don't care.

I realized this way back in college, I don't really care, it's what I expect of people now. What I do is insanely complicated quite often, so understanding what I do is often just out of the question for others. Not because they're dumb, but because we've all got our own jobs to do. I've learned that a lot of what I consider my best accomplishments I'm just going to have to appreciate myself.

Anyway, this is already way too long, sorry.

Justin

22 Comments:

Blogger justus said...

I wonder what school Justin went to because his experience was pretty different from mine. Of course I was also in college a couple years earlier than he was.

I agree with his larger point so long as we retain the "most people". It is hardly a surprise; being in love with your job just isn't compatible with the reality of working life for most people. At some point the decades of the same idiocies wear you down to where you'd rather just leave at 5 to go carve wood or watch your kids' soccer games. The problem is exacerbated for engineers because we get paid so god damn much it makes it even harder to walk away, especially when you believe any other job is going to have similar issues eventually.

Of course, not everyone is completely apathetic about such things. I work with several people who I know will appreciate whatever cool piece of code I want to show off. And when Paul rewrites the RAID media error handling code to use continuations instead of our current fucking retarded event driven mechanism he knows that I will oooh and aaah over it.

9:55 AM  
Anonymous Anonymous said...

It seems to me that Justin's feelings for code, math, and physics have just as much to do with the experiences he shared with them as their actual beauty. The way he returns to look at old code and backs it up reminds me of a stamp collector reviewing past stamps and their acquisition, or friends recounting high school stories, or even people watching favorite reruns. Sure there's a beauty to each of these that stands independent of the person. But I bet a significant portion of the attachment is feelings inextricably bound to them, like the excitement of creation, the thrill of turning imagination into reality, and the pride with doing something well (and knowing he can repeat these feelings with more experiences). I can admire Justin's work on those grounds, even though my experience and interests are elsewhere.

10:27 AM  
Anonymous mith said...

I can see now why I agree with Justin's comments so frequently; it appears we are both of a similar mindset, and have some of the same experiences.

I've been programming now for close to 20 years, though I find it hard to define a start date. I didn't really know it as programming back then, but just "making the computer work." I also still have all of the code I've ever written, even the programs I wrote on my graphing calculator to calculate all of the various physics and chemistry equations I needed in high school and my first stint in college. I've still got a shoebox full of 5.25" floppies from our first computer.

Since I didn't really understand programming or computer science when I went off to college, I started out majoring in mechanical engineering. While I was there, I had to take actual computer science classes (a lot more interesting than the silly keyboarding and basic computing classes we'd had available in high school). I also realized mechanical engineering was not really what I was happy with, and similar to Justin's experience, the majority of the people sharing my major weren't really interested in the art of the subject.

At the end of my sophomore year, I attempted to change majors to computer science, but the head of the CS department wouldn't let me. Realizing I wasn't really happy with the ME major, I decided to leave school and learn CS on my own. I got a job at a convenience store to support myself, and spent every minute of free time learning hardware, operating systems, networking, programming, and pretty much anything else related to computers. I went to a couple classes at a local community college, met a guy that worked as a computer tech that managed to get me a job making about twice what I was making as a cashier. Worked there for about 6 months before I got a programming job, based almost entirely on a passion to do the work and a couple of sample programs I'd thrown together. I'm still working there today, though I left for another job that lasted about 8 months, doing network security and got a chance to work with a lot of things I wouldn't have had a chance to touch in my programming job. I ended up coming back when I realized, despite my curiosity in security and networking, I enjoyed the actual programming involved in those topics more than physical implementation. I liked solving the problems rather than following the standard procedures for problems that had already been solved.

I think the people that learn a skill like programming on their own are naturally predisposed to recognize the art of coding. They move beyond the technical aspects, and as their skills develop, they learn that there's not always a single solution to a problem, and that finding new and interesting ways to solve problems is much more art than science.

--mith

11:44 AM  
Anonymous Anonymous said...

University of Illinois, Urbana/Champaign.

One of the top schools in the country for what I do.

And, it's not just these things, it's pretty much everything I do. The difference is, more people would understand it in athletics. There's a huge difference between technically competent, and making it look good, and effortless.

Justin

11:47 AM  
Anonymous Mitch said...

What I do is insanely complicated quite often, so understanding what I do is often just out of the question for others. Not because they're dumb, but because we've all got our own jobs to do.

Many people have an exaggerated sense of their own specialness. Especially really smart people who haven't had enough contact with other really smart people. It's easy to feel alone in that situation.

The truth is that one's work almost always relates pretty closely to other people's work. This is clearest in academia, where even extremely specialized, ragingly brilliant people are expected to relate their work to everything that came before.

I went to this talk a few days ago, by a guy who used to work in string theory before switching to bioinformatics. He has a new twist on modeling mieotic recombination with an approximation that treats it like a diffusion process. Now, I would call that fairly complicated and technical, but he was giving a talk to a room full of people. And that's just who happened to: 1. be in the area, 2. have the time, and 3. be interested. And although I didn't understand everything he did, I did appreciate how cool it was, and I'm sure a substantial fraction of the room could follow with no problem.

Even outside of universities, though, with the internet it's easy to collaborate with a group of people who are interested in exactly what you're doing. They've all got their own jobs to do, but everybody's problems overlap to some degree. And I've been constantly surprised by just how high that degree is.

2:10 PM  
Anonymous Anonymous said...

This is why I gave up on explaining.

What I do is insanely complicated. I'm not bragging. I don't think the things I do are particularly special. I think that a lot of what the people around me are doing is insanely complicated.

The last fairly large piece of software I was working on grew to be over 70k lines of code in a little over a year. That's around 1500 pages of code, 750 pages front and back of 8.5x11 in a 12pt font. It's not enormous, but it's not small. Not many people would care to take the time to understand the intimate details of how all of that code fit together.

For these types of things people tend to be most interested in the technical aspects. What's the feature set? How does it work at a very high level.

But the details of how we have 7 people working on it at one time, all adding features that kind of cross in some aspects, but are totally independent in others, and how we keep all these developers seperate, and stop them from stepping on each others toes, and injecting bugs into each others features, and how to automatically enforce some restrictions on what they can and can't do through the compiler, and with runtime checking. The actual architectural details, that's where people go, "yeah, whatever."

I could say the same thing for climbing. For the most part, people are interested in whether or not you hit the top. But, individually, we all want to get to the top and make it look easy. There's at least some recognition of the subjective goals in athletics. But, it's far less obvious in a technical field. People are more interested in the objective goals, does it work, what's the feature set.

Justin

3:28 PM  
Anonymous Mitch said...

The actual architectural details, that's where people go, "yeah, whatever."

Well, if the code is secret, then it doesn't really affect me directly; the only thing that could affect me is the high-level functionality, as you say.

But if the code is open, and if it does something that relates to my problems, then I become much more interested in the architectural details. Actually, that situation is where it becomes possible for outside people to get interested in the details. Because then those details matter to them directly.

If you're talking about something that I'm never actually going to come in contact with, then yeah, it's hard for me to care. But that apathy is driven by the secrecy of the code, not by the complexity of what you're doing.

Of course, there might be lots of good reasons for you to keep your code secret. I'm just saying that when you restrict access to your work, the number of people that can appreciate the things that you've done is necessarily limited. And maybe that's perfectly fine for you. But there are lots of contexts where lively discussion about abstruse technical details exists.

The example I'm mainly thinking of here is the postgres-hackers mailing list. I've learned a lot from Tom Lane by reading that list. The linux kernel mailing list is another example.

4:48 PM  
Blogger justus said...

Reducing complexity is the job, though. It's practically the definition of modernity as many people seem intent on proving true Toffler's thesis from Future Shock.

Of course people aren't interested in the details. My current project is over 775,000 lines of code and that's not counting any of the supporting tools we've built or any of the sometimes significant patches we've made to gcc, gdb, abl, and linux. It runs on 16 processors and 40 hard drives simultaneously. We've put about 1/2 as many man-hours into this project as it took to build the Golden Gate Bridge, yet we certainly don't get half the respect the Golden Gate Bridge does :). But Wal-Mart doesn't give a shit about any of that, they just want to know that their half-petabyte inventory system isn't going to go belly up even for a few seconds. They have their own complexities to worry about. Like making hundreds of thousands of products from hundreds of suppliers all show up Just-In-Time for happy consumers to buy.

Of the 120 or so people that work with me maybe five of them would care about nitty gritty details like you are talking about. We care about good branching strategies and learning about Lua because hey maybe someday we could embed that in the firmware to do some white box testing. But, yes, at the end of the day, there are only about five of us in this big huge group.

But the same thing happens every where. When I make dinner for someone they are (almost) never as interested in the roux as I was. They don't care that it isn't an orange creme anglaise...it is a BLOOD orange creme anglaise.

For our specific field, I think age has a lot to do with it. I graduated right before the big internet boom so a lot of my contemporaries are the kids who grew up hacking on their Commodore 64 and Apple IIe because it was fun; they didn't just see it as the next Doctor/Lawyer career. That's probably why all of my college friends who were CS majors also have all of their source code backed up and laying around. Just in case they want to go back some rainy day and look at that one Prolog project from 15-312 when decision trees finally clicked.

5:03 PM  
Blogger Megan said...

OK guys. Since you seem to be chatting about computer stuff (although on a totally different level), do you have any suggestions for what (free) software I should use to wipe my old computer before I donate it?

I know that top-level security people could get it back later. I just want to make it a little harder for the next people to look at my porn.

5:08 PM  
Anonymous mith said...

Megan,

You can probably do a search for "disk wiping software" and find plenty of free software that meets your needs. I can't answer your question much more specifically than that, since I don't use Windows much anymore. PGP comes with a disk wiping tool that did most of what I was looking for (wiping individual files, wiping free space, wiping entire disk). While they're no longer offering a free version, they do have a 30-day trial. If you're only looking to use it once, that might do the trick.

--mith

6:26 PM  
Blogger Megan said...

Mith,

Thanks! I'd gotten about to there, but then wondered if there were a difference between the ones I could use.

7:14 PM  
Blogger bryn said...

It seems that part of the reason humans were able to evolve to the point they have, is the ability to compartmentalize things as black box tools and use them. If we all followed the zen of motorcylce maintenance and understood and appreciated the quality of everything we do, our collective intellect would be absorbed in the quality crafmanship of wagon wheels. Most people don't have the ability (given either their intellect or their having spent most of their interest quotient on learning another field) to understand the interesting aspects of how things work (whether it's reimplementing a data structure to be n log n rather than n^2 or what makes a flan different from a panna cotta) Division of labor, is also division of interest and division of attention. We can't all devote the time to water that megan does.
So the question becomes whether we can devote the interest in social or work situations to appreciate (I'd say appeciation is log(n) of the work) And even there, our society is too interested with pushing forward and new results, rather than the aesthetic of the technique.

1:36 AM  
Anonymous mith said...

"Division of labor, is also division of interest and division of attention."

Something that is illustrated beuatifully in I, Pencil.

Now take that analogy and expand it to software we use every day. Consider the people that write it, the software they use to write it, the machines they write it on, the people that build the buildings and provide the electricity so they're not sitting out in the woods running a hand-crank generator to power their PCs, and all of the people involved in creating something as complex as an operating system, or something seemingly so simple as a web browser or a text editor.

Taking all of that into account, I think the fact that so many of these things are available for free these days is a testament to our ability to compartmentalize. Certainly that leads to an over-simplification of the art involved in creating some of these masterpieces. That doesn't mean we can't still appreciate the artistic nature of these things, but I can understand those people that just want to get stuff done, and don't give a second thought to how the tools they're using came into existence.

This is one of the reasons I enjoy developing and using open source software. Anyone that wants to look at the code and enjoy the art of creating a piece of software can. On the other hand, anyone that just wants to use it to get stuff done can do that also.

--mith

10:13 AM  
Anonymous Anonymous said...

It is interesting to me that so many other computer programmers lurk here.
Megan, you will land yourself a nice geek someday, you attract the mindset! Justin, I think most programmers are too interested in their own solitary work. Perhaps it is part of what makes us able to do this type of work.
-dithers

12:05 PM  
Anonymous Anonymous said...

This isn't just applicable to software. I can see it in everything. Software/hardware just happen to be what I do all day at work.

I think a lot of you are still so focused on the technical aspects of things you're missing the point.

But, I don't know how to explain it any better.

Justin

3:14 PM  
Anonymous Mitch said...

do you have any suggestions for what (free) software I should use to wipe my old computer before I donate it?

Just give it to me, and I'll take care of everything.

3:52 PM  
Anonymous Anonymous said...

megan: "but then wondered if there were a difference between the ones I could use."

probably not. If you're worried remove the disk (and break it with a hammer) before donating the computer.

other CS related pieces of beauty are
"the mythical man-month" (a book)
and many of the essays at
http://www.paulgraham.com/articles.html

Benjamin

3:58 PM  
Anonymous mith said...

Speaking of Paul Graham, one my favorites is this one: How to Make Wealth. Specifically, the section about craftsmen, but the rest is pretty good too.

--mith

6:41 AM  
Blogger Megan said...

Thanks, Mitch. You're my hero.

10:02 AM  
Anonymous Anonymous said...

This was probably covered somewhere with an obvious answer, but Justin, why don't you get involved in open source? The people there definitely do it for the love of it.

Marcus

7:43 PM  
Anonymous Anonymous said...

1) Because I don't think this just applies to software. I loved physics for the same reason. I can see the same thing in athletics, and, just about anything else I do.

There's something appealing about doing something really well. Or watching someone who does something really well.

2) I don't really care that much. I gave up a long time ago.

3) I have worked on OS software. I've worked on the GNU development tools, amongst other things. And I think most of the OS software I've seen is some of the most poorly written garbage out there.

Justin

9:02 PM  
Anonymous mattpfeff said...

Justin, that letter is beautiful.

I don't expect it is rare, that someone aspires to something beautiful in his or her life, but that no one else can see, or appreciate for what it is. In fact, I think being appreciated for that is rather the exception.

But the thing itself is what really matters, isn't it? The external appreciation is incidental to it, even if it is so hugely valuable to us in our lives as a whole.

I don't mean this as some facile sophism. I remember what it was like to learn some mathematics from a world-class algebraist. He was -- had to have been, given how he acted -- still in love with things he had learned decades ago, and had taught countless times since then. Yes, he was blessed to have the affirmation of his peers, and of a very successful career, but watching him in a classroom, or talking to him independently, none of those things were present -- it was just him and the thing itself, and his undying fascination and joy.

I know I have things about me -- things I do, ways I live -- that I'm weary of trying to share. I may never find anyone to share some or all of them with -- and that scares me, of course, and even threatens to break me apart -- but I am so, so glad for the things themselves, that I know are me because they sure as hell aren't anyone else I know (at least not anymore).

And having things that you like -- and that you do -- independently of anyone else's affirmation is what gives a person a rich internal life, and makes them interesting, and real.

1:54 AM  

Post a Comment

<< Home