1. 雨宿りとWEBの小噺.fm
  2. Season -No.167 朝活「First P..
2023-02-04 14:36

Season -No.167 朝活「First Principles for Software Engineers」をダラダラ読む回

はい.第167回は


First Principles for Software Engineers
https://addyosmani.com/blog/first-principles-thinking-software-engineers/


を読みました💁

とても示唆に富んだドキュメントであり,ソフトウェアエンジニアにとどまらないお話だとも感じました.ぜひ皆さんも読んでみてください!


ではでは(=゚ω゚)ノ


  • software engineers
  • First Principles Thinking
  • Solve Problems
  • Ask Why


See Privacy Policy at https://art19.com/privacy and California Privacy Notice at https://art19.com/privacy#do-not-sell-my-info.

00:06
はい、1月31日、火曜日ですね。
地獄朝空中を回りました。
ついに1月、もうラストですね。早いですが。
今日はやっていきたいと思います。
おはようございます。ひめめめのきーすことくわはらです。
では、本日も朝活を始めていきたいと思います。
今日はですね、
昨日、ハードスキルの記事を読みたいと言っておきながらですね、
いろいろ記事を探したんですけど、
ハードスキルに近づけば近づくほど、ソースコードだらけになってですね、
なかなか朝活のことで音読するのは難しかったので、
もうちょっと抽象度高い記事になってしまいますけど、
今日はタイトルの記事ですね。
「First Principles for Software Engineers」ですね。
という記事を読んでいきたいと思います。
まあ、訳すとソフトエンジニアの第一原理、第一原則みたいなところですかね。
原理思考か、みたいな訳し方をされますけど、
というのを読んでいこうかなと思います。
では早速いきたいですけど、おはようございます。
プテラノドンさんと、ちょうど今入られたレノアさんですね。
おはようございます。ご参加いただきありがとうございます。
はい、またいつも通りタイトルの記事をダラダラと読んでいるので、
じゃあ早速読んでいきたいと思います。
第一原理思考というのは問題を革新的な要素に分解し、
そこから体系的に解決策を構築することができるため、
複雑な問題の解決に有効であります。
これは先入観や過去の経験を基づく思い込みで問題を解決しようとするよりも、
より効果的なアプローチと言えます。
コンピュータサイエンス、エンジニアリング、物理学などで使われていますが、
どのような業界でも第一原理思考から得られる教訓というのはあります。
今回はその第一原理思考とは何ぞや、なぜ重要なのか、
そして自分の生活やビジネスでどのように活用すればいいのか、
みたいなところを説明していきたいと思います。
第一原理を応用するには大まかに言って4つのステップがあるというふうにこの方はおっしゃっています。
1つは解決したい問題をまず特定します。
2つ目に解決したい問題を特定したら、それを基本的な要素に分解をしていきます。
3つ目に自分の思い込みに疑問を持ち、そこから挑戦していくと。
最後、新しい解決策を一から作り上げるというこの4つのステップを踏むよというふうにおっしゃっています。
では早速、一個一個の説明に入るかと思ったら違いましたね。
もうちょっと前を気が付きますね。
第一原理の意味するところですね、次のセクションは第一原理ですけれども、
この第一原理とは議論を構築するために使用する出発点または仮定のことになります。
この第一原理思考とは問題を基本的な部分に分解し、答えに到達するまで各部分を順番に処理していくプロセスというのを指します。
第一原理思考というのは他の問題解決手法とは実は異なっていて、
詳細な、余計な細部だったり、日常情報に惑わされることなく、
問題の最も重要な要素に集中することができるというのが特徴ですよ。
このアプローチに従えば、推論プロセスの特定のステップをそのままスキップしてしまうよりも、
より早く自信を持って解決策に問わせることができますよと。
第一原理思考とは複雑な問題を分析する際にその根本的要因を探る方法になりますということでした。
03:04
分析の前に探る方法なんですね。
続いて第一原理思考の歴史を語りますね。
最後、そこからステップに入っていきたいと思います。
第一原理思考というのはですね、そういう概念がそもそもあって、
その概念は哲学や科学において長い歴史を持っていますと。
古代ギリシャの哲学者アリストテレスに逆なることができて、
彼は全ての知識と理解というのは第一原理から導かなければならないというふうに主張したと。
アリストテレスは自明の真理だったり考理というものから出発し、
論理的な推論によってより複雑な考えを導き出すことの重要性を説いたと。
第一原理は現代の科学や哲学の発展にも影響を与え続けていますと。
17世紀から18世紀にかけてルネ・デカルトやイマノヨル・カントなどの哲学者も第一原理というものから出発し、
理性を使って知識や理解を推論することの重要性を強調したと。
20世紀には物理学者リチャード・ファインマンが概念や問題をよりよく理解し解決するために、
その基本原理に分解するファインマン手法というのを普及させたと。
そうやって続いていくんですね。
ではここからさっきの4つのステップについて一個一個説明されていくそうですね。
では行きましょう。ステップ1です。
解決したい問題を特定して、その問題を根本的な問題に分解すると。
第一原理思考というのは問題の最も重要な部分を特定し、
それを構成する部分に分解することが始まりますと。
問題の重要な部分を特定して、その特定要素、構成要素に分解して、
各部分が全体とどのように関係しているかというのも特定しますと。
このプロセスをすべて、すべてを分解できるところまでひたすらインデレーションを繰り返して、
どんどん分解をまずはしていくということですね。
その中で分解だけをするのではなくて、
その各部分がその全体とどんなふうに関係しているかみたいな関係図も多分作るのかなと思いますね。
そこまでできましたら、続いてステップ2ですね。
ステップ2はなぜを問うと。
ask for why そうですね。
問題を構成要素に分解したら、今度はなぜと問いかけてみましょう。
なぜを5回問いかけることは、ある問題や結果の根本原因を突き止めるために有効な方法になります。
その都度なぜと問いかけ、さらに掘り下げていけば、
例え原因が複数あるように見える問題や結果であっても、最終的にはその確信性もあることができるんですよと。
なぜを4回か5回自分に問うてみると、必ず原因にたどり着けるみたいなことを言ってましたね。
その仕組みを説明するために例を見てみましょうと。
チーム内のコミュニケーションがうまくいっていないために、チームが効果的に機能していないと感じるかもしれません。
しかしその理由を5回自問自答してみると、
頑張って想像力を働かせて5回自問してみると、次のような答えに行き着くかもしれません。
もう一回、問題はですね。
チーム内のコミュニケーションがうまくいっていないために、チームが効果的に機能していないと感じる。
それに対して何でというのを今から5回問うてみる。
なぜかというと、コミュニケーションがうまくいっていないのは、部門間で共有すべき情報について明確な期待値が設定されていないからだと。
06:02
なぜか、部門間で情報を共有するための厳格なプロセスを会社が確立しないからだと。
なぜかというと、従業員が各部門のチーム内で自由に情報を共有することがいかに重要であるか、リーダーが知らない可能性があるかなどなど。
こんな感じで5回ずっとひたすらなぜなぜを繰り返していくということですね。
その5回やった後の答えというのがある種の本質的な回答になるんじゃないかというプロセスですね。
続いてステップ3です。
思い込みに挑戦をすると。
前提というのはソリューションを構築するための基礎となるものになります。
思い込みは正しいこともあれば間違っていることもありますが、
常に現時点で正しいと分かっている事実に基づいています。
前提が正しければ良い解決策を導き出すことができますが、
間違っていれば後々問題を引き起こす可能性もあります。
仮定というのは去年3つのグループに分類できます。
最後、4つ言ってるな。3つのグループと言ってますけど4つありますね。
4つ目がピーポーアサンプションですね。
構成する関わる人々についてというところですね。
これらのグループに特定される可能性が大いにあるよということですね。
だいたい人についての気がちょっとぼかしますけど。
要は問題そのものか、ソリューションか、人についてかというこの3つかな。
それを加えて市場の話が多分関わってくると思います。
そこまでステップ3までいったら最後ステップ4ですね。
ステップ4は目標にフォーカスをして新しいソリューションを毎日から作り上げるというところです。
次のステップはゴールに焦点を当てることです。
第1ステップでは問題を特定し、第2ステップではその問題を解決するために何をすべきかについて情報を集めました。
そして今その問題を解決するという最終的な結果に焦点を合わせる必要があります。
具体的には次のようなことですと。
問題解決と目標達成のためでなければ細かいことに気を取られないようにすると。
もう1個は目標を達成に集中し途中で何が起きても気にしないと。
簡単に言うけど難しい2つですね。
でも確かになっていうすごく納得することがありますね。
第1原理をソフトウェアプロジェクトに適用するというセクションに入ります。
第1原理思考というのはいくつかの方法でソフトウェア開発に役立てることができます。
このアプローチが有益である具体的な方法には以下のようなものがありますのでめちゃめちゃブワーと出てきますね。
ソフトウェアが解決しようとする問題や課題を基本原則に分解し主要な要件と目的を特定することで問題や課題を明確にすることができます。
特定された原理を技術アーキテクチャデザインパターンなどの選択の指針とすることで
情報に基づいた設計と開発の決定を行うための基礎というのを提供します。
原則を利用してソリューションの堅牢性と有効性というのを強化することにより
問題の理解におけるギャップだったり矛盾を特定し対処するのにも役立ちます。
ここではその製品開発時の質問に第1原理思考というのを適用した例を2つ紹介していきます。
ペンに2つが出てくるのではなくて1つ1つ説明される感じかな。
1つ目はコマースアプリケーションを設計するというところですね。
その製品に関する質問ですけど、その質問がまた3つ続きます。
09:00
なぜユーザーはこのアプリを必要とするのでしょうか。
その答えとしては必要な商品を素早く見つけ購入するため。
なぜチェックアウトプロセスのステップ数を減らす必要があるのでしょうか。
それは時間を節約したいから。
ワンクリックチェックアウトが役に立つかもしれませんね。
なぜレビューをサポートする必要があるのでしょうか。
それは購入する商品への信頼感を高めることができ、より早く購入を決めることができる。
そういうプロダクトの質問を自分たちに投げて自分たちで回答を作っていく。
これはプロダクト側の質問と回答になります。
続いてはエンジニア側の質問と回答になりますね。
これらの機能の最小要件は何ですか。
検索ボックスと結果のフィルタリング方法、製品ページ、カテゴリーページチェックアウト方法です。
これを構築するためにどのような技術を使用できますか。
このコマースプラットフォームは検索、フィルタリング、結果表示のためのAPIをすでに持っています。
この上にCSSとかJSの基本的なUIがあれば十分かもね。
ユーザーはどのように交流するのでしょうか。
ユーザーは製品レビューのコストができて、それはシステム内の全員に表示されます。
おそらくレビューの作成と管理をサポートする必要があります。
などなどですね。
続いて、ビルディングはソーシャルネットワークアップなので、
アプリ側の構築の質問になります。
なぜユーザーはこのアプリを必要と知るのでしょうか。
ユーザーは同じような興味を持つ人を見つけて、その人を繋がりたいと考えています。
プロフィールを検索したり、その人の公開情報を読んだり、プロフィールにコメントを残したりすることができますよ。
続いて、なぜユーザーはお互いに交流する必要があるのでしょうか。
ユーザーはメッセージを送ったり、自分のプロフィールページに表示されるコメントを残したりしたいものなんですよ。
続いて、データモデルはどんなものですか。
ユーザーはプロフィールを持ち、プロフィールに写真を追加することができます。
最後、ユーザーはどのように表現するのですか。
ユーザーは名前、メールアドレス、メッセージにしようかな、年齢や性別などの基本情報を持っているはずですね。
こんな感じで、いろんな観点で問いと答えを作っていくところですね。
最後、それはガチャンとマージしてビジネス的な要件に落とし込むんだろうなと思います。
では続いていきましょうか。
第一原理で考えることの欠点が突きのめられていますね。
僕、先ほど2つの例が示されると言ったけど、結局例1つしかなかった気がするな。
まあいいや。
次のセクションに行きましょう。
第一原理で考えることの欠点ですね。
第一原理で考えることのデメリットというのは、特にそのような考え方に慣れていない場合、実行するのがそもそも難しいということです。
また、心を広く持ち、あらゆる角度から問題を理解するために時間とエネルギーを惜しまないことで重要なことを見落とさないようにする必要というのがありますよ。
また、基本的な構成要素に到達するまで問題をどんどん小さな要素に分解していかなければならないので、正直時間がかかります。
例えば、ある自動車を作るために最も効率的な方法を見つけることが目的であれば、
より少ないエネルギーや資源でその目的を達成できる他の方法があっても問題ないかもしれません。
他のメーカーがより安く車を作る方法を発見しているかもしれませんが、彼らは私たちにそれを知らせたくないだけかもしれません。
それはそうかもね。
12:00
あなたは自分の信じていることの一つ以上に十分な根拠がないことに、
その場合、第一原理の思考はいかにして失敗するのかというのも一読の価値があるので、これを参考に見てみてください。
とはいえ、これらは第一原理主義の適用をやめる理由にはならない。
ただ、適用する際には注意が必要であって、自分自身の考えや思い込みに流されないようにしなければならないということです。
ではラスト、コンクルージョンに入っていきたいと思います。
まとめ。
第一原理思考というのは複雑な問題に取り組むための強力なツールです。
このアプローチは問題の本当の根源、本質的なところにたどり着くための考えで、累推して考えるという罠に陥るのを防ぐのに役立ちます。
ソクラテスメソッドなど、他の方法が第一原理思考をうまく補完してくれることがわかるかもしれません。
そんな方法があるんですね。ソクラテスメソッドなどだと。
問題を多面的に考えることで、より包括的に問題を理解し、より創造的で効果的な解決策を導き出すことができます。
ここでいくつかの質問を考えてみましょう。4つですね。
なぜこれが正しいと言えるのか、どのような代替視点があり得るのか、自分の信念をどのように裏付けることができるか、そもそもなぜ私はこれを真実だと信じているんだろうか、みたいな。
これらの質問をすることで、問題の根源に迫り、効果的かつ持続可能な解決策を見出すことができますよ、ということでした。
第一原理についてもっと知り入れてみたい方は、ファインマスケールとサヒルブルームが良い記事を書いていますので、その記事を見てみてくださいということでした。
ちょっと短いですけど、今日の話はこんなところですかね。
一応それぞれの記事のリンクもこの記事から追えますので、後ほどツイートしますので見てみてくださいということでした。
ソフトウェアエンジニアというタイトルが付いていましたけど、ソフトウェアエンジニアじゃなくてビジネスマン全員に共通するというか、当てはまるような考え方だなとすごく思いました。
全ての問題に当てはまるのはもちろん思わないですけど、これは別にソフトウェアの業界とか関係ないなと思ったので、
基本的な考え方だと思いますけど、これはすごく大事だなと強く感じましたし、
自分もそう言って確かに意外とできてないなと思ったりするので、改めてこれはできるように練習していきたいなとちょっと思いましたね。
では短いですが、今日の朝月はこちらで以上にしたいと思います。
気づいたらねむさんとたつやはてかさんですね。ご参加ありがとうございました。
じゃあ火曜日ですね。また一日頑張っていけたらなと思います。
1週間始まったわけですけど、今日ついに1月の月末ですね。
早い。本当にもう1月終わったのかと思いますけど。
しっかり締めてまた明日2月スタートしていきたいなと思いますので、また一緒に頑張っていきたいなと思います。
じゃあ終了したいと思います。お疲れ様でした。
14:36

コメント

スクロール