Oh hi, Movies Sunday, March 7, 2010 at 8:25 pm

As the Academy Awards continue to drone on in the background, I thought it might be appropriate to honor another type of movie: the really bad movie.

Recently I’ve discovered and succumb to Rifftrax. To understand Rifftrax we have to go back a little ways to Mystery Science Theater 3000. If you don’t know what Mystery Science Theater (MST3K to its friends) is, check out its wikipedia page real quick. The basic premise is a guy and some robots trapped on a satellite being tortured by a mad scientist by being forced to watch really bad movies. To survive, they make fun of (“riff”) the movies they’re watching. Well, Rifftrax is the same guys who were in the last seasons of MST3K providing their service for more modern, and often more successful, movies. You just purchase the rifftrax audio file (usually for $4), and sync it up with the movie (and they make it a relatively easy process), and sit back and enjoy.

I have seen four riffed movies so far: The Happening, Paranormal Activity, Twilight, and The Room.

The Happening is such a bad movie that not even Rifftrax was able to improve on it. Then again, I’d already had the displeasure of seeing the movie before, and in the theaters at that, so it may have been residual pain coming through.

Paranormal Activity is an independent movie that was excessively hyped as “one of the scariest movies of all time.” That is a lie. It is more boring than it is scary, and both of the characters are annoying and unsympathetic. Paranormal Activity is one of those movies that we have been cursed with since The Blair Witch Project that thinks it’s a cool idea to integrate the camera into the story. The problem with all these stories is there are too many scenes we should not be able to see because only a sociopath would be concerned with filming instead of attending to his fellow human being’s needs. It’s hardly a “horror” movie if you’re continually annoyed and frustrated at the main characters. Add that onto the fact that you will spend ten minutes at a time watching people sleep. The only action you will have to tide you over during these scenes will be a door moving slightly. Then after the couple wakes up, you will get to watch the douchey guy and his ditzy girlfriend watching the recording of the scene you just finished enduring on a computer, and commenting “look at that, it moved!” Repeat ad nauseum until the entirely predictable ending. Rifftrax made this film bearable.

Twilight was something else, however. Twilight is a very, very bad (and very high-grossing) movie, and the guys at Rifftrax made it hilarious. You probably know about the movie already, but the riffs, which came consistently during the utter inanity of the film, were a delight. It even tops some of my favorite MST3K episodes.

And to the last one: The Room. The Room is hard to describe because it is just so very surreal. It’s not supposed to be surreal, though, it’s supposed to be a drama. The Room was conceived of, starred in, and directed by a man named Tommy Wiseau. It’s unclear who Tommy is, although it’s obvious that his first language is not English, and it’s not clear that he understands human behavior at all. It’s possible that he’s an alien. Maybe an autistic alien. Certainly a very ugly one. And that ugliness will come back to hurt all his viewers. I didn’t know what I was getting into when I rented the movie and downloaded the Rifftrax, but there are three incredibly bad sex scenes. They are not sexy. They are not necessary to the story (although that implies that anything in this movie is necessary to form any “story”). The sex scenes seem mostly to be there to assault you with Tommy Wiseau’s naked backside, and they can actually be medically prescribed to induce celibacy. If you watch this, I recommend either looking away or going into another room and doing the dishes during these scenes.

Tommy also continuously greets people, in his vaguely European accent, with, “Oh hi, <name here>.” Every time; he just doesn’t disappoint. It doesn’t matter if they’re old friends, someone new, someone expected, unexpected. It’s all, “Oh hi, Denny;” “Oh hi, Susan;” “Oh hi, Lisa.” It’s just one of the many ticks in this movie that makes it so surreal. It’s hard to say exactly what it is about this rifftrax that is so hilarious, but it simply is. There was one point where I had to pause the whole ordeal and spend the next several minutes getting the laughs out. Definitely the funniest of the four rifftrax that I’ve seen so far. If you want to check one of these out but are a bit skittish about the sex scenes in The Room, you can definitely check out Twilight, which is second to The Room in my mind, and furthermore is much cleaner – inasmuch as a movie whose target audience is fourteen-year-old girls can be “clean” rather than “a crime against humanity.”

Anyways, that’s all. Just a fun thing for you to check out.

Not a Republican Sunday, February 21, 2010 at 6:03 pm

It’s not very often that I talk about the specifics of American politics. If I speak about politics at all I usually prefer to speak about political theory or a particular issue (like torture, or gay marriage) rather than party politics. However, I’ve been reflecting on my political shift from Republican to Indpendent and thought I may as well get my thoughts down in words.

