さいどうにっき

趣味や日常などを不定期で書いていきます

Kick-ass 1day-1pro Carnival

今回の元ネタ

"HARDCORE SYNDROME 5" より、t+pazolite氏の "Kick-ass Kung-fu Carnival" 

soundcloud.com   氏は名前にKung-fuが入る曲を他にも出している。 気になったら一度聞いてみて欲しい。

  • "Rumble Kung-fu Shutdown" - "絢爛喧騒オリエント"
  • "Shiny Kung-fu Revival" - "Ponko2 Girlish"

はじめに

この記事は

docs.google.com

2日目の記事です。 1day1problemの栄枯盛衰について書きます。

いつの間にか競プロ部門をしょって立つことになっていたんだけど、 倒れそうなので 足腰鍛えてきます

また、この記事における「プログラミング能力」は、

  • プログラムの簡易的な設計をする能力
  • プログラムを実装する能力
  • バグを見つけて修正する能力

のことを指します。

プロローグ

そもそもの発端は、「女子のプログラミング能力を底上げしたい」と考えたことだった。 ICTに入ってから3年半以上経った当時、8期生以降プログラミングができる女子は見たことがなかったからだ。

ICTの男子は大抵、学年に何人か技術系にどハマりする学生がいる。 彼らは勝手に色んな沼(アプリ開発とかエディタとか)に足を突っ込み、プログラミング能力が上がってギークになっていく。

一方女子は、そもそもの絶対数が少ない。 1学年にだいたい2,3人くらいで、0人の学年すらある。 ここから「男子でも一握りレベル」が出てくるのを待つのは、正直愚策と言うしか無い。

加えて、女子はプログラミングにハマりにくいという。 前に誰かから聞いたのだが、「手段として学ぶことはあってもそれそのものを楽しむ人は少ない」らしい。 多分これは男女の根本的な違いで、これを踏まえるとギークはめちゃめちゃ生まれにくい。

正直言うとギークってレベルまで育たなくてもよくて、 ICTの教材に出てくる「アルゴリズムとデータ構造」の問題を解ければいいかな、くらいの気持ちだった。 それでも、育ちにくい環境でどう育てればいいかというのは大きな課題だった。

10期窓での話し合い

なんとなく「ギーク女子を育てるにはどうしたらいい?」と10期窓で聞いてみると、いくつか案が挙がった。

  • 開発させる
  • 集団開発させる
  • 勉強会を開く
  • 競プロさせる

この中から一番手軽そうな競プロを選び、更に手軽で持続させられそうな「1日1問」をやらせてみよう、ということになった。 典型問題を解きながら各人のコードを晒し合い、コードレビューをするのである。

最高、まさにKick assだ。

発足

思い立ったが吉日。 すぐに窓を作り、早速問題を投げた。 ユークリッドの互除法を使ってGCDとLCMを求める問題。 最初だからとりあえず簡単そうなやつ、と選んでみたが、そこまで簡単でもなかったらしい。

途中からはEASY(プロIまでの範囲)とHARD(それ以降)に分けて、どっちか解けばいいよという感じにした。

告知はどのあたりでやったのか忘れたけど、最初は野郎ばっかりで男祭りだったのを覚えている。 結果から言うと、あの後も(数が多いのも関係あるんだろうけど)男子のコードが非常に多かった。

辛い運営

正直、問題案が出しづらかった。 AOJから問題を選んでいたのだが、 EASYはプロIの範囲だからやるだけ問題しか出せず、 HARDもC++Javaでないと厳しい問題が多い。 結果として選択肢は少なくなっていき、前に出した問題をもう1回出すことも何度かあった。

コードレビューは数がひたすらに多く、全部をチェックしてレビューを返すのは非常に大変だ。

解説もキツい。 EASYは自分からすると本当に「やるだけ」なので、まともな解説がなかなか書けない。 HARDはサンプルコード選びに苦労した。 提出されたのが全部C++とかJavaだと、自分で書いたCのコードをサンプルとする。 ここで怠けてはいけないと思って、前にCで解いていても新たにコードを書いていたが、ひたすらにめんどくさかった。

これを1人でやっていたのだから、破綻するのは当然である。 むしろ2ヶ月もよく続けられたとすら言えるのではないだろうか。

