素朴理論から考えるおじさんの生きる道

教育心理学関係 勉強会/読書会 Advent Calendar 2017 9日目の記事です。

素朴理論とは

正確な定義は、各種専門書をご参照頂きたく、私の理解では、となりますが、自分の経験によって得た理論を「経験則」や「素朴理論」と呼びます。科学的に洗練された理論ではないので、「素朴」ということらしいです。

多くの科学理論も最初は素朴理論であり、それが研究や実験などで洗練されていくことで、科学理論になっていく。なので、科学的には間違っていて淘汰される素朴理論もあれば、科学的にも正しくて生き残る素朴理論もあって、現時点で科学理論となっているものもさらに洗練されて変わっていくこともある、という様に捉えています。

素朴理論の存在意義

私たちは、なぜ素朴理論を持つのでしょうか。教育心理学概論 第5章(P.69)によると

人は,小さい時から身の回りで起きることを観察して,一定の規則性があるものとして捉えようとする。規則性が捉えられると次に何が起こりそうか予測できるようになるので,便利だからだろう。

とありますので、例え、科学的でなくても、自分なりの理論を持っていると、先が読めて便利だ、ということがメリットのようです。

素朴理論の例

例えば、こういうのが素朴理論の例かなと思います。

  • 教科書100回読めば、テストで100点取れるよ
  • 1回つらいことを経験すれば、成長できるよ
  • 雨っぽい匂いがするときは、この後雨が降る

絶対に外れるわけではないけど、科学的に正しいとは言えないかなー、という内容。あと、他にもっと良い方法あるかも、という印象。

おじさんとして考える素朴理論の課題

自分自分の話として、たくさんの素朴理論を持っているのだろうと予想しています。一方で、素朴理論の目的が、「先が読めて便利だ」だとすると、 素朴理論は、予想通りの結果を伴ってはじめて有用ではないかと考えています。

そこで、 おじさんとしては、昔は通用した素朴理論が、今も使えるとは限らないなー と思うわけです。

一番典型的な例が、「笑い」です。

感覚的な、「このタイミングで、これを言うと受けやすい」みたい素朴理論が結構あると思っていて、それがいつまで通用するか(していたか)、自分で気付くことができるのでしょうか…

素朴理論との付き合い方

延々とすべり続ける恐怖に震えていても何も進まないので、素朴理論との付き合い方を考えます。

素朴理論は確実ではない

素朴理論は、自分の経験から作られるので、うまくいった(予想通りだった)経験に基いていると思います。そのため、それが正しいと信じがちですが、一方で、科学的概念との最大の違いは、確度ではないかと思います。つまり、科学理論の方がより確かにその結果を期待できて、素朴理論の方が確からしさが低く期待する結果が得られないかもしれない。

自分の期待値とは裏腹に、確度としては高くない、という事実をまず理解して使うことが大切だと思います。

素朴理論を変化させる

一度うまくいった素朴理論を人は使いたくなるし、維持したくなるのではないかと予想しますが、それを変化させていくことが大切ではないかと思います。特にうまくいかなかったとき。

最初すべるのは仕方ないけど、すべったことで学習して素朴理論をアップデートすることが大切ではないかと思います。

他人に強要しない

ついつい自分がうまくいったので、他の人も同じようにやると良い結果が出るのではと、お薦めしてしまうこともあると思います。「この勉強法すごくよかったら、やってみると良いよ」みたいな感じです。

もちろん有効なことも多々あるとは思いますが、素朴理論の範囲であれば、他の人によって予想通りの結果が得られるとは限らないので、お薦め程度に留めるのが良いかと個人的には考えています。

場を見極めて有効に使っていく

注意点のようなことをたくさん書きましたが、基本的には便利だから我々は素朴理論を使うのだと思います。そして、経験からしか作られないので、年齢を重ねている人は、単純に機会の多さとして、より洗練された素朴理論を持つことに有利だと思います。

思い上がるのは良くないですが、経験則から、トラブルを予期して予防するなど、素朴理論を使うべき場も当然多々あります。そのように場を見極めて有効になるように使っていくことが(それを見極められることが)、重要ではないかと思います。

学習科学ハンドブック 第二版 第2巻: 効果的な学びを促進する実践/共に学ぶ

学習科学ハンドブック 第二版 第2巻: 効果的な学びを促進する実践/共に学ぶ

  • 作者: R.K.ソーヤー,R. Keith Sawyer,大島純,森敏昭,秋田喜代美,白水始,望月俊男,益川弘如
  • 出版社/メーカー: 北大路書房
  • 発売日: 2016/10/24
  • メディア: 単行本
  • この商品を含むブログを見る