I voted for George W Bush in 2004, the first year I was eligible to vote. In my defense, I was young and naive and confused. And all that. Nevertheless, by 2006/2007, I was looking back on what I had done and thought, my goodness, if I voted for that man, how can I be considered to be at all a competent voter in future elections? This has been a source – not of guilt, but of self-doubt when it comes to future voting. I voted for Bush because I had brought up to hold small government as a political value, and a strong national defense, and of course, Bush was one of “us” – he was an Evangelical Christian, and thus qualified as a man of character to run the country in ways non-Evangelicals were not. He was a member of the in-group.

I look back on his two terms in office, and I do not see a man who valued small government. The largest increase by far in federal spending on medicine was Bush’s Medicare Part D extension – which was estimated at the time it was signed into law to cost the country $395 billion over nine years. The non-partisan Congressional Budget Office has since revised their estimates and last year alone Part D cost over $50 billion dollars. By contrast, HR 3590 – the health care bill that passed in the Senate – is projected by the CBO to reduce the deficit by $130 billion over nine years. Small change, especially over nine years, but still a net reduction – under a Democratic president, and an increase under a Republican. Bush also created a new department of the government called “Homeland Security,” on top of the existing CIA and FBI departments. How is this an expression of small government values? He also began wars with not one, but two (three if you count Pakistan) countries with no clear objective, exit strategy, or end point. After all, we were Attacked By Terrorists, and had to Retaliate, no matter how much or how little sense the retaliations made. It has become abundantly clear that the country was misled, either intentionally or through gross incompetence, into the Iraq war. There were no weapons of mass destruction. No imminent threat. No links with Al Qaeda. And now we have been in Afghanistan for almost nine years and Iraq for seven. To put that in perspective, the “official” timeline of the Vietnam war (we had soldiers alongside the French before the official timeline starts) was eight years. Such a policy is not a conservative “strong defense” – this is an offense, a military occupation. I don’t understand how preemptive military strikes and indefinite wars and occupations are a conservative value. However, in at least the cases of Afghanistan, Pakistan, and Iraq, they are and remain Republican values.

And to the point of being a gay person: how does one support a party whose defining policy document calls for an amendment to the United States Constitution to permanently enshrine a 3-4% minority of the population (of which I am a member) as second-class citizens? The claim that they are only against using the word “marriage” has been revealed as the bullshit that it is. Just recently in Washington State, they got a referendum on the ballot seeking to revoke the “everything but marriage” domestic partnership benefits that the legislature had passed into law. Why? It’s not called “marriage” is it? Well the argument goes that it was just too close to marriage for decent people to stand for. Nineteen states, all of them with large Republican constituents have passed state constitutional amendments banning not just gay marriage, but any union of two people who are not male and female whose legal status approximates marriage. The nineteen states effectively, barring gays and lesbians not just from marriage but also from civil unions and demostic partnerships are: Alabama, Arkansas, Florida, Georgia, Kentucky, Idaho, Kansas, Louisiana, Michigan, Nebraska, North Dakota, Ohio, Oklahoma, South Carolina, South Dakota, Texas, Utah, Virginia and Wisconsin. Over and over again these amendments are voted into law with Republican backing. This is what the Republican party wants: gay relationships ought to have no legal benefits or recognitions from the state whatsoever.

Jason Kuznicki of Positive Liberty recently attended an event discussing the place for gays and lesbians within conservatism. He blogs about it here and here. But the key point is he asked Maggie Gallagher, a ferocious advocate of denying all legal recognition to gay couples: what if he agreed with her? What if he said, yes, you’re right? He has a husband and a daughter. Does he divorce his husband and attempt to give his daughter back to the state? Does he then attempt to enter into an ex-gay ministry, knowing the incredibly low success rates? Does he live a single life, completely alone? What does he do? Gallagher’s answer is revealing, in an unusual and disturbing way: “I don’t know.” Then she hastens to add, “But you don’t have to agree with me.” It’s difficult for me to imagine that a woman who has spent well over a decade lobbying to deny gay citizens all legal recognition of their relationships has not thought about this question: what does the gay person do? Surely at some point in her years-long career in anti-gay politics this has crossed her mind. Surely someone has brought it up. Either her worldview is so small that it does not even include gays and lesbians and so she legitimately doesn’t know – because despite her intense efforts she’s never considered what to do with gay people other than to make them and their relationships second-class – or she does in fact know what the gay person agreeing with her should do, how Jason should hypothetically respond if he agreed with her, but doesn’t want to say it. I honestly don’t know which of these it is for Maggie.

