51uxXXlJcKL.jpg

 大人買いした沢山の本から,初心者向けにどれか一冊選ぶなら,これですかね。『独学プログラマー --Python言語の基本から仕事のやり方まで--』 Pythonの大枠をざっくり学べます。読みやすいし,見やすいし,例も豊富です。

 Kindle版を購入したのも大きかったかもしれません。まずはiPadでざっと読み,その後はMacでプログラミングしながら,わからないところをMac用Kindleで検索して調べられるので便利です(即時強化 & 高強化率)。オライリーなどのバイブル本も買ったし,一時的にKindle unlimited契約して,山とでている入門書もぱらぱら見ましたが,結局はこの本かネット検索かで落ち着きました。

 とはいえ,本のレイアウト(文字の大きさや書体,ページレイアウト)や執筆スタイルなどに関しては個人的な好き嫌いがけっこう影響するでしょうから,やはりお薦めはお金があれば大人買い,お金がなければ書店や図書館などで何冊もぱらぱらめくって,これ!という参考書を探すという昔ながらの方法だと思います。文章が読みやすく(短文),コードのサンプルが多く,ただし,複雑なプログラムを作るような長いコードではなく,コマンドごとに最小の(最短)のコード例が複数あるものが最初は使いやすいでしょう。そして可能な限り,その電子版を購入しましょう。

 なお,Kindle unlimitedで読める低価格の本は内容もそれなりというものが多かった印象があります(なので私はすぐに解約しちゃいました)。

  • Althoff, C. (2017). The self-taught programmer: The definitive guide to programming. Triangle Connection LLC. Professionally (コーリー・アルソフ 清水川貴之・新木雅也(訳) (2018) 独学プログラマー --Python言語の基本から仕事のやり方まで--日経BP社)

