give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

「のんびり座りたい」問題でペアプログラミング! ~ 西脇.rb & 東灘.rb ペアプログラミング In Action vol.02を開催しました #nshgrb

はじめに: 近況報告

みなさん、どうもお久しぶりです。
最近ブログの更新頻度が減って申し訳ないです ><
僕は元気にしています・・・と言いたいところですが、そこまで元気じゃないかもしれません(苦笑)。


10日ほど前に地元の秋祭りで神輿のタイヤが激突し、右足のかかとを6針縫う怪我をしてしまいました。
傷口を見たらバックリと開いた傷口から真っ赤な血が流れていて、ちょっとした「グロ画像」になっていました。
縫ってくれた病院の先生いわく、骨も少し見えていたそうです。。。(僕は見ていませんが)
1週間以上経ちましたがまだ完治しておらず、若干足を引きずりながらノロノロ歩いています。


あと、これは前々から予定していたのですが、おとといは昔から背中にあった大きな「できもの」を取ってもらう手術もしました。
局所麻酔で1時間ぐらいかけて、背中から直径3~4cm(プルーンぐらいの大きさ?)の「できもの」を摘出しました。
手術、イヤですね~。
何がイヤって、「痛いことされているはずなのに痛くない麻酔の不気味さ」がイヤです。
手術中はわざわざその「痛さ」を想像してしまって、気分が悪くなってしまいます。
とりあえず手術自体は無事に終わり、丁寧に背中を10針縫ってもらいました。


というわけで、僕の足と背中にはそれぞれ傷口を縫う糸がまだ残ったままです。
動かすと痛いところが足と背中にあるのであまりテキパキと動くこともできず、家事や育児は妻に任せっきりだったりして、妻にも申し訳なく思っております。


幸いだったのは「在宅勤務 + プログラマ」なので、足や背中が多少痛くても仕事には支障がない点ですね。
これは非常にありがたいです。
身体を使う仕事だったり、必ず出勤しなければいけない会社だったりしたら、仕事やお給料にも影響が出ていたかもしれません。


さて、ここからが本題です。
去る10月19日、西脇.rb & 東灘.rbのRuby勉強会「ペアプログラミング In Action vol.02」を開催しました。
足のケガは治っていなかったのですが、マイケル(@maikeruhorando)に車で送ってもらったりしてなんとか参加できました。
今回はこの勉強会の開催レポートを書いてみたいと思います。


f:id:JunichiIto:20131019163452j:plain:w500


「ペアプログラミング In Action」って何?

ペアプログラミング In Actionは勉強会の参加メンバー同士でペアを組み、共通のお題をペアプログラミングしながら解いていく勉強会です。
プログラミング終了後は書いたコードを見せ合って、全員でコードレビューします。


今回のお題: 「のんびり座りたい」問題

ペアプロで解くお題は参加者全員が持ち寄って、投票で決定します。
今回選ばれたのは「のんびり座りたい」という問題です。


問題の詳しい説明はこちらにあります。

問題

いくつかの椅子がある。そこにひとりずつ人が現れ、あるいは立ち去る。
椅子は一列に並んでいる。
人が座る席は以下のルールで決まる:

  1. どちら側の隣にも人が座っていない席を選ぶ。
  2. それが無理なら、片側にしか人が座っていない席を選ぶ。
  3. それも無理なら、両側に人が座っている席を選ぶ。
  4. 上記の条件で一つに決まらない場合は、候補のうち最も左にある席を選ぶ。
  5. 一度座ったら立ち去るまでその場を動かない。


指定された順序で人が来たり立ち去ったりした結果、それぞれの椅子に誰が座っているのかを出力せよ。

入力

入力は 6:NABEbBZn のような形式になっている。
「 : 」の前(上記の例では 6 ) は椅子の数を示す。
「 : 」の後(上記の例では NABEbBZn ) は人の出入りを示す。A〜Z は、それぞれの人の到着を意味し、a〜z は、対応する大文字の人が立ち去ったことを意味する。

出力

出力は、席に座っている人を左から順に並べる。誰も座っていない席は - で示す。
入力が 6:NABEbBZn の場合、

記号 説明 席の状態
初期状態 ------
N N があらわれた N-----
A A があらわれた N-A---
B B があらわれた N-A-B-
E E があらわれた N-A-BE
b B が立ち去った N-A--E
B B があらわれた N-AB-E
Z Z があらわれた NZAB-E
n N が立ち去った -ZAB-E


となるので、文字列 -ZAB-E を出力すれば良い。

のんびり座りたい 〜 横へな 2013.2.2

西脇.rb & 東灘.rb史上最年少、中2プログラマ(!)とペアを組んだ

今回の勉強会では10名の方が参加してくれました。
そのうち半数ぐらいの方が「初参加 or ペアプロ未経験 or Ruby初心者」の方でした。


中でも注目だったのはまだ中学2年生という宮崎さん(@KaitoMiyazaki1)です!
Twitterのプロフィールを見て、「中2?マジ中2!?」と半信半疑だったのですが、本当に中学生でした。
しかも最後まで勉強会に残れない理由が「今日は塾があるから」だったという・・・。
いや、でも本当に偉いですね。中学生でこんなプログラミングの勉強会に参加するなんて!


