あぼぼーぼ・ぼーぼぼ

のんびり生きたい

書籍『Clean Craftsmanship』を読んだ

Craftsmanshipの規律、基準、倫理について書かれた本書。楽しかったし刺激受けました。

規律の一つであり要であるテスト駆動開発の説明には具体的なコードが書かれてあり、追体験できました。ボウリングのスコア計算の例を初めて見るなら、本の続きを読み進める前に自分で実装してみると楽しいです。その後読み進めると、スペア、ストライクの実装ができた段階で10ゲーム目のテストケースも通る、ここが秀逸でした。

ワードラップの例も楽しかったです。これも自分で実装してみましたが、最終的に以下のようになりました。本書の実装とは違う方針であり、テスト駆動開発には分岐点がある、という話を体験することになりました。

package main

import "strings"

func Wrap(s string, n int) string {
    if n == 0 {
        return s
    }

    result := ""
    row := ""
    words := strings.Split(s, " ")
    for i := 0; i < len(words); i++ {
        if i == 0 {
            row += words[i]
            result += words[i]
        } else {
            appendix := " " + words[i]
            if len(row+appendix) > n {
                row = words[i]
                result += "\n" + words[i]
            } else {
                row += appendix
                result += appendix
            }
        }
    }
    return result
}

テストダブルの説明も具体例が交えてあって分かりやすく嬉しかったです。xUnit Test Patternsを読むのはハードルを感じるので。

リファクタリングを特別扱いしない。常にやる、継続的にやる。リファクタリングはスケジュールや計画には決して表れない。時間を確保する必要はない。許可を得る必要もない。トイレに行ったら手を洗うのと同じ。常識的な配慮として常に行うべきもの。

常にそのときのベストを尽くすこと、そのために継続的挑戦的学習者であろうと思いました。