スクリーンショット 2019-05-12 14.34.24.jpg

 PythonとKivyで実験制御プログラムを開発していくときに便利なのがIDE(Integrated Development Environment)と呼ばれる統合開発環境システムです。
 開発するプロジェクトごとにプログラミング言語やそのバージョン,組み込むモジュールなどを設定した仮想環境を構築でき,言語ごとのコーディングルール(予約語や字下げなど)も表示に反映されるエディターも完備されているパッケージです。
 「python(もしくはお使いになるプログラミング言語) IDE」で検索すれば無料,有料版ともに色々なシステムの情報が得られることでしょう。自分はPyCharmのCommunity Editionを使っています。こんな優れものが無料で使えるということに驚きますし,cを秀丸で書いていた自分にとっては時代の流れを感じます。
 RをRStudioで使うと10倍楽になるとすれば,PythonのプログラムをIDEありで書くと100倍楽になる感じです。
 IDEをインストールし,まだインストールしていなければPythonとKivyをインストールすれば,プログラム開発準備が整います。
 そしてここからさらに時代の流れを感じることになります。学習方法に関してです。昔は,プログラミング言語の教科書や解説書が必須でした。オームやオライリーにはほんとうにお世話になったものです。
 今回,PythonとKivyと学ぶにあたっても,Amazonで教科書を大人買いしたのですが,結局,プログラミングを始めると,本にあたることはほとんどありませんでした。なぜなら,ほとんどすべての情報はネットのどこかにあるからです。たとえば「python 文字列 削除」で検索すれば,コーディングに必要なルールや,何よりサンプルが大量に見つかります。それをコピペして試し,期待通りに動作すれば,自分の用途にあわせて使うし,期待通りに動かなければ他のサンプルを試したり,コードの一部を変更してみます。動くようになるまで繰り返していくうちに,文法やモジュールに関するルールも学べ,コーディング(プログラミング行動)もシェイピングされていきます。
 ちなみに,昨年(2018年)のゼミ合宿では,R, RStudio, tidyr, ggplotを使ってビッグデータを解析する実習をしたのですが,宿のネット環境が悪く,課題は遅々として進みませんでした(学生さんたちには申し訳なかったです)。
 そうです。時代の大きな流れの一つは,今やプログラミングはネット上の情報を検索し,活用しながら進める行動だということなのです。
 そうした学習を支援するシステムもあります。たとえばQiitaは「プログラミングに関する知識を記録・共有するためのサービス」で,ユーザーが様々な言語やモジュール,システムなどに関する情報を提供し,公開しています。

 プログラミング教育が来年から小学校で必修化されます。教材や指導方法などに関し,すでに色々な試みが始まっているようですが,的はずれな議論が多いと感じています。とにかく,少なくとも一斉授業や講義などで教えようとしないで欲しいと思います。
 プログラミングは言語行動です。基本的にはコンピュータに対して命令するマンドとマンドを詳細に作用させるオートクリティックから成り立ちます。英語など,第二言語を習得しようとしたら,その言語が話されている場所で暮らすのが手っ取り早いわけですが,これはその言語で話す行動を強化する言語共同体があり,随伴性があるからです。この点,プログラミングは言語共同体がすでにそこに存在します。コンピュータに対して正しく命令すればその通りに動きますが,間違えれば動きません。しかも,上述のように,正しい命令の見本(モデリング)はいくらでも手に入ります。言い換えれば,プログラミングは留学せずに第二言語を学べるようなものなのです。
 同じことは実は他の教科にも言えるのですが,たとえば,数学における言語行動はタクトもしくはイントラバーバルが多く,強化するには教育的強化,すなわち教え手による付加的随伴性が必要です。化学や物理学などの自然科学は,あるいは一部の社会科学は,実験や調査という方法論を学べば,タクトやイントラバーバルが仮説とデータとの一致といった事実で強化されるようになるので(つまりこれが研究行動),教え手が不在でも学習が進むようになるのですが,そこに至るまでの下位行動の教授にはやはり教え手が必要です。
 これに対し,プログラミングはコンピュータが強化随伴性を提供してくれます。それも,学び手の個々の行動に応じ,即時に提供してくれます。だから,他の教科と同じような意味での教え手は必要ないのです。母語の学習に専門の教師が必要ないのと同じです。留学して外国語環境にさらされてしまえば,外国語教師は必要ないのと同じです。

 プログラミングは,まずプログラミングの言語(文法など)を完全に習得してからでないと学べないというのも間違った思い込みではないかと考えています。日本語を母語とする我々も,日本語の文法を学んでから話し始めたわけではありません。せっかく海外に留学したのに,ネイティブと話をする自信がないからといって図書館やカフェで英文法の本を読み続けることはナンセンスですよね。それに,英会話なら,発音や語を間違えたら,レストランで注文を間違えたり,友だちを怒らせたりするといったリスクもありますが,プログラミングにはそれもありません。間違えてもエラーがでるくらいです。昔は無限ループやメモリ浸食でPCがフリーズすることもありましたが,昨今のシステムは頑健ですから,そんな心配もいりません。完全に安全な空間でいくらでも誤反応でき,正反応率を高める材料があちこちにあるのです。
 長くなりましたが,まとめます。
 PythonとKivyを使って実験プログラムを開発してみようと思ったら,

  1. まず, PyCharm などのIDEをインストールし,開発環境を整えましょう。
  2. プログラミングはまったくの初体験なら,初心者向けの本をざっと読みましょう(でも,それは,書いてあることを「理解」するためではなく,今後,ネット検索するときのキーワードを知るためと割り切りましょう)。たぶん,いくらわかりやすい教科書でも,読むだけでは本当の意味で"わかる"ようにはならないので。
  3. なんでもいいので,簡単なプログラム(動いたら楽しそうなもの,コードが数行の短いもの)をネットで探し,それをそのまま自分の環境で実行してみましょう。
  4. 動いたら,おめでとうございます! 他のサンプルで遊んでみましょう。
  5. 動かなかったら,コードのどこかをいじって試してみてもいいし,それはさっさとあきらめて他のサンプルを試してみてもいいでしょう。
  6. 自分の環境で動くサンプルをみつけたら,そのコードのどこかをいじってカスタマイズしてみましょう(たとえば,色を変えたり,大きさを変えたり,位置を変えたりなど)。このとき,一度にどこか一箇所だけを変えるようにしましょう。複数を一度に変えると動かなくなったとき,どこに問題があったのかわかりにくくなるからです(シングルケースデザイン法の考え方と同じですね)。
  7. エラーがでたら,そのエラーでgoogle検索してみましょう。あなたがぶちあたる問題のほとんどは他の誰かもぶちあたり,そして誰かが解決策を見つけているものです。

 自分の開発環境を動画で公開しています。参考までに。