実は他にも辛いことがある。 一番育てたい肝心の女子が全然解いてくれなかった。 主にピュアの極み乙女。のみんなが忙しいのが原因。 流石にそんな状態で問題解けと言えるはずがなく、ただただ残念がるだけだった。

衰退

学年末試験が終わったあたりから問題を出し忘れる日が増え、起業家甲子園の直前あたりから更新が止まった。

春合宿は「1day1problemの過去問を解く」という名目で毎日問題を出したが、それが終わるとまた止まる。 結局、4月末に3日ほど更新した後はそのままフェードアウトするように完全停止した。

1day3problemの登場

ところが、夏合宿で再び復活したらしい。 しかも3倍になって。 赤かったりするんだろうか。

今度はギークの2年生が問題を出す側で、1年生や他の2年生が対象のようだ。 僕は夏合宿に参加しなかったため夏休みが終わるまで存在を知らなかったが、AOJではなくAtCoderから問題を出していたらしい。 問題出したりコードレビューしたり解説したりするのは辛くなかっただろうか。 あと1年生の底上げできたんかな。

1day1problemの復活

流石に夏合宿が終わると1日3問とはいかないようで、再び1day1problemが動き出した。

運営陣も12期生複数人になり、日によって出題者が異なったりする。 そして大きな違いは、 自分たちに近い人達のレベルアップも考慮されていた ことである。

例えば以前に難しくて解くのを放棄した問題が出ていたり、解説を読んでも分からなかった問題が出ていたりした。 これ自分もレベルアップできるじゃんやったね。

2度目の衰退

ですよねー。 先月の頭くらいから更新がほぼなかった。

やっぱり問題出すのとかレビューとか辛いらしい。 あと解いてくれないとか。

モチベ大事よねえ。

結果

1day1problemはプログラミング能力の底上げに貢献できたのか。

少なくとも、僕が運営していた頃は底上げへの貢献はほぼできていなかったと思う。 基礎の基礎くらいはできたと信じたいが、 結局出す問題のレベルを上げきれずに停滞し、底上げの目的は果たせなかった。

でも、いいこともあった。 最近聞いた話だが、Luzは僕が運営していた頃の1day1problemから競プロを始めたらしい。 そのまま彼が出題する側になったのだから、「ワシが育てた」ではないにせよ「ワシが引き込んだ」くらいは言っていいんじゃないだろうか。 他にも、くろこじやmitoといった「出る杭」を更に引き出せた(と勝手に思っている)のはせめてもの救いだ。

12期生が運営になってからは、以前Luzが言っていたように「やりたい人がやればいい」という方針に変わったようだ。 こちらは十分に目的を果たせていると思う。 運営が辛いという問題は相変わらず解決できていないようだけど。

そもそも底上げは必要なのか?

やる気がない人に力をつけさせようというのは結構無茶である。 仮にもICTに所属してるならプログラミングやろうぜ、というのは思うけど、 仮にも情報に所属していながら回路を全然やってないという特大ブーメランが飛んでくる。 死んだ。 というかそれやるならデザインもやらないといけないしプレゼンも…プレゼンはLT参加するし大会でも1回やったしいいよね…

とまあこんな具合に色々と死ぬので、「もれなく底上げ」ってめちゃめちゃ難しいと思う。 なんなら無理じゃなかろうか。

1day1problemがやること

では何をしたらいいのか。 何をすればKick-assになるのか。

もちろん「やりたい人がやる」という方針はそのままでいい。 十分に機能しているし、競技力の向上に少なからず貢献するはず。

これは個人的な考えだけど、「機会の提供」をこれからも続けるべきだと思う。 競技をかじってみよう、始めてみようという人が気軽にできる機会を提供して、沼に引きずり込めるようにする。 一度引きずり込んでしまえばこっちのもので、そのうち勝手に問題を解いていくだろう。

もちろん、これには継続的な運営が欠かせない。

  • 毎日最低でも1問選ぶ
  • 投げられたコードをレビューする
  • 問題を解説する

この3つは必要不可欠だ。 とはいえ問題選びは人力だと厳しいものがあるため、何かしら選ぶやーつを作った方がいいかもしれない。 あと問題カブるのは許してください。

他のやつ(デザインとかプレゼンとかハードとか)もこんな感じの窓ないかなあチラッチラッ


気がついたら4000文字くらい書いてました。こんな長いの書いたの初めてだよ。

明日は遂に上京を果たした @_remew_ です。