But the point is, for large constituents, represented by people like Maggie Gallagher and the language enshrined in the party platform, there is no place for gay people or for their relationships. Ideally, there is no future for me or for my future spouse (if I should ever have one). We are just to go away and not pester the other 96-97% of the world with requests for equal treatment and certainly not for recognition that we exist. Although I try not to be a single-issue voter, how do I vote for a party that wants me to be invisible?

How do I vote for a party that has become the party of torture? Not to go all Glenn Greenwald here but during the Bush years we have waterboarded individuals, sometimes 183 times within a single month, placed prisoners in stress positions, forced them to be naked for long periods of time, engaged in the torture of excessive sleep deprivation, beaten and bruised detainees by throwing them against walls, never given them a trial, probably murdered detainees during torture sessions, kidnapped and shipped Muslims accused of being terrorists from their homes around the world to secret black sites… the list goes on and on and on. The International Committee of the Red Cross, the body charged with upholding the Geneva Conventions (which we signed and are therefore constitutional bound to as the supreme law of the land), has called what we’ve done torture and in violation of Geneva. And the Republicans want to continue this. They’ve thrown hissy fits at the possibility of sending some detainees to trials in the US. No trials for detainees, that’s being Soft On Terror. No closing of the noxious prison at Gitmo. Waterboarding isn’t torture, it’s a perfectly legitimate way to make prisoners say… well, whatever you want them to say. And they don’t deserve trials to find out if they’re guilty. That’s being Soft On Terror. Treat them like animals! The former vice president went on national television and talked about how he supported waterboarding and “enhanced interrogation techniques.”

Not that the Democratic party is a whole lot better. Imprisonment of kidnapped accused terrorists has moved from Gitmo to Bagram, where the Red Cross has also complained about Geneva violations. Gitmo is still open last I checked. The United States still has not investigated the war crimes that have occurred over the past several years, further violating Geneva (which demands investigations into torture offenses). Barack Obama does not believe in marriage rights for gays, although he does support civil unions (he wouldn’t have gays go back into the “I don’t know” netherland some Republicans want). The Democrats do believe (rightly or wrongly) in continued expansion of government social programs. However, at least there is room within the Democratic party to dissent on some things. There are at least some democrats who object to torture and believe it is wrong no matter who is in office. There are democrats who believe in gay marriage or civil unions. (I just want equal rights, I don’t care about the lingo.) And even if the democrats do want expanded government, at least they believe in the need to pay for it. At least there is not continuous rhetoric about “small government” while expanding government programs and simultaneously cutting taxes. That’s a fast track to financial ruin. At least they are not in awkward and contradictory positions like the Republicans are, who now have to oppose the congressional health care bill on the grounds of government interference in medicine, while supporting the massive Medicare expansion by Bush, in addition to the equally-expensive Medicaid and Social Security programs. No health care reform, but hands off my medicare. Come on guys, really?

And so for all these reasons I’ve drifted away from the Republican party. I now see the party, on a national level, as a sad group of contradictory beliefs, stealing whatever rhetoric is convenient and playing on American religiosity (especially on the gay issue) for votes. In fact, the party is chiefly religious now. Who are its media stars? Palin, Limbaugh, O’Reilly, Hannity. With the exception of O’Reilly, all people who routinely invoke God in politics. They are neither a party of fiscal responsibility nor of small government. Endless wars, endless government expansion, coupled with endless tax cuts. And denying gays the same government recognition that straights get. That’s the Republican party. I may not be enamored with the alternative, but given what the party currently is, I cannot conceive of voting for a Republican in a national election in the foreseeable future. On a local level, well, being in Seattle tends to mitigate some of the crazy.

A Physicalist and Compatibilist Sunday, February 7, 2010 at 11:22 pm

Ophir (perhaps the only person who still reads this blog) had some objections to a previous post in the comments here. Although I initially considered responding as a comment, I think the explanation is long enough to warrant a post.

Here’s some of the original comment, a little bit redacted:

If your personality and behavior are indeed nothing but the biochemical makeup of your brain then [your choices are] no different from a rock falling to the ground (and not floating in the air) or a sunflower seed developing into a sunflower (and not a tulip or an elephant). In other words, from the very first instant of the Big Bang it [...] was [...] completely inevitable that I’d be writing this comment on your blog.

There’s a lot of assumptions in there that I disagree with, and it would be difficult to unpack them all. But the basic assumptions are something like this: if a mind is a purely physical phenomenon, then human actions are predetermined; if human actions are predetermined, then there is no free will. (Please correct me if I’m wrong, Ophir.) There are two issues here: physicalism versus dualism, and determinism versus free will.