51MwqsE6OAL._SX342_BO1,204,203,200_.jpg
 法政心理では卒論や修論の実験用にSuperLabのライセンスを購入し,実験実習のカリキュラムにも組み込んでいます。コード書かなくてもいいし,慣れていて,刺激を呈示して再認させるような簡単な実験なら,ものの1時間もあれば完成させられるところがメリットです。

 ただ,けっこう高価なので,ここ1-2年,無料のPsychoPy Builder(Peirce et al., 2019)に切り替えられないかどうか検討を重ねてきました。PsychoPyがちょうどver2からver3への大幅リニューアルを迎えていて,テストはver2で実施していました。PsychoPy Builderのver2については,愛媛大学の十河先生が日本語のマニュアルをwebで公開して下さっていて(PsychoPy Builderで作る心理学実験),Coderについては解説書も出版されています(十河, 2017)。ぐぐるとわかりますが,他にもこれを使っている心理学研究室も多く,日本語の情報は豊富です。無料なので,学生が自分のPCにインストールして使えるところも大きなメリットです。今回,この記事を書くのにあらためてアクセスしたら,十河先生のマニュアルがv3に対応していました(素晴らしい!)。

 ver2に関しては,結論として,シンプルな実験であれば,SuperLabと同等に使えるし,拡張性はむしろPsychoPyに分がある,でも安定性としてはSuperLabが勝るということになりました。

 自分もPsychoPyを使っていくつか実験プログラムを書きました。音声ファイル,画像ファイルなどを使い,コードもけっこう書いていくと,原因を特定しにくいエラーが生じることがあります。その多くは,PsychoPyが使うPygameなどのモジュールのバージョンやOSとそのバージョンの組合せに起因していると考えられるのですが,原因を特定したとしても解決策がなかったり,そもそも原因を特定することが難しかったり,どうやらモジュール以外の問題もありそうだったりしました。PsychoPy Builder は基本的にコードレスで部品をグラフィカルに組み立て,それをpythonのコードに書き直してくれる仕組みです。でも,そのコーディングのどこかにバグがあると,結局,pythonのコードを読まなくてはならず,かつ,それは自分で書いたコードではないので,デバックはかなり困難となるのです。

 幸いにも予算が確保できたため,心理学科ではSuperLabを継続して使うことになりました。

 ただ,SuperLabでは実施できる実験に限界があります。行動分析学でいうと,単純な見本合わせ訓練くらいなら可能ですが,強化スケジュールを組み込んだり,セッション内で条件移行しようとすると,もうお手上げです。ちなみに,行動分析学の実験はVisualBasicで書く人も多いです。学会から教科書もでています(中鹿ら, 2011)。ただ,VisualBasicは有料で,かつ(私の嫌いな)MS社のやっていることがよくわからず,現時点でどういうライセンス形態がどのように使えるのか不明です。

 というわけで,自分や自分のゼミ生の実験に使えるシステムを引き続き探索してきました。個人的には,大昔のHyperCard,その次のRealBasicを継承しているxojoに気持ちが動いていました。WindowsでもMacでも使え,iOSやhtml5にも展開できます。コンパイルしなければ無料だし(そうコンパイルできるのです),企業が開発しているのでお金さえ払えば丁寧なサポートも受けられます(実際,1年間契約してみましたがサポートは親切丁寧で確実でした)。いくつかプログラムも組んでみましたが,動作も安定しています。日本語マニュアルもあります。

 でも,いかんせんユーザーが少なすぎで,ぐぐっても一般ユーザーによる情報提供がほとんど見つかりません。いずれ書きますが,自分がプログラミングを勉強していた数十年前とはプログラミング事情が様変わりしていて,今では学習材料はほぼネットで入手可能だし,入手すべきです。また,xojoの言語体系はかなり特殊で,現在主流となっている,python,ruby,Swiftなどとは,随分と距離があります。学生さんにとってみると,ここに学習リソースを投入しても,他の言語を学習することになったさいには,転移による利が見込めそうにないです。

 本学科でPsychoPyの講習会を開催して下さった大正大学の井関先生が,ちょっと複雑な実験になったら,無理にPsychoPy Builder を使わず,Coderを使って書いちゃった方が結局楽ですよとおっしゃっていたこともあり,コードを書くことにしました。

 かつ,PsychoPy v2の開発が終わり,v3の安定まではしばらくかかりそうで,また,安定するといっても,結局は,上記と同じ問題を抱えそうだったので,PsychoPy Coderには頼らず,pythonでそのままコードを書くことにしました。

 そこで,色々物色していて見つけたのが,Kivyというモジュールです。主に画面レイアウトに重宝します。マニュアルの大部分が有志のユーザーによって翻訳されていて(Kivyマニュアル),小樽商科大学の原口先生がわかりやすい解説書(「Kivyプログラミング--Pythonで作るマルチタッチアプリ--」)を出しておられるだけではなく,ユーザーによる情報も比較的豊富です(「比較的」というのはPsychoPyやxojoに比べてです。昨今の標準からするとKivyの日本語情報は「少ない」と言われています)。

 画面の定義にはKivyを使い,制御の本体はpythonで書くことで,簡単な実験制御なら(学習コストを無視すれば)わりとすぐに書けますし,複雑なプログラムでも問題なく書けます。なにしろ,すべて無料です。

 「学習コストを無視すれば」と書きましたが,言語としてpythonを学んでおいて不利になることはないと思います。モダンな言語の一つですし,ユーザー数が多く,情報も豊富で,使えるモジュールも多いです。流行の機械学習なんかも,使おうと思えばすぐに使えてしまいます。

 導入の手前で終わってしまいました。今日はここまで。

引用文献

  • 中鹿直樹・桑原正修・佐伯大輔 (2011). はじめての行動分析学実験--Visual Basicでまなぶ実験プログラミング-- ナカニシヤ出版
  • Peirce, J. W., Gray, J. R., Simpson, S., MacAskill, M. R., Höchenberger, R., Sogo, H., Kastman, E., Lindeløv, J. (2019). PsychoPy2: experiments in behavior made easy. Behavior Research Methods. 10.3758/s13428-018-01193-y
  • 十河宏行 (2017). 心理学実験プログラミング--Python/PsychoPyによる実験作成・データ処理-- 朝倉書店

アーカイブ

法政心理ネット