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
140
おすすめの技術書
TECH WOMAN KANSAI 第6回 おすすめの技術書やツールについてのLT会 での発表資料です。
Maku
March 27, 2023
Tweet
Share
More Decks by Maku
See All by Maku
コミュニティに参加してからの1年間を振り返る
maku459
0
56
Other Decks in Programming
See All in Programming
VS Code をプロダクトにどう取り込むか
onomax
1
640
Goのエラースタックトレースの歴史と今後
sonatard
10
1.7k
Goのmultiple errorsについて (2024年4月版)
syumai
4
1.1k
Build Apps for iOS, Android & Desktop in 100% Kotlin With Compose Multiplatform (mDevCamp 2024)
zsmb
0
420
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
890
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
670
Code Reviews
bkuhlmann
4
890
AmperとFleetを使ったAndroidアプリ
yoppie
0
250
dbtのドメイン分割による データ基盤の改善とDigdagとの連携
sakama
0
430
Deep Dive into React Stream/Serialize
mugi_uno
3
550
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
270
見た目から始める生産性向上
ikumatadokoro
10
1.3k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
79
43k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
13
8.3k
RailsConf 2023
tenderlove
8
550
Practical Orchestrator
shlominoach
183
9.7k
Rebuilding a faster, lazier Slack
samanthasiow
74
8.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
Unsuck your backbone
ammeep
663
57k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
19
6.9k
Writing Fast Ruby
sferik
622
60k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Designing with Data
zakiwarfel
96
4.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
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 ありがとうございました!