orangeitems’s diary

40代ITエンジニアが毎日何か書くブログ

「なぜ動くか」に興味を持たない技術者が増えている憂い

f:id:orangeitems:20200319095328j:plain

 

なぜ動くか?

ここ最近、技術者と名乗る人々と会話して思うのが、「なぜ動くか」ということを知りたいという興味が失われているということです。

 

問題

例えば、下記の書籍を紹介します。

 

 

「ネットワークはなぜつながるか」という本で、あらゆる技術者に読んでほしいと思っています。目次は以下のようになっています。

 

ブラウザにURLを入力してからWebページが表示されるまでの道筋をたどりながら、その裏側で働くTCP/IP、LAN、光ファイバなどの技術を説明していきます。インターネットを通ってサーバーまで行って帰ってくる道筋の途中には、今のネットワークの主要な技術要素が全部あります。そこでの機器やソフトウエアがどのように動き連携しているのかを探検すればネットワーク全体の動きがわかります。

第2版では、全体の構成を見直し、探検の途中で、今、ネットワークのどの部分にいるのかを明確にしました。また、各技術の基本的な考え方や成り立ちなど、基礎的な解説を大幅に増やしたほか、個別の補足説明も注釈として多く取り入れています。大事な点は「要約」としてまとめ、読んで記憶に残るようにしました。初心者の方も、基本的なところからきちんと理解して読み進めてもらえます。

特徴1:ネットワークの全体の動きがわかる“探検ツアー”
本書は、ブラウザにURLを入力してから、サーバーがWebページの情報を返信してくるまでの過程を順番に追っていくというユニークな構成です。入力されたデータがパケットとなって、LAN、ハブ、ルーターを通り、プロバイダの回線を抜け、ファイアウォールをくぐり、次の行き先を探りながらゴールのWebサーバーを目指して、さまざまに姿を変えながら進んでいく様子を追うことで、個別技術を見ているだけではわからない、“現実の”動きがわかります。

特徴2:2大技術TCP/IP、LANが確実に理解できる!
IPアドレス、ネットマスク、デフォルト・ゲートウエイなどはパソコンのTCP/IPの設定で目にしますし、家庭内LANも普及してMACアドレスという言葉も身近になりました。「イメージとしてはなんとなくわかる」これらの用語が、現実の機器とソフトウエアがどうように動くかを知ることで、本質からきちんと理解できます。

特徴3:最先端の光ファイバの中身ものぞいてみよう!
インターネットの普及で、家庭とプロバイダをつなぐアクセス回線の技術も進んでいます。ADSLでの信号化の技術や伝送方法、光ファイバが高速化できている仕組みなどをくわしく解説しています。

 

特に、最近はクラウドでWebからクリック操作でいろんなことができてしまうから、「なぜ動くか」ということについて考える暇もなくなっているのかもしれません。また、最終的に自分自身がクラウドに指示したことに対して、その動作原理を質問してみると表面的な回答は返ってきます。しかしその詳細、つまりレイヤーの低い部分を質問するとしどろもどろになってしまいます。

これは、例えば家電でもそうだと思います。テレビはなぜ映像が映るのか。これを説明せよと問われたとき、「電気が来て、放送電波にデジタル情報がありこれを受信し、復号して映像情報を液晶パネルから出力している」くらいは言えるかもしれません。じゃあなぜ電波がデジタルになりデジタルが光になるのか、まではなかなか話せないでしょう。このように、専門家たるべき技術者が知っているところがどんどん浅くなってきていて、しかもそれでも仕事ができるかのような錯覚に陥っている人を多く見ています。

なぜ問題かというと、運用上で起こるいろいろな事象に対して、リスクを見誤るからです。クラウド事業者が来るお知らせやシステムから来るアラートなどの中身に対して、その内容の本当の意味を理解するためには、動作の根本原理を理解する必要があります。これは重要な話なのか、それとも影響がない話なのか。リスクの重みづけをして優先度をつけて行動するべきですが、それができないのです。一方で、お知らせやアラートを書く人は動作原理をわかって書いてますから、表層的なことしか知らない技術者はそこで判断を誤りますし、実際に散見されます。

