Security & Programming Camp 2009

講義内容

プログラミングコースの主な内容

  • 講義中の演習は基本的にグループで行います。
  • 実際にプログラミングを自分で行うことを中心とした講義と演習を行います。
  • オープンソースという視点から、自分の作成したプログラムを配布するためのノウハウを学びます。
  • 両コースの参加者全員が受講する「基本科目」と、プログラミングコース参加者全員が受講する「組共通専門課目」、および参加者の興味に応じて応募時に組選択できる「組別専門科目」を設定しており、組共通専門科目を受講した後に、組別の専門科目を受講していただきます。組別専門科目には、OSを作ろう組(OS自作組)、プログラミング言語組(言語組)、Linuxカーネル組(Linux組)があり、応募時に受講したい組を選択していただきます。なお、各組には参加者に要求されるスキルレベルが設定されていますので、ホームページ上の講義概要に記載された各組の内容をよくお読みになってから組選択をしてください。
  • キャンプ期間中は、講義と演習だけでなく、業界の最先端で活躍されている識者の方の講義および、セキュリティコース参加者と合同の交流会などのイベントも実施します。
  • プログラミングの実際の現場を体感できる企業見学会を行う予定です。
  • 組別専門科目ごとにグループ演習を行い、その結果を最終日に発表していただきます。

共通科目(全組共通)

概要

担当:吉岡講師

プログラミングコースは3つの組(OSを作ろう組、プログラミング言語組、Linuxカーネル組)がありますが、ここでは各組共通のことがらについて学びます。前提として、C言語の読み書き、コマンドラインインターフェース、エディタの利用などになれている必要があります。

詳細

以下のことがらについて概要を学びます。

ソースコードの読み方、デバッグの仕方、オープンソースソフトウェアの触り方など

このクラスに参加するとオープンソースソフトウェア(OSS)プロジェクトの開発者の卵になるのに必要な最小限の知識を得られます。OSSコミュニティに参加したいという興味があるけど、どこから始めていいのかよくわからない人にとって、最初の一歩になることを目指しています。

OSを作ろう組(OS自作組)

概要

担当:川合講師、竹迫講師、はせがわ講師、天野講師

「30日でできる!OS自作入門」を教科書として、各自が実際に本の内容を入力したり、改造したりします。それを通じてOSの仕組みや、ハードウェアとOSとアプリケーションの関係を理解、もしくはOSを作れるようになることを目指します。ただし期間が十分に長くはないので、期間内に教科書を全部読みきることを目指すわけではありません。無理のない範囲でできるところまでやります(だいたい1章が4時間くらいかかります。ですから22時間では開発工程全30章に対して、事前学習してもらった場所から+6~+8章くらい進められると思います)。

詳細

参加が決まった参加者には教科書を贈りますので、まずはこれを8/12のキャンプ当日までに読んで実践してきてもらいます(宿題です)。全てを読みきる必要はありません。できるところまでやってください。読む際には、ただ文章を読むのではなく、教科書内に書かれたプログラムを自分で実際に入力してみて、また自分で少し改造してみたりして、読み進めてください。

この組では、最初に、どこまでできたか・どこがわからないか・期間中(22時間)でどこまで進めたいか(どんなことをしたいか)を組のみんなに発表してもらいます。ですから、これにどう答えるか考えておいてください。また、勉強のために入力して作った物を確認したいのでそれも持ってきてもらいたいです。工夫した改造ポイントがあればそれも是非教えてください。これが組内での自己紹介にもなっています。

キャンプ当日までに全部読めてしまった優秀な参加者は、より発展的な改造テーマを考えてみてください。講師陣はみなさんの理解度や目標を聞きながら、進度や目標、さらには年齢や性別に配慮して組をいくつかのグループに分けて、グループ単位で指導します。希望した目標が期間内に達成するのが難しいと思われた場合は、講師陣が(本人の希望に近づくような)別の目標を提案することもあります。

この組では、基本的に参加者がグループ内で教科書を使って自習しながら、分からないところ・疑問に思ったこと・確認したいことを、講師陣に質問してもらうという形式を取ります。ですから自分から自発的に意欲を持って取り組んで、自分から進んで質問できる人を募集します(講師陣も時には様子を見て、話しかけることはあります)。

