![見出し画像](https://assets.st-note.com/production/uploads/images/101701702/rectangle_large_type_2_7aef9c5c1b5ecffa458ce1c48920bcf8.png?width=1200)
2023年3月に読んだ本
3月は本を1冊読んだ。
コーディングを支える技術
著者: 西尾泰和
記載日: 2023-03-19
この本は、副題のとおり「成り立ちから学ぶプログラミング作法」について書かれている。表紙にある「なぜ言語設計者はこの文法を作ったのか」を知り、「言語に共通の知識を身に付ける」ことを目的としている。
そのため、初版が2013年と少し古いが、時代を経ても陳腐化しないような内容となっている。
実際のコードの例などは古くなってしまうがそれは仕方ない。
(たとえば Ruby は 1.9.3, Python は 2.7.3 をターゲットとしたコードになっている)
個人的に面白かったのは「if はなぜあるのか」という章。え、そんなの無いと困るからじゃん?と思ったのだが、アセンブリには if が無いと知って驚いた。じゃあどうやって条件分岐を実現しているのかというと、ある条件を満たしたらここにジャンプ、という命令を駆使して実現している。(jmp, jle, jge などの命令) C言語でいう goto を使っている。
なるほど、これなら if がなくても条件分岐ができるのか、と納得した。そして当然めちゃくちゃ読みづらい。 goto を使うとあっという間にスパゲッティコードの出来上がりなので、これを解消するために if が導入されたのだろう。
他に while に相当する繰り返し処理もアセンブリだとジャンプで実現しているが、やはり読みづらくなるので、 C言語では while とか for が用意されている。
他にもエラー処理の方法が歴史の移り変わりと共に進化している話も興味深かった。UNIVAC I, COBOL, PL/I のエラー処理の方法を見比べることで、段々と人間がコードを書きやすいように機能が増えていく様子を垣間見ることができた。
章の間にちょっとしたコラムがあり、最後のコラムではこのようなことが紹介されている。
明確な「やりたいこと」「調べたいもの」がなく、「おおまかに読む」と読んだ内容が脳を素通りして出て行ってしまうようなとき、この状態でどう学ぶか悩んでも判断のための知識がないのだから無意味です。
そこで知識の足がかりを作るために、教科書を書き写します。これが「写経」と呼ばれるテクニックです。知識がないまま悩むのは無益なので、まず何も考えずに知識をコピーするわけです。
以前どこかで紹介されていた、技術本の読み方と同じことを言っている。そこでは、初めからすべてを理解しようとせず、意味がわからなくても一通り読んで、頭の中にインデックスを作るつもりで読もう、といったことを提唱していた。ある程度知識があれば、本を斜め読みして必要なところだけ抜き出すことができるが、そもそも全く知識がない状態だと、どこが必要なのかわからないので、何も考えずに頭から読んだり書き写したりするべし、ということだな。
こういうコラムも、色々な考え方を吸収することができて役に立つ。これからもインプットを大事にしていこう。
この記事が気に入ったらサポートをしてみませんか?