見出し画像

システムのブラックボックスを開いて

どうも、エンジニアのgamiです。

先日、とあるインターン生の話を聞く機会がありました。彼はもともと営業系のインターンとして入社しましたが、プロダクトへの強い興味があったのでエンジニアインターンに転向するという異色の経歴でした。プロダクトを使うだけではなく、それを開発する側を体験することで、プロダクトのより低いレイヤーに対しても理解の解像度が上がっているようです。

一般に、中の仕組みがわからないものを「ブラックボックス」と呼びます。多くの人はシステムを中身の見えない黒い箱として扱います。その機能は便利に使っているが、それがどのように実現されているのかはよくわからない。一方で、ブラックボックスを開いてその仕組みを理解することが、そのシステムをよりよく使うために役立つこともあります

よく、エンジニアはITシステムの全てを理解し、非エンジニアはITシステムの中身の仕組みを理解することは全くできない、という二元論的なイメージが抱かれがちです。しかしそれは全くの誤解です。実際には、エンジニアでもITシステムの全てを理解しているわけではないし、非エンジニアでもITシステムの仕組みを理解することはできます

次の図のように、あるITシステムを「理解する」と言っても、様々なレイヤーがあります。

スクリーンショット 2021-08-23 6.44.29

当然、その理解度にはグラデーションがあります。利用者としても、「何もわからん」と諦めるのではなく、「どこまで深く理解するべきか」を自分で考え選択していく方が建設的です。


日常生活におけるブラックボックス

自分と関係しているものであっても、ITとかデジタルといわれる技術が関わると、途端にその仕組みの理解を諦めてしまう人がいます。ブラックボックスを開けずによくわからない魔法の箱として崇めたり畏れたりしてしまう。これはときに勿体ないことです

ITシステムというブラックボックスについて考えるために、まずは私たちが日常的に触れる別のシステムについて考えましょう。

たとえば、日本にいる人は日本の法律というシステムによって常に行動を縛られています。しかし法律の全てを知らなくても、一般的な倫理観に従って生きていれば大抵は問題なく生活できます。ときに起業や相続など法的にやっかいな問題に直面することもあります。そんなときによりよく対処したければ、関連する法律のブラックボックスを開けて中の仕組みを調べればいいわけです。

たとえば、生物としての人間は臓器や四肢や脳などのモジュールから構成されるシステムです。各モジュールは血管やリンパ管や神経などのネットワークでつながり、連携して機能します。モジュールやネットワークをさらに細かく細胞や分子のレベルで理解することもできます。しかし、こうした人体の仕組みを理解しなくても常識的な食事や排泄や運動をしていれば大抵は生きていられます。さらなる健康を手に入れたくなったり病気になったりしたら、必要なレイヤーの知識を身につけて健康状態を多少うまくコントロールすることもできるでしょう。

このように、日常生活に関わるブラックボックスはたくさんあります。ときには、弁護士や医者などの専門家レベルに遠く及ばなくても、素人ながらその表面的な仕組みを理解することが何かの役に立つことがあります

エンジニアでも全てを理解しているわけではない

ある分野の専門家であっても、その分野の全てを理解しているわけではありません。弁護士や医者の中にもさらに細かい専門分野や得意不得意があります。たとえば耳鼻科の医者の仕事には、脳科学の知識はそこまで要らなかったりします。

同じように、ITエンジニアも自分が開発しているシステムに関わる全ての技術要素を深いところまで詳細に理解しているとは限りません。たとえばフロントエンドのエンジニアであれば、低レイヤーなデータベースの仕様を知らないこともあるでしょう。

スクリーンショット 2021-08-23 6.44.29

また、システムとは様々な既存のソフトウェアやハードウェアやプロトコルに依存して動作します。たとえばWebアプリケーションであれば、ChromeなどのWebブラウザ、WindowsなどのPC向けOS、HTTPなどの通信プロトコル、アプリケーションの実装で使っているOSSライブラリ、AWSなどが提供するクラウドインフラサービス、その裏側にある物理サーバーやネットワーク、などに依存して機能が実現されます。

いくら凄腕エンジニアでも、これらのブラックボックスを全て開いて回っていたら、時間がいくらあっても足りません。現実的には、その依存チェーンのどこかで中身の理解を諦めて、表面的な機能や外部連携仕様だけをざっと把握して使います。言い換えれば、あるレイヤーではブラックボックスの中身の仕組みを作る「開発者」であったエンジニアが、より低いレイヤーに潜れば別のブラックボックスの単なる「利用者」にもなるわけです。