知的構成型ジグソー法の薦め

教育心理学関係 勉強会/読書会 Advent Calendar 2017 - 1日目の記事です。

教育心理学関係 勉強会/読書会とは

月に1回程度のペースで教育心理学関係 勉強会/読書会という読書会が開催されており、そちらによく参加させて頂いております。

最初は、教育心理学概論 (放送大学教材)という本を読むことで始まりましたが、読了後、さらに関連書籍を読んだり、気になる本を紹介し合うなどの活動を行っています。

この読書会は、 知的構成型ジグソー法で行っているのですが、自分1人で読むときよりも、理解が深まり、記憶にも定着し、実際に業務などで知識を活用しやすいという実感があります。お薦めです。

知的構成型ジグソー法とは

詳しくは、東京大学CoEF知識構成型ジグソー法を確認頂くのが良いと思います。 先述の教育心理学概論 (放送大学教材)の中でも触れられています。

私たちの場合は、以下のような流れで進めています。

  1. 毎回、例えば1〜3章を読むと決めたら、○○さんは1章、△△さんは2章というように、事前に読む章を決めておきます(少なくともその章は読んでいる状態で参加します)。
  2. 読書会では、まず1章を読んで来た人、2章を読んで来た人、と、章ごとに別れて、その章の内容について話し合います。(エキスパート活動)
  3. その後、1章を読んだ人、2章を読んだ人、3章を読んだ人の3人で1つのグループを作り、それぞれの章の内容の紹介や、それぞれの章で得た知見を元に、ディスカッションをします(ジグソー活動)
  4. 最後に、各グループでどんな話題が出たのかを他のグループとシェアします。(クロストーク

場に先生はいないですし、明確な「問い」を持って始めているわけではないので、もしかしたら厳密にはジグソー法とは言えないのかもしれないですが、このように「エキスパート活動」「ジグソー活動」「クロストーク」を意識して読書会を行っています。

なぜ知的構成型ジグソー法が良いのか

これも、学術的なちゃんとした理由は、別途確認頂いた方が良い、という前提にはなりますが。(個人の感想であり、、、)

エキスパート活動→ジグソー活動→クロストークという流れの中で、色んな人の意見と合わせていける(積み重ねていける)ことが良いのかなと思います。

まず、エキスパート活動開始の時点では、本を読んできた自分1人の知識です。それが、「ここはどういう意味だろう」とか「ここがすごく良かった」など、グループ内の人と協力して、書いてある内容の理解を深めていけます。少し狭いスコープの中で、複数人の知恵を集めて理解を作っていくようなイメージです。

次のジグソー活動では、そうした知恵の集まりをさらにぶつけることができます。 理解した内容をすぐに人に説明することも有意義ですし、他の章で出てきた内容について「自分の章の○○という内容とも通じる」など、互いの章の内容を合わせて理解を深めるなど、色んな視点を持って理解を深めることができます。

最後のクロストークも同様です。人が違えば議論の内容が違ってきたりするので、他の意見を聞くことで、「なるほど」と思うことが多いです。こうした気付きが理解を深めることに通じます。

また、もしかしたら、自分がエキスパート活動した章だけについて詳しくなる印象を持たれるかもしれませんが(まぁ、実際、多少そういう面はあるとは思いますが)、ジグソー活動で他の章についても良く分かります。あくまでもエキスパート活動は1つの部品作りであって、最終的にはそれを組み合わせて1つの理解を作っていくようなイメージ(なので、他の章も理解を深めていくことになる)かなと思います。

難しい本を読むときに特に良いと思います

これも完全に個人の意見です。

分厚い本とか内容が難しい本とか、読みたい(興味がある)けど読めていない、というケースはしばしばあるかなと思います。そういう本を知的構成型ジグソー法で読むのは特にお薦めです。 逆に言うと、難しくない本とかは、知的構成型ジグソー法でやるより、自分1人でさっさと読んだ方がすぐ終わって良いかなと思います。

理由としては、

  • 1人で読むよりも他の人と協力した方が理解がしやすい(理解が深まる)
  • 1人で読むより途中で挫折しにくい

からです。

ただ、エキスパート活動とジグソー活動を考えると、最低6人はその本を読みたい人を集めないといけない、というのが、知的構成型ジグソー法の最大の難点ではないかと思っています。

というわけで、読みたい本がある方は、一度、教育心理学関係 勉強会/読書会に来てもらえると、一緒に読む人を見つけられるかもしれません。*1

教育心理学概論 (放送大学教材)

教育心理学概論 (放送大学教材)

*1:結果を保証するものではありません

「やり方ではなく、成果にこだわる」で良いのか、考えた

うまくいっていれば問題ない?

ちょっと前から、例えば、 Modern Agileとか、スクラムお化けの話など、すごく大雑把に言えば、「やり方に注目しないで成果に注目しよう」みたいな話を聞くことが多い気がしています。

Scrumの奴隷という言葉もありますし、プロセス実施して満足するな、みたいな文脈だったり、自分たちに合った方法を自分たちで見つけましょう、とか、具体的に課題を解決していくことが大事なんですよ、みたいな文脈で同意する部分も多い一方で、何となく自分の中で違和感を感じる部分がありました。(念のため申し上げると、否定する気持ちは全くなく、理解しきれていない、というイメージです)

違和感を頑張って言語化すると、守破離とか歴史から学ぶとか、これまで先人が築いてきたものをちゃんと理解するのも重要で、「型があるから型破り、型がなければ型無し」と言われるように、基礎(?)を学ぶことで出来るようになる(学んだ方が出来る可能性が高くなる)こともあるのでは、という気持ちです。

もしくは、例えば、めちゃくちゃなフォームで170キロの豪速球を投げるピッチャーがいたとして、その人がいるうちは試合に勝てて良いですが、一般化された(確率的に多くの人にあてはまる)良いフォームを知っておくこともチームとして大事なのでは、という気持ちです。

このもやもやが、別のことを色々と学ぶ中で、Connecting Dotsした感じがあったので、その内容を徒然なるままに記載していきます。

人の学び方について学び始める

最近、教育心理学概論読書会を中心に、認知科学モティベーション理論、行動経済学など、人の捉え方や学び方について、色々と理論を勉強しています。*1

その中で、人の学び方や目的も時代に合わせて変化していることを知りました。

例えば、親と同じ仕事をするために技術を伝承することが重要な時代には、徒弟制度の形でその仕事の内容をじっくり学びましたし、産業革命以降は、親と違う仕事をする可能性が高いので、仕事のやり方を覚えるために、要求されたルールを正確に覚える力が大事とされてきました(テストで良い点取ろうの時代)。今はルールややり方もどんどん変わるので、学んだことから次の学びに繋げていく力(前向きな学び)が重要なのかなと思います。

Elastic Leadershipを読む

エラスティックリーダーシップ ―自己組織化チームの育て方の中に記載されていた、リーダーシップの手段がフェーズによって異なる、という観点が、自分の中でとても大きな気付きでした。

最終的には自己組織化されたメンバーで構成されたチームが良いよ、と思っている一方で、フェーズによっては、チームを指揮統制していく必要がある、という考えは、言われてみれば当然な気もしますが、いつまでも統制されるチームになってしまわないか、とか、自分で考えなくなってしまうのではないか(自分で気付く機会を奪ってしまうのではないか)、とか、どう進めるのが良いのかなーと色々と考えさせられました。

プロセス主義という言葉を目にする

社内でQCサークルという業務改善のようなプロジェクトにアサインされて、その運営の方から課題整理のやり方などプロセスを習う機会がありました。その中で、教育という側面から、プロセス主義で、QCサークルのプロセスを一通り実施してもらうことを重視していて、成果にはこだわっていない、という話があり、これが普段の、「成果が大事」とは逆に思えたので、とても印象的でした。

また、FacebookのFeedで、とある学校の校長が、プロセス主義を大事にして教育を行っている、という内容を目にしました。

教育という視点で、プロセス主義という言葉が出てくるのが気になったので、軽くネットの記事を散見してみると、短期的な視点の成果主義と長期的な視点のプロセス主義という対比をされているのをいくつか見かけました。

もちろんどれも、成果が大事ではないと言っているわけではないのですが、目的によっては、短期的な成果が出るよりもプロセスを学ぶことが大事という考えがあるのかなーと思います。

QCサークル活動の基本と進め方―あらゆる小集団活動に役立つ (はじめて学ぶシリーズ)

QCサークル活動の基本と進め方―あらゆる小集団活動に役立つ (はじめて学ぶシリーズ)

伸びる子の育て方

伸びる子の育て方

繋がった結果

唯一無二の結論、というわけではないのですが、フェーズとか目的によって、プロセスを学ぶって大事なんだろうな、が今の考えです。

例えば、成長途中のベンチャーなど、170キロのピッチャーに頼って今日の試合に勝つことがとにかく重要な場合もあれば、リーダー戦略を取っているような企業では、仮に今日の試合に負けても、しっかりと選手を育てる仕組みを作ることが大事だったりすると思います。

ただ、プロセスを学ぶのって、フェーズとしては、最初の(序盤の)ものなのかなと思います。あと、学んだことはそのまま使えるとかずっと使えるわけではないですよ、なぜなら世の中はどんどん変化していくので。最終的には、学んだものをそのまま使うのではなくて、学んだものをベースに、新しく自分たちに合った、時代に合った、やり方を作っていかなきゃ駄目ですよね。より良い方法を明らかにしていなかなきゃですよね。が、Modern Agileってことなのかなー、というのが今回感じたことでした。

つまり自分の視点が序盤にあったから感じた違和感だったのかなと。引き続き精進していきたいです。

*1:参照書籍

教育心理学概論 (放送大学教材)

教育心理学概論 (放送大学教材)

理解とは何か (コレクション認知科学 2)

理解とは何か (コレクション認知科学 2)

モティベーションをまなぶ12の理論

モティベーションをまなぶ12の理論

人は勘定より感情で決める ~直感のワナを味方に変える行動経済学7つのフレームワーク

人は勘定より感情で決める ~直感のワナを味方に変える行動経済学7つのフレームワーク

SeleniumでChromeのデバイス指定を使ってスマホ表示させる方法

SeleniumChromeのデバイス指定を使ってスマホ表示させる

SeleniumChromeを動かす場合、ChromeOptionsを使ってデバイス指定をすることができます。デバイスにスマホ端末を指定することで、スマホ表示でのSelenium操作が出来るようになります。

リファレンス

Seleniumデザインパターン & ベストプラクティス

Seleniumデザインパターン & ベストプラクティス

やり方

# mobile_emulation = { "deviceName" => "Google Nexus 5" }
mobile_emulation = { "deviceName" => "Apple iPhone 6" }
caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => { "mobileEmulation" => mobile_emulation })
driver = Selenium::WebDriver.for :chrome, :desired_capabilities => caps

