- Perl入学式 Advent Calendar 2017 > 12日目
年度が変わるとまた最初の資料に戻って新しい受講生を集めるPerl入学式のカリキュラムですが、運営側でたびたび議論をしてその内容に加除が発生することがあります。
今回は、2016年度にまるまる1回分の講義を無くして全5回にした時のお話。
Contents
全6回が全5回に
Perl入学式が大阪で始まった2012年度の年間12回カリキュラムは例外的・実験的としつつも、その次年度2013年度から「隔月1回、全6回、1年間を通して学ぶ」というスタイルに落ち着きました。
このころは全6回だったのですが、2016年度に全5回となり、今に至ります。
このときはまるまる1回分の講義を無くしたのですが、それが当時の全6回のうちの「第5回」にあたる「モジュール/テスト編」の回でした。
ただ、2015年度は移行期間として、2014年度まで「第5回」で行っていた「モジュール/テスト」を「第6回」に、「第6回」で行っていた「Webアプリ編」を「第5回」に入れ替えをして行いました。この変更の意図は、「モジュール/テスト編」が無くても「Webアプリ編」が滞りなく進み、かつ卒業感が出るかという実験的意味あいです。
なぜこれを無くすことにしたのか、振り返ってみることにします。
当時の「第5回」の内容
2014年の「第5回 モジュール/テスト編」の資料は公開されています。
カリキュラムを見てみると
- mapとgrep
- while
- next, last
- package / 名前空間
- モジュール
- テスト
- テストを使った開発
- 付録: 後置if, 後置for
といった内容でした。
とはいえ、map と grep は for で代用可能だし、while もイディオム以上のことを書くことはまだ無い学習段階に思われます。
とはいえ、モジュールやテストを最重要事項と捉えるプログラマは多いと思います。当時のPerl入学式のサポーター内でこの1回分の講義をまるまる無くすかどうかといった議論をしていたときも、様々な意見が飛び交っていたように記憶しています。
結果的にこの1回分をまるまる無くすことになった理由を思い出してみます。
モジュールの部分を削った理由
ここではパッケージや名前空間もモジュールの範疇とします。
さて、モジュールの部分を削った理由はなんだったのか。
私が当時から考えていた一つの理由として、他者に再利用可能なコンポーネントの形でのプログラムを書くことは、単に自分が書いて自分が使うだけのプログラムより段違いの難しさがあるからでしょう。往々にしてそれを普通に行っているプロは、その難しさ自体にすら気づかない場合があります。
これを端的に表しているのが「Perlプログラミングの救命病棟」という書籍に書かれている「Perlプログラマのレベル10」という内容。
このうち、レベル5が象徴的です。
- レベル5: 正規表現、演算子、I/O、およびスコープについて基本的な理解がある。皆が言っているので、my、use strict、およびuse warnings を使用している。多くの人たちがこのレベルを超えないのは、たとえ非効率であっても、再利用可能なコンポーネントの作成を除けば、ほどんど何でもできるからである。このレベルか次のレベルでは、リファレンスのことを知っている。
今まで会社やコミュニティで様々な新人や初学者を見ていると、レベル5の前後(つまりレベル4からレベル5の間、そしてレベル5からレベル6の間)に大きな壁があるなと感じることが多かったです。
上記のレベル5の説明が興味深いのは、難易度の壁以上に、それ以上のレベルに行こうとしない理由が述べられていること。
まさに、モジュールはここで言っている「再利用可能なコンポーネント」そのものです。
なぜ難しいかというのは様々な理由があるでしょう。使ってもらうことは客観的な視点が必要だからなのかもしれません。
この段階では、Perl入学式がプログラミングとの初めての出会いという方は、まだ16時間程度しかプログラム自体に触れていないわけです。「再利用可能なコンポーネント」が書けなくても自分がやりたいことは実現可能でしょうし、まずは自分だけで完結する改善という成功体験をしてからでもモジュールを書くことを学ぶのは遅くはないでしょう。
テストの部分を削った理由
今ではソフトウェアテストが重要であることを認めない人はいないでしょう。動的言語は実際に実行してみないとわからないバグも多く、新規開発で既存機能にバグが発生することを防ぐためのリグレッションテストなどは必要不可欠です。特にPerlは歴史ある動的言語であり、かつ変数に型もなく、テストが真っ先に普及した言語とも言えます。
テストの概念は私がIT業界に入った2003年にもあって、当時の私の上司が実践しているコードを良く見ていましたが、本格的にウェブ業界でテストやその進化系であるTDDがもてはやされるようになったのはPerl入学式が始まる少し前くらいからだったように記憶しています。
Perl入学式のサポーターにも CPAN Author が何人もいて、テストの重要性に異論を唱える人はいませんでした。ただ、上述のモジュールと同様に「この段階の受講生がやるべきなのか」という疑問はありました。テストもテスト対象を明確にする上で「再利用可能なコンポーネント」の形にプログラミングをしていくことが求められるわけで、モジュールを今やるかどうかと判断材料は似ているのかもしれません。
「第5回」のテストの部分では、当時の流行でもあったペアプログラミングも取り入れていました。同じ机に座った受講生同士がペアプログラミングを通じて交流が促進されるというポジティブな作用もありました。
ただ、同じ机の受講生同士の交流は、ペアプログラミングでなくてもそれまでのカリキュラム内でできます。むしろ、もっと最初のうちからそういう交流を生むような仕掛けを入れていくべきだなとは当時から感じていました。
勘違いされないように書きますが、ここで決めようとしていたことは「テストは不要か」ではなく「今この学習段階の受講生にテストを教えるべきか」でした。プログラミングと出会って16時間程度のPerl入学式の受講生に教えたいのはプロとして必要なことよりもプログラミング自体の楽しさだろうと思えた時、「今テストをやらなくてもよい」という判断がスッと出来たように思えます。
もう一つ気になっていたのは、本当に意味のあるテストを書くのは結構な経験が必要だということ。2013年前後のテスト・TDDブームの過熱は、他の過熱したブーム同様、過激な信奉者を生み出しました。初学者の中には、そういう人達が襲い掛かってくるのが怖いから書いているという人もいたように思えます。そういう初学者は、境界値であるとか勘所を理解したテストではない(時にテストの意味すらなさない)こともあり、(それ自体がテストを書く習慣作りであるとしても)まずは意味のあるテストを書くための経験を積んでからでも遅くはないと考えるようになりました。
負担を減らしたい
受講生にとってもサポーターにとっても、開催回数が多いということは負担が大きくなります。受講生は覚えることが多くなるという学習負荷もありますし、サポーターもボランティアで来てもらっているので開催回数は少ないに越したことはありません。
ただ、Perl入学式が考える大事にすべき基礎は疎かにしたくはないので、今後もそういう理念の元生み出されたカリキュラムの骨格は変わらないことでしょう。
今回は、たまたま基礎よりは少し上のレベルだろうとテストやモジュールが判断されただけでした。
まずは楽しさから
「プログラムを書く前にプログラムを検査するテストを書く」というのがテスト駆動開発(TDD)の時系列的な流れだと私は理解しています。
とはいえ、時系列であるとか、公理系からの演繹であるとかを重視することは、初学者にとっては必ずしも優しく・易しくはありません。数学の基礎は集合論と論理学ですが、であれば小学生から集合論と論理学をしっかりやれば日本の数学教育は安泰かというとそうではないでしょう。私の一回り前の世代で、実際に小学生に集合論を教えるという算数の教育課程が制定されたことがあったらしいですが、全く意味がなく一瞬で破棄されたと聞いたことがあります。
もちろん情報系の大学生や高専生、またIT企業にプログラマーとして入社した人は、すぐにでもテストやモジュールの概念を知るべきでしょう。ただ、それは素質を見出されたプロであることや、組織として(Perl入学式よりも遥かに)手厚い教育サポートがあるからこそです。
Perl入学式に来る受講生は、必ずしもプロのプログラマーになろうとしている人ではありません。そういう方々には、まず最低限の基礎を覚えてもらった上でプログラミングの楽しさを知ってほしいというのがサポーターの願いなのかもしれません。
余談:Perl入学式の次のカリキュラム「Perl中学校(仮)」
「今この段階の受講生に教えるべきではない、だけど意欲ある受講生にはいつか知ってもらいたい」
そんなPerl入学式サポーターの思いもあり、Perl入学式を「卒業」した人の次の入学先「Perl中学校(仮)」を計画中です。
意欲ある受講生は、Perl入学式のカリキュラムを終了した後も独学を続けていくわけですが、プログラミングとは縁遠い仕事をしている方だと次の学習に悩んだりするという声もたびたび聞いていました。また、Perl入学式はPerlにフォーカスした勉強会なので講義時間のほとんどをPerlに投下しましたが(最初だけ環境構築とシェルを扱った)、実際に Mojolicious を学んだ後でその知識を伸ばしてウェブサービスを公開するまでは、Linux であるとか RDBMS であるとか Perl以外の知識がたくさん必要になります。初学者がどこから手を付けていいかわからないのも十分わかります。「次はサポーターをやれば先輩サポーターから聞けるよ」と言ってはいますが、そこまでの勇気のない方も多いことでしょう。そこで「Perl中学校(仮)」です。
「Perl中学校(仮)」では、実際にPerl入学式で学んだ知識の応用にフォーカスを当てて、実際のツール開発であるとか、オブジェクト指向プログラミングの基礎であるとか、ウェブサービスを公開するまでに必要な知識といった、Perl以外の知識にも踏み込んで解説していく予定です。そのような趣旨の資料として、Perl入学式では Perl-Entrance-Textbook というものを公開していますが、この内容をさらに取捨選択して既存のPerl入学式の親しみやすい講義ベースに載せる計画でいます。ただ、まだほとんど計画が進んでいないので、2018年度の始まりと共に提供できるかは未定となっています。
皆さんの声でPerl入学式運営内でこの計画が推進されるかもしれません。引き続きPerl入学式の新しいチャレンジにご期待下さい!