何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『入門 Goプログラミング』読書メモ

以前にGolangに入門したはずでは?

Get Programming with Go』の翻訳『入門 Goプログラミング』を買った。 時間がちょっとあるのでGolangでも勉強しておくか、と思ったのと、原著がManningだからまあ大丈夫だろう、という甘い考えに基づいて勉強を始めた。

勉強もとい写経した記録はGitHubにまとめている。

github.com

ひとまず、Go言語で気になった点を雑にまとめておく。 僕はPythonの経験が長いのでPythonとの比較が多いが、それ以上の意味はないので、どちらの言語が優れているのかという話をしたいわけではない。

fmt がモジュールとして切り出されているのはなぜか

実装するプログラムの都合上、毎回fmtモジュールをインポートしている。 I/Oはよく使うが特殊なもの(OSが絡む)ので、別枠にしているのはわかるのであるが、面倒である。

math/rand の乱数シード

Pythonrandomはインポートすると乱数シードもよしなに設定されるが、Goのmath/randは設定されない(ビルド時にキャッシュされる?)。 Pythonrandom含め認識が間違っている可能性が大いにあるが、気を付けないといけないなと感じた。

string型をイテレートすると何が起きるか

次のコードはLesson 11のヴィジュネル暗号の実装である。

package main

import (
    "fmt"
    "strings"
)

func charToDiff2(c byte) int {
    return int(c - 'A')
}

func shiftToRight(c byte, d int) byte {
    if c >= 'A' && c <= 'Z' {
        c += byte(d)
        if c > 'Z' {
            c -= 26
        }
    }
    return c
}

func main() {
    plainText := "your message goes here"
    keyword := "GOLANG"

    plainText = strings.Replace(plainText, " ", "", -1)
    plainText = strings.ToUpper(plainText)

    for i := 0; i < len(plainText); i++ {
        j := i % len(keyword)

        fmt.Printf("%c", shiftToRight(plainText[i], charToDiff2(keyword[j])))
    }
    fmt.Println("")
}

string型をインデックスで取得するとstringではなくbyte型となる。 以前にRustをかじった際にも感じたが、型がしっかりしている言語は文字列の扱いが難しい。

関数とメソッド

型にメソッドを紐づける仕組みは面白いなと思ったが、型とメソッドの実装が一見して結びつかないのでIDEの助けがないと面倒くさそうだなと思った。 別にクラスとメソッドでもIDEの助けがないとわからないが、Pythonだとインデントの関係で視覚的にもわかりやすい、かもしれない。

『PyTorchとfastaiではじめるディープラーニング』の技術査読を担当しました

原著者の勢いを感じてほしい

2021年5月27日にオライリージャパンから『Deep Learning for Coders with fastai and PyTorch』の邦訳である 『PyTorchとfastaiではじめるディープラーニング』が発売される。

www.oreilly.co.jp

この度、邦訳の査読者として少しお手伝いさせていただいた。

PyTorchはディープラーニング(深層学習)のために最適化されたテンソル計算ライブラリであり、 表題であるfastaiとはPyTorch上に構築されたライブラリであり、オンラインコースでもある。

docs.fast.ai

要は、PyTorchとfastaiを用いてディープラーニングをベースにしたアプリケーションを実装するための本であるが、 単なるやってみた系、ライブラリの解説本ではなく、トップダウンディープラーニングを学ぶ本である。

読んでいて感じたのは原著者の勢いである。 やってみた系ではない、と書いたばかりであるが。とにかくやってみよう!という原著者の熱意がすごく、分量に対して早く読むことができる、かもしれない。 その勢いを感じて読み進めると若干面食らうのが「3章 データ倫理」であり、1章、2章にあった勢いとは異なるデータに真摯に向き合う姿を垣間見ることができる。 オライリー・ジャパンから『データサイエンス人材の行動規範』というデータ倫理を扱った本が出版されたが、 まとまった分量できちんとデータ倫理について学ぶことができるのも『PyTorchとfastaiではじめるディープラーニング』のよい面である。

www.oreilly.co.jp

原著者の勢いはコードにも表れていて、はっきり書くとPEP 8には従っていない。 とはいえ、ロジックが汚いとか破綻しているならともかく、コードスタイルは各々使っているツールにかけて自動変換すればいいので細かいことは気にせず読んで欲しい。

『ユニコーン企業のひみつ』を読んだ。

スタートラインに立ちたい

オライリージャパンさんから『ユニコーン企業のひみつ』を頂きました。 ありがとうございます。

www.oreilly.co.jp

筆者がSpotifyで勤務して得た経験に基づいてユニコーン企業(評価額が10億ドル規模の企業でありつつスタートアップの様に運営されている企業)の働き方や文化を解説した本である。

せっかく、本を頂いておきながらこんなことを書くのは申し訳ないのだが、読み進めるたびに「うっ頭が」となる辛さがあった。 いつものオライリーの本よりも文字サイズが大きく、A5判212ページで気軽に読める分量であり、読みやすい翻訳であるが、その自分にとっての読書経験は正直言って辛く殴られている感覚であった。 この感覚は別に初めてではなく、過去にバージョン管理がない世界 - 何かを書き留める何かでも経験した痛みである。 「日本の読者の皆さんへ」という邦訳のために書き下ろされたと思われる原著者の言葉が冒頭にあるが、まずそこから大変であった。

これはソフトウェア開発にとっては良い知らせといえます。ですが、競争においては悪い知らせでもあります。 「みんながやっていること」は何の優位にもなりません。 アジャイルはもう「ふつう」なのですから。(邦訳P.vii)

ユニコーン企業のひみつ』としてはアジャイル開発の先にある開発手法や文化の話をする本なのでこのような書きっぷりになるのは当然であるが、読者である私にとっては全くもって「ふつう」ではない。 アジャイルに関してはいくつかの文献を読み、ほんの少しだけの知識はあるが、実践や目撃の経験はない。 私は原著者の考えるスタートラインにすら立っていない。 これは2015年に感じた絶望に近い。

ショックを受けたのは別に序文だけではない。 1章「スタートアップは どこが違うのか」では「期待に応じる機械」という見出しで従来型の企業の働き方を(優劣の問題ではない、としつつも)批判している。 2章「ミッションで目的を与える」は従来の「プロジェクト」(アジャイル開発が前提の!!!)と「ミッション」を対比させながら説明する章である。 原著者は「プロジェクトは(考える)力を奪う」「プロジェクトは間違ったことにフォーカスしている」と説く。 そもそもプロジェクトは納期や予算にフォーカスしているが、それは間違っている、と。

私はスタートラインにすら立っていないし、そもそものソフトウェア開発者としての働き方も間違っているのではないか、と。 それ以降も話は続き、Spotifyにおける当時の組織構成などが説明されるが、そもそもスタートラインにすら立っていない自分にとっては活用も難しい代物であった。 とはいえ、まずはできそうなことをやっていくほかないのである。

ここまで読んだ人が『ユニコーン企業のひみつ』を読みたくなるのかは甚だ不明であるが、少なくとも私のような境遇の方にとっては劇薬になるであろう。 もちろん、スタートラインに立っているような方はその先への歩みを得るためにぜひ読んでいただきたい。