読者です 読者をやめる 読者になる 読者になる

FOR SE

文系の学部から新卒でメーカー系のSIerに就職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界に就職

このエントリーをはてなブックマークに追加

【読書メモ】「コーディングを支える技術」を読んで

【今回の紹介】

以下の本を前半戦を読んだのでいったんメモをしときます。

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)
コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)

【内容】


 概要としては、どのプログラムでも共通する文法や関数、変数、制御文などについて
仕組みやその歴史を説明している本です。
本書を読んだからPGスキルが飛躍的に上がる訳ではないと思いますが、
普段なにげに使用しているものが
 ・どのような仕組み、考えを持って設計されているのか
 ・汎用的な部分の言語比較
 などなどを知ることは無駄でないと思います。

まだまだ初心者の域をでていない自分にとっても、おもしろいです(まだ読んでいる途中なので)

①メモ


 ■プログラミング言語の歴史
  ・言語によって真偽値も異なる(Cとruby
  ・最初に生まれたのは、60年前くらい、当時はケーブルを付け替えて実行処理をかえていた
  ・ケーブルからプログラム内蔵式にかわり、テープに穴をあけて読み込ませていた
  ・高級言語ではなく、機械語(0,1)で書いていた時代があった



 ■変数のスコープ
  ・言語によって違うが、グローバルスコープ・動的スコープ・静的スコープがある
   グローバルスコープ:関数共通で認識されるスコープ
   動的スコープ:下位の関数に共通で認識されるスコープ
   静的スコープ:その関数内のみで認識されるスコープ


  
 ■制御文
  ・もともと条件の分岐処理を行う場合は、GOto文を使用している言語があったが
   ソース上を飛ぶことが多いため可読性がひくい。if,elseが代用されている
  ・繰り返し処理も進化している。
   while文(カウンタの宣言、加算が読みづらい)→for文(カウンタの変数、加算、宣言を一カ所に)→foreach文(カウンタいらず対象物をすべてとりだすまで)


 ■関数
  ・関数が実行される位置や戻り値はスタックで管理されている
  ・for文を入れ子にするのではなく、再帰関数を利用した方が読みやすい
   ※入れ子になったリストの値をすべて加算するときなど



 ■関数と変数
  ・どちらもメモリ上のアドレスが振り分けられている
   ※印メモリの○◯にある値を参照するや○◯にある関数を実行するでは理解しづらいため
  ・代入するということは、「参照するメモリの番地を変える」ということ
 

②印象的だったこと

■関数化、変数のスコープを狭める利点と自己学習のわるいとこ


  同じような処理を共通化することには
   ・再利用
   ・読みやすくなる
   ・管理コストが減る(修正時の箇所が減ること・テストもへる)
   などの利点が多くあります
  また、変数スコープを意識し、無駄なグローバル変数を減らすことや
  なるべく変数のスコープを狭くすることで
   ・読みやすくなる
   ・予期せぬ値の変更が防げる
   ・名称の衝突を避けることができる
   ・命名を考える時間を減らせる

  上記のことは書籍に書いてあることでもあり、実際にPGをやってみての感想でもあり
  本当にそう思うことばかりです。

  あくまで自分の場合ですが、独力でPGの学習を始めると意外と気づきにくいものなのかなと思います。
  複数人でも開発、ある程度の規模のある開発でこそより強く実感することなのかなと。
  ※最初の頃は、数行のPGを組んでは動かしてみるだったので、上記のことは
   大事なことだとは知っていたが実感ができなかったなーと。


■変数のスコープについて

 
 変数のスコープについての説明が特にわかりやすかったのでまとめおきます
 
 変数のスコープとは

 「プログラムの中で、どの単位でメモリと変数名のアドレスの対応表を管理するかということ」

 「どの単位で」の部分がスコープであり、プログラム全体・関数(下位関数含む)・関数(下位関数含まない)
  などがある。

.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }