2013年9月16日月曜日

教育理念: レビューを重視する

実践的な知識や経験を蓄えるのに最も効果が高い方法は何でしょうか.私たちは,プログラミングではコードレビューが地道ではあるが最も教育効果が高いという結論に達しました.コードレビューは,学生が書いたプログラムについて,どうしてこのようにプログラミングしたのか意図を問いながら,プログラミングの妥当性を議論することを中心に行います.
コードレビューの教育効果が高い理由はいくつかあります.
  1. コードレビューを通して教授された知識は,学生が自ら経験したことの延長線上にあることなので,身近で理解しやすく意欲も高まります.ただ聞くだけの講義より自ら考え手を動かす演習のほうが学習内容が定着しやすくなるのと同じ理由です.
  2. コードレビューでプログラミングの意図について答えることは,プログラミングを通して行った経験を振り返ることなので,学生が経験から学びを得ることに直結します.経験とふりかえりを対で行うことは,経験学習の観点から有効です.
  3. コードレビューを行うことは,学生の演習結果に対して適切なフィードバックを与えることなので,自分自身のプログラミングの良し悪しを即座に学ぶことができます.スポーツで鏡やビデオを見ながら自分のフォームを確認することと同じような学習効果が得られます.
  4. コードレビューは個別指導でもあるので,学生の理解度や習熟度に合った適切な指導を行いやすく学習効果が高まります.家庭教師や個別指導塾のことを考えれば,一斉講義よりも個別指導のほうが学習効果が高いのは納得いただけるでしょう.
もちろん,コードレビューには時間も手間もかかります.そこで,私たちはコードレビューの効率を高める様々な工夫を考えて実施しています.たとえば,上級生が下級生のコードレビューを行うことは,下級生はもちろん上級生もコードレビューを通して学ぶことができます.

レビューを中心とした指導方法は,起業家育成に欠かせないビジネスモデリングにおいても有効だと私たちは信じています.そこで,学生が書いたビジネスモデルを学生同士や教員,社会人の視点から数多くレビューする機会を設けています.


私たちは,プログラミングやビジネスモデリングのレビューを中心とした実践的な指導を行います.

2013年9月8日日曜日

教育理念: 現実社会の中から問題を抽出して解決する経験を積ませる

学生が社会に出るとさまざまな問題に直面します.社会全体の問題かもしれませんし,日々の業務の中で直面するような問題かもしれません.
それらの問題の多くは,1つの模範解答があるとは限らない複雑な問題です.一方,日本の受験で扱われる問題は,ただ1つの模範解答があることが通例です.しかし,ただ1つの模範解答があるような問題に慣れきっていると,現実の模範解答があるとは限らない問題に対処することができなくなるものです.そのため,受験勉強の思考パターンから意識を変えていく必要があります.
社会人は業務の中で大小様々な問題を解決していくことが求められます.すぐに解決できそうにない場合には,解決方法や解決できそうな人が既に存在するのか探すこともあるでしょう.いわゆる「デキる人」とは,様々な問題に柔軟に対処できる人ということでしょう.社会から学生に対して,そのような人になることが期待されています.

問題解決能力を高めるには,最初は簡単な応用問題から始め,徐々に複雑で現実的な問題に取り組む訓練を積むことが大事です.
解決方法が見出されていない未知の問題であっても,それを解決の方向に近づける定石が存在します.実は大学で行う研究活動の多くは,このような解決方法が見出されていない問題に取り組むためにも使えるのです.たとえば,研究活動の一環として書籍や論文を探したり読んだりします.これは問題に対して,既に知られている解決方法の中で有用なものはないか探すことに応用できます.
大学の研究室では,しばしばこのようなノウハウを口伝のように伝えているものですが,それでは効率的ではありません.世の中には,研究活動そのものをより良く行う方法についての研究が存在します.このような「研究活動についての研究」をメタ研究といいます.問題解決能力を効率的に高めるには,このようなメタ研究の成果を利用して,問題解決の定石を場当たり的ではなくきちんと体系立てて習得することが大切です.
問題解決の定石を学んだあとでは,簡単な問題から徐々に複雑な問題に取り組む訓練を積むことで,問題解決能力を高めることができます.よくある Project-Based Learning (PBL) や On-the-Job Training (OJT) では,このような訓練をせずに実践しか行わないことがしばしばありますが,それでは効果も効率も高まりません.私は,研究指導でも大人数授業でも,そのような訓練を盛り込んでいます.