I remember sometime in my teens quietly disowning the doctrine of nonphysical souls. I had read enough of the Bible to see that it wasn’t really mentioned in the earlier parts – arguably the Jews didn’t have a concept of an incorporeal human soul until perhaps the time of the second temple – and the scant few references in the New Testament that Christians built their doctrine of the immaterial soul on – well, these were shaky ground to say the least. The modern concept of a nonphysical soul, at least across the Western world, is owed largely to Descartes, who in order to preserve his Catholic faith in the light of reason drew a stark metaphysical line between the “physical” and the “spiritual” – a line that previously had not existed. Descartes hypothesized a lot of silly things to keep up this presumption: e.g., that man was both physical and spiritual, two realms which never interacted. But if they never interacted, how was mankind both? One of the more famous bits of silliness was the postulation that a gland in the brain was used by the spiritual soul to manipulate the physical body. Ever since, philosophers who like a physical-spiritual dualism have pondered how the physical and the spiritual (or logical, or however they want to term it) interact. I don’t see any reason to postulate such a dualism – I don’t see any evidence for this bicameral existence, no one has yet come up with a good definition of what exactly it means to be “nonphysical,” and as we know from things like computers and primitive biological nervous systems, arrangements of physical components can create logical systems (and, one would hypothesize, perhaps even consciousness). The physical atoms and molecules run along on their own, following physical laws, and as they do they create logical states which do their own, logical things: some logic (software) running on top of a physical, biological system (hardware). While there may in fact be a “nonphysical” realm (whatever that means), I have no reason to believe in its existence. As a philosopher friend of mine has put all this, “Descartes needs to die.” His dualism is just untenable.

As a Christian, when I quietly disavowed all of this spiritual-physical dualism (keeping it on the down-low, having seen how attached most Christians were to their nonphysical souls), I squared this away with the very-Jewish concept, inherited into Christianity, of resurrection. If God was God, then God could reconstitute physical matter into its previous configuration, thus resurrecting whatever creature existed before its physical body was destroyed. I thought of this physical soul – and still do think of it – much as a building. You can tear down a building, but if you still have the blueprints for it, you can reconstruct it. The human body is exponentially more complicated than any building, but the analogy still holds. The building is me, my physical personality, my physical soul. It will one day die. The question then became if you destroy a building, you don’t destroy its blueprint – so while the thing’s physical manifestation might’ve been demolished, where has the idea gone? Does it still exist? (xkcd says no; I’m not so sure) This gets into questions about the ontological status of information and ideas. I still do not have an answer to any of that. I may not want to say information exists in the same way that atoms exist, but does that mean it doesn’t exist at all apart from its physical manifestation? I don’t know.

Many years after my deconversion from Descartes’ cartesian dualism I read Dale Martin’s The Corinthian Body (amazing amazing scholarship), which explains, among other things, the Greek medical concept of pneuma – usually translated “spirit” – and how that informed Paul’s interpretation of the body. Though this was not Martin’s main point, it does tie in nicely with dualism because he shows that this modern concept of mind-body/spiritual-physical dualism did not exist in the ancient world. There was nothing “nonphysical,” just degrees of physicalism, from light (pneuma) to heavy (earthly) stuff. In short, he ended up confirming to me that the Christian case for dualism was very impoverished indeed..

But whether or not there is a Christian case for it, I do not think there is a good philosophical case for dualism. Physical systems can and do create logical, information-carrying systems. There is no soul pushing around the atoms in a computer. We are a different form – a far, far better form – of information processing than computers, but we are still a form of information processing. We don’t know how we do all we do, but we know some of it, and in the absence of evidence for a soul pushing the molecules and squeezing the chemicals in my brain, I’ll opt for the brain just being the physical stuff on which the patterns of my personality play. It’s frightening at first, but in the end it’s a little bit magical and awe-inspiring.

To the second matter of determinism versus free will: as a former, and repentant Calvinist, and someone who went gradually from Calvinism to more-or-less Pelagianism* before he (de)converted away from Christianity, I have done a lot of thinking on determinism and free will. Not to say any of it’s right, just that these thoughts have been echoing around inside my skull for some time, with all the emotion and logic and passion that goes on inside a human skull.

I was allured to Calvinism by my church youth group when I was in middle school. All of the church youth ministers were Calvinists. And they seemed to have a pretty logical system worked out for it. Though I now think their reading of Romans 9 was miles off the mark, they did have a hermeneutic they used, along with passages like Romans 9 (or Ephesians 1) to back up their beliefs. And this was my first exposure to an attempt to reconcile human behavior and choices with belief in a deity. I did reading and praying on my own, and speaking with various youth ministers before I “came out” as a Calvinist. At the time I found it very compelling. Although there are other relational events that happened then (coming out as a Calvinist to my family was second worst – and bad although on an entirely different plane of bad – to coming out gay), those are peripheral to the story. The story was: I was a young kid, in high school, reasonably intelligent, and totally a Calvinist. I loved Jonathan Edwards, John Piper, the whole lot of those Calvinist superstars. They had their theological systems for answering so many questions.

