31年目のRealize

技術に関する詳しい記事や分かりやすい記事は世の中にたくさんあるので、自分なりのアウトプットを試行錯誤。

「理解する」について理解していく

ブログを始めて1ヵ月

経ちました。早すぎますね…。

一番のメインテーマである、プログラミングスキルアップの前に立ちはだかった壁、「理解するということ」について、更に、理解へ繋がりそうなインプットを得たので、それをアプトプットしたいと思います。

新たなテンプレート構築のための「技」

カッコイイ見出しにしてみました。

前回の投稿で、自分が理解するために、事象をテンプレート化して脳内に保管する、という概念を学びました。

altrlz.hateblo.jp

そのテンプレートを新たに構築するためには、「仮説立証」が有効という話でしたが、そのやり方を深堀りします。

インプットにした書籍

ビジネスマンのための「発想力」養成講座 (小宮一慶の養成講座) (ディスカヴァー携書)

ビジネスマンのための「読書力」養成講座 小宮流 頭をよくする読書法 (ディスカヴァー携書)

経営コンサルタント小宮一慶さんの本です。 会社の先輩から4冊借りて、1週間で上記含む3冊を一気に読みました。

前回の本もですが、まさか自分がこんなに必死に自己啓発の本を読むことになるとは思いませんでした…。それだけ必要に駆られているということでしょう。

仮説検証することで、理解する

畑村さんの本の概念をベースに、小宮さんの本のテクニックを加えることで自分なりに解釈した内容を記します。

1.「関心」からの「疑問」

ある事象に対し、理解しようとする際に自分が持つ知識(テンプレート)を当てはめるにしても、まずはその事象に関心を持つこと!

そして、関心を持った上で、「何故そうなっているのか?」と疑問を持ってみます。

疑問も持たずに読み進めれば、これまでのように「理解したつもり」になってスルーしてしまいます。

2.「疑問」に対し「仮説」を立てる

疑問を持つことで、それが自分のテンプレートのどれに当てはまるか考え始めます。 ここで、重要なのはそのテンプレートを当てはめた理由が自分の中で論理的に説明できること

What(何が)、Why(なぜ)、How(どのようにして)そうなっているのか。

論理的でなければ、そのテンプレートの「構造」が成り立たないはずなので、それもまた「理解したつもり」になっているのです。

3.実際に動かし・観察することで「検証」する

自分が論理的に考えた仮説が合っているか否か、検証します。 その結果を踏まえ、仮説が正しければそのままの「構造」で、間違っていればを「構造」を修正した上で、自分の中で新たなテンプレートが構築されます。

それが「理解する」ということかなと思いました。

書いてあることの理解を深めるために

上記の、「関心→疑問→仮説→検証」を回しながら読み進めることが重要です。 それにより、書いてあることの論理的な「構造」が分かり、「構造」が分からなければ、それを構成する「要素」が何なのか知ることで、また新たなテンプレートとして自分の理解につながります。

という仮説を立てました

この自分なりの解釈もまた「仮説」ということです…!

本に書いてあることを鵜呑みにするだけでは理解出来たとは言えない!ということですね。 これが今まで出来ていませんでした…。

そういえば、僕が通っていた大学の教授が「教科書に書いてあること(数式)を信用するな。自分できちんと検証しろ。」と仰っていたのを思い出しました。10年近く前のことですが、今になって漸く分かった気がします。

「理解する」って何!

二歩下がる

仮想サーバの構築+Djangoの導入を進めているうちに問題が発生。

手順通りに進まない…。

書いてあることは理解しているつもりだけど、上手くいかない。

仕事でも似たような状況になることは多々あったのですが、その時は「そういうものだ」と思い込み、深く考えないようにしていました。

しかし最近になってようやく自覚しました。

今まで、理解したと思っていたが、理解した”つもり”になっていただけだったということです。

どういう状況かと言うと…

資料を読み込み、ポイントになりそうな部分をピックアップし、まとめる。そこまでは良いのですが、その後、他者へ説明しようとすると…できない。言葉が詰まる。質問に回答出来ない。

他者に説明できるくらいに理解しなきゃ…とは思いますが、でも今のやり方ではダメだよなぁ…と悩んでいた所

…そもそも、理解するってどういう状態?

