私が歌川です

@utgwkk が書いている

『コーディングを支える技術』を読んだ

世界にはいろいろなプログラミング言語があるが、それらをじっくり観察すると、どれも似たような仕組みになっているところがたくさんある。

この本はそういうところ——たとえば、あらゆる高級プログラミング言語とされるものは、だいたい if 文とか while 文を文法構造として持っているし、まとまった一連の処理を関数とかメソッドという形で切り出せるし、変数にはスコープがあるし、とか——にスポットを当てたものだと思う。 そういった、私たちが普段そこまで気にとめることなく[要出典]書いている構文や処理は、マシンの上ではどうやって実現されているのか、が分かりやすく解説されている。

例外の伝搬の節、いまのバイトでやっていることにかぶっていることがしっかり書いてあったので、気持ちになってきた。検査例外ちょっとよさそうと思ったけど、確かに種類が多くなると面倒そうだし、でもそれはメソッドが適切に切り分けられていないのでは?? という気もしてくる*1

型の話、すこし前の本なので、漸進的型付けに関する話題はとくになさそうな感じだった。C++ のテンプレートと Java のインターフェースの違いは?? などを考えたけどまだよくわかってない。そういえば関数型プログラミング言語をちゃんと学習したことがほとんどなさそうな気がしてきた。しっかりとした型システムがあるとあらゆるバグは消滅するかというと、まだそうは言えないみたいな感じで、がんばっていきましょうという感じだ。

Perlオブジェクト指向、うーんマジかあという感じの書き方をしていると思った。JavaScript の prototype がどういうことをしているのかようやく理解した気がするけど、時代は ES6 なのでもう気にしなくてよい?? クラスとかオブジェクトの話、あいまいなままやっていくと哲学的問いになりそうだ*2

結局、私たちが常識だと思って使っている概念は、誰かが「そうすれば今のところ話がまとまりやすくなる」と考えてそういう形にしているんだということ、そしてそういう概念に対していろいろなアプローチが存在するので、いろいろな言語を学ぶとそれらの差異が見えてよさそうという感じのことが書いてあった。

ところで、コラムにいいことが書いてあった。

「何を学んだらいいですか?」——これはよく聞く質問です。しかし、それに答える前にまず質問させてください。「あなたは何を作りたいのですか?」目的が明確でなければ、適切な手段をアドバイスできるはずがありません。

(中略)

何を作るかを決めることができない? もしかして、最初から完璧なものを作ろうと考えていませんか? 誰も考えたことのないもの、みんなが絶賛してくれるものを作ろうと考えていませんか?

これはしょっちゅう思うことで、プログラミング言語は必ずしも学ぶことが目的ではなく、あくまで学んだ上でそれをどう活かしていくかを考えるまでが一つの流れだと思っている。この言語をマスターするとすごいやつが作れるようになる! っていうのは間違っていないと思うんだけど、あなたが今すぐにすごいやつが作れるようになるかとはまた別の話になってくるので、まずは適当なツールとかライブラリを作って自己満足からやっていくのがよさそう。

こっちのコラムもよかった。

たとえば作者本人が書いたドキュメントやソースが一番詳しいでしょう。しかし「難しい」「量が多い」「英語なので読めない」と口実を付けて、誰かの書いたやさしい解説を探したりしてしまいがちです。それは「オリジナルの肉は大きくて硬いから」といって、安全なのか傷んでいるのかもわからない、誰かの作ったひき肉を食べるのと同じです。

今は便利なもので、だいたいググると Stackoverflow とか Qiita とかで誰かが解法を提示しているんだけど、もしかしてそれが正しいという保証はどこにもない。かりに正しかったとして、じゃあその解法はどこから来たのか? どうやって編み出したのか? というのを考えないようになると、そこで進歩が止まってしまう。man を読む前にググるのは私たちの悪い癖だ。

ついついコラムに惹かれて気持ちになった文章を書いてしまったけど、まあ全体的にいいことが書いてあると思っていて、if は具体的にどういう処理をしているのか、とかが知りたいときにサクッと読むとよさそう。なあなあでプログラミング言語を学んできた人に特に読んでほしいという感じです。

追記

*1:docstring で検査例外っぽいことはやってるんだけど、それは結局どうやって正確にチェックするんだ😇

*2:だいたい理解の難しそうな(そう見える)ものは哲学的問いの対象にされやすい気がする。