上記の書籍において、第一章で「ブラウザにURLを入力してから、サーバーがWebページの情報を返信してくるまでの過程を順番に追っていく」とありますが、ここに書かれている内容を想像できる技術者は実はそんなに多くはありません。インフラまわりを大昔から(インターネットの草創期から)やっていると当たり前のように知っていることが、最近の技術者にはピンときません。テレビのリモコンをオンにする感覚でしかテレビを把握していないように、WebサーバーとWebブラウザーの関係を同様と思っています。しかし、ではWebページの表示が遅延したとき何を問題とするのか。どこにログがあるのか、またどんなログを調べればいいのか。何をさわれば何が改善するのか、その時点でフリーズしてしまいます。

 

そもそもパソコンレベルであっても、仕組みを知らない技術者も多いです。

 

 

この目次は下記の通りです。

 

プログラムがコンピュータの中でどのように動作するのかを、誰にでもわかるように説明しました。プログラムは、メモリーにロードされ、CPUによって解釈・実行されます。その仕組みを、多数の図を使って、順序だてて解説していきます。

第2版では、第1版で特に関心の高かったプログラムがメモリーをどう利用しているかについて、より丁寧な説明を加えたほか、多くの注釈を入れました。また、サンプル・プログラムを、第1版のVisual Basicからプログラムの動きが見えやすいC言語に統一し、巻末にC言語の構文を説明した補章を追加しました。初級者、中級者の人、どちらにもお勧めです。

特徴1:CPU、メモリー、プログラムの動作環境など・・基礎からきちんと解説!
CPU(プロセサ)はどうやってプログラムを動かしているの?  CPUとメモリーの関係は? どうやってディスプレイに表示されるの? など基礎的な部分からきちんと説明しています。

特徴2:メモリーについて充実した説明!
第1版でなんといっても多かったのが「プログラムがメモリーをどう使っているのかがわかって、自分のプログラムの動きがわかった!」という声でした。第2版では、メモリーの使い方についての説明を強化しました。関数や変数、ポインタや配列は、どうメモリー領域を使っているのかをぜひ知ってください。

特徴3:Windowsの仕組みわかる!
プログラムの動く仕組みを知るとは、Windowsの仕組みを知ることにもつながります。フリーソフトをインストールしたときに出会うDLLファイルや、EXEファイルは、その実体は何だろう、と感じるパソコンユーザーも多いはずです。本書は、プログラミング本ではありません。豊富な図表を使って、その仕組みや流れが感覚的にとらえられるようにしています。

 

最近は、pythonなど、コンパイルしないで動く言語も増えてきているので、プログラミングの敷居もかなり下がってきたと思います。開発環境もどんどんリッチになっていき、最近はWebブラウザ内で完結し動作はサーバーで行う、ということも普通になってきました。ソースコード管理もGitでリモート管理。

いろいろなことが自動化されていき、結局は、どこで誰が何をしているかということをどんどん考えなくても、ワークフローが成立してしまうようになっています。

単に構築するだけで、かつ動作不良が無ければよいのですが、いざ問題が発生すると手も足も出ない、という開発者もいます。

 

対策

もし、私がそのような技術者に出会った場合、余裕があれば全部知っていることを説明するようにしています。なぜ、それを知らなければいけないか、ということは後回しに、動作原理まで説明すると納得してくれます。ブラックボックスの中身がわかるようになると、自分自身がいかにわかっていなくて、判断ミスをしがちになるか理解してくれるからです。しかし、そういう下層のレイヤーまで説明してくれる人も、年々減っていくのではないかという懸念はあります。例えば私が若いころは、「アセンブラの時代はな・・」、と言って教えてくれた人も確かにいました。しかしもう今はいません。アセンブラを知らなくてもプログラムは作れますから。そのようにして、どんどん下のレイヤーを省略していったあげく、大量に表層しか知らない技術者が誕生していくことに、危機感を覚えています。

今回ご紹介した本のような、基本と言うべきか、動作原理に立ち返って勉強するということについてもっと価値を高めていく必要があります。なぜ動くか、を知らないことがどれぐらい危険なことかを啓蒙したい。

基礎を知っている/基礎を知っていない、で、状況判断の精度は全然違いますから、基礎をやっていない人はぜひ基礎に立ち返ってほしいと切に願います。