143 Views
December 19, 25
スライド概要
「楽しく楽にcoolにsmartに」を理想とするprogrammer/philosopher/liberalist/realist。 好きな言語はClojure, Haskell, Elixir, English, français, русский。 読書、プログラミング、語学、法学、数学が大好き! イルカと海も大好き🐬
🐬の推し本紹介2025 『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』 1
🐬カマイルカ 法学部出身のITエンジニア イルカ🐬が好き プログラミング、語学、法学、数学が好き lagénorhynque 2
🐬が新人プログラマによく推薦する技術書 3
『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』 4
🐬<「成り立ちから学ぶ」とは 5
種類の比較の視点 共時的 /同時代的な「横」の比較 英語 vs フランス語 日本法 vs アメリカ法 通時的 /歴史的な「縦」の比較 古代の日本語 vs 現代の日本語 近世の法令 vs 現代の法令 2 (synchronique) (diachronique) ※ synchronique vs diachronique: 言語学者フェルディナン・ド・ソシュールによる区別 6
例: 自然言語(英語)を通時的に探る 7
人間が目的のために生み出したツールについて、 共時/通時的な比較から類似点や相違点を探り、 「なぜ」そのように設計されているのか学ぶことで、 効果的な活用/応用や発展の可能性が見えてくる。 8
この本の構成 1. 2. 3. 4. 5. 6. 言語を深く効率的に学ぶには プログラミング言語を俯瞰する 文法の誕生 処理の流れのコントロール 関数 エラー処理 9
7. 8. 9. 10. 11. 12. 名前とスコープ 型 コンテナと文字列 並行処理 オブジェクトとクラス 継承によるコードの再利用 10
内容紹介: プログラムでの数式表現 書籍「第3章 文法の誕生」より 11
数学での数式 例えば、 1+2×3 ※ 中置記法(infix notation)と呼ばれる 12
これは通常、 1 + (2 × 3) を意味する。 13
1. 現代の多くのプログラミング言語の場合 1+2*3 と書くと 1 + (2 * 3) の意味で扱われる。 演算子 + よりも * のほうが優先順位が高い、という ルール(文法)が言語処理系に組み込まれているため。 14
ツリー🎄形式で図示すると + * 1 2 3 抽象構文木(abstract syntax tree, AST)と呼ばれ、 パーサー(parser, 構文解析器)によりコードから変換して得られる表現 ※ 15
という古い言語(1950年代〜)の場合 2. FORTH 123*+ ※ 後置記法(postfix notation), 逆ポーランド記法(reverse Polish notation)と呼ばれる 演算子の優先順位のルールは不要 括弧は不要 演算子ごとに受け付ける被演算子(operand)の個数が決まっていて曖昧さがないため) ( 16
で数式を評価してみると FORTH on browser > 1 2 3 * + . 7 数式。ここで . は結果を取り出す操作) 評価結果) ( ( 17
スタック(stack)というデータ構造を用いて 123*+ 23*+ 3*+ *+ + 2 stack push push push * 終端) 1 + 6 ( 3 pop & push pop & push 3 1 2 2 6 1 1 1 7 と計算することができる。 スタックマシン(stack machine)と呼ばれ、 現代のプログラミング言語の処理系でも使われることがある仕組み ※ 18
という(同じく)古い言語の場合 3. LISP (+ 1 (* 2 3)) ※ 前置記法(prefix notation), ポーランド記法(Polish notation)と呼ばれる 演算子の優先順位のルールは不要 括弧は省略できない 演算子ごとに受け付ける被演算子の個数が不定なため) ( 19
で数式を評価してみると LISP on browser > (+ 1 (* 2 3)) 7 ; ; 数式 評価結果 20
多くのプログラミング言語での関数呼び出しの記法 add(1, multiply(2, 3)) と同等であり、抽象構文木(AST)に素直に対応する。 + * 1 2 3 プログラムのコード表現と抽象構文木が近いため、 コードのプログラム的な変換(構文マクロ(syntactic macro))が容易に実現できる ※ 21
これらの例では、文法を考える際に ルールを設けず機械的に扱いやすくする ルールを加えて人間に分かりやすくする という設計判断の違いがあることが見えてくる。 22
Further Reading 『コーディングを支える技術 ――成り立ちから学 ぶプログラミング作法』 『7つの言語 7つの世界』 『リーダブルコード ―より良いコードを書くため のシンプルで実践的なテクニック』 『プロダクティブ・プログラマ ―プログラマのた めの生産性向上術』 『英語の「なぜ?」に答える はじめての英語史』 23