テクノシップブログ

田舎育ちで文系でもITの世界へ

「コンピュータはなぜ動くのか」内容紹介&感想【第19号】

 こんにちは!

 テクノシップブログです!!

 

 今回は、プログラミング関連で読んだ書籍について、内容をアウトプットする

記事にしたいと思います!

 まだ何十冊も読めているわけではなく、読んだ知識を実務で活かす段階には

行ってはいませんが、自分なりに考えたことなどをしっかりと記録に残しておき、

他の方にも参考になればと思っています。

 

 

1. 今回の一冊

 今回の一冊は、矢沢久雄氏著/日経ソフトウェア監修で出版された

 

      「コンピュータはなぜ動くのか」

 

 という本です!!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

2. 本の概要

 この本は、2003年に初出版された書籍であり、「本質がわかるなぜシリーズ」

というシリーズのうちの一つとして出版され、「コンピュータというものを本質的

に理解し、様々な場面でしっかりと活用できる知識を身につけようとする本」

なっています。

 

 著者の矢沢久雄氏は、企業セミナーの講師をしている中で、驚くほど若者が

コンピュータに関する興味が少なく、知識も少ないということを目の当たりにした

そうです。(まだ働き出してはいませんが、私もその内の一人ですが、、、、、)

 

 その原因は、「時代と共に多くのシステムが複雑化、ブラックボックス

化していき、若手はただマニュアルを見ながら表面的にコンピュータを触って目的

達成をしているだけなので、『コンピュータがわからない』」ことだとしています。

※図では極端な分け方をしていますが、ご容赦ください。

 

 私も受験勉強や資格の勉強で、「わからない」という理由で挫折してしまった

経験があるので、この著者の言いたいことはよく理解できました。

 

 そんな「 わからない」を「わかる」に変えるために、著者は大切な要素が

3つあるとしています。 

 

   ①絶対的な基礎知識

 ②習得するべき知識の範囲

 ③ゴール

 

 どんな分野にも土台となる「絶対的な基礎」があり、それを理解した上で、

範囲を定めて勉強」していき、最終的なゴールを定める。

 

 本書は、この3つの点を網羅しながら段階的にコンピュータ技術というものを

理解できるようになっています。

 

 

3. 絶対的な基礎

 この本ではコンピュータ技術を理解するための絶対的な基礎は3つあると

述べています。

 その3つの絶対的な基礎が以下の通りです。

 

   ①コンピュータとは、ハードウェア的に見ると、

       「入力・演算・出力」を行う装置である

 

 ②コンピュータはソフトウェア的に見ると、

       「命令とデータの集合体」である

 

 ③コンピュータにはコンピュータなりの都合

         というものがある

 

基礎①ハードウェア的には「入力・演算・出力の装置」

 まず、①ですが、コンピュータはハードウェアとして見ると、命令やデータ

を入力し、それをもとに演算を行い、結果を出力するというシンプルな

3工程のみを行う装置です。

基礎②ソフトウェア的には「命令とデータの集合体」

 そして、②ですが、コンピュータをソフトウェア的に見ると、

命令とデータの集合体」である「プログラム」が数多くあると解釈する

ことができます。

 

 

 ※上の図は少々細かいですが、コンピュータは命令やデータを取り出して、

  演算し、結果を出力しています。

 

 

基礎③コンピュータなりの都合がある

 そして、③ですが、コンピュータには人間の都合が通用しないのです。

コンピュータは全ての命令やデータを「0」と「1」の組み合わせのみで表現する

からです。

 

 と、ここまでは私もこれまでのコンピュータサイエンスの勉強を通じて学習して

きていたところなので、「そうだよね」というような感覚だったのですが、

 その後なるほど!と思わされたのが、

 

 「コンピュータは人間の感覚に近づけるために

  進化し続けている」

 

 という点です。

 人間と同じ感覚でコンピュータを扱えるようにするために、日進月歩の

勢いで進化し続けているということなのですが、そうなっていくと、

 

 「もはやこの本で学ぶ知識も要らなくなっていく

  のではないか」

 

 というような極端な思いも抱いてしまいます。

 限りなく人間の感覚に近いユーザーインターフェースが増えていたり、

プログラミングの手法に「オブジェクト指向」が導入され、部品を一つ一つ

組み立てるようにして、人間が物を組み立てるのと同じ感覚でできるようになって

いたりと、進化は絶えません。

 

 しかし、矢沢氏は、必要な知識であると言っています。

本質的な知識は幅広く応用が効き、どんなに進化した技術であっても通用する知識

になると考えています。

 

 ここで得た、本質的な知識を使えば、どんなに難解な技術でも3つの基礎に照らし

合わせることで理解が容易になるということですから、非常に重要な知識なのです。

 

 だからこそ、ここでの絶対的な基礎は本当に大切な要素となるのですね。

 

 

4. 知識の範囲

 知識の範囲としては、主に3つのキーワードを元に解説してくれていると