と考えるようになりました。
そこで見つけたのが、この本です!

ズバリなタイトルで目に留まりました。

この本について

工学者で東京大学名誉教授の、畑村洋太郎さん著作。「失敗学」という学問の提唱者で有名な方の本でした。

2005年に出版された本ですが、これは自分の悩みにマッチしているし、有名な方の本だし、信頼できそうだ!という単純思考で即買い。

学べたこと

ひとまず1週間弱で一通り読み、分かった事をここに記します。

「わかる」とはどういうことか?

人が「わかった」と感じる時、以下の3パターンの事が脳内で判断されているのです。

  1. 「要素」の一致
  2. 「構造」の一致
  3. 「新たなテンプレートの構築」

前提として

世の中の全ての事象は「要素」が組み合わさり「構造」化され、さらに「構造」が組み合わさることで成り立っています。

それらの「要素」や「構造」について、人は今までの経験の中で知識として蓄え、「テンプレート(雛形)」化して脳内に保管しています。

「要素・構造」の一致

上記1,2については、ある事象に対して、自分が持っている「要素」または「構造」のテンプレートとのマッチングを試み、一致させることで「わかった」と感じます。

「新たなテンプレートの構築」

自分が経験したことのない、新たな事象が発生した場合、自分が持っているテンプレートを組み合わせ、より近いものとマッチングさせることで「わかった」と感じ、それを新たなテンプレートとして保管します。

テンプレートに関し、面白い話がありました。
脳科学の分野で研究されている現象として、「脳神経の髄鞘化(ずいしょうか)」というものがあります。

これは脳神経の周りに鞘ができる現象で、これにより神経の情報伝達速度が一桁から二桁早くなるとのこと。

そこで、新たなテンプレートを作るということは、この「髄鞘化」そのものではないか、と著者の畑村さんは考えていました。

そう考えると、「理解したつもり」では新たなテンプレートも作られず、髄鞘化も起きないので、他者へ説明するときに言葉が出てこないのかも?というのも一理あるのではと思います。

つまり、理解をしていくためには

資料を読んだり、経験をする中で、それにはどんな「要素」が含まれ、「構造」化されているかを意識することで、テンプレートを増やしていくこと。

また、新たなテンプレートを構築する時には「仮説立証」のプロセスを踏む事が有効らしいので、まずは先に答えを知るのではなく、自分で考え、予想してみた上で実際に動かし答え合わせすること。

その他にも

「直観」と「直感」の違いや、暗記の良し悪し、定量化訓練などが述べられていたり、「あー自分はこういうタイプだなー、だから理解力が足りないのか…」と思える具体事例があったりして面白いので、興味がある方は是非読んでみてください。

また、今回の紹介ではごちゃごちゃしそうだったので「要素」「構造」って具体的にどういうことを指す?といったことは書きませんでしたが、その例も豊富にありますので…。

まだまだ一度読んだだけでは理解しきれないので、この本をバイブルとして、実生活に当てはめながら理解を深めていきたいと思っています。

ブログタイトル

ブログを始めるきっかけも、この投稿のきっかけも、自分自身のことを知ることができたからでした。(目標が無いから興味も持てない、理解したつもりになり説明ができない)

それにちなんで、ブログのタイトルは

[31年目のRealize]

にしました。

realizeの意味

〔頭で思考・理解して〕~に気付く、~を悟る、自覚する、実感する

また

〔夢・望ましい状況などを〕実現する

31年目の人生で新たに気づき・自覚したことを期に、目標を実現させたい、という意味を込めてみました。いい感じの単語ですね。馴染む馴染む。

以上!

pythonコーディングひと段落

次はWEBアプリ

さて、プログラミングの方も、ちまちま進めています。 前回紹介した本の、ブラックジャックpythonで作るところまでは完了です。

とはいえ、コマンドラインのみで動く簡単なものですが。

[ H 7 ]とか[ D 5 ]というのは、それぞれハートの7ダイヤの5といった表記です。

モヤっとコード

このプログラムはfor文やif文、リスト等が分かっていればすぐに作れるので、あまり躓くことはありませんでした。
関数についても、メインのモジュールに関数を直書きして、メイン関数の中で使う、という流れ。
クラスを作ってインスタンス化→インスタンスメソッドを使う、といった処理は無かったため、物足りない感じ…。 (クラスメソッドとかスタティックメソッドとかがまだ腹落ちしていないので…次の課題ですね)

