Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
🐬の推し本紹介2025: 『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』
Search
Kent OHASHI
December 19, 2025
Programming
0
66
🐬の推し本紹介2025: 『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』
Kent OHASHI
December 19, 2025
Tweet
Share
More Decks by Kent OHASHI
See All by Kent OHASHI
KotlinでミニマルなResult実装による関数型エラーハンドリング
lagenorhynque
0
25
Functional Calisthenics in Kotlin: Kotlinで「関数型エクササイズ」を実践しよう
lagenorhynque
1
230
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
lagenorhynque
1
150
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
lagenorhynque
1
180
From Scala/Clojure to Kotlin
lagenorhynque
0
80
TDD with RDD: Clojure/LispのREPLで変わる開発体験
lagenorhynque
0
110
🐬の推し本紹介2024: 『脱・日本語なまり 英語(+α)実践音声学』
lagenorhynque
1
140
do Notation Equivalents in JVM languages: Scala, Kotlin, Clojure
lagenorhynque
0
100
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
lagenorhynque
0
100
Other Decks in Programming
See All in Programming
CSC307 Lecture 03
javiergs
PRO
1
480
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
5.6k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.6k
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
200
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
180
TestingOsaka6_Ozono
o3
0
280
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.1k
Basic Architectures
denyspoltorak
0
390
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
530
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
480
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.7k
クラウドに依存しないS3を使った開発術
simesaba80
0
230
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
75
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
1k
Speed Design
sergeychernyshev
33
1.5k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
41k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
71
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
190
How GitHub (no longer) Works
holman
316
140k
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