読者です 読者をやめる 読者になる 読者になる

すてにゃん氏の技術ぶろぐ

技術っぽいこと書きます

アメリカの大学で受けたソフトウェア工学の授業が実践的ですごかった話

私はアメリカの大学で「インタラクティブメディアとゲーム開発」を専攻しましたが、その時受けたSoftware Engineeringという授業が色んな意味で素晴らしかったのでその授業がどう素晴らしかったのかを紹介していきます。

リアリティーがすごい

まずこの授業、生徒数が80人ほどいます。ここから教授がみんなを約15人ずつの5つの会社に分けていきます。そうです、我々生徒は実は会社員なのです。
そして初日に出された課題は「自分たちの会社のミッションステートメントを考えてくること」です。
それだけでなく、プロジェクトマネージャー・プロセスエンジニア・リリースエンジニア・ドキュメンテーションマネージャー・クオリティーマネージャーの役割を会社のどの社員が取るのかを決めてこないといけないというのです。私たちは言われるがままにミッションステートメントを用意し、次の授業に備えました。

プロセスがすごい

Software Engineeringという名の通り、どのようにしてソフトウェアを開発するかを学ぶ授業なので具体的なコードの書き方などは学びませんでした。7週間という短い期間に与えられた課題は1つのアプリケーションの開発です。
チームで開発をするにあたって、講義ではどのようなプロセスを利用するといいのか提案をしてもらって、会社ごとに話し合ってプロセスを決めるようにしてました。
ちなみに開発したアプリについては元々存在する大学のOSSに追加モジュールという形で各会社がブランチを作って開発するようにと指定されていたのでみんなGitを使いました。

講義中に話題にあがった話は主にこんなことでした:

弊社ではmasterブランチのコードカバレッジが8割以上になることを心がけてコードを書いていました。進捗管理は主にTrelloを使って、タスクごとにfeatureブランチを作って最後に決められた社員たちにレビューをしてもらってマージするというプロセスでした。先述のOSSは基本的にMVCで書かれてたので私たちもモジュールはMVCで書いていきました。

プレゼンテーションがすごい

リリースの頻度は会社ごとで違いましたが、毎週水曜日はステークホルダーの前で発表をするという決まりでした。この複数のステークホルダーに扮したのは教授でした。
彼はアメリカンジョークとかでやってるつもりはなく、いたって真剣に一人三役くらいでステークホルダーの役を演じてました。ステークホルダー一人一人のSkypeアカウントやメールアカウントを作るという徹底ぶりです(もちろんステークホルダーによってはオンラインになる時間帯なども違っていたので予想以上にリアルでした)。
彼らの前で会社の社員2,3人がその週の進捗を発表します。追加した機能の他に、会社がどのように成長しているかなども発表します(見積もった労力と実際の労力を比較したりしました)。
最後にステークホルダー一人一人からコメントをもらい、次の発表までに追加してほしい機能や要件を教えてもらいます。この要件も実は最初から決定されてることではなくて、ステークホルダーの気まぐれで変わったりするのでとても大変でした。そのためプロジェクトマネージャーが定期的にステークホルダーに確認をしに行ってました。

給与がすごい

プレゼンテーションではコメントと要件だけでなく、会社ごとに給与がもらえます。もちろん本物のお金ではないですが、各会社の社員の成績に直接影響してくるとても大事なものです。
この給与ですが、ステークホルダーからしたらどの社員が一番がんばったかなんて知る由もありません。なので給与の会社内での分け方は社員全員で決めることになっています。
弊社ではもらった金額の何割かはまず社員全員に平等にわけた後、残りをがんばった人たちに多く振り分けていくようにしました。この「がんばった人」を判定する方法としては、毎週発表が終わった後全員で匿名で誰ががんばったのかをアンケートで答えてもらって、評価が高かった人が多くもらえるというシステムでした。
このシステムによって浮かび上がった一つの問題点としては小さいグループなどでがんばった人はなかなか他人にはどうがんばったのかが伝わりづらいという点です。
これを解消するためにも私たちは毎日スタンドアップミーティングを行い、「昨日何をやったか」「今日これから何をやるか」「困ってる点は無いか」「誰かに用事はないか」などを口頭で言った後、Google Documentにもメモを残していくようにしました。また、私たちはTrelloを利用していたのでタスクごとに誰がそのタスクを担当し、大体何単位分の労力を要したか(見積もった分も合せて)書くようにしていました。
こうすることによってお互いに誰が何をやっているのかを常時把握することが可能ですし、電子的にも記録を残しているのであとから参照もできます。
スタンドアップミーティングのおかげで評価もしやすくなりましたし、おかげさまで給与のわけかたで揉めたことはなかったです。

ハラハラ感がすごい

万が一会社のメンバーで全く仕事をしていない人が居たり他人に迷惑をかけて評価がものすごく低い人が居た場合はその生徒を「クビ」にできます。こうなるとこの生徒は他の会社に雇ってもらうしかありません。どこにも雇ってもらえずに無職になった時、その生徒は問答無用で単位を落とします。こわい。



Software Engineeringは他のコンピューターサイエンスの授業と比べたらプログラミングに関した知識はそんなに身につきませんでした。ですが社会人になった今振り返ってみると一番ためになった授業でした。たった7週間の授業でしたが、是非とも世界中のソフトウェアエンジニアを目指している学生(もしくはもうなっている社会人)に一度受けてもらいたいなと思いました。すごかった。