Security & Programming Camp 2010

講義内容

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

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

共通科目(全組共通)

概要

担当:吉岡講師

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

詳細

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

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

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

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

概要

担当:天野講師、川合講師、坂井講師、竹迫講師

この組の目的は、OSの仕組みや、ハードウェアとOSとアプリケーションの関係を理解することです。講義は演習が中心で、書籍「30日でできる!OS自作入門」を教科書として、ひとりひとりにオリジナルのOSを作ってもらいます。
ただし、期間が十分に長くはないので、期間内に教科書を全部読みきることを目指すわけではありません。
無理のない範囲でできるところまでやります(だいたい1章が4時間くらいかかります。ですから、キャンプ期間では開発工程全30章に対して、事前学習してもらった場所から+6~+8章くらい進められると思います)。

詳細

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

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

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

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

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

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

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

補足

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

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

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

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

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

以前のキャンプで、プログラミングの経験が全くない状態で、でもがんばりますと書いてくれた人がいましたが、その人は残念ながら選べませんでした。OS作成ではない一般的なプログラミングの経験までは、このキャンプに参加しなくても十分に体験できると思うのです。この組がいくらやさしいとは言っても、やっぱり普通のプログラミング体験までは自力でしてみてください。1年間いろいろやってみて、それでプログラミングが楽しいと思えたら、是非来年のキャンプに応募してください。お待ちしています。

なお講師の川合秀実は、この教科書の著者です。

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

応募用紙に書いてほしいキーワードは、「1903」です。

※なお、こちらのページ(http://spc10.osask.jp/setumei.txt)には、上記の内容に加えて、カリキュラムも掲載しております。併せて、参考にしてください。

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

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

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

概要

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

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

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

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

詳細

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

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

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

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

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

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

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

Linuxカーネル組(Linux組)

概要

担当:亀澤講師、河合講師、小崎講師、武内講師、平松講師、三浦講師、山幡講師、吉藤講師

Linux組では、Linuxのカーネルを題材に、実用的なコンピュータシステムのアーキテクチャについて学びます。
特に、

  1. OSの基幹をなすカーネルとは何か
  2. Linuxカーネルの構成
  3. 大規模基盤ソフトウェアの問題調査および解決手法
  4. 大規模コミュニティにおける開発と展開戦略

を、学習および実例を用いて実践的に学んでいきます。特に、実際にLinux開発コミュニティに参加して、現実的な問題をコミュニティと一緒に解決していく活動とはどのようなことかを学び、体験することを目標としています。

詳細

世界でもっとも成功したオープンソースオペレーティングシステムの中核をなすLinuxカーネルは、およそ3ヶ月おきに新しいリリースがされており、1万を超える変更が含まれています。

毎回1000人以上の開発者が関わっていますが、新しい開発者もその1/4を占めており、難易度は必ずしも高くないことがわかります。しかし、オペレーティングシステム、特にその心臓部であるカーネルというと、WebアプリケーションやWindowsアプリケーションの開発と違って、どう開発したらよいかすぐにはわからないのではないでしょうか。

『Linuxカーネル組』では、とっつきにくいともいわれるカーネル開発を行うための道しるべを示します。また、世界中の人々、アマチュアや企業が渾然一体となって強力に開発を推進するオープン開発はどのように行われているのか、何故うまくいくのか、また、自分が参加するには、といった疑問についても答えます。
特に、

  1. カーネルとは何か
  2. カーネルの開発手法とカーネル開発に必要な知識の習得
  3. オープンな開発コミュニティへの参加について基礎的な事柄

を、実例を用いて実践的に学んでいきます。1~3について、学習及び演習を行い、最終的にLinux開発コミュニティに参加して、現実的な問題をコミュニティを通して解決していく活動とはどのような事かを学び、体験することを目標としています。この講義を通して、オープンな開発とは何かを学び、それにより自分の作成物が世界中で使用される魅力についても発見してもらえればいいな、と思っています。

受講者には、キャンプ前にもある程度の学習と課題をしてもらうつもりです。サポートもするのでそれほど難しく考える必要はありませんが、Linuxを使用しての操作を含み、20時間程度で取り組めるくらいの分量を考えています。その代わり、当日は、楽しい実践演習の時間を長くとる予定です。

講師は全員、企業や大学で実際のLinux開発に取り組んでおり、Linuxカーネル開発の一線で、様々な分野に貢献してきました。貴重な機会ですので、興味とやる気のある方の積極的な参加を歓迎します。