【宿題帳(自習用)】「プログラミング」をやり直してみる
大人のおさらい6科目目はプログラミング。
小学校では、コードをかくようなプログラミングではく、プログラミング的思考や論理的思考を育むことがねらいなんだね。
算数や理科など、他教科の授業の中でプログラミングについて学んでいるそうです。
それじゃ、小学校でおこなわれるプログラミング教育に倣って。
論理的に物事を考えるプログラミング的思考(目標に向けて解決する手順を考えるための力)を再考してみたいと思います。
まず、最初に、毎日は、未知との出会いです。
何か失敗が生じたとき、原因を探っても、無駄なことがあります。
なぜ失敗したのか。
なぜできなかったのか。
何が間違っていたのか。
誰が問題を起こしたのか。
一見、合理的に見える、そうした問い掛けが、解決から逃避する口実になりかねない場合が有ります。
最初に取るべきことは、どうしたら解決できるかという解決志向の実践です。
理工系の人間は、システムを、できるだけ単純なモデルで数学的に考えるクセがついているため、失敗には、追求できる原因があると考えやすいのが欠点です。
プログラムや単一の設計・製造プロセスというような整然としたシステムであれば、失敗の原因を探求することには意味があります。
だけど、たいていの人間社会の出来事では、多様な悪条件が複雑に噛み合って失敗をもたらしていることが多く、失敗の原因はいくら探求しても明確にならないことが多いことを忘れないでいたいですね。
整然としたシステムなら、失敗には、探求できる原因があるのですが、複雑なシステムは、失敗原因がわからないことが多いから(^^;
原因探求よりも、解決のための実践が重要になると思います。
こうした複雑性は、社会に限りません。
人間が関わるできごとは、常に、複雑な要因が関係しています。
一人の人間の行動パターンですら、プログラムのように、単一な制御によるものではありません。
個人の自己啓発でもそうですよね。
「自分はある種の仕事が苦手で失敗しやすい」と自覚し、欠点を克服しようと努力しても、欠点は、本人が思っているほど単純なものではない場合、探求そのものが問題を複雑にしてしまいます。
悩むのが重要なこともあるのですが、目先の問題の解決のほうが重要なときは、悩むのをやめて、打てるべき手に、どんどんトライしていくと、自然に問題が解決する場合も多くあると思います。
では、具体的に、どうのように解決策を探るのが良いのか?
非常に簡単な2つの方法があります。
ひとつめの方法は、以前うまく行ったやりかたをまたやってみる。
もうひとつの方法は、他人・他社がうまく行っているやりかたをまねてみる。
非常にくだらない方法に見えますが、実践的な解決策になるんですよね。
以前のやり方をまたやるとか、他人のやりかたをまねするというのは、消極的なようですが、とりあえず目先の問題を少しでも解決できれば、複雑なシステムというのは、それなりに元の軌道に戻ることがあります。
例えば、営業成績が落ちたというとき、以前よかったとき、自分は何をしていただろうかと思い出し、それを意図的にやってみる。
あるいは、営業成績のいい人を観察して理解した範囲をまねてみる。
地味な解決策を「下手な鉄砲も数打ちゃ当たる」として実践し、その効果をフィードバックする。
これは効果的だった。
あれは効果がなかった。
そういう小さな解決策を積み上げていくと、どこかの時点で、量から質の転換が発生して、問題が解決することがあります。
また、前述の様な不確定性なシステムを伝搬可視化する上で、グランドデザイン(システムを導入する上での全体構想を描くこと)(■印を参照ください。)を考えてみる事も有効です。
■システムの定義
システムとは、「多くの要素がモノ、エネルギー、情報の流れでつながり、相互に作用しあい、全体として特性を有する集合体」のこと。
■システムの特徴
システムは、さまざまな要素が複雑に絡み合っていて、その仕組みを理解することは、しばしば通常の人の認知レベルを超えてしまいます。
システムの理解不足のために、人やグループの変化を目指した行動が、予期せぬ結果や副作用をもたらしたり、あるいは意図する変化が抵抗を受けることがしばしば見られます。
これらの現象の多くは、システムのフィードバックによって起こっています。
■デザインは現場観察なくして成り立たない!
-アジャイル開発(※)プロセスの導入
・変化に対応したり、コミュニケーションをとったり、改善を模索したりという行動を要求。
・技術スキルではなく、行動の仕方で、アジャイルに向く向かないが変わる。
・PDCAサイクルとKPT(反省会)を使った振り返り
P:Plan(計画)
D:Do(実行)
C:Check(検証)
A:Action(改善)
・Keep、Problem、Tryのエリアに分ける
※印:
アジャイル開発(アジャイルソフトウェア開発)は、現在主流になっているシステムやソフトウェアの開発手法の1つで、「計画→設計→実装→テスト」といった開発工程を機能単位の小さいサイクルで繰り返すのが最大の特徴です。
優先度の高い要件から順に開発を進めていき、開発した各機能の集合体として1つの大きなシステムを形成。
■システム・ダイナミクスの基本的な考え方
システム・ダイナミクスの基本的な考え方は、しばしば氷山モデルによって説明されます。
すなわち、私たちの関心を集めるできごとや結果は、より長い時間的文脈の中で時系列での「パターン」として理解する必要があること、上昇、下降、安定、不安定、繰り返し起こるなどのパターンは「構造」から起こること、そして、構造は、私たちがどのようにものごとを見ているかの「意識・無意識の前提(メンタルモデル)」が基盤になって生じています。
■システム開発における個別性と普遍性
「経験をいくら集めても理論は生まれない」とアインシュタインは言っています。
観察によってデータをいくらたくさん集めても、既存の理論の検証が進むだけです。
従来的帰納法からは、斬新な新理論、イノベーション(あらたな価値の創造)は生まれません。
論証を行うだけである演繹法からも、もちろん、新しいアイデアや新しい理論は生まれてはきません。
つまり、個別の経験や事実を別の視点から総括するアブダクションが必要です。
記号論の王様、チャールズ・パースは、人間の推論には、演繹と推論とアブダクションの3つの形式があると指摘していました。
アブダクションとは、説明すべき事実に対して、たくさんの仮説を立てて、その中からもっともらしい仮説を選び出す拡張的な推論プロセスです。
パースは、分析的推論として演繹があり、拡張的推論として帰納とアブダクションがあると整理していました。
アイデアや新しい仮説は、どうやって生まれるのか?
そのあたらしい考え方がアブダクションです。
ウィキペディアによると、帰納(きのう、Induction)法とは、個別的・特殊的な事例から一般的・普遍的な規則を見出そうとする推論方法のことで、対義語には演繹法があります。
演繹法においては、前提が真であれば結論も必然的に真であるが、帰納においては、前提が真であるからといって結論が真であることは保証されていません。
アブダクションは、帰納に含まれるものですが、帰納のなかで創造性の高い拡張的推論であり、過謬性の高い、論証力の弱い推論でもあります。
しかしながら、パースによると、既存の枠組みを超えるイノベーション(あらたな価値の創造)を生み出すために不可欠な、もっとも優れた推論だと高く評価してきました。
ここで、思考のプロセスである代表的な演繹と帰納を整理しておくと、以下の通りです。
●演繹(deduction)
<前提1> AならばBである。
<前提2> Aである。
<結論> Bである。
●演繹ではない推論(広い意味での帰納 induction)
1.枚挙的帰納法(狭義の帰納)
<前提1> a1 はPである。
<前提2> a2もPである。
<結論>
(たぶん)全てのaはPである。
2.アナロジー(類推)
<前提1> aはPである。
<前提2> bはaと似ている。
<結論>
(たぶん)bはPである。
3.アブダクション
<前提1>
aである。
<前提2>
Hと仮定すると、aがうまく説明される。
<結論>
(たぶん)Hである。
アブダクションは、最初にいくつかの仮説を思いつくままにブレストするように提起する示唆的な段階と、それらの仮説のなかから、もっとも正しいと思われる仮説を選ぶ熟慮的な推論の段階から成り立っています。
仮説は、どこから生まれるのか?
仮説は、頭の中から自然と涌いてくるものです。
そこには、何の法則も根拠も見えません。
そこには、ただただ思いがけない創造的な飛躍がある。
なぜヒトは「ひらめく」ことができるのか?
なぜ人間は創造性を持っているのか?
それは、進化生物学的に説明がつくとアブダクション研究者は考えました。
生きていくための問題をとくためには、発想力が必要です。
アブダクションは、人類進化の過程で自然に適応するために人間精神に備わった「自然についての正しく推測する本能的能力」であると考えました。
アブダクションでは、そうした「示唆的段階」で生み出したたくさんの仮説(アイデア)の中から、
1.もっともらしさ:もっともらしい理にかなった仮説
2.検証可能性:実験的に検証可能な仮説
3.単純性:より単純な仮説
4.経済性:実験に経費、時間、思考、エネルギーが節約できる仮説
という基準で、もっとも正しいと思われる仮説を選ぶ熟考的段階に進んでいきます。
アブダクションという厳密でない推論こそ、人類の叡智の中核をなす能力と言えるかもしれません。
また、人間には、創造性が進化の過程でビルトインされているのかもしれません。
さて、ここから、システムの構造を考えるとき、私たちは、しばしばモノやエネルギーなどの物理的なもの、社会構造や目的、ルールなどの制度的なもの、情報フローなどを考えます。
システム思考では、さらに人の認知と行動まで構造に含めて考える必要があります。
なぜならば、環境が私たちの行動に影響を与え、その行動が環境に影響を与えるフィードバックを構成しているからです。
私たちと環境の、そして、環境や私たちの中にあるフィードバック構造が、さまざまな変化のパターンを作り出します。
私たちは、ものごとがうまくいかないときに、特定の人や外部要因のせいにしがちですが、多くの問題はシステム内部の構造によってもたらされていることが多いことに注意を払っていおく必要があります。
人間の思考パターンを整理し、どの思考パターンがシステム的か定義しておきます。
(1) データ(DATA):
事実や現象などを数字や文字、記号を用いて表現したもの。
(2) 情報(Information):
「データ」を目的に応じて整理したもの。
(3) 知識(Knowledge):【システム的な定義:情報の蓄積】
「情報」を分析して、問題解決に役立つように蓄積したもの。
新しい価値を生み出す材料。
学習して得られる「アイテム」。
学習や実験、調査や観察などを通じて得られた事実やデータ、経験の積み重ねのこと。
(4) 知恵(Wisdom):【システム的な定義:処理能力】
「知識」を基に問題解決するための応用力や適応力。
コツや経験に基づく主観的な意思決定能力。
知恵とは、適切な場面で適切な知識を活用することができる能力。
知識というアイテムを活用する「スキル」。
(5) 知能(Intelligence):【システム的な定義:理解力の程度】
「知恵」を運用する能力。
物事を理解し、目的に応じて判断する能力。
「答えの有る問い」に対して、早く正しい答えを見出す能力。
「生まれつき備わっている頭のよさ」。
(6) 知性(Intellect):【理解力】
「答えの無い問い」に対して、その問いを、問い続ける能力。
ネットワークを創発させる能力。
「学習によって得られた頭のよさ」。
自分がみたものをどれくらい信じていないか。
自分の知っていることをどれくらい疑っているか。
何のために、何をするのか・・・、判断する「ココロ」
(7) 知力(Intellect):【理解力+処理能力】
知恵の働き。
知的な能力。
(8) 見識(Insight):【深い理解力+処理能力】
見識とは最も深いレベルで”知っている”ということ。
設計の中で役に立つ知識は何なのか、そしてそれをどのように活かすべきなのかということを理解。
(9) 知覚(Percept):【分別する能力】
思慮分別をもって知ること。
ここで、ケヴィン・スラヴィン がTEDで講演した「アルゴリズムが形作る世界」について紹介しておきますね。
ケヴィン・スラヴィン 「アルゴリズムが形作る世界」
ケヴィン・スラヴィンは、アルゴリズムのためにデザインされ、コンピュータプログラムによるコントロールが広がり続ける世界に我々は生きていると言います。
TEDGlobalで行われたこの魅惑的な講演で、彼は複雑なコンピュータプログラムがいかに多くのことを決しているかを示しています。
諜報戦略、株価、映画の脚本、建築デザイン、等々。
そして、私たちが、もはや読めもしなければ結果をコントロールすることもできないコードを書いていることに警鐘を鳴らしています。
さて、みなさんは、プログラミングを体験してみたいでしょうか。
今、ソフトウェアがありとあらゆるビジネスにおいて重要度を増しており、この傾向は、今後も変わることはないと考えています。
好むと好まざるとにかかわらずIT知識は必要となっており、ソフトウェア・ファーストの時代、あらゆる企業に内製化が必要で、社内の業務支援ツールも社員が本当に欲しいものを追求できていないから、ITを使ったイノベーションを起こせていない一面も有るのではないかと推定されます。
そんな中で、例えば、新たな業務支援ツールのプラットフォームを構築するために、データプラットフォーム(膨大なデータを蓄積→加工→分析するのを一貫して出来るようにするデータ分析の基盤。)の導入を考えた場合、データプラットフォームを構成する以下の4つのステップ
1.データを集める
2.データを貯める
3.データを分析用に加工する
4.データを可視化して分析する
の基礎的なソフトウェア知識を学ぶ必要があり、以下の図書が参考になります。
「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」斎藤康毅(著)
「ゼロから作るDeep Learning ❷ ―自然言語処理編」斎藤康毅(著)
「ゼロから作るDeep Learning ❸ ―フレームワーク編」斎藤康毅(著)
「ゼロから作るDeep Learning ❹ ―強化学習編」斎藤康毅(著)
また、世界最大級の教育プラットフォームを提供する米国Udemy(ユーデミー)を利用してみるのも良いと思います。
【参考講座】
【キカガク流】人工知能・機械学習 脱ブラックボックス講座 - 初級編 -https://www.udemy.com/course/kikagaku_blackbox_1/
【キカガク流】人工知能・機械学習 脱ブラックボックス講座 - 中級編 -
https://www.udemy.com/course/kikagaku_blackbox_2/
【キカガク流】プログラミング力向上のためのPythonで学ぶアルゴリズム論(前編)
https://www.udemy.com/course/kikagaku_blackbox_2/
【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門
https://www.udemy.com/course/optworks_1/
【参考サイト】
【参考図書】
「アブダクション 仮説と発見の論理」米盛裕二(著)
「類似と思考 改訂版」(ちくま学芸文庫) 鈴木宏昭(著)
「私たちはどう学んでいるのか 創発から見る認知の変化」(ちくまプリマー新書)鈴木宏昭(著)
「学びとは何か―〈探究人〉になるために」(岩波新書)今井むつみ(著)
「ソフトウェア・ファースト あらゆるビジネスを一変させる最強戦略」及川卓也(著)
「プログラムはなぜ動くのか 第3版 知っておきたいプログラムの基礎知識」矢沢久雄(著)
「オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識」平澤章(著)
「シン・ニホン AI×データ時代における日本の再生と人材育成」(NewsPicksパブリッシング)安宅和人(著)
「世界のエリートはなぜ「美意識」を鍛えるのか? 経営における「アート」と「サイエンス」」(光文社新書)山口周(著)
「マッチ箱の脳(AI)―使える人工知能のお話」森川幸人(著)
「アフターデジタル オフラインのない時代に生き残る」藤井保文/尾原和啓(著)
「アフターデジタル2 UXと自由」藤井保文(著)
「機械脳の時代―データサイエンスは戦略・組織・仕事をどう変えるのか?」加藤エルテス聡志(著)
最後に、人間の頭の中にあるプログラムを有効に使うためには、以下の点を意識して、
1.頭の中のプログラムは、学問によって「信念(ビリーフ)」「思考パターン」「潜在意識」「考え方のクセ」「思いこみ」などさまざまな呼ばれ方をする。
2.いいプログラム(考え方)を持っている人は、いい結果を残す。
3.バグのあるプログラム(考え方)を持っている人は、エラーを起こしてしまう。
4.そのバグを発見するには、たった3つの質問をするだけでよい。
①質問1.「私には、○○ができない。なぜなら私は・・・」:考え方が、行動を作っているのです。
②質問2.「実は○○が成功すると都合の悪い部分もある。なぜなら私は・・・」:迷いもバグである。
③質問3.「今、うまくいってないこの状態は、実は、自分自身が望んでいる。実は・・・」:耳のいたい話だが、どんなイケてない現状にだって、それが心地良くて作り上げた自分がいる。しっかりと(隠れた)意志がある。
下記のバグの潰し方を参考にしてみてください(^^)
1.バグを論理的に否定して壊す。次に、論理的に新しい考え方を作り上げる。
2.バグの元になっている悲しい思い出を癒す。
3.すぐれた本(修正プログラム)で、バグを上書きする。
【関連記事】
【宿題帳(自習用)】「算数」をやり直してみる
https://note.com/bax36410/n/n1f33a6570109
【宿題帳(自習用)】「社会」をやり直してみる
https://note.com/bax36410/n/ne56a9f0f0366
【宿題帳(自習用)】「外国語(英語)をやり直してみる
https://note.com/bax36410/n/n1fd2df5a44c8
【宿題帳(自習用)】「国語」をやり直してみる
https://note.com/bax36410/n/n276bf21a48b3
【宿題帳(自習用)】「理科」をやり直してみる
https://note.com/bax36410/n/ne787e401d43a
【宿題帳(自習用)】「音楽」をやり直してみる
https://note.com/bax36410/n/n33e7fc90543b
【宿題帳(自習用)】「図画工作」をやり直してみる
https://note.com/bax36410/n/nc96c02d9d292
【宿題帳(自習用)】「道徳」をやり直してみる
https://note.com/bax36410/n/n713bcdcd4fed
【宿題帳(自習用)】「保健体育」をやり直してみる
https://note.com/bax36410/n/naa7c2f12f112