But what eventually ended Calvinism for me was another question: the question of the goodness of God. Although I would argue vehemently that God could be good while still damning people to hell or saving them to heaven based on his (inscrutable, and almost irrational – or as we’d say supra-rational) will, in the end I had to face the fact that Calvinism raises severe questions about the goodness of God. Either there is no such thing as goodness, and goodness is just a label we assign de facto to everything God does; or there is such a thing as goodness, and a Calvinist God is not good. The first to go was the idea of double predestination (John Piper’s favorite), and then limited atonement (the “L” in TULIP) and I was a four-point Calvinist for a while. Eventually, and accelerated by more study into various Christian thought over the centuries, I rejected Calvinism altogether as being an immoral and monstrous view of God. I truly repented of it, in every sense of the word, and embraced personal choices as the cornerstone of morality.

I haven’t thought about determinism and free will as much since my deconversion away from Calvinism. However, I have found myself, at least presently, loosely in a space called Compatibilism. What Compatibilism says is: it doesn’t matter if our future decisions are predetermined or not, because we still make choices. If, ever since the Big Bang – or at least ever since life started evolving on a scale large enough to be immune to quantum effects – the future of life has been set, then so what? So what if I am writing this blog because a billion years ago a quark bumped into another quark and made a proton instead of a neutron? Even if that is so, I still do not know the choices I am about to make. I have to weigh the options, or give in to passion, make sense of input, rationalize, and make the choice. I have no crystal ball that tells me what I’m going to do. I – along with everyone – behave as if I have free will. Even if the future is totally determined, it doesn’t matter because I don’t know the future. If I were capable of seeing my future choices, then you might argue that it matters, but in the end, in this world and in this place that I inhabit, it doesn’t. And what would it mean for my will to be “free”? Free from what? Does anyone ever make a decision free from outside influences? A decision totally free from inputs is totally random. Is this what free will is? How free is it? Does anyone make a decision free from their life history, from past events, from considerations and suggestions bombarding them consciously and unconsciously? Is it possible, and could anything short of total randomness be considered truly “free”? But that wouldn’t be any sort of will at all, it would just be chaos. What matters to me is that we are responsible for our choices, even if these are not separable from our personal histories – after all, that’s what it means to be living in time – and whether my future actions have some element of chaos in it or if it’s all laid out by the laws of Newtonian physics, I don’t know what those decisions are and I continue to make my choices independent of the future. And so I end up being in that strangely liberating space of Compatibilism. Even if the future is determined, I am more than a rock falling to earth because I still make choices. I am still responsible for them.

This ended up being more about my personal history than a philosophical defense. But I’m a personal being embedded in time, and that’s okay.

*My personal opinion: when it comes to the foundational doctrines of Christianity, Pelagius was more right and Augustine was more wrong. But this is a whole ‘nother very long post.

Wisdom from the Internet Tuesday, January 26, 2010 at 10:33 pm

Just some tomfoolery from the internet, a little website that compares Google search suggestions. When you’re typing into the search box on Google, they’ll make suggestions of what you could query for based on common searches. This little web app lets you compare two search terms with suggestions of popular searches Google would give you to ‘complete’ your query. The two queries are on the left and right and the Google suggestions are in the middle. Thicker arrows represent more popular searches. Check it out here.

Some of my favorite comparisons:

Everyone gets to be an idiot, Hitler, and the Antichrist. How they both manage to be stupid and an evil mastermind at the same time escapes me:

It’s at the top of everyone’s mind:

It’s all a matter of perspective:

Internet wisdom:

More wisdom, this time on science:

Pop culture:

My Body, My Self Sunday, January 24, 2010 at 1:53 pm

As those who’ve kept in touch with me personally know, six months ago I was regularly doing yoga once – and sometimes twice – a week. For various reasons, I’m not doing yoga anymore (although I sometimes think about getting back into it). Despite yoga, I still have some of the tightest hamstrings on the planet, can’t touch my toes, and can’t do half moon. At least I got crow down.

