Title: Survey Data on Cis and Trans Women Among Haskell Programmers
Date: 2021-01-01
Category: other
-Tags: Haskell, sex differences
+Tags: Haskell, sex differences, Python
Status: draft
Stereotypically, computer programming is both a predominantly male profession and the quintessential profession of non-exclusively-androphilic trans women. Stereotypically, these demographic trends are even more pronounced in "niche", academic, or hobbyist technology communities (_e.g._, Rust), rather than those with more established mainstream use (_e.g._, JavaScript).
But stereotypes can be _wrong_! The heuristic process by which people's brains form stereotypes from experience are riddled with biases that prevent our mental model of what people are like from matching what people are _actually_ like. Unless you believe [a woman is more likely to be a feminist bank teller than a bank teller (which is _mathematically impossible_)](https://en.wikipedia.org/wiki/Conjunction_fallacy), you're best off seeking _hard numbers_ about what people are like rather than relying on mere stereotypes.
-Fortunately, sometimes hard numbers are available! Taylor Fausak has been administering an annual State of Haskell survey [since 2017](https://taylor.fausak.me/2017/11/15/2017-state-of-haskell-survey-results/), and the [2018](https://taylor.fausak.me/2018/11/18/2018-state-of-haskell-survey-results/), [2019](https://taylor.fausak.me/2019/11/16/haskell-survey-results/), and [2020](TODO: linky) surveys include optional "What is your gender?" and "Do you identify as transgender?" questions, as well as the anonymous response data.
+Fortunately, sometimes hard numbers are available! Taylor Fausak has been administering an annual State of Haskell survey [since 2017](https://taylor.fausak.me/2017/11/15/2017-state-of-haskell-survey-results/), and the [2018](https://taylor.fausak.me/2018/11/18/2018-state-of-haskell-survey-results/), [2019](https://taylor.fausak.me/2019/11/16/haskell-survey-results/), and [2020](https://taylor.fausak.me/2020/11/22/haskell-survey-results/) surveys include optional "What is your gender?" and "Do you identify as transgender?" questions, as well as the anonymous response data.
I wrote a script to use these answers from the CSV response data for the 2018–2020 surveys to tally the number of cis and trans women among survey respondents. (In Python. Sorry.)
survey_results_filenames = [
"2018-11-18-2018-state-of-haskell-survey-results.csv",
"2019-11-16-state-of-haskell-survey-results.csv",
- # TODO: 2020
+ "2020-11-22-haskell-survey-results.csv",
]
if __name__ == "__main__":
for results_filename in survey_results_filenames:
- year, _ = results_filename.split('-', 1)
+ year, _ = results_filename.split("-", 1)
with open(results_filename) as results_file:
reader = csv.DictReader(results_file)
total = 0
trans_f = 0
for row in reader:
total += 1
- if row['What is your gender?'] == "Female":
- transwer = row['Do you identify as transgender?']
+ # 2018 and 2019 CSV header has the full question, but
+ # 2020 uses sXqY format
+ gender_answer = (
+ row.get("What is your gender?") or row.get("s7q2")
+ )
+ if gender_answer == "Female":
+ transwer = (
+ row.get("Do you identify as transgender?") or
+ row.get("s7q3")
+ )
if transwer == "No":
cis_f += 1
elif transwer == "Yes":
trans_f += 1
print(
- "{}: total: {}, cis-♀: {}, trans-♀: {}".format(
- year, total, cis_f, trans_f
+ "{}: total: {}, "
+ "cis-♀: {} ({:.2f}%), trans-♀: {} ({:.2f}%)".format(
+ year, total,
+ cis_f, 100*cis_f/total,
+ trans_f, 100*trans_f/total,
)
)
It prints this tally:
```
-2018: total: 1361, cis-♀: 26, trans-♀: 19
-2019: total: 1211, cis-♀: 16, trans-♀: 16
+2018: total: 1361, cis-♀: 26 (1.91%), trans-♀: 19 (1.40%)
+2019: total: 1211, cis-♀: 16 (1.32%), trans-♀: 16 (1.32%)
+2020: total: 1348, cis-♀: 12 (0.89%), trans-♀: 21 (1.56%)
```
-[TODO: 2020 data; I briefly thought about pooling years to get a better sample size, but that's methodologically invalid because probably a lot of the same people took the survey multiple years]
+[TODO: wrap up]