Open26

積み本消化

toyboot4etoyboot4e

本を読むモチベーションにスクラップを始めてみました。
インプットの強度を上げて、重めのコンテンツも楽しんで行きたいところ……!

toyboot4etoyboot4e

何かお勧めしてくれたら買います 。誰かいます……?

お試し中

今読んでいる:

Haskell:

サクッと読みたい:

Linux 関連を読んでおきたい:

  • (50%) Linux のしくみ
  • (20%) はじめての OS コードリーディング
  • (14%) コンピュータシステムの理論と実装
  • (0%) How Linux Works

その他

欲しい本、読みたいソース
  • インクリメンタルな計算に関する本 (salsa)
  • コンパイラの IR に詳しい本 (rust-analyzer)
  • 言語サーバの詳しい本 (tower-lsp)
積んでいる本

Web をやらねばと思いつつ食指が動きません。。

  • (50%) コンパイラ 構造と原理
  • (50%) Rust for rustacians
  • (38%) Prolog への入門
  • (33%) HTML 解体新書
  • (28%) DEBUG HACKS
  • (25%) Introdoction to theory of computation
  • (15%) CSS 設計完全ガイド
  • (10%) プロを目指す人のための TypeScript 入門
  • (5%) 記号と再帰
  • (2%) プログラミング言語の基礎理論
  • (1%) ハンズオン Web Assembly
その他、持っている本
  • (17%) プログラミングコンテスト チャレンジブック
  • (15%) プログラミング Haskell 第二版
  • (13%) Category theory for programmers
  • (10%) 詳説データベース
  • (10%) プログラミング Haskell 第二版
  • (5%) Haskell による関数プログラミングの思考法
  • (5%) 入門 監視 ―モダンなモニタリングのためのデザインパターン
  • (5%) 関数プログラミング 珠玉のアルゴリズムデザイン
  • (3%) Docker 実践ガイド
  • (2%) マスタリング TCP / IP
  • (1%) Cracking the coding interview
  • (1%) 標準テキスト CentOS
  • (1%) 詳説データベース
  • (1%) モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド
  • AWS で始めるクラウド開発入門
  • 日本語組み版入門
  • n 月間ラムダノートを何冊か
  • Webサービス開発徹底攻略 (WEB+DB PRESS plus)
  • Designing Data-Intensive Applications

読み物:

  • ソフトウェアアーキテクチャ・ハードパーツ
  • ソフトウェアアーキテクチャの基礎
  • システム運用アンチパターン ―エンジニアがDevOpsで解決する組織・自動化・コミュニケーション
  • Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス
  • カオスエンジニアリング ―回復力のあるシステムの実践
  • CAREER SKILLS

読めない:

  • ベーシック圏論

気になっている:

  • Beautiful Racket
  • Pro Git
  • 2018 年以降のコンパイラの本 (フロントエンド寄りの IR に詳しい本)
  • カーネルの本 (TCP 通信ぐらい上のレイヤ)
  • シェルを作る本

むしろ気にならない:

  • OS を作る本 (低レイヤすぎる)
  • Lisp 関係の本 (エコシステムが厳しい)
  • TaPL (難しい)
toyboot4etoyboot4e

おしゃれな 付箋 を栞代わりにしているのが効いています。次のページにペタペタ貼り付けるアクションがいいです……

toyboot4etoyboot4e

並行プログラミング入門

https://www.oreilly.co.jp/books/9784873119595/

2021 年のベストでした。圧倒的 self-contained 感が特徴だと思います。

  • 所有権の元ネタは線形論理。線形論理とはズバリこういうもの!
  • アトミック処理は一括で複数の操作を行う (?) 処理。アセンブリはこれ!
  • こういう時に使うのが条件変数。 Pthreads の用例 (C) はこれ!

読者は雛鳥に徹することができます。この人が親か!

