$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
🐬の推し本紹介2025: 『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』
Search
Kent OHASHI
December 10, 2025
Programming
0
8
🐬の推し本紹介2025: 『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』
Kent OHASHI
December 10, 2025
Tweet
Share
More Decks by Kent OHASHI
See All by Kent OHASHI
KotlinでミニマルなResult実装による関数型エラーハンドリング
lagenorhynque
0
18
Functional Calisthenics in Kotlin: Kotlinで「関数型エクササイズ」を実践しよう
lagenorhynque
0
150
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
lagenorhynque
1
120
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
lagenorhynque
1
160
From Scala/Clojure to Kotlin
lagenorhynque
0
67
TDD with RDD: Clojure/LispのREPLで変わる開発体験
lagenorhynque
0
93
🐬の推し本紹介2024: 『脱・日本語なまり 英語(+α)実践音声学』
lagenorhynque
1
130
do Notation Equivalents in JVM languages: Scala, Kotlin, Clojure
lagenorhynque
0
98
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
lagenorhynque
0
96
Other Decks in Programming
See All in Programming
関数の挙動書き換える
takatofukui
4
770
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
230
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
300
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.2k
モダンJSフレームワークのビルドプロセス 〜なぜReactは503行、Svelteは12行なのか〜
fuuki12
0
210
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
180
React Native New Architecture 移行実践報告
taminif
1
140
スタートアップを支える技術戦略と組織づくり
pospome
8
15k
sbt 2
xuwei_k
0
220
How Software Deployment tools have changed in the past 20 years
geshan
0
28k
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
240
無秩序からの脱却 / Emergence from chaos
nrslib
2
12k
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Agile that works and the tools we love
rasmusluckow
331
21k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
700
Designing for Performance
lara
610
69k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Writing Fast Ruby
sferik
630
62k
Documentation Writing (for coders)
carmenintech
76
5.2k
Transcript
🐬の推し本紹介2025 『コーディングを支える技術 ― ― 成り立ちから学ぶプログラミング作法』 1
法学部出身のIT エンジニア イルカ🐬が好き プログラミング、語学、法学、数学が好き lagénorhynque 🐬カマイルカ 2
🐬が新人プログラマによく推薦する技術書 3
『コーディングを支える技術 ― ― 成り立ちから学ぶプログラミング作法』 4
🐬< 「成り立ちから学ぶ」とは 5
2 種類の比較の視点 共時的(synchronique) / 同時代的な「横」の比較 英語 vs フランス語 日本法 vs
アメリカ法 通時的(diachronique) / 歴史的な「縦」の比較 古代の日本語 vs 現代の日本語 近世の法令 vs 現代の法令 ※ 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
2. という古い言語(1950 年代〜) の場合 ※ と呼ばれる 演算子の優先順位のルールは不要 括弧は不要 ( 演算子ごとに受け付ける
の個数が決まっていて曖昧さがないため) FORTH 1 2 3 * + 後置記法(postfix notation), 逆ポーランド記法(reverse Polish notation) 被演算子(operand) 16
で数式を評価してみると FORTH on browser > 1 2 3 * +
. ( 数式。ここで . は結果を取り出す操作) 7 ( 評価結果) 17
というデータ構造を用いて 1 1 2 1 2 3 1 6 7
1 2 3 * + 2 3 * + 3 * + * + + ( 終端) 2 3 1 6 * + stack push push push pop & push pop & push と計算することができる。 ※ と呼ばれ、 現代のプログラミング言語の処理系でも使われることがある仕組み スタック(stack) スタックマシン(stack machine) 18
3. という( 同じく) 古い言語の場合 ※ と呼ばれる 演算子の優先順位のルールは不要 括弧は省略できない ( 演算子ごとに受け付ける被演算子の個数が不定なため)
LISP (+ 1 (* 2 3)) 前置記法(prefix notation), ポーランド記法(Polish notation) 19
で数式を評価してみると LISP on browser > (+ 1 (* 2 3))
; 数式 7 ; 評価結果 20
多くのプログラミング言語での関数呼び出しの記法 と同等であり、抽象構文木(AST) に素直に対応する。 + 1 * 2 3 ※ プログラムのコード表現と抽象構文木が近いため、
コードのプログラム的な変換( ) が容易に実現できる add(1, multiply(2, 3)) 構文マクロ(syntactic macro) 21
これらの例では、文法を考える際に ルールを設けず機械的に扱いやすくする ルールを加えて人間に分かりやすくする という設計判断の違いがあることが見えてくる。 22
Further Reading 『コーディングを支える技術 ― ― 成り立ちから学 ぶプログラミング作法』 『7 つの言語 7
つの世界』 『リーダブルコード ― より良いコードを書くため のシンプルで実践的なテクニック』 『プロダクティブ・プログラマ ― プログラマのた めの生産性向上術』 『英語の「なぜ? 」に答える はじめての英語史』 23