キャンプの最終日には成果の発表会があります。そこでキャンプ期間内に何をしようとしたのか・どこまでできたのか・自分たちが作った自作OSの紹介デモなどをグループごとにしてもらいます。

またキャンプ終了時には各自に自分が作ったOSをCDに入れて持ち帰ってもらいます。これを是非お友達に見せて、こんなOSを理解してくれるようになったんだよと自慢してください。

どんなOSが作れるようになるのかについては、こちらのページ(http://hrb.osask.jp/figures.html)を参考にしてください。

補足

教科書は対象読者として中学生以上を想定していることもあり、この組はプログラミングコースの他の組と比べると内容がやさしいです。したがってこの組では、参加者の選考に当たって年齢を重視し、中学生や高校生・高専生を中心にしようと思っています。しかしもっとも重視するのはこの組を選んだ理由なので、大学生や短大生も、熱心な人は大歓迎です。

この教科書は書き方がやや個性的で、楽しく読める人とそうでない人がいます。この教科書の書き方になじめない人は、この組を楽しめないと思います。したがってこの組を希望する前に、是非一度図書館や書店などでこの本を手にとって、なじめそうかどうか確認してください。既にこの本を読んだことがあって、内容や書き方は嫌いじゃないけど難しくて挫折してしまったという人は、もちろん大歓迎です。一方で、応募前から既に読み終わっているという人は、残念ながらこの組の想定する参加者の範囲を超えてしまっているので、他の組への参加をおすすめします。

教科書では基本的にWindows上での開発を想定していますが、Linux上やMacOS上での開発を希望する場合は、希望に沿います。ただしMacOSの環境はキャンプ事務局では用意していません(注意:MacOS上で開発しても、この教科書ではPC用のOSしか作れません)。

参加者の選抜は、設問の回答から判断します。しかしこれはテストではありません。こう書けば有利になるという正解などはありません。現実の自分のことを自分の言葉で素直に書いてください。

たとえOSへの興味が感じられなかったり、プログラミングの経験が少なくても、希望する理由がもっともならもちろん高く評価します。基本的に書けば書くほど有利です。変なことを書いても減点することはしません。

なお教科書の著者である川合秀実も講師の一人として参加しています。

組別ではない講義の中には、この組の参加者にとってはやや難しい内容が含まれています。しかしそれらは将来役立つことばかりですので、どうか挑戦するつもりで体当たりしてみてください。そのときには完全に分からないにしても、だいたいの雰囲気を体験できることが貴重な経験になります。

募集対象となる学生・生徒

  • OSを作ってみたい・作りながら理解したいと思っている人
  • Cやアセンブラによるプログラミングに抵抗がない人
  • 上記の「概要」と「詳細」を事前にすべて理解し納得できる人

プログラミング言語組(言語組)

概要

担当:笹田講師、西尾講師、稲葉講師、園田(Yugui)講師

言語組では、プログラミング言語Ruby、およびその言語処理系を題材に、主に次の3点

  1. プログラミング言語がどのように実現されているか
  2. 大規模ソフトウェアの一例であるRuby処理系がどのように作られているか
  3. 実用ソフトウェアの性能改善はどのように行うのか

について学ぶことを目的とします。1~3について、座学および実習により進めていきます。実習では、Ruby処理系のソースコードを利用する予定で、座学よりも実習の時間を多く取る予定です。最後に、現実的な課題にチャレンジしてもらいます。このコースを通じて、プログラミングについて大事なことをいくつか、見つけてもらえればいいなと思います。

詳細

言語班の目標は、プログラミング言語Rubyとその処理系を題材として、概要に述べた3点を学ぶことです。

  1. のプログラミング言語の基礎は、主に講義によって学びます。プログラミング言語はなぜ動くのか、そこから丁寧に説明します。
  2. のRuby処理系の構成は、実際にソースコードを読みながら、Rubyの中がどうなっているのかを見ていきます。そして、この規模のソフトウェアを開発するためにはどんな工夫があるのかを見ていきます。
  3. は、ソフトウェア開発において重要な点の1つである性能改善について、その一般的な手法からツールを利用した具体的な方法、そして実際にいくつかの例題を用いたRuby処理系でのアプリケーションの高速化を体験してもらいます。

1~3を学ぶことで、ソフトウェア開発に必要となるいくつかのものの見方を身につけてもらえればいいな、と思っています。

講師の笹田はRuby処理系の開発者であり、主に性能改善を行ってきました。そのため、今回のキャンプではソフトウェアの性能改善について、少し多めに話をします。また、プログラミング言語としてRubyだけではなく、もう一人の講師である西尾が得意とするPythonの話や、基盤ソフトウェアを開発する上で重要となるC言語についても話をします。Rubyだけではなく、複数の言語を比較することでより深い理解を得ることを目指します。

最後に、成果報告をしてもらうことになるのですが、そのためにいくつか現実的な課題を用意します。これは、例えば実際に我々が困っている問題も含める予定です。うまい具合にこの課題を解いてもらえれば、実際にRuby処理系に取り込まれ、数万人のRubyユーザに対して影響を与えるかもしれません。

なお、キャンプ中にいきなりRuby処理系を読み始めるのは難しいので、事前に『Rubyソースコード完全解説』を読んできてもらいます。どこまで読むか、どのように読むかは、実際にキャンプに参加される方に事前にお知らせする予定です。

色々と難しいことを書きましたが、「Rubyとか、プログラミング言語ってどうなってるの?」とか、「自分の言語を作ってみたい」といったことに興味のある人なら、歓迎したいと思います。また、優秀なチューターがつく予定ですので、詳しい人に根掘り葉掘り質問できる良い機会だと思います。逆に言うと、受け身での参加は難しいかもしれません。やる気のある参加者を募集します。

Linuxカーネル組(Linux組)

概要

担当:吉藤講師、小崎講師、山幡講師、亀澤講師、三浦講師

この組ではLinuxのコンパイルからコードの歩き方、開発、デバッギング、コミュニティとの関わり方までを実践的に学びます。特に、LKML (Linux KernelMailing List)など、Linux開発のコミュニティに実際に参加できるレベルを目指します。

詳細

オペレーティングシステム、特にその心臓部であるカーネルというと、WebアプリケーションやWindowsアプリケーションの開発と違い、どう開発したらよいか分からないのではないでしょうか? 『Linuxカーネル組』では、とっつきにくいともいわれるカーネル開発を行うための道しるべを示します。

世界でもっとも成功したオープンソースオペレーティングシステムの中核をなすLinuxカーネルは、およそ3ヶ月おきに新しいリリースがされており、1万を超える変更が含まれています。毎回1000人以上の開発者がかかわっていますが、新しい開発者も1/4を占めており、その難易度は必ずしも高くないことがわかります。

この組では、Linuxカーネルについて、ソースコードの取得、設定、コンパイルから、コードの歩き方、開発、デバッギング、コミュニティとの関わり方までを、実例を用いて実践的に学びます。

具体的には、まず、カーネル開発に必要となるOSの基本的な仕組み(プロセス、排他制御、タイマ管理など)を理解してもらいます。また、カーネル開発者が開発やデバッギングに使用している便利なツール群の使い方を実例を交えて学び、本当のLinuxカーネルを用いた開発を経験します。そこでできたコードはLinuxカーネル開発メーリングリストへ投稿するなどして、Linux開発コミュニティへの参加に挑戦します。

講師は、吉藤、小崎、山幡、を中心に、カーネル開発の第一線で活動している研究/技術者が担当します。

なお、Linuxカーネルの内部構造を説明した本「Linuxカーネル2.6解読室」 (ソフトバンククリエイティブ*1)があり、その内容の一部がインターネットで公開されています*2。この記事をみて、面白い、もっと知りたいと思われる方は、Linuxカーネル開発の資格があります。ぜひ、応募してください。

当日は、楽しい実践演習の時間を長くとりたいと考えています。実際に参加される方には、事前にこの書籍をプレゼントしますので、自分なりにもできるだけ読み進めておいてください。

*1
ISBN:4-79-733826-1
*2
http://sourceforge.jp/projects/linux-kernel-docs/wiki/%E7%9B%AE%E6%AC%A1