ペアはくじ引きで決めたのですが、僕のペアがその宮崎さんでした。
いったい年齢差いくつ?僕が36歳で、中2が13~14歳だから、20歳ちょいぐらいですか?
場合によっては親子ってこともありえる年齢差ですね。


Rubyは最近始めたばかりという宮崎さんですが、中学生とは思えないほどしっかりとプログラミングの話題についてきてくれました。
しかもエディタはSublime Textというんだから本格的。
こんなに若いときからプログラミングを始めたら将来有望ですね!
おっちゃんは今後の成長に期待していますよ。


「のんびり座りたい」問題は意外と難しかった

プログラミングの時間は3時間半ぐらいあったのですが、完全にクリアできたのは5組中2組だけでした。
僕と宮崎さんのペアも時間ギリギリでなんとか解けた、という感じです。
問題を読むだけだと、そこまで難しい問題であるようには思えないんですけどね~。


ただし、この勉強会では「速く解くこと」や「最後まで解くこと」は重要視していません。
ペアプログラミングやテスト駆動開発の考え方を学んだり、お互いの思考の過程や自分の知らない技術Tipsを共有したりすることが一番の目的です。
最後まで解けなかったペアの人たちもそうした目的は達成できたようなので良かったです。


「もくもく会」とは異なり、プログラミングの時間もシ~~ンとならず、みんなでわいわい、がやがやとプログラミングできるのも良いですね。
最初から最後まで熱気のある感じの勉強会になりました。


f:id:JunichiIto:20131019163510j:plain:w500

懇親会ではRuby Warriorを解いたりした

今回の懇親会は居酒屋に移動せず、会場の神戸カフーツさんでビアバッシュを開きました。
会場でそのままPCやプロジェクターが使えるので、余興としてみんなでRuby Warriorをやったりしました。
https://www.softantenna.com/wp/wp-content/uploads/2013/07/blogRubyWarrior-Bloc.png
Ruby Warriorはモンスターを攻撃するコマンドをRubyのメソッドで組み立てるブラウザ上のゲームです。
飲み会の時間までプログラミングの話題で盛り上がるのは、いかにもプログラミング好きの集まりっていう感じがしますね~。


まとめ: Rubyの経験よりもモチベーションが高さの方が重要

上でも書いたように半数ぐらいの方が「初参加 or ペアプロ未経験 or Ruby初心者」の方だったので、開催前は「大丈夫かな?どんな勉強会になるのかな?」と少し心配していました。
しかし結果としては大いに盛り上がり、今回も大成功の勉強会だったと言えます。


勉強会を成功させるために重要なのは、Rubyの経験の有無よりもモチベーションの高さの方ですね。
しっかり勉強したい!スキルをもっと上げたい!と思っている人たちが集まれば、それだけで熱気のある勉強会になるんだな~ということがよくわかりました。


おまけ: 勉強会が終わってもオンラインで勉強会は続く

西脇.rb & 東灘.rbではyouRoom上に参加メンバー向けの専用ルームを作っています。
ここでは勉強会に関する告知や連絡事項をお知らせするだけでなく、Rubyに関する雑談も自由にできるようになっています。


勉強会が終わったあとも、「家に帰って自分でもう一度解いてみました!」という人たちが何人もいて、まだまだ勉強会が続いているような感じになっています。
書いたコードはGitHubの共通リポジトリに上げてもらっているので、コメントを入れたり、pullリクエストを送ったりして、コードレビューもオンライン上で実現できます。

f:id:JunichiIto:20131025083157p:plain

ちなみに今回の勉強会で使ったGitHubの共通リポジトリはこちらです。

お知らせ その1: 西脇.rb & 東灘.rbについて

西脇.rb & 東灘.rbは西脇~神戸方面で活動するRubyコミュニティです。
だいたい月1回のペースでRubyの勉強会を開いています。
活動の基本コンセプトは「自分の手と頭を動かしてコードを書こう」「他の人が書いたコードを読んで議論しよう」です。


興味のある方はDoorkeeperのコミュニティページからメールアドレスの登録をどうぞ。
勉強会の開催情報が毎回通知されます。

 

またFacebookページやTwitterでも情報発信していますので、良かったらこちらも「いいね!」やフォローをお願いします!

 

お知らせ その2: DevLOVE関西 ~Decision~でお話しします

西脇.rb & 東灘.rbとは無関係ですが、2013年11月16日(土)に「DevLOVE関西 ~Decision~」というイベントでソニックガーデンの倉貫さん(@kuranuki)と一緒にお話しします。
ほかにも各界の著名なエンジニアの方々のお話が聞けますので、こちらも興味のある方はご参加下さい!(でも定員に達したっぽい・・・)


お話しする内容や登壇が決まったいきさつなどはこちらのエントリーに書いてあります。

あわせて読みたい

第1回ペアプログラミング In Actionの開催レポートもあります。
ペアプロを勉強会に取り入れた理由や勉強会の進め方に関しても詳しく書いてあります。
西脇.rb & 東灘.rb ペアプログラミング In Actionを開催しました #nshgrb - give IT a try