Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
🐬の推し本紹介2025: 『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』
Search
Kent OHASHI
December 10, 2025
Programming
0
23
🐬の推し本紹介2025: 『コーディングを支える技術 ――成り立ちから学ぶプログラミング作法』
Kent OHASHI
December 10, 2025
Tweet
Share
More Decks by Kent OHASHI
See All by Kent OHASHI
KotlinでミニマルなResult実装による関数型エラーハンドリング
lagenorhynque
0
19
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
780
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
10
11k
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
CSC509 Lecture 14
javiergs
PRO
0
220
[SF Ruby Conf 2025] Rails X
palkan
0
480
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
100
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
200
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
2k
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.2k
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
340
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
3
220
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
220
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Thoughts on Productivity
jonyablonski
73
5k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Producing Creativity
orderedlist
PRO
348
40k
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