感じました。

 それは、

 

   アルゴリズム

 ②データ構造とデータベース

 ③ネットワーク

 

 に関する知識です。

 

 ①のアルゴリズムについては、「アルゴリズムの条件」、「アルゴリズムと付き

合っていくためのポイント」など、「なんか難しそうだな」と思ってしまうアルゴ

リズムに関して分かりやすく説明してくれています。

 

 私が「なるほど!」と思わされたのが、「アルゴリズムの条件」として、

 

          「明確、有限回、機械的

 

という3要素があるということです。

 人間の「勘」に頼らず、「コンピュータが機械的に処理できるプログラム」、

それこそが「アルゴリズム」であるということを知り、納得しました。

 

 本書では「ユークリッドの互除法」や「バイナリーサーチ」など広く知られている

アルゴリズムも紹介してくれています。

 

++++++++++ユークリッドの互除法++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

+++++++++++バイナリーサーチ+++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 ②のデータ構造とデータベースに関しては、「紙上実験」で理解を助ける

記述のおかげで理解は進みましたが、全体的には難しい印象を受けました。

 ただ、「プログラムの処理の中でデータがどのように動いているのか」や、

「リレーショナルデータベースの意義について」などデータベースと仲良くなる為

の内容が豊富に盛り込まれていました。この範囲については再度読み直して理解を

深めます。

 

 そして、③のネットワークですが、これは非常に面白かったです!!

 なぜなら、普段自分がスマホやパソコンを使って行っていることがとてもよく

分かったからです。

 

 「LAN」、「WAN」、「ルーター」、「ケーブル」、「IPアドレス

など、名前だけは知ってはいたけどどのような役割を果たすものなのかについては

全く理解していなかったので、この場で理解できたことは非常に有意義だったと

考えています。

 

 特に、「TCP/IPプロトコル」について理解し直せたことが嬉しかったです。

TCP/IPプロトコル」はネットワークに関するルールの中で最も広く使われている

ルールですが、このルールに基づいた「ネットワーク階層」というものを全く理解

できていなかったのです。

 

 それについて、「コンピュータから送り出したデータや受信したデータがネット

ワーク階層とどのように関わるのか」という点を理解することができたことが

非常に大きかったと捉えています。

 

 

 深掘りすればまだ理解すべき点が沢山ありますが、大まかに構造を理解できた

だけでも有意義だったと考えています!

 

 

5. ゴール

 この本では、最終的なゴールとして「現場を理解する」としていると感じました。

話題としては「SE」を挙げ、仕事内容や求められる力などが述べられていました。

 

 しかし、最終的に著者が言いたかったことは、

 

 「SEでもプログラマでも、自分の技術が

  必ず社会の役に立っているという感覚を

  持ち続けていくことが大切だ」

 

ということです。

 道半ばで業界での仕事を諦めてしまう人というのは、得手して仕事について

いけないことが理由ではなく、「貢献している感覚が掴めなくなってしまい、

仕事がつまらなくなること」が理由だそうです。

 

 社会人として、社会の役に立っているという感覚を掴めることは大きな活力源に

なるはず。

 だからこそ、立場に関係なく、どんな小さな力でも社会の役に立っているんだ

という感覚を持ち続けるべきだと言っているのです。

 

 私もまだエンジニアとしてのキャリアはスタートしていませんが、おそらく

働き出しの段階は、仕事内容での苦しみや人間関係での苦しみなど、多くの苦しみ

と遭遇すると予想できます。

 

 しかしそこで「我慢して頑張るぞ」と気張るのではなく、

 

 「どんなにちっぽけでも必ず社会の役に立っている」という気持ちを強く持つ

ことで困難を乗り越えていきたいと考えています!!

 

 

6. 感想

 この本を読んでみて、「本質的な理解」というものがどれだけ大切なのかという

ことを改めて実感することができました。

 私はこれまでの人生で、「わからない→諦める」という経験を何度もしました。

 しかし、それは本当に勿体無いことでもあると考えていました。

 だからこそ、何かを新しく勉強するときには、「本質的に理解できる内容を提供

してくれているのか」ということを強く意識するように心がけるようになった

のですが、そのような中でこの本と出会い、単純に

何度も読み返して理解したい!」と思えました。

時間を忘れて没頭して読んでしまった日も数多くあったものです。

 

 この本を読んで、「急速なスピードで進化し続けるコンピュータ技術も全ては

本質的な部分の理解で対応できる」ということを教えてもらい、これから業界に

飛び込む自分としては、とても勇気づけられました

 

 実際に業務に携わることになれば、「わからない」という場面に出くわすと思い

ますが、そんな時こそ冷静に「本質的な部分と照らし合わせた理解」というものを

試していきたいと思います!

 

 ぜひ、ご興味あればご一読ください!!

 

 

7. テクノシップ第19号プチ編集後記

〜ついに引っ越しが完了しました!!

 いきなり一人になるので正直なところ寂しいですが、東京だからこその良い

 ところを発見しながら前向きに生活していこうと思います!

 まずは家の中を整理整頓するところからコツコツ始めてます!〜