Fast forward to this past week. I have some knots in my back that’ve been annoying me, variously, while working out or moving my arms in the wrong way. Thinking I could just get this “taken care of” like a routine physical check-up, I made an appointment for a massage this past Thursday. It was the first massage I’ve had. Although it was a good experience, the masseuse said (and I could tell) that I have a whole lot of tension, the type usually associated with stress (neck, shoulders, back, jaw; the tense hamstrings are who-knows-why). She made the comment afterward that she could’ve done a deep tissue massage but it would’ve been very painful on me because I hadn’t learned how to relax and receive a massage, and I would’ve been sore for days afterward and wouldn’t've liked it very much. She also said, finding that I work for Microsoft, that having a lot of Microsofties come through the spa, and being married to one, it is clearly a high-stress job and people who don’t figure out some way to deal with the stress, after ten or so years of it their body ends up being destroyed by it. This was not the first time I’d heard this (and I think I can point to people at the company who are examples of this).

I noticed a lot of similarity here to yoga practice. The point of yoga was to get to the end and do savasana, which allows your body to completely relax, after limbering up your muscles and tendons through yoga. Though there are various types of yoga, throughout it you are supposed to be focusing on your breathing, the impermanent and necessary taking and giving of breath, and going through the poses to loosen yourself up and be centered in your body and in your breath. Although they are of course radically different, both massage and yoga are meant to bring yourself back into your body and work on relaxing and loosening up all the various parts that are tight (usually because of stress, or just misuse). Then you start carrying that practice through the other parts of your life.

The point of all this, and something I’ve been learning, forgetting, and relearning over the past year, is that who we are is deeply tied up with our bodies. Learning to relax isn’t a purely mental exercise (as if there were some differentiation between mind and body), but it’s a physical exercise. Relieving stress isn’t an exercise on being mentally relaxed, it’s an exercise in healthiness. You are your body. I am my body. My personality is some combination of the biochemistry of my physical brain. What I do and how I act is some combination of the biology of my body interacting with the biology of my brain. That’s it. To be what I want to be, to be healthy and balanced and whole means affecting my body just as much as my brain. There are many different ways of being whole and balanced, and I have a pretty clear idea of the way I want and the way that suits me best, but it is a coherent symphony between body and mind, which are inseparably tied up together in that thing I call myself. I’m going to schedule some massages once or twice a month so I can get to the point of learning to be relaxed and undoing all the knots of stress I carry, usually without realizing it, to the detriment of my body an myself. And I may need to throw yoga back into the mix.

Music Alert Sunday, January 17, 2010 at 7:08 pm

I was a bit worried about OneRepublic’s new album because I loved their first one, Dreaming Out Loud, so much. It’s hard to follow an act like that. So with some fear of being let down, I purchased their latest album, Waking Up. I was very pleasantly surprised. If their first album had echoes of techno and pop influences, their second album adds rap influences, while still not quite being any of these. Ryan Tedder slips seamlessly between melodic singing and speaking while the rhythm and music go on behind him. The group keeps the background strings (cello, violin in some songs) and piano that have helped give their pieces a distinctive flavor, and combined with the various musical influences, Waking Up makes some layered and complex songs. But it is still a pop album, if a well-executed one, so don’t expect classical music. The album overall is much more upbeat than Dreaming Out Loud, which was a bit darker and more contemplative, whereas Waking Up is mostly a happy album, almost deliriously so at times. There are several songs where I find it difficult not to dance (awkwardly, of course) or sway along with the music. All in all, I remain very impressed with OneRepublic, and look forward to their future musical development. Do yourself a favor and buy the album, if you haven’t already. Here’s a taste of it, a song called “Good Life” and one of my favorites:

Why does Software Suck? Part II Sunday, January 10, 2010 at 2:27 pm

Last week I went over some of the reasons why modern-day computers are what they are. Today I plan to go over some reasons why, regardless of what it’s running on, writing correct software is hard – one of the hardest engineering feats out there. Not in terms of requiring lots of intelligence, but diligence.

When I read The Mythical Man-Month a few months back, I was struck how dead-on accurate it was about the pitfalls of software engineering, even though it was written back in 1975, when the craft of software was so much younger. But here ware, more than thirty years later, and although we’ve built systems up higher and higher on top of yesterday’s systems, and we have the internet and dual core processors and the Playstation 3 and Photoshop, most of Brooks’ critiques are just as valid today as they were then. He begins his book by comparing software engineering to the tar pits of bygone eras, trapping powerful dinosaurs and sabre-tooth tigers, sinking them, struggling with all their awesome might, into the pit. If you want to understand software – or even how to manage extremely complex projects – I can’t recommend the book to you strongly enough. Here will follow some things I got out of both the book and my experiences, pulling from my often-inaccurate memory.

Here, in a nutshell, are the problems with software engineering:

1. You must be perfect. You cannot be almost-perfect or leave a few things ambiguous. Nothing is ambiguous because everything must become some series of zeros and ones for the processor to run. Every line you write, every bit that is compiled, every flip of some switch deep inside the computer’s memory bank must be perfect. If it isn’t perfect, maybe it’ll work right most of the time. And maybe sometimes it’ll crash terribly and destroy all your data. Human beings are not accommodated to working perfectly and without flaw. In fact, sometimes it is the imperfections – the noticeable paintbrush strokes, the symmetrical dimple, the beauty spot, the awkward laugh – that we find charming. We adapt to imperfections and interpret them. You do not have such wiggle room in programming a machine. A computer does not interpret; it is a dumb machine that does exactly what you tell it to. A slight mistake causes significant consequences.

2. You must be perfect in continually unique tasks. When you are laying a building, you have simple repetitive tasks that must be done. All must be done well – laying the foundation, constructing support beams, laying bricks – but these are a couple of tasks repeated thousands of times. Laying the second brick is not a different task than laying the first brick, it is just another brick. After several hundred, you become better at them and become a bricklaying expert. There is no such analogue in computer programming. If a programmer finds himself writing the same piece of code, what he does is separate that task into its own subroutine, and whenever he needs it done, he makes a call to that one task. This was the whole point of a computer – if you define how to do something once, you don’t have to define it ever again, and the computer will do it over and over again for you. What this means is when you are making a program, you don’t have the repetition of laying a thousand bricks; once you’ve figured out how to lay a brick, you define the steps needed to lay one brick and then just make a subroutine call to do that every time you find yourself needing to lay a brick. You don’t see the problem of bricklaying ever again (unless you find out you did it wrong and need to modify it). This means that when a programmer is writing a set of tasks, almost everything is unique. There are generally not repetitious programming tasks which must be done over and over again, everything is approached afresh, defined, and then submitted to some library of common tasks. And each task must be done perfectly.

3. Reading code is much more difficult than writing it. It is very difficult to explain this to someone without the experience of working on a software project. Programming and coding are not easily-visualized disciplines. In fact, there is nothing inherently visual about them at all, regardless of how many flow-charts you may want to make. A programmer goes from a pure (or vague) algorithm in his head straight to a list of concrete instructions. These are not lists like “Pick up milk at the grocery store” – but rather explicit instructions about memory structures and how to process those memory structures. Again, these are not visual and beyond a certain level of complexity cannot be described comprehensively with any two-dimensional visual aid. When it’s all at the front of your mind, and you’re seeing the math of how it works, it’s relatively straightforward to define. However, unless you are extremely strict about writing down why you’re doing everything as you do it, you can go back to these mathematical definitions of how to move memory around and ask yourself what on earth did I do. And if it is hard, a month or two down the line to interpret what you yourself did, it is far more difficult to interpret what someone else did. And if you are on a large software project, you will have to look at and fix problems in other people’s code. If you fail to interpret precisely what they were trying to do, you are likely to introduce further problems. I assure you there are lines in Windows code that no one any longer knows what they’re there for. But if you remove them, the product breaks. This is why software projects tend to get larger and larger, and never smaller – no one knows what the “legacy code” is (that’s what we call this old code nobody knows what it does anymore but it’s somehow necessary) or how to fix it.

4. On large-scale projects, you have many external dependencies. It doesn’t sound so bad if you have to rely on someone else to do their job, but remember from 1) and 2) above that all these jobs must be done absolutely perfectly. I promise you, no matter how great a company is, not everyone there will write perfect code. Any given software engineer writes code that other people rely on and he has to rely on code written by other people. Consider Jim, who’s in a team of people writing the task that renders images when you double-click on an image file. Jim has to rely on code written by people working in the file system, code which takes something like a filename and gives him back the series of zeros and ones which he will eventually make into an image. If there’s anything wrong in the file system code, Jim’s code will not work. Jim’s code also relies on the code that makes a window with the little ‘x’ in the corner and file drop-down menu, and if there’s anything wrong there, Jim’s code will not work. And so on for other tasks which determine things like the monitor size, what kind of monitor it is, what the color scheme on the computer is, and so forth. And this is all before Jim even gets down to brass tax. If those teams have failed, Jim is going to be behind schedule (and quite possibly harassed by upper management for being behind). After that, Jim has to figure out his part of the code – determining what kind of image file it is, then processing it, then displaying it. Once Jim’s written this code, it may be called into by other people – the file system folks may then again re-use his code to display a preview image, or another program may want to show an image in the same way and re-use Jim’s code to do that. And if those people find problems in Jim’s code (or if they try to use it in a way Jim didn’t anticipate), then their code will fail and Jim will have to fix what he did. Every single one of these literally dozens of dependencies for something as simple as displaying an image on-screen is an opportunity for something to go wrong, for a bug to creep in, or for communication to fail between people and between teams. And if the product ships with any problem left unfound or unfixed, it is left for people who come along later trying to use the product as a start point for a bigger project to discover a work-around for the less-than-perfect product.

