2019年5月アーカイブ

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検索してみましょう。あなたがぶちあたる問題のほとんどは他の誰かもぶちあたり,そして誰かが解決策を見つけているものです。

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

8a7b46517d99adc6f73223f1f3f3a6c9.png

 5月8日放送の『水曜日のダウンタウン』,改元特別企画はキングオブコント2016年で決勝進出をはたした"ななまがり"をゆるやかに拉致し,世間との接触が一切ないように監禁。新元号が発表された後,5分に一回,新元号を推測して習字し,当たるまで脱出できないという,新元号をネタにしたまさかの言語行動シェイピングゲームでした。

 最初はヒントもフィードバック(強化)もないベースライン条件。スタジオでは2136ある常用漢字2文字の組合せは456万2496通りあるという解説が流される中,イニシャルT,S,Hを避けるくらいしか戦術がないななまがりは絶望状態。
 そこへ,指定された読みで画数の多い漢字を回答すれば,その画数に応じた得点が与えられ,得点に応じた様々な物品と交換できるというボーナスゲームとトークンエコノミーによる介入が開始されます。
 そしてトークンと交換できるアイテムには,梅・竹・松の三段階のヒントも!
 元号発表から5日が経過してようやく入手した「松」の中身は電球でした。最初はそれが一体何なのか,ななまがりの二人もスタジオゲストにもわからないまま新元号当てゲームは進行していきます。そして,「世京」を発表した後に,電球が少しだけ点灯。ざわつく二人が考えた次の回答は「寛京」。でも光らない。
 少し後になってわかるのですが,電球が光るルール,すなわち強化基準は,a) 正解である「令和」と総画数が同じ, b) 頭文字(R)が同じ, c) 一文字が一致の3つでした。そして,この順に電球が光るときの明るさが大きくなるのです(そうすると,複数条件適合したときに明るさの弁別が難しくならないか?と思ってみていたら,そのときには複数回点灯させていた模様)。
 電球の登場でようやく言語行動を分化強化する随伴性が設定され,行動はここから急速に変わっていきます。開始から98時間40分,921回目の回答で見事「令和」の文字が発表され,"平成"からの脱出に成功。瞬間,あわや泣きそうになりました。この番組ではたまにある,まさかの感動回でした。
 電球の点灯で強化されたのは,「令和」と書く行動ではなく,電球点灯に関する正しいルールのタクトです。授業や研修会などでシェイピングゲームをすると,"ハト役"と言っても正解を考えながらやっているのだから,ハトとは違いますよねという感想をもらうことがあります。ハトやネズミは,人のように随伴性をタクトしてそれも弁別刺激にしながら行動することはありませんから,これはこれでその通りなのですが,一方で,実はその"正解を考えながら"という行動もシェイピングされているというところに気づいて欲しいわけです。
 今回の新元号あてゲームは,回答機会が5分に一回と制限されていたこと(完全なフリーオペラントではなかったこと),電球を光らせる強化基準が固定されていて,行動に即して変えていかなかったことが,通常のシェイピングの手続きとは異なります。回答機会を制限せず,強化率が8割以上になるように,その時点時点での行動に即して強化基準をスライドさせていけばもっと早く脱出できたはずですが,それではバラエティ番組としては成立しないのかもしれません。
 ところで,電球による強化随伴性が投入される前と後では,ななまがりの様子が異なっていましたよね。ベースラインはほぼ消去です。表情は疲れて,活気がなく,落ち込んでいるように見えました。奇声さえ自発していました。強化随伴性が導入されると,二人の会話もはずみ,表情も生き生きしているように見えました。あれが強化の副作用です。逆にいえば,疲れて,沈んでいるのは消去の副作用です。トークンをタバコと交換する頻度が,電球システムの導入前後で変わったかどうか調べたら面白かったかもしれません。
BPO的に何かと物議をかもす番組ですが,もしかすると制作スタッフの中に行動分析学を勉強した人がいるのかもしれません。
 ななまがりのお二人,お疲れさまでした。これをきっかけに売れるといいね。

アーカイブ

法政心理ネット