AtCoderで年齢と使用プログラミング言語の相関を調べてみた

[Supership](https://supership.jp/)の名畑です。[うる星やつら](https://uy-allstars.com/)のTVアニメ第2期は2024年なのですね。それを楽しみにしつつ2023年頑張ります。

:::note info
AtCoderについて調べてみたシリーズの過去記事
- [競技プログラミング(AtCoder)とはどんなものか](https://qiita.com/nabata/items/44fa3995e476b12b9860)
- [誕生年毎のアクティブユーザ数](https://qiita.com/nabata/items/75407e48c7ca8de8a4a4)
- [アクティブユーザの世代別国と地域](https://qiita.com/nabata/items/28b5572978ee4abb0126)
- [プログラミング言語シェア](https://qiita.com/nabata/items/1f9c0543fad5c6106d19)
- [レーティング別問題解答速度](https://qiita.com/nabata/items/25631d3d1e43f4d9e31f)
- [所属(大学・高校・会社等)別のアクティブユーザ数](https://qiita.com/nabata/items/864e06a52de88123daaa)
:::

## はじめに

先月の記事「[AtCoderで年齢(誕生年)とレーティングや得点の相関について調べてみた](https://qiita.com/nabata/items/dfe2aaaa8bd2d48bee1e)」にて、タイトルの通り、[AtCoder](https://atcoder.jp/)における年齢とレーティングの相関を調べてみました。

その記事にて[年齢とプログラミング言語に相関があるのではというコメント](https://qiita.com/nabata/items/dfe2aaaa8bd2d48bee1e#comment-cf42bbb6e0fec427bf44)をいただきました。ありがとうございます！！

実際に年齢と使用言語の相関を調べたみたところ、個人的には予想外な結果が出ました。
年齢が高いほどにC++の使用率が高く、低いほどにPythonの使用率が高いのだろうと予想していたのです。

## 対象ユーザ

- AtCoderの[ランキング](https://atcoder.jp/ranking?lang=ja)の**アクティブユーザのみ**(2023年4月2日6時付)を元とする。そのため、本記事で**ユーザ**という単語が用いられた場合は**アクティブユーザ**を示すとお考えください。アクティブユーザは**過去2年以内にRatedコンテストに一度でも参加したユーザ**と定義されています。
- 各ユーザの使用言語は[AtCoder Beginner Contest 296(ABC 296)](https://atcoder.jp/contests/abc296/submissions)のコンテスト時間内( 2023年4月1日21:00~22:40)での提出結果より取得しました。
- アクティブユーザでありかつABC296に提出した方は**7,837人**でした。
- さらにこのうちで誕生年を登録しているのは**5,702人**でした。今回の集計対象はこの方々となります。
- 同一ユーザが複数プログラミング言語で提出をしている場合は最後の提出に用いたプログラミング言語を対象としています。

## 全体でのプログラミング言語使用率

まず、対象の5,702人全員を対象としてプログラミング言語の使用率を出してみました。
1位〜20位は下記でした。

| 		 | 	言語	 | 	使用率(%)	 |
| 	---:	 | 	:---	 | 	---:	 |
| 	1	 | 	C++ (GCC 9.2.1)	 | 	66.73	 |
| 	2	 | 	PyPy3 (7.3.0)	 | 	13.42	 |
| 	3	 | 	Python (3.8.2)	 | 	8.73	 |
| 	4	 | 	C++ (Clang 10.0.0)	 | 	2.75	 |
| 	5	 | 	Java (OpenJDK 11.0.6)	 | 	2.19	 |
| 	6	 | 	Rust (1.42.0)	 | 	1.42	 |
| 	7	 | 	C (GCC 9.2.1)	 | 	0.88	 |
| 	8	 | 	C# (.NET Core 3.1.201)	 | 	0.84	 |
| 	9	 | 	Ruby (2.7.1)	 | 	0.79	 |
| 	10	 | 	Go (1.14.1)	 | 	0.40	 |
| 	11	 | 	JavaScript (Node.js 12.16.1)	 | 	0.35	 |
| 	12	 | 	C (Clang 10.0.0)	 | 	0.26	 |
| 	13	 | 	Java (OpenJDK 1.8.0)	 | 	0.19	 |
| 	14	 | 	Swift (5.2.1)	 | 	0.12	 |
| 	14	 | 	Julia (1.4.0)	 | 	0.12	 |
| 	16	 | 	PHP (7.4.4)	 | 	0.11	 |
| 	17	 | 	Kotlin (1.3.71)	 | 	0.09	 |
| 	18	 | 	Crystal (0.33.0)	 | 	0.07	 |
| 	19	 | 	Common Lisp (SBCL 2.0.3)	 | 	0.05	 |
| 	19	 | 	TypeScript (3.8)	 | 	0.05	 |

C++、Python並びにPyPyが多いという結果です。

今回はこのうちの10位までのプログラミング言語を対象としました。

## 誕生年別の使用率

誕生年は任意登録であり、特に確認もありません。
今回の対象ユーザには**1921年〜2023年**がいたのですが、このうちの**1977年〜2013年**のみをグラフにしました。**1977年**が**14人**、2013年は**23人**であり、この期間はどの年についても10人以上のユーザがいます。**1976年**は**8人**、**2014年**は**3人**で一桁でした。
最も多いのは**2002年**で**732人**でした。

誕生年別の使用率をグラフにしたものが下記です。
単位は%です。

![language_birth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/99f62f85-e078-10f8-f2ef-49e5e0ca416c.png)


青い線が **C++ (GCC 9.2.1)** 、オレンジの線が **PyPy3 (7.3.0)** 、灰色の線が **Python (3.8.2)** となります

端的に言えば、1997年辺りを境として若い人ほどC++の使用率が増加傾向、Pythonの使用率が減少傾向でした。

表にすると下記です。

| 	年	 | 	C++ (GCC 9.2.1)	 | 	PyPy3 (7.3.0)	 | 	Python (3.8.2)	 | 	C++ (Clang 10.0.0)	 | 	Java (OpenJDK 11.0.6)	 | 	Rust (1.42.0)	 | 	C (GCC 9.2.1)	 | 	C# (.NET Core 3.1.201)	 | 	Ruby (2.7.1)	 | 	Go (1.14.1)	 |
| 	---:	 | 	---:	 | 	---:	 | 	---:	 | 	---:	 | 	---:	 | 	---:	 | 	---:	 | 	---:	 | 	---:	 | 	---:	 |
| 	1977	 | 	35.71	 | 	50.00	 | 	7.14	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	7.14	 |
| 	1978	 | 	52.63	 | 	15.79	 | 	10.53	 | 	0.00	 | 	5.26	 | 	10.53	 | 	0.00	 | 	5.26	 | 	0.00	 | 	0.00	 |
| 	1979	 | 	20.00	 | 	50.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	10.00	 | 	0.00	 | 	0.00	 | 	20.00	 | 	0.00	 |
| 	1980	 | 	22.22	 | 	25.93	 | 	14.81	 | 	0.00	 | 	3.70	 | 	3.70	 | 	0.00	 | 	11.11	 | 	7.41	 | 	0.00	 |
| 	1981	 | 	11.11	 | 	33.33	 | 	11.11	 | 	0.00	 | 	0.00	 | 	16.67	 | 	5.56	 | 	11.11	 | 	0.00	 | 	0.00	 |
| 	1982	 | 	28.57	 | 	28.57	 | 	19.05	 | 	0.00	 | 	4.76	 | 	14.29	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 |
| 	1983	 | 	31.25	 | 	12.50	 | 	18.75	 | 	6.25	 | 	18.75	 | 	6.25	 | 	0.00	 | 	6.25	 | 	0.00	 | 	0.00	 |
| 	1984	 | 	35.71	 | 	17.86	 | 	14.29	 | 	3.57	 | 	7.14	 | 	3.57	 | 	7.14	 | 	3.57	 | 	0.00	 | 	7.14	 |
| 	1985	 | 	23.53	 | 	14.71	 | 	23.53	 | 	2.94	 | 	2.94	 | 	5.88	 | 	0.00	 | 	0.00	 | 	5.88	 | 	5.88	 |
| 	1986	 | 	53.57	 | 	25.00	 | 	7.14	 | 	0.00	 | 	7.14	 | 	0.00	 | 	0.00	 | 	0.00	 | 	3.57	 | 	0.00	 |
| 	1987	 | 	18.75	 | 	25.00	 | 	21.88	 | 	0.00	 | 	3.13	 | 	3.13	 | 	6.25	 | 	9.38	 | 	0.00	 | 	3.13	 |
| 	1988	 | 	24.24	 | 	27.27	 | 	15.15	 | 	6.06	 | 	0.00	 | 	12.12	 | 	0.00	 | 	3.03	 | 	3.03	 | 	6.06	 |
| 	1989	 | 	31.71	 | 	24.39	 | 	14.63	 | 	7.32	 | 	9.76	 | 	7.32	 | 	0.00	 | 	0.00	 | 	2.44	 | 	0.00	 |
| 	1990	 | 	48.89	 | 	31.11	 | 	2.22	 | 	4.44	 | 	2.22	 | 	4.44	 | 	2.22	 | 	0.00	 | 	4.44	 | 	0.00	 |
| 	1991	 | 	32.50	 | 	32.50	 | 	15.00	 | 	0.00	 | 	7.50	 | 	2.50	 | 	0.00	 | 	2.50	 | 	2.50	 | 	0.00	 |
| 	1992	 | 	43.48	 | 	30.43	 | 	8.70	 | 	1.45	 | 	2.90	 | 	0.00	 | 	0.00	 | 	2.90	 | 	2.90	 | 	1.45	 |
| 	1993	 | 	26.26	 | 	39.39	 | 	13.13	 | 	0.00	 | 	6.06	 | 	3.03	 | 	0.00	 | 	4.04	 | 	3.03	 | 	1.01	 |
| 	1994	 | 	41.67	 | 	25.00	 | 	15.63	 | 	1.04	 | 	4.17	 | 	3.13	 | 	0.00	 | 	0.00	 | 	4.17	 | 	0.00	 |
| 	1995	 | 	43.64	 | 	22.73	 | 	13.64	 | 	3.64	 | 	0.91	 | 	8.18	 | 	0.00	 | 	1.82	 | 	0.00	 | 	1.82	 |
| 	1996	 | 	50.00	 | 	24.60	 | 	8.73	 | 	1.59	 | 	4.76	 | 	4.76	 | 	0.79	 | 	0.79	 | 	0.00	 | 	0.00	 |
| 	1997	 | 	41.38	 | 	26.72	 | 	12.93	 | 	2.59	 | 	3.45	 | 	2.59	 | 	0.86	 | 	1.72	 | 	3.45	 | 	0.86	 |
| 	1998	 | 	49.77	 | 	23.08	 | 	13.12	 | 	2.71	 | 	1.81	 | 	3.62	 | 	0.45	 | 	0.90	 | 	1.81	 | 	0.45	 |
| 	1999	 | 	52.11	 | 	23.19	 | 	15.06	 | 	1.20	 | 	3.31	 | 	0.60	 | 	0.90	 | 	1.20	 | 	0.30	 | 	0.90	 |
| 	2000	 | 	59.64	 | 	18.14	 | 	12.93	 | 	2.95	 | 	1.36	 | 	1.59	 | 	0.23	 | 	1.13	 | 	0.68	 | 	0.23	 |
| 	2001	 | 	65.64	 | 	14.01	 | 	10.36	 | 	2.69	 | 	2.30	 | 	0.77	 | 	0.58	 | 	0.38	 | 	0.96	 | 	0.19	 |
| 	2002	 | 	78.14	 | 	8.47	 | 	5.19	 | 	1.64	 | 	2.87	 | 	0.68	 | 	1.23	 | 	0.14	 | 	0.00	 | 	0.27	 |
| 	2003	 | 	78.66	 | 	7.33	 | 	6.68	 | 	2.93	 | 	1.47	 | 	0.16	 | 	1.63	 | 	0.00	 | 	0.00	 | 	0.00	 |
| 	2004	 | 	76.65	 | 	4.82	 | 	5.84	 | 	6.85	 | 	1.52	 | 	0.51	 | 	1.78	 | 	1.02	 | 	0.25	 | 	0.25	 |
| 	2005	 | 	80.65	 | 	8.06	 | 	4.84	 | 	3.23	 | 	0.81	 | 	0.00	 | 	0.81	 | 	0.81	 | 	0.00	 | 	0.00	 |
| 	2006	 | 	83.04	 | 	4.68	 | 	6.43	 | 	2.34	 | 	1.17	 | 	0.00	 | 	0.58	 | 	0.00	 | 	0.00	 | 	0.00	 |
| 	2007	 | 	92.67	 | 	2.67	 | 	2.67	 | 	0.67	 | 	0.67	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 |
| 	2008	 | 	84.80	 | 	3.51	 | 	6.43	 | 	4.09	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.58	 | 	0.58	 | 	0.00	 |
| 	2009	 | 	94.15	 | 	0.00	 | 	2.13	 | 	3.72	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 |
| 	2010	 | 	91.06	 | 	1.68	 | 	1.12	 | 	5.03	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.56	 | 	0.00	 | 	0.00	 |
| 	2011	 | 	96.26	 | 	0.00	 | 	0.00	 | 	2.80	 | 	0.00	 | 	0.00	 | 	0.93	 | 	0.00	 | 	0.00	 | 	0.00	 |
| 	2012	 | 	86.36	 | 	3.03	 | 	4.55	 | 	6.06	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 |
| 	2013	 | 	78.26	 | 	4.35	 | 	13.04	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 | 	0.00	 |

## 推測

結果について推測してみました。

- 年齢が高いほどに書きやすいとされるプログラミング言語を選んでいるのかもしれない。
- 年齢が低いほどに競技プログラミングで有利とされるプログラミング言語を選んでいるのかもしれない。
- 「[AtCoderアクティブユーザの各世代における「国と地域」の割合を調べてみた](https://qiita.com/nabata/items/28b5572978ee4abb0126)」で触れたように、そもそもとして世代毎に国の偏りがある。国の偏りが言語の偏りに関連しているのかもしれない。

実際にC++が競技プログラミングで有利か、Pythonが書きやすいかというのは異論もあるでしょうが、一般論なのではないかと思っています。そんなことない？

「若ければ若いほどに競技プログラミングを競技としてとらえている」「年齢が高いほどにC++に対して難しいというイメージを持ってしまっている」などなど、推測だけならいくらでもできますね。

## 最後に

予想していたのと完全に逆の結果が出て、思い込みはよろしくないと強く感じました。

## 宣伝

[SupershipのQiita Organization](https://qiita.com/organizations/supership-inc)を合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方は[Supership株式会社 採用サイト](https://supership.jp/recruit/)よりご確認ください。