内容

Selenium::WebDriver::Remote::Capabilitiesクラスのchromeメソッドを使うことでChrome用のdesired_capabilitiesを作ることができます。このとき、chromeOptionsmobileEmulationを指定すれば、デバイスを指定することができます。

指定できるデバイスの一覧のようなものは特に見つけられなかったのですが、Chromeで使っているものはおそらく使えるのではないかと思います。ただし、名称一致は必要なようで、"Apple iPhone 6"は、"iPhone 6"ではエラーになりました。

システムテスト自動化 標準ガイド CodeZine BOOKS

システムテスト自動化 標準ガイド CodeZine BOOKS

関連記事

genius.hateblo.jp

genius.hateblo.jp

genius.hateblo.jp

SeleniumでChromeを起動した際に、デフォルトのダウンロード保存先を指定する方法

SeleniumChromeを起動した際のデフォルトダウンロード保存先を指定する

SeleniumChromeを使う場合に、デフォルトのダウンロード保存先を指定する方法が分からなかったので調べたメモです。

Win + Rubyで確認しています。

リファレンス

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

やり方

色々調べましたが、プログラム内で直接定義するやり方は分からず、Chromeで使うUserDataのファイルをプログラム内で指定することで実現しました。自分が普段使っているChromeのUserDataとは別のファイルを設定できるので、ファイルをリポジトリに入れて使うこともできます。