Issues 1 & 2 (and to some extent, 3) above are about programming anything – whether in a group or solo. Because perfection is required, fixing a problem in code – or as we say, fixing a bug – has a law of diminishing returns. Every time you try and fix an imperfect piece of code (and remember, it may be imperfect because something you are depending on is imperfect), you have some probability of introducing another imperfection, and possibly a devastating one. The larger and more incomprehensible a programming project becomes, the more difficult it is not to introduce a new bug. Although this is true for individual projects, it is especially true when more than a handful people are working on the same product. This is why large-scale programming products begin limiting the number of fixes they will make before the product ships – because every time you “fix” something you have some probability (dependent upon the complexity of the code and the thoroughness of your engineers) of breaking something else.

Issues 3 & 4 are specifically about large-scale team projects. Issue 3 – the difficulty of interpreting code – is why once you have a product, parts of it remain unchanged for very long periods of time, even if everyone recognizes that they are buggy or need to be changed. It is just too difficult to interpret exactly what something is doing and why it is there. And 4 simply exponentiates the problems of 1, 2, and 3, because every new dependency is an opportunity for a schedule to fall behind, communication or interpretation to break down, or for a bug to be introduced.

Although all these problems are, I think, part of the nature of software, they can be mitigated with good practices. I have not seen very many good practices put into practice, but in theory they could be. To avoid the problems of imperfection, rigorous testing can be demanded for every task in a program, on top of rigorously-defined functionality for each task. In most places I have been, a lot of code has been written before the programmer had a clear idea of what it was needed for. Although planning for the product as a whole is always undertaken, planning for each step and each piece is needed as well. Up-front planning is expensive, but in the end it will create better software, and make it easier to read code (if each piece has a rigorous definition). Likewise, testing is usually done from a high-level perspective, but if every task – every entry and exit point of every function – were tested for completion and correctness, this could cut down substantially on imperfections that creep into software. Again, the reasons this is not done is because doing so is very time-expensive, but a failure to do so just increases end-of-cycle testing and the scope and number of bugs in a product. And the final, and I think one of the most significant issues – cross-dependencies on large-scale products – can only be gotten around by clearly defining interchangeable parts to a programming product. The industrial revolution turned on the concept of interchangeable parts – the firing piece of one musket was the same as another, because all the pieces that touched other bits of a rifle were built to a particular specification. Computing has yet to catch up with this concept. I have yet to work on a project where low-level internal interfaces were clearly defined. On the level of the product as a whole, inputs and outputs to a program are clearly and rigorously defined. However, inputs and outputs from one programmer’s code to another programmer’s code are not defined at all but rather vaguely and sloppily hashed out as we go along. This is why the guts of software often look to me like a plate of spaghetti; if there were a more clearly architected inside to a product, I think this would help tremendously with all of the problems of software – bugginess, late ship schedules, difficult maintenance, and so on.

There is one final issue which exacerbates all the above problems, although it is not an issue of programming but of capitalism. Although I am attempting to make the case in the above, that it is much more difficult to make functional software than it is to make a functional building or a functional piece of hardware, in one sense software is much easier than any of these: software can be changed, and distributed, on the fly. Once you build a building, to modify it you typically have to shut it down, move people in, and spend days or weeks or even months retooling it. In software, it is a button on a keyboard that changes these. It is a few hours to recompile the program and then you can just update a released product with a patch online. Software is by its nature ephemeral. From a venture capitalist point of view, because software can be changed quickly, the investment input is minimal compared with other ventures. It’s because investment is small and turnaround time is quick that we saw things like the dot-com bubble. In many ways, software is a sort of venture capital wet dream. It’s cheap and changes fast. Everyone can get rich quickly (that’s the theory, if not the reality). This impulse toward capitalist ephemerality works against the necessity of software to be written perfectly. Perfection takes time, and when near-perfection can be done quickly to the siren-song of a million potential dollars, the time to make software air-tight, or even to perform well, is rarely taken. That will put you behind-market! And so we get buggy, better-than-nothing software offered up by the marketplace.

Welcome to software. I have no easily-implemented solutions to the above, and any solutions I do have conflict with the drive to market.