また,複雑な事象の中から本質的な問題が何なのかを抽出する訓練も必要です.問題の本質を見出すことができれば,抜本的に解決できる可能性が高まります.一般に言われているように,的確に問題の本質を抽出するには,ある程度センスも必要かもしれません.しかし,私たちは,日々問題の本質を考える訓練を積むことで,問題の本質を抽出する能力を向上できると考えます.たとえば,似たようなパターンの中から共通の要素を見つける訓練を,プログラミングなどの実務に近い状況で行うことは,問題の本質を抽出する能力を高めるのに有効だと考えています.私の研究室指導では,こういった問題抽出の訓練を,レビュー活動や日々の活動のふりかえりに取り入れています.


私たちは,そのような問題の発見と解決を繰り返し訓練する機会を学生に与えます.

2013年8月31日土曜日

教育理念: 個性に応じて適切な学びの機会を与える

入学試験や企業の採用活動において,最初から優秀な学生を厳選して採りたいと思っている人は多いでしょう.
最初から優秀な学生を採っておけば,教育や研修の手間を省くことができます.その上,研究や業務の成果を早く確実に上げられるかもしれません.楽に成果を上げられるのであれば,言うことはないでしょう.

しかし私の経験からは,一見優秀でないように見える学生であっても,適切な学びの機会を与えることで,めきめきと実力をつけて見違えるように成長することがしばしばあると主張します.
たとえば,かつて成績がよくない学生が私の研究室を希望したことがあります.その学生によくよく話を聞いてみると,大学の授業に関心を持てなかったこと,自分の趣味に夢中に打ち込んでいたことなど,話してくれました.私は,勉強そっちのけで寝る間を惜しんで趣味に打ち込むような学生は,適切な動機づけと,いつでもアクセスできる学びの場を与えさえすれば,後は勝手に伸びていくだろうと判断して,その学生を採用しました.そして,私の研究テーマの範囲内で,その学生の興味を持ちそうな分野やテーマを辛抱強く提案し続けました.幸い,ほどなく学生が強く関心をもつテーマが見つかりました.その後,その学生は私が細かく指導しなくても勝手に研究し続けて,結果として驚くほど成長しました.
成績の良い別の学生は,それはそれで悩みがありました.どの授業もたいてい良い成績をおさめるので,かえって自分の強みが何なのか,絞りきれていませんでした.私が見たところ,その学生はまず積極的で素直だったので,技術者のコミュニティに参加させることにしました.その学生は色々な方々から可愛がられ,大いに刺激になったようです.しかし,そのうち壁に突き当たります.私はその学生に悩む時間を与えました.ついにはその学生は自分自身の進路を自力で切りひらきました.
1つ言えることは,学校の成績と社会で求められる技能の間に相関があまりないことでしょう.考えて見れば当たり前で,学校の成績は主として暗記したことをそのまま繰り返す能力だけしか評価していないことが多いです(残念ながら).それは学生の能力の一面を捉えることはできますが,それで全てではないというだけのことです.そもそも学校の成績だけを元にして学生の能力を分類することに無理があるのです.
そして,もう1つは私の経験から,引き出し方次第で学生が潜在能力を発揮できるものだということです.その例のいくつかは先ほど示しました.さらに具体的なアプローチを後で述べます.
この2つの理由により,一見優秀でなくとも,学びの与え方次第で成長させられる可能性が大いにあると改めて主張します.

大事なのは,どのような学びの機会を与えればいいか,学生の個性をよく見て個別指導することです.
研究室での指導では,研究テーマを学生に押し付けることはしません.たとえば学生に社会で将来どういう活躍をしたいかを自由に思い描かせます.そこからキーワードや個性を見出し,興味を持ちそうなトピックを提案します.興味や得意が見いだせない学生に対しては,とりあえず何かを作らせ,その様子を観察して適性を見極めることもあります.場合によっては心理学に基づく性格診断テストを使うこともあります.学生にじっくり考えさせるべき時には,こちらも焦らずじっくり待ちます.将来どうなりたいという方向性と,その学生のスタイルが見えてくれば,しめたものです.あとは適切なテーマと素材を与えれば,細かく指示しなくても勝手に研究が進みます.
たとえ大人数の授業であっても,個別指導を取り入れられないかを常に考えています.学生には能力差があるものなので,どんな授業でも,早く習得する学生となかなか習得できない学生が混在します.大事なことはその現実を受け入れることです.この問題に対する切り札は「自習可能な教材」です.一斉講義を最小限にして,自習可能な教材を与えて演習する時間を多く取ります.一斉講義をしない代わりに学生が演習している様子をよく観察し,早く習得した学生には適切な発展的な題材を与え,なかなか習得できない学生には個別にフォローアップをします.授業を通して学生が感じたことを収集し,フォローアップや今後の教材の改良,方向性の調整に生かします.それによって理想的な完全習得学習を実現できます.