非エンジニアはどこまでシステムの解像度を上げるべきか?

ここまでで、ITシステムには技術的なレイヤーがあり、その理解度にもグラデーションがあることがわかりました。システムを開発するエンジニアであってもどのレイヤーまで理解するかを必要に応じて取捨選択しています。同様にシステムを利用する非エンジニアにとって、「全くわかりません」と諦めてしまう状態よりもマシなシステム理解の状態があるはずです

自分が利用するシステムの中身の仕組みを理解することは、システムをより便利で効率的に使うための意思決定に役立ちます。たとえばシステムのデータ更新の流れやタイミングを理解していれば、どのようなデータを連携すると有用か、データ更新がエラーになったときにどのようにリカバリーすればいいかがわかったりします。

また、セキュリティリスクをより正確に把握できるようになります。システムの外部接点がどこで、そこからアクセスできるデータが何かを知っていれば、採用すべきセキュリティ対策やアクセス権限の設定がわかります。セキュリティ観点で守るべきポイントが認識できれば、リスクを抑えつつシステムの攻めた使い方ができるようになります。

前述のように、システムは様々な技術要素に依存します。Webブラウザ、ネイティブアプリ、サーバー、データベース、SaaS、IaaS、などなど。システムに関わる要素についての最低限のリテラシーが無いと、最適な使い方やセキュリティリスクに関する判断も精度が落ちてしまいます

あなたが開くべきブラックボックスを見つけよう

もちろん日々の仕事に追われる中で、自分が使っている全てのシステムやサービスの仕組みを全て理解する時間は確保できないでしょう。その中で優先順位を付ける必要があります。

まず普段使っているソフトウェアやシステムについて、「もっと使いこなせそう」とか「この使い方にはリスクがありそう」と思っているポイントを挙げてみます。こうした直感をモチベーションにして、情報を集めます。

情報を集めるには、まずシステムを実際に触ってみて表面的な仕様や挙動を確かめるところから始めます。普段は押さないボタンを押したり、変なデータを入力してみたりして、どんな結果になるか調べてみましょう。

docs.google.com_spreadsheets_d_1okBS7z2segH-kj-Ewtrkj4iEvU0JMQZMEarfGZgue3s_edit(スクショ用)

(Googleスプレッドシートの画面。押したことの無いボタンがたくさんある)

学習のために機能をポチポチ触っていくと、知らなかった機能を知ったり、裏側の仕組みが少し想像できるようになったりします。

データの連携や更新があるシステムであれば、裏側のデータフローを自分なりに図にしてみましょう。データに関わる登場人物(人やソフトウェアやサブシステムなど)を図上に配置し、データの流れを矢印で書いてみます。図を書こうとする中で、自分がよく分かっていないポイントが明確になったり、新たな疑問が生まれたりします。

スクリーンショット 2021-08-23 8.12.59

よくわからないポイントが出てきたら、詳しい同僚に質問したり、Googleで検索したりしましょう。特に最近はSaaSプロダクトが増えたことで、「自分たちが使っているのと同じシステムが他社でも使われている」という状況が増えています。たとえばSalesforceの仕様について疑問に思ったら、検索するだけで色々な記事やドキュメントがヒットします。便利ですね。

より一般的な技術要素の話であれば、身近なエンジニアに聞いてみましょう。Webの知識とか技術用語の意味などを質問すると、聞いてないことまで喜々として教えてくれます。手近な人がいなければ、ぜひ僕にTwitter DMとかで聞いてください。

私たちは、ブラックボックスに囲まれて生きています。それらは決して魔法の箱ではなく、蓋を開けて分解すればたくさんの単純な部品からできていることがわかります。自分が気になるブラックボックスを一つを選んで、中身を除いてみましょう。そこからエンジニアリングが始まります。

ここから先は

0字
同僚と飲むビール1杯分の金額で、飲み会で愚痴るよりもきっと仕事が楽しくなる。そんなコラムを月に3〜4本お届けする予定です。

【初月無料】デジタル時代の歩き方について考えたことを発信します。ソフトウェアの時代とは何か。エンジニアの頭の中はどうなっているのか。NoC…

サポートをいただけると、喜びドリブンで発信量が増えます!初月無料のマガジン『仕事を楽しくするデジタルリテラシー読本』もおすすめです!