そんな中でも、ちょっとモヤっとするコード(完全にマスターしたとは言い切れないもの)があったのでメモ。

いわゆるリスト内包表記

#デッキを作る
def make_deck():
    rank = range(1,14)
    suit = ('S','H','C','D')
    deck = [(i,j) for i in rank for j in suit]
    random.shuffle(deck)
    return deck

deck=[(i,j) for...の部分ですね。
(i,j)というタプル(要素を変更できない配列)のリストを生成しています。
rankが1から13までfor文で回る間、それぞれS,H,C,Dがfor文で回る二重ループの表記。これで全ての組合せのリストとなっています。
こういうのサラっと書けるようになりたい。

複数の戻り値を格納

#勝敗の結果を判定
message, player_money = win_lose(dealer_hand, player_hand, bet, player_money)
print(message)

win_loseという関数で勝敗が確定し、表示する文字列と所持金の増減値を返します。
それらをそれぞれ、messageplayer_moneyに格納しています。
これは便利ですが…その関数が何をどの順番で返してくるのか、注意しないとすぐにバグ化する予感。

そしてDjango

ついつい心の中で「ディージャンゴ」って呼んじゃいますが、「ジャンゴ」なんですよね。なぜだ。

ここでWEBアプリを動かす為のサーバが必要になるのですが、現在はその環境を構築中です。
自宅にあるWindows10のノートPC上に、CentOS7の仮想サーバを構築し、そこにDjangoを乗せて見ようと思っています。

CentOS

Linuxを基本にしたOS(ディストリビューション)の1つ。いくつかある中で、結構メジャーに使われているらしい。これも使いながら勉強していきましょう…。

参考

  1. 以下のサイトで仮想環境を構築・接続するツールVMWare Workstation Player」を入手してインストールします。

  2. 以下のダウンロードサイトから、CentOSのisoイメージを入手します。
    Index of /pub/Linux/CentOS/7/isos/x86_64

  3. VMWare Workstation Player」を起動し、「新規仮想マシンの作成」でCentOSのisoイメージを選択し、OSをインストール。

所感

Djangoへの道のりはもうちょっと長かっ た…。

小さな一歩

プログラミングの勉強開始!

2回目の更新です。今回はプログラミングの話。

初回のブログに書いた通り、pythonという言語を勉強して最終的に何かアプリを作りたいと思ってます。
まだどんなことが出来るか分かってませんが、自分が使いたくなるものを自分のために作る!…というモチベーションでやって行く。

ちなみに今直近で欲しいものは…

市営テニスコート予約(補助)+管理

ができるアプリです。

なぜなら、今利用している市の施設予約システムがとても不便だから。

その理由は

  1. レスポンシブでない。 (スマホで見辛い…pc起動したくない)
  2. 一昔前のUIで使いづらい。 (期間を範囲指定して空いている日を一括で見たい…)
  3. 管理画面見ても、いつ抽選が実施され予約確定になるのか分からない。

などなど。

なんかこう、アプリで指定した条件で、市のシステムにリクエスト投げてその結果をアプリで受ける、みたいなのが作れたら後は自分向けのUIにしたり。
また、その予約情報をLineとかでシェアできるようにして参加者への連絡の手間を減らすとか出来たらいいなぁ!(そういうの既にあったら教えてください…使いたい!)

パパ友とのテニスが捗る。

入門書を買いました

とりあえず基本的な文法とかは↓のサイトで勉強しています。

Python-izm | Python の入門から応用までをサポートする学習サイト

他にもWeb上で勉強できることはありますが、何か手元にひとつバイブル的なものが欲しいのと、何かアプリを作りながら進められるものが無いかと。その方が理解が深まりますからね。

そう思い立ち、先週、池袋ジュンク堂で色々眺めていたところ良さそうな本があったので、買いました。

この本で学べること

今コードを書きながら読み進めているところですが…軽く内容を紹介します。

pythonの基礎

どの本でもまずはここから。

pythonのインストール方法、基本的な文法、プログラムの実行の仕方…。
電子書籍もいいですが、文法なんかは紙の本ですぐにページめくって確認できた方がいいですよね。

pythonブラックジャックのゲームを作る

実際にトランプゲームを作りながら、pythonに慣れることができます。(まだやってないので、そう信じています)

WEBアプリを作る

前段で作ったブラックジャックWEBブラウザ上で遊べるようにすることで、WEB開発のスキルを身につける。

WEBサーバも構築が必要になりますが…それを簡単に作るためにDjangoというWEBアプリのフレームワークを使うようです。
こいつをインストールすれば、簡単にサーバを立てられる!便利!

ブラックジャックのディーラーに人工知能を導入

プレイヤーの入力(戦略)を人工知能機械学習させ、ディーラーがその戦略に従うようになる…と。なんか凄そうでかなりワクワクしますね!
学びたかったディープラーニングにも触れられている点もGOOD!

実際に人工知能のプログラミングまではやらず、既に出来上がっているモジュールを導入するだけのようですが、考え方は載っています。

ちなみに、使われているライブラリは以下の通り。

Numpy

数値計算ライブラリ。
高度な数学関数、ベクトル計算を正確かつ高速にできる。

Theano

数値計算ライブラリ。
数式そのものから解法を考えてくれる。
Numpyよりも最適な計算方法を編み出してくれる特徴がある。

Keras

ディープラーニング用のモジュールを含んだライブラリ。
ディープラーニングの基礎となるニューラルネットワークの構成を上手いことこう…やってくれるらしい。まだよくわかりません…要勉強orz

Pandas

データ処理をするためのライブラリ。
簡単にデータの検索、変更ができる。

7月中にはマスターしたい

本って色々買って手を出したくなるけど、まずは1冊をとことんやることが大事って偉い人が言ってた。
そして自分が理解したことを、自分の言葉で説明できるよう腹落ちさせることが重要です。
それが、このブログの目的でもあります。

時には間違った理解を書いてしまうこともあるかも知れません…そんな時はどんどんコメントでツッコんで頂けると助かります!

ブログはじめました。

ブログ開設の目的

社会人になり、IT企業に勤めて7年目。

結婚して、子供ができて、マンション買って…プライベートはとても充実していたけど、仕事に関してはイマイチやる気も出ず、生活費を稼ぐためのものと割り切っていました。

しかし、その考えにもそろそろ限界が来たのです…。

目標も何も無かったため、仕事関連の勉強をしようとしても興味を持てず、自分に取り込むことが出来なくなっていることに気付きました…。

この状況を何とかするべく、何かやりたい事を見つけて、目標を持って、自分のスキルアップに繋げたいと思い、それをブログに綴ることにしました。

 

ブログのテーマについて

このブログでは、以下の3つのテーマをメインにやっていこうと思っています。

  1. プログラミングのスキルアップを目指す投稿
  2. 趣味のイラストを投稿
  3. 家族、育児についての投稿

仕事だけでなく、プライベートも充実させたい。更には、自分の趣味も続けて行きたい、という思いからこの3つにしました。

プログラミングのスキルアップ

言語は最近流行りのpythonで、最終的に何か役立つアプリやwebサービスを作れたらな…と思っています!

pythonを選んだ理由は、記述が簡単であるのと、今自分が興味を持っているDeepLearningを勉強する上でも適しているのかなと思っているからです。

なぜなら、それを実現するライブラリが揃っているから……というところも含めて勉強します_:(´ཀ`」 ∠):

趣味のイラスト

小学生の時から絵を描くのが好きで、漫画家になりたいと思っていました。
(きっかけはCLAMPカードキャプターさくらにどハマりしたため)

趣味を仕事にすると楽しめなくなるのでは…と思っていたのと、大学時代に自分で本を作って満足したので、仕事にはしませんでしたが、絵を描くのは好きなので続けたいと思っています。

家族、育児について

現在、妻と、二歳の娘がいます。
日々の成長に驚いたり、それが寂しかったり…色々な感情が湧いてくるので書き留めたいと思っています。

あとは親バカ精神ですかね(笑)

 

最後に

なんとかモチベーション維持しながら頑張りたいと思っていますので、感想、コメントなどお気軽にお願いします!!

それでは、今日はこの辺で。