わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

sexからgenderへ

年末のプログラミング授業での,ちょっとした失敗談を書いておきます.
言語はVBAなのですが他の言語でも起こりそうなことです.まずExcelファイルがあって,あるワークシートには,氏名・性別・生年月日・身長・体重が並んでいます*1.授業で使うので架空*2のデータです.性別は「男」か「女」のいずれかで,ランダムに並んでいます.
プログラミングを伴わない前期の授業では,このワークシートを加工しました.性別で並べ替えると,表の上に「女」,下に「男」のデータが集まります.そのあと範囲を指定し,女性だけ,男性だけで,身長と体重の相関係数を求めたり散布図を作成したりしました.
VBAでは,ワークシートを変更することなく,「男」の行だけを取り出して,それらの処理ができるようになります.相関係数だけなら,いくつか変数を用意し,値を足し込んでいって,最後はちょっとした演算で,算出できます.ですが,散布図も作りたかったので,「男」という名前のワークシートを新規に作り,もとの表の「男」の行を,コピーするようにしました.相関係数の算出には,WorksheetFunction.Correlを使いました.
授業で用意した,VBAのプロシージャは,その処理の中に何度も,"男"という文字列が出現していました.上のとおり,新規作成のワークシート名に,そして値のコピー先に,それから行をコピーするかの条件判定に,です.プロシージャの名前は,CorrelAndScatterとしておきます.
授業中の最後の課題として,「女」の行だけを取り出して,相関係数を求めるとともに散布図を作成できるようにすることを,指示しました.
最後*3だから,自由に書かせてもよかったのですが,少し考えて,資料には次のように記しておきました.

  • 女性についても,身長と体重の相関を分析(相関係数の計算と散布図の作成)できるようにしたい.以下のどちらかを選び,編集しなさい.
    • 「CorrelAndScatter」プロシージャをコピーしてから,プロシージャ名を変更し,「男」をすべて「女」に書き換える.
    • 「Sub CorrelAndScatter(sex As String)」と書き換えてから(CorrelAndScatter内も変更する必要あり), 2つのSubプロシージャを新たに作って,それぞれから「Call CorrelAndScatter("男")」「Call CorrelAndScatter("女")」と呼び出す.

2つ挙げたやり方のうち,プログラミング指導の観点で「まずい」のは,もちろん前者です.悪しきコピペのプログラミングです.2つのプロシージャに分け,何かあってコードを変更するとなると,両方のプロシージャの中身を,書き換えないといけません.
一方,後者は「共通化」の考え方です.関数を定義することで処理を一般化・共通化できることは,同じ科目のC言語の回で取り上げました.
授業では,後者の方が字数が多いし,なんだか難しそうなことをしているように見えるけれども,できればこっちで取り組んでほしい.でもやっぱり分からないという人は,前者でいいよとアナウンスしました.
巡回していると,後者にまったく別のところで,書き方の問題点に気づきました.
「sex As String」と書くことで,sexが文字列型の引数となり,意図としては"男"か"女"のいずれかの値をとります.
ですので,この課題に取り組むより前の,CorrelAndScatterの中で,"男"と書かれてある箇所を,sexに置き換えれば済むだけなのですが…
困っている学生にアドバイスする中で,「"男"をsexに置き換えればいいんですよ.ここもsex,そこもsex! あそこもsex!!」と…本当に言ったわけではなく,そう言いそうになって,口をつぐんだのでした.
何度も何度もこの単語を,真顔で言うことができないのです.
授業は,同じ内容・異なる曜日・異なる受講者で2クラスを担当していますので,あとに実施した授業では,「Sub CorrelAndScatter(sex As String)」を「Sub CorrelAndScatter(gender As String)」に変更しました.
高校まで,あるいは大学に入ってから,ジェンダーというのは文化的社会的性差のことだと,教わっていればいいけれども,そうとは限らないし,プログラミングではそこまで深い話は必要としません.授業では,「genderとは,性別のことです」とだけ解説しました.そして巡回中に,「"男"をgenderに置き換えればいいんですよ.ここもgender,そこもgender! あそこもgender!!」と叫ぶこともなく,無難に授業を終えることができました.
個人的にsexとgenderの違いは把握していました*4が,プログラミングでgenderを使うのはどうかなという思いも持っていました.検索して,以下を読んだのが,決断の後押しとなりました.

ジェンダーは,ポケモンGOでも少し,盛り上がりましたね.リンクしておきます.

*1:整然データhttp://id.fnshr.info/2017/01/09/tidy-data-intro/です.

*2:疑似個人情報データ生成サービスhttps://hogehoge.tk/personal/なんてのもあります.

*3:VBAを使った授業という点でも,そのときが最終回でした.

*4:英単語としていうと,sexには性行為という意味もありますが,genderにはその意味が含まれません.