私たちは,学生の個性を見極め,個性に応じた学びの機会を与える指導を行います.

2013年8月27日火曜日

教育理念: 主体的な学びを促進する場をつくる

私の教育理念について熟考しました.シリーズで紹介していきます.初回は「主体的な学びを促進する場をつくる」です.

-----------------------------------------------------------------------------------------
ただ受動的に教わるよりも自ら進んで学ぶ方が何倍も教育効果は高いです.
みなさんの経験でも,学校の授業,とりわけ日本では一般的な,教師から学生へ一方通行の講義によって教わっても,なかなか身につかないというのは実感していると思います.教師の板書やしゃべりは退屈かもしれませんし,授業の途中で疑問を持っても淡々と授業が進んでしまうので理解が追いつかないかもしれません.そもそも,その授業の内容に興味がないかもしれません.
これに対し,自ら進んで学ぶ場合には,自分でも驚くほど興味や意欲を持って取り組めることを経験している人も多いでしょう.たとえば,自分の趣味に打ち込むとき,資料を自分で調べたり試行錯誤しながら何かを作ったり自主的に日々練習したりしますが,そのときの集中力はとても高く,学校の授業で学ぶことと違い頭や体にすぐ覚え込ませることができるものです.
このように「自ら進んで学ぶ」状態を意図的に作り出せるとしたら,学校の授業が一変すると思いませんか? そのこともあって最近は「自ら進んで学ぶ」ことをうたった授業づくりが盛んです.

しかし,自主性に任せると称し実態としてただ放置することがしばしば行われますが,それでは,なかなか自ら学ぶようにならないものです.
なぜならば,人は生まれながらにして自主的に学ぶ姿勢を身につけているわけではなく,人によって学ぶ姿勢に個人差があるものだからです.その状態で,たとえば教師が全く介入せずに成り行きに任せて漫然とグループ学習を行うと,グループによってはうまく学びが促進されず,普通に講義を行う場合よりも低い教育効果しか得られない可能性が大いにありえます.そのような状態は,ただの放置です.放置するのでは,十分な自主性が育まれるとは限りません.

主体的な学びを促進するためには,学びやすい場を設計することが大事です.
たとえば,興味を持たせるための工夫をする,学生が興味を持った時にすぐに学習機会が得られるようにする(具体的には,資料等を取り寄せたり,自分でプログラミングして実験したりできるようにする),学生たちが自由に議論する(必要に応じて教師を交える)ような場を作る,学びを習慣づける取り組みを行うといったことを行います.これは近年話題になっているアクティブ・ラーニングの考え方の基本です.

私たちは,主体的な学びに関する教育研究の最新成果を取り入れて,授業や研究室で主体的な学びの場づくりを行います.

2013年8月2日金曜日

ソフトウェア開発の実務家が博士論文を書くことの意義

ソフトウェア開発の実務家がソフトウェア工学の博士論文を書くこと,つまりソフトウェア工学の研究手法を学んで実践できることの最大の意義は,ソフトウェア開発を科学的・工学的に改善することを学ぶことだと私は思います.

実務ではよく PDCA (Plan-Do-Check-Action) のようなサイクルでソフトウェア開発を改善していきますね.しかし,たとえば P 一つとっても,その計画を採用するときに,ただのKKD(勘,経験,度胸)だけを根拠にしていませんか? その計画に客観的な裏付けはありますか?
たとえば,あるソフトウェアを開発するのに用いる技法を選ぶときのことを考えてみましょう.できるだけ最善に近づけるためにはどうしますか? たとえば世の中にどのような技法があるのか,今までに技法を実践した前例がないかを網羅的に調べますよね? 大々的に採用する前に,試験的なプロジェクトで効果を実証してみたりしませんか? そもそも自分たちがどんな課題に直面しているのか,今までのソフトウェア開発活動をふりかえることもするでしょう.

ソフトウェア工学の実践研究では,実はこのような活動を次のように科学的・工学的に行っています.

  1. 問題定義: 今までのソフトウェア開発をふりかえって,何が課題かを定義する
  2. サーベイ: 課題に関連する研究や事例,技法などを網羅的に調査する
  3. 解決アプローチの検討: 既にある解決法を再利用しながら必要に応じて新たな解決法を追加提案する 
  4. 検証: 実際のソフトウェア開発に解決アプローチを適用してみて効果を実測する
このやり方をきちんと身に付けると,実務でも大いに役に立つはずです.博士論文を書くことは,このやり方を身につけるトレーニングになります.

博士号のとり方