CHROME_USER_DATA_PATH = Dir.pwd + "User Data\Default" # 絶対Pathで指定

caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"args" => ["user-data-dir=#{CHROME_USER_DATA_PATH}"]})
driver = Selenium::WebDriver.for :chrome, :desired_capabilities => caps

内容

Selenium::WebDriver::Remote::Capabilitiesクラスのchromeメソッドを使って、Chrome用のdesired_capabilitiesを作ることができます。

ChromeOptionsを使うことで、色々な細かい設定ができるのですが、ここでUserDataのパスを指定して、自分の好きな設定を読み込ませることができます。そのため、あらかじめChromeの操作でダウンロード保存先を希望のものに変更しておいて、それで生成されたUserDataを使うことで、SeleniumChromeを起動した際のダウンロード保存先を任意のものに設定することができます。

ちなみに、ファイルとして置くのは(ダウンロード保存先を指定したい場合には)AppData\Local\Google\Chrome\User Data\Default\Preferencesのファイルだけで良いようでした。Macの場合には~/Library/Application Support/Google/Chrome/Default/Preferencesにあるようです。(Macの動作確認はしていないです)

Seleniumデザインパターン & ベストプラクティス

Seleniumデザインパターン & ベストプラクティス

関連記事

genius.hateblo.jp

