ソフトウエアエンジニアの視点

ソフトウエアエンジニアの視点

2021年6月28日


ソフトウエアエンジニアの視点

少し早い夏休みを頂いてハワイにバケーションに行っていました。 この連載も10日余りお休みを頂いておりましたが、今日からまた再開します!

連載再開の第一弾はソフトウエアエンジニアの視点について何回かに分けて紹介します。

バケーションで行ったハワイのオワフ島には有名な観光スポットのダイヤモンドヘッドと呼ばれる場所があります。行ったことのある方も多いと思いますが、このスポットを違う視点から見てソフトウエア開発に通じるものがあると感じたので紹介します。

違う視点で見ると新しい発見がある!

オワフ島でホテルやお店が立ち並ぶワイキキのビーチからダイヤモンドヘットのある丘が見えます。美しいビーチとは対照的に聳えるダイヤモンドヘッドはワイキキからの景観には欠かせないものです。今回の休みでも、実際にダイヤモンドの上に行こうと思って車で出かけましたが、駐車場は小さく限りもあるので、朝早く行ったにもかかわらず実際に上まで登ってみる事はできませんでした。実際にダイヤモンドヘッドの丘に行って見えるものは、遠くから望む景色とは全く別なものです。実際に上までは言っていませんが、周りに高いものがないので周囲のビーチを一望できる場所で人気のスポットというのも納得です。山の一角という感じでした。

実は、このダイヤモンドヘッドは、火山の火口です。ワイキキの東側の丘の一角のようですが、実は小さな火山です。これは、飛行機で上空からみると一目瞭然です。外輪山に囲まれた火山の一角であることがよくわかります。

こうしたことは、観光ガイドやインターネットを使って調べればわかることですが、実際に空から見ると見事な丸い火口がハッキリと見えます。しかし、ワイキキのビーチからみたり、実際に現地に言ってもなかなかそれを実感することができません。

空というか上空からの視点で見ることで、特徴的な姿を見ることができます。 しかし、現地に行けば土やそこに生えている植物など別な姿も見ることができて、それもこのダイヤモンドヘッドの姿の一つであることは間違いがありません。

実際にあるものを知るには色々な視点で見ることが大切であることを改めて思い知らされました。

ソフトウエアエンジニアの視点とは?

同じような事は、色々な物に当てはめることができます。ソフトウエアもその一つで、見る視点によって見え方が変わってきます。ここであえて「ソフトウエアエンジニア」と書いたのは、「プログラマー」とちょっと区別をしたかったので敢えて違う言葉を選んでみました。

プログラマーも色々な定義があるので、ここではプログラムを書く人というイメージで書いています。プログラムを書く人も色々いらっしゃるので、これも一言では表現できませんが、ソフトウエアエンジニアの視点の一つは、「プログラムを書く人」、「プログラムを作る人」の視点があります。この場合、「プログラム」に目が向くことが多くなります。どのように、機能を実現するか、どんなプログラミング言語を使うか、性能はどれくらいかなどです。

別の視点は、プログラムを使う人の視点、つまり利用者(ユーザー)の視点です。実際に利用する人の場合には、プログラムの中身よりは、プログラムを使う(利用する)ための仕組みや、プログラムでできることが一番の興味の対照です。

もう一つの視点は、プログラムを動かす「仕組み」からの視点です。よくプログラムを含めて「システム」と呼ぶ場合もあるかと思いますが、プログラムを実行するコンピュータから、ネットワーク、プログラムを格納するストレージなどから、見た視点です。

Web開発では、Webブラウザなどを動かす端末(PCやスマホ)から、Webサイトのデータを置いておくWebサーバー、それらを繋ぐネットワークやデータやプログラムを保存するストレージがあって初めて機能させることができます。

何処で何が起きているか?

プログラムだけを見ていると、「システム」の中で何がどのように起きているのかが中々わかりません。システムの中には色々な物が沢山あって、何処で何が、いつ、どのように起きているのかがわかりにくい場合が多いからです。これがわからないと、色々なことをまとめるのが大変になってしまいます。

スポーツのチームに監督がいるように、ソフトウエアの開発にも全体を取りまとめる人が必要になります。会社などの組織で開発をする場合、色々な「役割」を経験することで、色々な視点から見ることを体験して学ぶことができます。そうした経験を積み重ねてリーダーへと成長していくことができます。その場合は、プログラミングの勉強から初めて、利用者からの視点や、システムからの視点などを学びながら、開発のリーダーに成長することができます。

ところが、フリーランスの場合は、多くの場合はこうした色々な役割を自分一人でやる必要があります。ところが、実際にやろうとすると大きな「壁」にぶつかります。どういうことかというと、「見える部分」と「見えない部分」があるということです。

Web開発では、利用者に近い部分、つまりWebブラウザで動作する部分は比較的「見える」部分ですし、利用者が使う端末(PCやスマホ)も見えるので扱いやすくなっています。一方で、裏方の、Webサーバーやデーターベースの部分は見えにくい部分ですし、Webサーバーやネットワークなども見えにくい部分の一つです。まだ、線(ケーブル)などで繋いでいる場合は、繋がりをイメージしやすいですが、WiFiなどになると、イメージしにくくなります。こうした、見えない部分や見えにくい部分の仕組みを知るには、実際に「中に入る」必要があります。

中に入るのは意外に難しい

箱を開けて中を除ければ、中を見ることができるので「実態」に近づくことができます。 冒頭のダイヤモンドヘッドの例で紹介したように、飛行機に乗って上空に行くだけで地上からは見ることのできない姿を見ることができるのと似ています。

では、飛行機がなかったらどうしますか?他の手段を考える必要がありますよね? 例えば、飛行機の代わりにヘリコプターで上から見ることもできますし、ドローンや風船にカメラをつけて上から見ることもできます。直接は、見られなくても、誰かが上空から撮った写真を見ても上からの景色がどうなっているか知ることができます。

プログラムの場合も、見えない部分を見たり詳しく知る方法はいくつかある物です。 単にプログラムの書き方を学ぶだけだと、どうしても全体を見るのが難しくなるので、中々バランスの良いソフトウエアの開発をするのが難しくなりがちです。

これには、「プログラムミング」という視点から出て、別の視点でプログラムを考えるかがとても大切です。中々難しいので、この記事では一つの「コツ」を紹介します。

一番のポイントは、プログラミングの中とプログラミングの外という考えで見てみることです。 特に自分が書いているプログラムの中と外を考えてみてください。

  • 中に入るには入り口が必要です ー プログラムの入力(インプット)
  • 外に出るには出口が必要です ー プログラムの出力(アウトプット)
  • 誰かに頼むことも必要です ー モジュールや予め準備された関数の呼び出し

この3つのポイントを意識すると、自分のプログラム以外の部分が見えてきます。 この3つがよく言われる「インターフェース」です。インターフェースを意識して、入り口の向こうにあるもの、やっていること、出口の向こうにあるもの、やっていることが見えてきます。

まとめ

物事をよく理解するには、色々な視点でみることが大切です。 色々な視点からみることで、1点からではわからない色々なことがわかってより理解が深まります。 プログラミングも同じで、色々な視点でプログラムをみると、自分が書いているプログラムの周りには実はあまり良く見えていない世界があることに気づく物です。 こうした、色々な視点で見て、全体を設計することでより良い、開発が可能になります。

見えない部分を見えるようにするには、インターフェース(入り口と出口、そして他のプログラムとの窓口)を意識するとその向こう側がだんだん見えてきます。

視点を増やすと、より良いプログラムの作成が可能になります!

Copyright(c) 2017-2021 by Silicon Valley Super Ware, all rights reserved.

コメント

このブログの人気の投稿

ユーザーインターフェースの設計

足し算以外もできるようにする

改良版足し算プログラム