良書の例に漏れず、認識を作り替えてくれました。どこからがライブラリの機能なのか区別できるようになったと思いますし、実装も多少想定できるようになりました。

  • アトミック処理のイメージを掴めました。読後には、このカウンタ (static 変数) はアトミック変数にすべきだなと修正する場面もありました。
  • TCP 通信に僅かに詳しくなりました。通信多重化のことも IO 多重化と言うようです。実際、 Linux では、ソケット (TCP コネクションの片端) とファイルのどちらも同じ型の fd (file descriptor) で指します。
    ファイルは自分からデータを送って来たりしませんから、大胆な抽象だという気がします。
  • たぶん Rust の std が読めるようになりました。積んでいた記事 Rustの Arc を読む も今だと余裕なんじゃないでしょうか。

などなど……。可能性を広げてもらいました。 8 章 (理論) は未読です。

toyboot4etoyboot4e

基本情報技術者 合格教本

FE に受かったので一応挙げます。

雑感

リターンの無い勉強はしなくても受かると思います。午前試験 (暗記) は国語と過去問で、午後試験 (長文) は算数でカバーできました。

今後は本物のサーバや DB を触って遊んでいこうと思います。順番を逆にしたかったですね。

試験後

Haskell に熱を感じるので、圏論の本を買いました。いやー自由!

追記: この本ダメだ……。僕より遥かにできる人でも、文章が書けるとは限らないのですね。。

toyboot4etoyboot4e

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版

https://bookplus.nikkei.com/atcl/catalog/20/277900/
AWS でネットワークを設定する本です。よくある『ネットワーク図』の一番簡単なやつを作ります。

最初の半年はページが進みませんでした。 IP アドレス、 DNS とかゲートウェイなど何もわからん! しかし基本情報の午前試験を経験すると、あっさり読めるようになりました。ネットワークに関しては、先に知識を集めた方が効率が良いかもしれません。

途中で並行プログラミング入門を読んだのも良かったです。ネットワークへの印象が一転しました。たとえば、 TcpListener ってこんな API なんですね:

fn main() -> std::io::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:80")?;

    // accept connections and process them serially
    for stream in listener.incoming() {
        handle_client(stream?);
    }
    Ok(())
}

もっと特殊な技術が必要なのかと思っていました。並行プログラミングは普通に面白そうですし (Future::poll 理解した) 、通信処理ではゴリゴリ使えます。下に潜ろうとすれば、すぐに Linux カーネルが出てくる (気がする) のも趣味的に良いと思います。

ネットワークの低レイヤは自分で実装する必要が無いという安心感もあります。

