This all involves some PostgreSQL documentation. Here's the code sample in question:
IF demo_row.sex = 'm' THEN pretty_sex := 'man'; ELSE IF demo_row.sex = 'f' THEN pretty_sex := 'woman'; END IF; END IF;
According to @alsothings, this is a "totally unnecessary cis-heteronormative example", i.e. it's both cisnormative (assuming that everyone is cisgender) and heteronormative (assuming that everyone is heterosexual). I'm not convinced, but I'd welcome any comments from people who know more about this area than I do.
@br1ck574ck questioned the second part of that: "How is that "heteronormative" ? This example doesn't go anywhere near any sexual orientations." I agree; I think that "pretty_sex" is a variation on Prettyprint, i.e. it just refers to formatting, because this code is replacing an initial with a full word. If it did mean "the sex that you're attracted to" then it would imply that men are always attracted to men and women are always attracted to women, i.e. everyone is gay; that seems like the opposite of heteronormativity!
@ben_chaotica then elaborated on the cisnormativity claim: "It incorrectly conflates (biological) sex (m/f) and (soc constr) gender (man/woman)."
Going back to the code, both variables refer to sex rather than gender. E.g. it doesn't say "pretty_gender := woman". So, it's not explicitly saying "If your sex is male then your gender is also male."
Is the terminology incorrect? For instance, light years measure distance rather than time; is there a similar principle here, where "man"/"woman" only ever refer to gender and not to sex? That doesn't match my experience. For instance, Stonewall (an LGBT campaigning group) has a glossary, which includes these entries:
Transgender man – a term used to describe someone who is assigned female at birth but identifies and lives as a man. This may be shortened to trans man, or FTM, an abbreviation for female-to-male.
Transgender woman – a term used to describe someone who is assigned male at birth but identifies and lives as a woman. This may be shortened to trans woman, or MTF, an abbreviation for male-to-female.
So, they're using male and female in the context of gender (rather than sex), and I've heard other people doing the same thing. I'd say that male and female are adjectives, while man and woman are nouns, so it's just a question of which one fits better grammatically. I'm willing to believe that some people use different terms to describe sex and gender, but is there really a consensus on this? If not, it seems a bit harsh to criticise a technical manual for this.
In a wider sense, what exactly is the definition of cisgender and transgender? As per the Stonewall definitions, I'd say that if you're assigned a particular sex (and implicitly a gender) at birth, and you stick with that all your life, you're cisgender. If you later identify as a different gender, you're transgender. However, an alternate definition is to say that you're transgender if your sex and gender don't match.
Back in 2011, I mentioned some internet reviewers. "Iron Liz" did that for a while, and then in 2014 she did a podcast interview about GamerGate. I haven't listened to the whole thing (since it's almost an hour long) and I don't want to get sidetracked. The relevant bit is about 2 minutes in, where she says: "I was born a guy. Ok. I'm trans, or I wasn't trans any more. Male to female, basically. So, the reason I say I'm not trans any more is because I had surgery. That was last summer, and I've been on hormones pretty much for seven or so years." As I understand it, she's saying that initially she was transgender (sex = male, gender = female) then she became cisgender (sex = female, gender = female). However, her Twitter bio says that she's a "Post-Op MtF trans-woman". Maybe she's updated that as language has evolved, or maybe she's changed her mind since she recorded that interview?
Also, I've heard some people say that "sex is what's between your legs, gender is what's in your head". However, Sophie Labelle (the trans author of Assigned Male) seems to disagree. For instance, this strip says: "I wasn't 'born with a boy's body'. I am a girl and my body is mine. So it's a girl's body. Girls have all kinds of bodies." Then this strip says: "What do you mean, "I have boy's parts"? Are you talking about my penis? Because it's mine and I'm a girl. So it's a girl's penis." By that logic, does it make sense to refer to sex as male/female at all? (Personally, I find that comic rather frustrating to read, but I follow it because I'm trying to get some insight into a different point of view.)
Coming back to the sample code, the main problem I can see is that it only lists two options (male and female), and some people don't fit into either of those categories. I understand that this was a basic tutorial covering logical flow, so it makes sense to keep the code simple (comparing nested "If" statements with "ElseIf"), but it might have been better to choose a less controversial example, e.g. cats and dogs. Having said that, if m/f were the only two possible options then you wouldn't need a second test: you could just say "IF sex=m THEN [male] ELSE [female]". So, writing the sample this way actually implies that they are acknowledging other possibilities!
Although the example comes from database documentation, it doesn't really have anything to do with database design. (The basic principles of IF statements apply to most imperative programming languages.) If you are designing a database, here's my advice.
Firstly, take a look at the Government Service Design Manual, which has a design pattern for gender and sex. Do you actually need to store sex or gender at all? If so, which are you interested in?
If you're storing this, don't just use a Boolean field (e.g. "IsMale?"); instead, use a lookup table. For instance, there's an ISO standard for Sex (ISO/IEC 5218:2004) which specifies 4 possible values:
- 0 = not known
- 1 = male
- 2 = female
- 9 = not applicable
As a developer, you may be in a situation where your end users only want the traditional two options. However, if you use a lookup table and read in the values at runtime then you should be able to add extra options later without recompiling your code.
So, to summarise, I don't think there is anything really wrong with the sample code on the PostgreSQL website. However, there are some important issues to bear in mind if you're writing production code along similar lines.