msksgm’s blog

msksgm’s blog

Webエンジニアです。日々の勉強記録、技術書感想、美術観賞感想を投稿します。

「プログラミングの基礎」感想

概要

プログラミングの基礎」を読みました。 「前提(関数型プログラミングの経験、目的、読了時間)」「感想」「次に関数型プログラミング or ComputerScience で勉強すること」「まとめ」を記述します。

前提

関数型プログラミングの経験

関数型プログラミングの経験はほとんどなく、TypeScript や React の構文に関数型プログラミングの思想が入っていることを認識しているぐらいでした。 第一級関数、パターンマッチ、カリー化などの単語は一応しっていますが、適切な理解もなければ意識して使用したこともありませんでした。

目的

以下の効果を得られることを目的に読み始めました。

  • 関数型プログラミングを理解するきっかけにする
    • OCaml などの関数型(に特化した)言語を使うのは初めてだった
    • 関数型の書き方を学ぶ
  • 月に 1 回 ComputerScience の勉強をしたいので、今月の 1 冊にした

読了時間

GW 中に 7 日間ぐらいかけて、17 章までしっかり読み 18 章から 24 章は流し読みしました。 本書の最終目標である「メトロネットワーク最短経路問題」はちゃんと読むと時間がかかりそうだったので、途中から飛ばしています。 1 日にかけた時間は 2 時間から 3 時間ぐらいです。 「メトロネットワーク最短経路問題」もしっかりと読む場合は、より多くの時間が必要です。

OCaml の環境構築(Mac OS)には、以下の zenn の記事を参考にしました。

zenn.dev

本書にはサポートページが用意されているので、演習問題を解いた後やわからなかったときに使用しました。

pllab.is.ocha.ac.jp

感想

目的通り、「関数型プログラミングを理解するきっかけ」になりました。 プログラミング初学者向けにも記述してあるので、わかりやすい言葉で丁寧に解説してくれます。 なので、主に以下の点において知見を深めることができました。

特に再帰関数は書籍を読むまで、メリットを感じられず敬遠していました。 書き方を知らなかったので、無限ループに落ち入りがちだったのも理由です。 しかし、パターンマッチ、停止方法、部分問題、分割統治法、といった適切な記述方法を学び、再帰を使いこなせばより綺麗なプログラミングができると考えが変化しました。 普段意識せずに使用していた関数も関数型プログラミングの設計が含まれていたことに気がつき、今後は関数型プログラミング意識して実践したいという気持ちになれました。

他にも、個人的な問題ですが、自身のアルゴリズム周辺の知識が弱い意識を持っています。 それらを再帰関数で記述した際の実装方法は命令型の言語よりも簡潔になり、理解する一助になったと思いました。

「メトロネットワーク最短経路問題」はダイクストラ法を用いたメトロの最短経路を求める問題です。 本書で学んだ内容を実世界の問題に対して落とし込んだ内容です。 段階を踏みながら進行していくので、わからなくても解説を見れば納得しながら進めることができます。 ただ、徐々に問題の難易度が上がっていくので、時間がかかるようになります。 この本を長い期間をかけて完全に理解するのであれば、解くことを推奨します。 しかし、自分みたいに主目的が他の部分にあるのならば、ある程度飛ばしてもいいと思いました。

他に思ったことは、欠点というほどではないのですが、まったくの初学者がプログラミングを独学で学ぶ 1 冊目の本には向いていないと思いました。 大学の教科書にも使われる本なので、授業で ComputerScience よりのプログラミングやアルゴリズムを学ぶには非常に向いていると考えています。 あくまで、機械学習や Web プログラミングに興味がある初学者に薦める本ではないという意味です。 その場合、一旦それらに適したプログラミング言語を学んでから、「関数型プログラミングを基礎から学びたい」「プログラミング自体を学びたい」というニーズに応えられる本だと思いました。

次に関数型プログラミング or ComputerScience で勉強すること

関数型プログラミングを実践したり他の書籍も読みたいですが、他の ComputerScience の本も読む方を優先する予定です。

関数型プログラミングでやること

  • 実務のプログラミングで実践する
  • 他の関数型プログラミングの本にも挑戦してみる
    • 「Functional Programming in Kotlin」「Domain Modeling Made Functional」あたりが気になる

ComputerScience でやること

まとめ