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
おすすめの技術書
Search
Maku
March 27, 2023
Programming
0
200
おすすめの技術書
TECH WOMAN KANSAI 第6回 おすすめの技術書やツールについてのLT会 での発表資料です。
Maku
March 27, 2023
Tweet
Share
More Decks by Maku
See All by Maku
コミュニティに参加してからの1年間を振り返る
maku459
0
110
Other Decks in Programming
See All in Programming
アーキテクチャと考える迷子にならない開発者テスト
irof
7
2.8k
AI駆動開発カンファレンスAutumn2025 _AI駆動開発にはAI駆動品質保証
autifyhq
0
160
OSS開発者の憂鬱
yusukebe
12
4k
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
400
Kotlin 2.2が切り拓く: コンテキストパラメータで書く関数型DSLと新しい依存管理のかたち
knih
0
420
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.1k
Phronetic Team with AI - Agile Japan 2025 closing
hiranabe
2
560
Promise.tryで実現する新しいエラーハンドリング New error handling with Promise try
bicstone
2
440
Kotlinで実装するCPU/GPU 「協調的」パフォーマンス管理
matuyuhi
0
400
KoogではじめるAIエージェント開発
hiroaki404
1
480
2025 컴포즈 마법사
jisungbin
0
120
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
10
4.1k
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Designing for humans not robots
tammielis
254
26k
RailsConf 2023
tenderlove
30
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Designing Experiences People Love
moore
142
24k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Producing Creativity
orderedlist
PRO
348
40k
Visualization
eitanlees
150
16k
Side Projects
sachag
455
43k
Agile that works and the tools we love
rasmusluckow
331
21k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Transcript
おすすめの技術書 まく まつもとゆきひろのコードの世界
2 / 14 まつもとゆきひろのコードの世界 Ruby の開発者、まつもとゆきひろ氏の日経 Linux の連載を まとめた書籍。 主に
Web フロントエンドをやってきた自分が C++の研修を受けて いた時、C++とjsの違いに混乱していたら先輩が教えて下さりまし た。 おすすめポイントは… 普通の技術書と違って「1 つの技術」に焦点を当てていないところ Amazon Link スーパー・プログラマになる 14 の思考法
3 / 14 「コードの世界」という名の通り プログラミング言語の世界全体を網羅できる内容 一つの章でも複数の言語について言及されている
4 / 14 こんな人におすすめ なんでオブジェクト指向の言語には静的な型が多いんだろう 🤔 柔軟に書ける言語ってどういうことなんだろう 🤔 文字化けってどうして起こるんだろう 🤔
Shift-JISとかUnicodeとか聞いたことあるけど違いわからない 🤔 Googleマップって膨大なデータ読み込んでるのになんでスムーズにスクロールできるんだろう 🤔 …というのを、言語の歴史を踏まえてわかりやすく説明している本です。 章ごとに内容がガラッと変わるので飽きない & 技術書としてではなく読み物としても面白い!
5 / 14 なぜオブジェクト指向の言語に静的な型が多いのか? 🤔 (オブジェクト指向に馴染みのない方はすみません、こういうやつです) class Person { public
string name = ""; public void SetName(string name) { this.name = name; } public void ShowAgeAndName() { Console.WriteLine(" 名前:{0} 年齢:{1}", name, age); } }
6 / 14 静的な型 と 動的な型 静的な型 動的な型 変数を作るときに、どんな型にするのかを決め る。=変数とデータの型が一致する
変数を作るときにどんな型にするか決めず、実際に値を 代入するタイミングで(動的に)型が決定。 例(C#): private int PlayerNum = 10; 例(js): const PlayerNum = 10; 型が違うと事前にエラーを出すので保守性が高 い 型定義(データ設計)の手間が省ける 型がわかっているので実行速度が早い 実行しないと型がわからないので実行速度が遅い C#、C++、Javaなど js、Ruby、Python、PHPなど ` ` ` `
7 / 14 オブジェクト指向の「ポリモーフィズム」 Parentクラスを継承するChildクラスがあり、それぞれTestという関数があると想定します。 左側が静的な型、右側が動的な型になります。 C#では通常、継承元と継承先に同名の関数がある場合、どちらの関数が呼び出されるかは静的な型によって 決定されます。 → けど、bは実際にはChildクラスのオブジェクトなのだから、ChildのTest関数を呼び出したい!
Parent a = new Parent(); a.Test(); // Parent の Test が呼ばれる Parent b = new Child(); b.Test(); // Parent の Test が呼ばれる Child c = new Child(); c.Test(); // Child の Test が呼ばれる
8 / 14 オブジェクト指向の「ポリモーフィズム」 Childクラスで関数の前にoverrideをつけると、 Childクラスの方の関数が呼ばれます。 このように実行時の型に応じてふるまいが変わることをポリモーフィズムと呼びます。 class Parent {
public virtual void Test(){Console.Write("hoge");} } class Child : Parent // Parent を継承したChild クラス { public override void Test(){Console.Write("fuga");} }
9 / 14 😃「ふーん、C#やJavaではそういう書き方をするんだな〜〜」
10 / 14 でもよく考えると・・・ 静的型だったら変数とデータの型は完全に一致するはず → こんな動的な挙動ができるのはおかしいのでは?
11 / 14 🤔「こういう挙動をさせたいなら最初から動的型にすればいいのでは・・・?」 🤔「なんで静的な型でオブジェクト指向が多いんだろう・・・?」
12 / 14 歴史から教えてくれます 実はオブジェクト指向は元々は動的型の言語で生まれた Simulaという言語が、どのクラスのオブジェクトであっても全て「Ref型」として扱い、実際にどのよ うなオブジェクトかはオブジェクト自身しか知らない、という仕様を作った。 「変数とデータの型が完全に一致する」静的な型の下では、ポリモーフィズムのような挙動は本来でき なかった そこへ静的型言語の代表であるC++が、継承されたクラスのオブジェクトを継承元のクラスのオブジェク
トとみなす というルールを作った。 この結果「変数とデータの型は完全に一致する」わけではなくなり、動的な振る舞いも可能になった 変数の型が実行前にわかるという静的型の利点と、実行時に動的な振る舞いが可能 という利点が両立で きるようになり、静的型のオブジェクト指向言語が普及していった 🥳
13 / 14 この本の注意 出版年がめっちゃ古い(2012) 筆者の論が昨今の事情と合っていない場合もあります。 もちろん最新のフロントエンド開発の具体的方法を知りたいなら最新の専門書を読んだ方がいいです が、この本ではもっと根底にある言語の思想とか、プログラミングの世界を知ることができます。 歴史は変わらないので、昔はこうだったんだ、と知るだけでも面白いです。 難解な箇所もある
知っていると楽しいけど実務でそこまで知っている必要はないみたいなマニアックさ コードが結構出てきます(特にRuby) 難解な箇所は読み飛ばしましょう…! 注意点もありますが、 今まで気に留めていなかった些細な疑問がたくさんわかって読んでいるだけで楽しい本でした!
14 / 14 ありがとうございました!