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
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
5
1.4k
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
2
510
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
240
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
0
290
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
230
チームの境界をブチ抜いていけ
tokai235
0
180
作って理解するGOCACHEPROG / Go Conference 2025(Workshop)
mazrean
0
100
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
240
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
950
Le côté obscur des IA génératives
pascallemerrer
0
150
CSC509 Lecture 06
javiergs
PRO
0
260
Featured
See All Featured
The Language of Interfaces
destraynor
162
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Faster Mobile Websites
deanohume
310
31k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
Why Our Code Smells
bkeepers
PRO
340
57k
Optimizing for Happiness
mojombo
379
70k
Being A Developer After 40
akosma
91
590k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Build your cross-platform service in a week with App Engine
jlugia
232
18k
Code Reviewing Like a Champion
maltzj
526
40k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
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 ありがとうございました!