genius.hateblo.jp

genius.hateblo.jp

SeleniumをChromeで動かす方法

SeleniumChromeで動かす

Seleniumでブラウザ操作を行う場合、firefoxであれば特に追加設定なく動かせるのですが、他のブラウザを使う場合には、ちょっとした設定(環境構築)が必要です。

ここでは、Chromeのやり方について記述します。

実践 Selenium WebDriver

実践 Selenium WebDriver

環境

私はWin7Linux(Amazon Linux)+ Rubyで動作確認しました。

おおまかな流れ

  • chromedriverのファイルを取得する
  • chromedriverが使えるようにする
  • 必要に応じてプログラムを修正する

chromedriverのファイルを取得する

こちらからダウンロードできます。

Seleniumを動かす環境に合わせて、ダウンロードしてください。

chromedriverが使えるようにする

WinとMac,Linuxでちょっと違います

Winの場合

C:\RubyXXX\binなど、Rubyがインストールされているディレクトリにchromedriverのファイルをコピーしてください。

Mac,Linuxの場合

以下のような感じでシンボリックリンク作れば実行可能になります。

ln -s $HOME/selenium/chromedriver /usr/local/bin/chromedriver

必要に応じてプログラムを修正する

:firefoxみたいな感じでブラウザ指定しているところを、:chromeとするなど、必要に応じてプログラムを修正します。

driver = Selenium::WebDriver.for :chrome

その他注意

基本的には、ブラウザ間の違いはSelenium WebDriverが吸収してくれると思うのですが、動かなくなる場合もあります。

例えば、私はFirefoxのプロファイルで書いていた部分をChrome用に書き換えるのに苦労したり、FireFoxでは押せていたボタンがChromeでは押せなくなって、Driver操作の記述を変更したりすることなどが必要でした。

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

関連記事

genius.hateblo.jp

genius.hateblo.jp

genius.hateblo.jp

画像DIFFを取得するimgdiffというgemを作りました

コマンドラインで使えて画像DIFFが取得できます

https://github.com/bonbon0605/imgdiff

前から作りたいと思っていたのですが、一念発起して作成しました。

rubygemsの登録もしたので、gem install imgdiffで使えます。

CLIにて、

$ imgdiff 対象のイメージ1 対象のイメージ2 (出力先)

という感じで使うことを想定しています。

同じところは黒くなるので、黒くないところが差分になります。 画像の差分取得には、rmagick(ImageMagick)を使っているのですが、 色の差の絶対値を取得しているようで、同じだったら差が0で黒、ということみたいです。

参考にさせて頂いた情報

この2つのサイトのおかげで、rubygemsに登録する勇気が持てました。多謝。

コマンドラインツールにするのにThorを使いました

はまったところ

コマンドラインツールのテストの書き方

CLIでのコマンド実行を前提としていたので、どうやってテストを書くのか良く分かっていませんでした。 コマンドライン引数も渡すし、、、ということで、

system "bundle exec imgdiff A.jpg B.jpg"

みたいに、外部コマンド実行の形で最初書いていたのですが、色々無理があるなと思い調べたところ

ImgDiff.new(["ImageA","ImageB"]).invoke(:method)

というような形で実行できることが分かりました。(newの引数の配列がコマンドライン引数になる)

travisのテストがpassしない

ローカルではテストがpassするのに、travisでテストが落ち続け、何故か分からずに嵌まりました。 DIFFの画像を保存する権限がないのかとか色々考えたのですが、解決せず、、、結局、全然違う理由でした。

テストとして、正解のファイルリポジトリ内に用意しておいて、 それと比較して同じものかどうかで結果が正しいと判断しようとしていたのですが、 (出力結果「ImageC」は用意してある「ImageD」と同一のファイルだから正しい結果だ、というような考え)

どうやらリモートリポジトリの画像がちょっと期待しているものと違ってしまっていたようで、一致しなくてNGという内容でした。(正解が正解ではなかった)

なぜ違ってしまったのかはよく分かっていないのですが(劣化?)、「用意してあるファイルと同じ」という思想を改めることでpassできました。

rmagickでの画像差分について

こちらの記事を参照ください。

genius.hateblo.jp

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)