ネットワークという手強い分野も、かなり抵抗が弱まるところまで進んでこれたかと思います。本書の話に戻りますと、索引が無いのは少し残念でした。ゲートウェイってなんだっけ (^^; という時はペラペラ読み返します。表紙も文章も良いためお気に入りの本ではあります。

入門 (web 開発) への入門 (基礎知識 + 実用的知識) への入門 (基礎知識) まで来れた気がします。ルーティングら辺が分からないので、応用情報をネタに楽しみたいなと思います。

toyboot4etoyboot4e

すごいHaskellたのしく学ぼう!

https://shop.ohmsha.co.jp/shopdetail/000000001926/

長い間積んでいました。『すごい H 本』は、 10 年くらい前に出た『最も簡単』な Haskell 入門書です。 Haskell は 2000 年代に支配的な影響力を持っていたと言われていますから、 10 年前に戻っても僕は情弱なんですね。ナードへの道は遠い。

洋書のブラウザ版 は無料です。今は 他の Haskell の本も出ている ようです。

環境構築について

最近の Haskell は ghcup でインストールすると haskell-language-server もついてきます。セットアップの様子は Haskell を使ってみるスクラップ に載せています。

読み方について

初めて読んだときは、文字やコードの見た目の良さに惹かれました。関数合成 . や評価順を制御する $, fold 辺りが面白かったのです。でも途中で飽きました。 Haskell 自体には強い関心を維持できなかった ようです。

数年経って、間の章を飛ばして 12 章ファンクターから読み始めました。関数型プログラミング一般を学ぶ実例として Haskell を使う形です。これならページが進んだもので、目先の興味を追っていくというか、自分の興味を元に情報を選ぶのが効率がいいなと思います。

読み物である良さについて

技術書が読み物である良さは、読めば分かるということに尽きます。ネット記事等は文脈を理解していなければ読めないことも多いのですが、技術書は全部の文脈をインプットしてくれるので、自力でもがく必要がありません。この self-contained 感が読み物である技術書の良さだなと確認できました。

たとえば、これは Hoogleによるところの foldMap です:

$ hoogle -i foldMap
foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
base Prelude
Map each element of the structure into a monoid, and combine the
results with (<>). This fold is
right-associative and lazy in the accumulator. For strict
left-associative folds consider foldMap' instead.

Examples

Basic usage:


>>> foldMap Sum [1, 3, 5]
Sum {getSum = 9}



>>> foldMap Product [1, 3, 5]
Product {getProduct = 15}



>>> foldMap (replicate 3) [1, 2, 3]
[1,1,1,2,2,2,3,3,3]


When a Monoid's (<>) is lazy in its second
argument, foldMap can return a result even from an unbounded
structure. For example, lazy accumulation enables
Data.ByteString.Builder to efficiently serialise large data
structures and produce the output incrementally:


>>> import qualified Data.ByteString.Lazy as L

>>> import qualified Data.ByteString.Builder as B

>>> let bld :: Int -> B.Builder; bld i = B.intDec i <> B.word8 0x20

>>> let lbs = B.toLazyByteString $ foldMap bld [0..]

>>> L.take 64 lbs
"0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"

あれ、なんか十分詳しかったな……。 Hoogle ではシグネチャしか載っていないような関数も、すごい H 本を読めば一発という時もありました。

訳注も良かったです。内容や語り口が原著と融合していました。原著をグレードアップした翻訳と言えます。レビュワーの数も質の高さを保証しています。

モナドの正体

様々なモナドの例を見てみると、単なるデータ型とそのヘルパーという印象でした。 まとまった説明をできるほど理解していないですが、具体例を挙げると

  • Maybe モナドは enum です。 >>= 演算子は Rust の and_then でした。 >> 演算子は and です。
  • Writer モナドはタプルです。 >>= 演算子は文脈たる monoid を結合します。
  • State モナドはタプルです。 >>= 演算子は文脈たる状態を新しい状態に差し替えます。

do 記法の正体は >>= のチェインです。 それぞれの関数は、文脈の受け取りが隠された形 (ポイントフリースタイル) で書いてあるので、一見手続き型言語のように見えます ? 。 guard が early return のように見えるのも面白かったです。

残った謎

  • IO モナドの正体
    IO モナドの実装?例を見てみたいです。

  • モナドの fail 関数の活用例
    エラーハンドリングなどの例をもっと見たいです。

  • Reader モナドへの理解不足
    Reader モナドは関数への Monad 実装です? Applicative functor 味の強さが他のモナドとは違いそうです。 >>= モナドは出力の数を増やします。しかし >>= の実装を見ると、実際の挙動と不一致のコードに見えました。理解できていません。

以上の謎は、『プログラミング Haskell 第二版』で晴らして行きたいと思います。

次?

エアプと実用は雲泥の差 ということで、 Haskell で競技プログラミングに挑戦中です。高度な型に興味があり、いずれ『代数的エフェクトシステム』に近づいてみたいとも思います。

toyboot4etoyboot4e

Haskell で戦う競技プログラミング入門

https://lab.miz-ar.info/kyopro-haskell/

技術同人誌です。良書でした。

Haskell では、遅延評価のため、時に primitive 型でさえ boxing してヒープに置いてしまいます。 State モナドなり高速なライブラリを使わなければ、コンテストでは TLE (Time Limit Exceeded) 必至です。

本書はそのギャップを急速に埋めてくれました。これで人の解答も読めるようになり、ますますコンテンツの幅が広がりそうです。また Haskell high performance programming の存在を教えてくれたので購入しました。明日届くので楽しみです。


PDF を Kindle と Skim で読みました。 Skim は強制ダークテーマや見開き表示ができて非常に優秀ですね。

toyboot4etoyboot4e

[改訂新版]Emacs実践入門

https://gihyo.jp/book/2017/978-4-7741-9235-2

Evil ユーザなので積んでしまった本です。改めてパラパラと読んでみました。アラインメント、デーモン、バイトコンパイル、絵文字入力、シェルコマンドの実行結果を現在のバッファに挿入、 WoMan など……。

参考になりました。暇なときに著者の設定ファイルを読みに行くかもしれません。

https://github.com/tomoya/.emacs.d

著者ブログでは consult 紹介記事が最高ですよね。

https://blog.tomoya.dev/posts/a-new-wave-has-arrived-at-emacs/

toyboot4etoyboot4e

Reactハンズオンラーニング 第2版

https://www.oreilly.co.jp/books/9784873119380/

React をエアプするために買いました。僕の偏った視野では、 Rust と React が一般のプログラミングに見えます。ただ React の公式チュートリアルは未だ class ベースであり、ドキュメント性の高いツールには見えません。不親切なのによく流行ったなと思います。

本書では全編に渡って React Hooks を教えてくれます。実装は謎ですが、ユーザ視点に限って言えば、普通のプログラミングで Web アプリが書けるということになります。今まで謎だった『Web 開発』のスコープが、 React によって明らかになってくる予感を覚えました。

特に目新しいことが無いと思えたことは最大の収穫でした。 fetch で気軽に非同期処理ができるし、エラーハンドリングのための仕組みもあるし……なんか Web にしては普通ですね!

toyboot4etoyboot4e

React の深層 (WEB + DB Press)

https://honto.jp/netstore/pd-book_31640618.html

uhyo 氏の記事を読みました。常識のアップデートができると思いますし、僕の場合はエアプが捗ります。ただ React 18 への滑らかなスライドは難しいと思うので、不都合なコードはリンターが全て弾いてくれる環境じゃないと僕は嫌です。

ちなみに React ハンズオンラーニング 第2版 にも Suspense は出てきます。やはりあの本も良いものだった気がしますね。

toyboot4etoyboot4e

TypeScriptとReact/Next.jsでつくる 実践Webアプリケーション開発

https://gihyo.jp/book/2022/978-4-297-12916-3

話題の新作! React で何か作りたいということで買ってみました。知識部分、入門部分で章が分かれており、好きな読み方ができると思います。

全編的によく書かれていました。こういう本ばかり大量に読みたいですね。気になる点も無いわけではなく、 setCount に関する記事 で止めようとされるコードも出て来ました。これは単に React がイケてないとエアプで思います。

サーバサイドはダミー (JSON Server) です。フロントエンドには各種ツールを使います。 Web 開発者が何をしたいのか、以前よりも明確になりました。

  • Next.js でページ設定 (SSG, SSR, ISR, CSR)
  • styled-components で CSS in JS (CSS の特異性を除去、普通のアプリ開発にしてしまう)
  • storybook でコンポーネントのスタイルを確認

フロントエンドに歩み寄ろうと思ったら、向こうから個人ゲーム開発に歩み寄ってくれたと驚きました。

まだ Atomic Design (要素の次元分け) に従ってゴリゴリ実装する章は読んでいません。 サイト開発の全貌 が未だ見えなくて焦ります。

今は web API とかバックエンドの方に興味が湧いています。両方の知識が揃えば『web 開発』のスコープが見えてくるかなと思います。それから機械学習で商品をレコメンドする仕組みなんかを片手間で実装できるか、みたいな Twitter エンジニアの日常が見えてくる……かも?

toyboot4etoyboot4e

iPad のおかげで web 公開の本を気軽に読めるようになりました。今は compilerbook が気になります。

toyboot4etoyboot4e

Kindle Scribe のおかげで PDF を気軽に読めるようになりました。オライリー本でも論文 PDF でも何でも来なさい!

toyboot4etoyboot4e

初めての SQL 第三版

https://www.oreilly.co.jp/books/9784873119588/

購入動機

データベースをエアプするために読んでいました。この本を選んだ理由は、某著者が『定期的な知識のアップデートが必要』と言って読んでいたためです。憧れの人が読む本を真似たがります。

面白かったこと

SQL 以外の話、データベースの話が面白かったです。

  • トランザクション
    並行・並列のデータアクセスを DB が一手に担ってくれます。 DB を使う動機が 1 つ分かった気がします。

  • テーブルの制約
    主キーの一意性を始めとした制約をテーブルに課すことで、意図せぬデータの変更などを防ぐことができます。

  • インデクス
    検索の高速化などに役立つそうで、詳説データベースなどを読むのが良さそうです。

考えたこと

  • クライアントとサーバの通信データ形式
    サーバにレスポンスの形式を指定したら、好きなものが使えるのではと予想します。流石に JSON (テキスト) ではなくバイナリで通信しているはずですよね。

足りないこと

以下の知識を集めてから、初めての SQL を読み直すべきですね。スタート地点が遠いです。

  • mysql を動かさずに読みました。単純に SQL の演習が足りていません。
  • mysql の CLI が快適であると思えません。 Vim やらシェル並みに 優れたデータベースの UI が必要です。
  • mysql やら oracle はインストール・アンインストールが大変らしいのですが、そのグローバルな印象の詳細が未だ不明です。

次の興味

権限の話などが出てこなかった気がします。 DB 運用 の本、特定の DB に関する本を読む必要があります。

toyboot4etoyboot4e

Web API: The Good Parts

https://www.oreilly.co.jp/books/9784873116860/

購入動機

Web API をエアプするために購入しました/ zenn の作者が読んでいた ので。

感想

Web 版のリーダブルコード + 常識集という印象でした。

  • Web API とは案外リクエストに応じてレスポンスを返すだけのものかもしれない [1]
  • エンドポイントと HTTP のフォーマットをよく検討しよう
    • 仕様や他社の API を確認しよう
  • ストリーミングについては載っていなかった
  • セキュリティ何も分からない

所詮エアプなので吸収率は良くありません。

次の関心

フロントからバックエンドに近づいてきました。今は、バックエンドの本、 DB 運用の本、システム全体を動かす本などに興味があります。まだ手を動かす気分でもありませんが、サイト全体のソースは読みたいです。

脚注
  1. ネットで言うと理解の浅さを怒られるやつ ↩︎

toyboot4etoyboot4e

問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本

https://gihyo.jp/book/2022/978-4-297-12521-9

6 月から Haskell で競技プログラミングを始めました。好成績を残すことができれば『私はナードです』と端的に表現できる見込みです。ナードの中でもインテリな方、ハイナード (?) であると見せ (かけ) ることができれば有利に働きます。

さて本書には、とてもよくできた高校数学の教科書のような印象を受けました。やや退屈しつつも重要な情報は多く、 bit 全探索・モンテカルロ法・動的計画法・高速な mod 計算 (フェルマーの小定理) ・貪欲法などを一通り見ることができました。 2 分探索の最大計算量は log (正確には log_2) みたいな常識 (知識というよりも思考) も身につきました [1]

章末問題を途中まで解いたのでノートしておきます。

  • パソコンは 1 秒間に約 10 億回 (10^{10}) の計算ができるそうです。 O(N^2) のアルゴリズムはデータ数が 10^{5} を超えたら確実に TLE (time limit exceed) になります。 O(N^3) なら N = 10^3 まではギリギリ滑り込めるかもしれません。 2^N なら N = 33 まで。下手すると宇宙を何回繰り返しても計算が終わらないことになります?

  • 素数判定 = 約数が存在しない判定 より整数 i \in [2, \sqrt N]N の約数であるか調べる

  • エナトステレスの篩は速い O(N log log N) ため最大公約数の導出に使って良い。証明は見てないけれど……

  • 逆数の和はおおよそ log N (\frac 1 x の積分に近似できるため)

このように高校数学の基本と計算量への勘 (思考能力) を養うことができたため、十分なレベルアップができたかなと思います。ただしアルゴリズムの補填は必要です。残りの章末問題を解きつつ、先ほどポストに届いたらしい『鉄則本』の方を見ていきたいと思います。

脚注
  1. 計算量には最低・最大・平均 (償却) ? などあると思いますが、競技プログラミングの文脈では計算量 = 最大の計算量だと思います。 ↩︎

toyboot4etoyboot4e

低レイヤを知りたい人のためのCコンパイラ作成入門

https://www.sigbus.info/compilerbook

通称 compilerbook 。 セキュリティ・キャンプ で例年 (近年) C コンパイラを作る講座があり、その主な教材 (前提知識) になっています。

内容としてはアセンブリ (x86-64) を出力して C 言語のセルフホストを目指します。 100 ページくらいまでは丁寧に書いてありますが、途中から『後はソースを読んで頑張ってください』となります。誰かの発表を見ると、構造体や不動小数点があまりに難しいと阿鼻叫喚になっている様子を見ることができます。

僕も compilerbook を読んで、最も初歩的な x86-64 (Intel 記法) は読み書きできるようになりました (スクラップ) 。ただしそれ以降の道を突き進むほどの馬力はありません。ましてやセルフホストコンパイラなんてエアプするのも難しいです (半年溶かせばあるいは……) 。眺めておくだけにしておきます。

DEBUG HACKS のような本を読める可能性が広がりました。自作スクリプト言語 (toylisp) の VM 作成にも x86-64 の (浅い) 理解が役立っています。何よりも『欲張るな、小さい実装を積み重ねるんだ』とすべての章で語りかけてくれるので、インクリメンタルな開発を指向するようになりました。案外難しく重要な部分は、小さい実装で済むような過程の考案なのでした。

コラムも良くて、知識の飛び道具でトークを面白くするスタイルが感じられました。著者の podcast と同様です。

https://turingcomplete.fm/30

最近の『セキュキャン』のログも流れてきて良かったです。 講師陣のトーク (youtube) もあります。みんなでルーターを爆走させたってこと……? コンテンツとして面白いのが何より良いですね。

https://sozysozbot.github.io/seccamp-2022-c-compiler-seminar/

toyboot4etoyboot4e

プログラミング言語の基礎概念 (CoPL)

https://www.saiensu.co.jp/search/?isbn=978-4-7819-1285-1&y=2011

toylisp に単相の型推論を実装しました。実装は 速攻MinCamlコンパイラ概説 のおかげで完了しましたが、理論的な内容を把握したい (あわよくば多相の型推論も手に入れたい) ということで本書を購入しました。

本書ではミニ ML の構文と型推論を形式的に構築します。途中から証明が難しくなりますが、エラーハンドリング・式の名前なし表現・単相の型推論など実装と完全一致するため、そうそうそれな〜〜と流して行けます。曖昧な既知を厳密に表現されると気持ち良いですね。自分で書くには訓練が必要 (書けない) ですが、形式的な表現が好まれるのも分かる気がします。

カリー化が多変数関数の表現にこれ以上無いほど適していたことが印象的でした。形式的な表現では再帰が自然ですし、 この本だけ読んだ人はわざわざ特別な名前を付ける必要を感じないかもしれません。

証明と問題演習をスキップすれば、エアプが容易な本でした。文章と記号表現を読み通しただけになりますが、雑多な趣味としては良い感じです。これからもテストで 0 点を取るような読書をやっていく気がします。

肝心の let 多相は未読です。背景知識が無いと途端に弱いです。頭が弱いなら弱いなりの立ち回りがあるということで、今は迂回します……

toyboot4etoyboot4e

競技プログラミングの鉄則 (鉄則本)

https://book.mynavi.jp/ec/products/detail/id=131288

AtCoder の問題は難易度の差が激し過ぎました。スライムとドラゴンしかいないみたいな環境です。ギラを習得してドラキーを焼く、みたいなレベルアップの経験が必要でした。

『鉄則本』が現れたのは幸運です。比較的素直な問題を解く中で、基礎知識を整理しながら言語 (Haskell) の書き方が身に付きました。パフォーマンスが 400 を下らなくなり、自身の変化に気付かされます。

しかし AtCoder の出題は考察重視の問題ばかりです。使用言語に慣れて以降は、レーティングなんて早々上がりません。大量の問題を解いて、隙の無い経験を積み上げなければならない。その決意が生まれるまでの時間を『鉄則本』が繋いでくれました。

まだ『鉄則本』の問題が 100 以上残っています。この程度は実力向上の前提条件なんだと今は受容しています。こうしてマメに経験を磨いていくのは、大好きな『盆栽』作業と同じではありませんか。並行して 典型90問 を解きつつ、徐々に埋めて行く予定です。

toyboot4etoyboot4e

ちょうぜつソフトウェア設計入門 (ちょうぜつ本)

https://gihyo.jp/book/2022/978-4-297-13234-7

『設計』の記事は実体が掴めず敬遠しがちでした。数万行のコードを書く方が先決だと思います。ただ最近見た『クリーンアーキテクチャ』はデザインパタンに匹敵するぐらい具体的な手法で、『ソフトウェア工学』に少しずつ興味が湧きます。

ペア開発は冴えませんでした。多人数開発ならどれほど面倒になるのでしょう。開発過程も完成後の修正にも、人との同期を考えて調整・調整・調整! 合意が得られる気がしません。個人開発をマージし合うくらいが一番楽しいのではと空想します。一人で済むならなお良いですね。

その程度の志でも楽しめる話の粒度で、プログラムをコントロールする意図と指針について吸収できました。しばしば抽象よりも具体を使った方が良いと思っていましたが、開発過程に影響するなら話は変わりますね。

ドメイン駆動設計・TDD・DI コンテナ・SOLID 原則・パッケージ・クリーンアーキテクチャなどが『オブジェクト指向』のレーンの上に 1 列に並ぶのが特に良かったです。知識のスコープが区切られました。

多人数開発に参加するときは、また読み直したいと思います。良い開発がしたいのは当然ですが、それがどのようなものかイメージして定義するのがまずは必要だよなと思えました。その後も視野を広げる必要がありますが……

toyboot4etoyboot4e

問題解決力を鍛える!アルゴリズムとデータ構造

https://bookclub.kodansha.co.jp/product?item=0000275430

いわゆる『けんちょん本』。

アルゴリズムの読み物です。予習・復習に向いていると思います。鉄則本は技術習得に直結しますが、演習続きになるので、けんちょん本で間を繋ぐと学習が滑らかになって良いと思います。

グラフの章が詳しくて良かったです。内容は、 DFS の行きがけ・帰りかげ、彩色、トポロジカルソート、最小全域木、全点間最短距離、最大流量など。 AtCoder Beginner's Contest の E 問題くらいまでは、まず知識不足で詰むことは無くなるのではと感じます。

けんちょん本を読んだ後だと、 グラフ理論入門 基本とアルゴリズム が『読めば分かる』にぐっと近づいていました。形式的な表現や、コンピューターサイエンス寄りの内容にも、徐々に近づいていけるのではないか。そんな希望を感じさせてくれました。