hamburger

主に日記

読書メモ コーディングを支える技術

プログラミング言語に関してモバイル系以外を学習したことが少ないので、前からプログラミング言語に関する一般的な情報を一通り学んでみたかった。

またとある事情でアルゴリズム系の勉強をC++で始めるため、その前に読んでみようと思いこのタイミングになった。

メモ

3章 文法の誕生

  • forthの文法とスタックマシン
  • 構文木の流れ
  • ルールの競合と回避方法

4章 処理の流れのコントロール

  • ifとそれを便利にするためのelse
  • whileとそれを便利にするためのfor、更に便利にするためのforeach
  • ifもwhileもアセンブリではGOTOで表現できる

5章 関数

  • GOTOで同じ処理に飛ばす+戻り先のポインタをメモリに保存するのが原始的なやり方
  • 戻り先をスタックして保存できるようにすることで再帰呼び出しなどに対応

6章 エラー処理

  • 0or1の返り値でエラー判別
    • 読みづらいのとチェック忘れの発生
  • エラー発生時に例外として例外処理に直接飛ばす(GOTO)のがtry throw exception

7章 名前とスコープ

  • 変数名と変数のマッピングはそれぞれをポインタでマッピングする
    • 単純な箱と捉えると混乱するところ
  • 動的スコープと静的スコープ
  • 変数宣言の有無
    • 自分がrubyを苦手としている理由は変数宣言がないことによる読みづらさの気がしてきた

8章 型

  • 静的型付け言語と動的型付け言語
  • 型推論の立ち位置・解決しようとしたこと

9章 コンテナと文字列

  • hashテーブルの名前の由来
  • ListとLinkedList
  • O(1) < O(logn) < O(n) のイメージ

10章 並行処理

  • プロセスはメモリを共有しない
  • スレッドはメモリ共有する
  • コルーチンはメモリ共有するが割り込みをさせない

自分はプログラミングを社会人になってから始めた人間で別に優秀でもないので、新卒の新人研修などで覚えきれない情報処理系ワードがたくさんあった(コンパイルとか、JavaのList・Arrayの違いとか)。

それほど新しい書籍ではないので最新情報を追っている感じはしないものの、各言語で抱えていた課題とその改善案、それを踏まえて新しい言語ではどの様な思想で機能が組み込まれているか?などに触れられている。

いろんなキーワードがストーリーで繋げて理解できたので、単純な暗記が苦手な自分にとって非常に助かるものだった。

同僚などと会話していて一般常識のような頻度で出てくるキーワードもある程度網羅して学び直せたため、地味だけど今後の仕事に効いてきそうだと思った。