社会人(ソフトウェア開発の実務家)が博士論文を書くときのコツは,いかに最小限の内容にするか,だと思います.社会人になると欲張りになって「あれもこれも」と盛り込もうとして収拾がつかなくなって年限オーバーということになりがちです.「引き算」です.一番大事な本質的な問い(リサーチクエッション)をいかに絞り込むかが勝負だと思います.


リサーチクエッションがある程度絞れたら,それを「仮説」「軸」として既存研究をサーベイします.似たようなテーマの研究を分類する「軸」を提案するようなサーベイ論文は,とてもわかりやすく有用です.

サーベイを終えると,何を自分がなすべきかが見えてきます.空白域になっているような領域があるかもしれません.また,軸の全体を統合するような方法論が不在かもしれません.理論が整っていない,あるいは逆に実践を伴っていないような領域があるかもしれません.そこが狙い目だと思います.最初にも述べた通り,博士論文は最小限の内容にするよう心がけるのが大事です.次の記事も参考にしてください.

ソフトウェア工学実践研究において「巨人の肩に乗る」ということ
http://zacky-sel.blogspot.jp/2013/01/blog-post_10.html

私の博士論文はダメダメだったんですが,その後ヨーロッパを中心に行われている「研究方法の研究(メタ研究)」を調べたり,実際に書かれた博士論文をいろいろ読んでみて,こうするべきだったんだということが後でわかった次第です.

博士号を取ろうとするすべての人に,まずは次の書籍を薦めます.





http://www.amazon.co.jp/gp/product/4990455509/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4990455509&linkCode=as2&tag=zacky1972-22

2013年7月15日月曜日

2013年度の教育活動の目標

2013年度の教育活動の自己目標を設定しました.


3つのミッション全てが教育活動に関連します.
  • IT・組込みシステムを活用・開発する多能工プログラマを育成すること
  • 確固たる価値観に基づいて未来の社会をデザインし行動する起業家を支援すること,およびそのような起業家マインドを持ったエンジニアを育成すること
  • 教育の研究成果をさまざまな形で社会に還元すること
「IT・組込みシステムを活用・開発する多能工プログラマを育成すること」に向け,
新カリキュラムのソフトウェア工学関連科目を「多能工プログラマの育成」にフォーカスし,内容を見直します.
キーコンセプトは次の2つです.

  • 最も効果が高いプログラミングの教育方法は,「コードレビュー」つまり,学生の書いたプログラムコードの改善点を議論することです.そこで,コードレビューを授業の中心的活動とすることを目指します.
  • コードレビューを中心として,さまざまなソフトウェア工学上の知識の多くを関連づけられるのではないかという仮説を私は持っています.そのような教育は,経験学習の観点からも望ましいです.そこで,ソフトウェア工学上の知識をコードレビューの中に折り込む授業スタイルの確立を目指します.
つまり「コードレビューを中核に据えたソフトウェア知識体系の教授」を目指します.

これを実現する上では,コードレビューは一種の個別指導なので手間がかかる点が最も大きな課題です.実現するために次のアプローチを取ります.
  • 指導者層を厚くする
    • コードレビューを行うのに十分な技量を持ったEAやTAを育成する研修プログラムを開発し,一人でも多くコードレビューの指導が可能な人を増やします.
    • 将来的には,理解の早い学生にもこの研修プログラムを適用し,指導側に回れるように教育します.
  • 一度に教える学生数を減らす
    • 演習系科目のクラスを分け,クラス内でも3~7人程度の少人数グループに分け,少人数で行き届いた教育ができるようにします.
  • 知識伝授のコストを減らす
    • 教授内容をeラーニング教材部品として多数準備して活用することで,知識伝授にかかるコストを減らします.

各科目の目標は次のとおりです.
  • 【計算機演習I】
    2013年度より別の先生に担当をバトンタッチします.そのため,次の3つの目標を掲げます.
    • 2012年度に導入したプログラミングの新教材の運用方法を新担当の先生に引き継ぎます.
    • 今までの授業を総括する場を設けます.計算機演習Iの新旧担当者だけでなく,後続科目の計算機演習IIの新旧担当者も総括の場に招きます.
    • プログラミング演習を早く修了してしまった学生向けに,アドバンストコースを提供することで,プログラミングへの興味関心を喚起します.
  • 【プログラミング言語処理系】【コンピュータシステム】
    学生の習得状況から考察して,「CPUの機械語レベルでのコンピュータの動作原理をよく理解するとプログラミング能力の向上につながる」という仮説を立てました.2012年度の調査で,かなり多くの学生がこのレベルのコンピュータの動作原理を理解していないことがわかりました.そこで,2014年度から実施する新カリキュラム「コンピュータシステム」では,コンピュータの動作原理の完全習得にとくに力を入れます.
    2013年度には現行カリキュラム「プログラミング言語処理系」との共通部分であるコンピュータの動作原理,コード生成・最適化の新教材を開発します.この中でとくにコンピュータの動作原理に重きを置き,習得効果を最大限に高めることを目指します.
    最終的には教科書の出版を目指します.
  • 【ソフトウェア設計論】【ソフトウェア設計・同演習】
    今までの完全習得学習を目指す方向性を継続します.2013年度では,より高い授業効果を目指すため,習得する順序を変更して効果を確かめます.
    また,2015年度からの新カリキュラム移行に向けて,新教材とコードレビューの研修プログラムの準備を進めます.さらにコードレビューを起点にしてオブジェクト指向やUMLにつながるような指導方法の実現について検討します.
    最終的には教科書の出版を目指します.
  • 【オブジェクト指向プログラミング演習】【プログラミング・同演習】
    2015年度からの新カリキュラム移行に向けて,新教材とコードレビューの研修プログラムの準備を進めます.新教材では,共同担当の先生の得意分野である画像処理にフォーカスし,基本的な画像処理アプリケーションの構築方法を習得する教育プログラムの開発を行います.
    最終的には教科書の出版を目指します.
  • 【カーエレクトロニクス技術概論】
    2012年度に開発した,ソフトウェアアーキテクチャに関する反転授業を再度実施し,授業効果を確かめます.
  • 【ソフトウェア工学概論】
    新カリキュラムの施行に伴い,大きく構成を変えます.2012年度に得られた反転授業の経験を生かし,反転授業を取り入れた独自の授業スタイルを開発します.授業テーマは「技術の学び方を学ぶ」「主体的に深く学ぶ」方向性です.授業を2部構成にし,前半で知識の習得を行いながら,調査の過程で生じた疑問点(リサーチクエッション)を提出させます.後半ではリサーチクエッションの中から選んで深く調査し,ポスター発表を行なって,そこでの議論をまとめます.
    前半の講義資料を元に,最終的には教科書の出版を目指します.
  • 【組込みソフトウェア】
    2012年度に打ち立てた授業の方向性を継続し,完成度の向上を目指します.
  • 【卒業研究指導・特別研究指導】
    「学生に主体的に問題を発見・解決させること」を主眼に置く研究指導の方向性を継続します.また,より実践的な学びの場を提供するために,全体目標に掲げたようにコードレビューを強化することと,地元企業を中心とした共同研究プロジェクトを立ち上げてインターンシップ的な学びの場を提供することを行います.

「確固たる価値観に基づいて未来の社会をデザインし行動する起業家を支援すること,およびそのような起業家マインドを持ったエンジニアを育成すること」に向け,次の目標を設定します.

  • ビジネスモデルキャンバスを使って,起業家マインドを学生に学ばせる方法を確立します.
  • 地元企業を中心とした共同研究プロジェクトを活用して,実際のビジネスについて学ぶ場を提供します.

これを受けて,各科目で次のような目標を設定します.

  • 【入門ゼミ】
    ビジネスモデルキャンバスを使って起業家マインドを学ばせるゼミを行います.ビジネスモデルキャンバスは,従来は難解な文章でしか記述できなかったビジネスモデルを9つの要素で可視化する手法です.ゼミの実施にあたり,1年生だけでなく上級生や社会人ともチームを組んでもらうことで刺激を与え深い議論になるように場を設定します.これに伴い2013年度から学科全員の指導をいったん中止し,小人数グループの指導に戻します.
  • 【グループ担任】
    学業が振るわない,あるいは生活態度が悪い学生のほとんどは,自己目標を持っていないと考えられます.そこで,自己目標を持たせるために,入門ゼミでも取り入れたビジネスモデルキャンバスを使った自己啓発の手法を実施します.
  • 【卒業研究指導・特別研究指導】
    前述のように地元企業を中心とした共同研究プロジェクトを立ち上げて学生に参画させ,実際のビジネスについて学ぶ場を提供します.理論面としては,前述のビジネスモデルキャンバスに加え,現代的な起業に有効な方法論であるリーン・スタートアップの考え方を取り入れます.
  • 【フューチャーセンター】
    学生の起業家マインドを奮い立たせるため,定常的に未来のあるべき姿について議論できる場として,フューチャーセンターを設立します.

「教育の研究成果をさまざまな形で社会に還元すること」に向け,
上記の各項目について,教科書の出版の準備,論文発表,ソーシャルメディアを通じた普及活動を行います.