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
210
0
Share
おすすめの技術書
TECH WOMAN KANSAI 第6回 おすすめの技術書やツールについてのLT会 での発表資料です。
Maku
March 27, 2023
More Decks by Maku
See All by Maku
コミュニティに参加してからの1年間を振り返る
maku459
0
110
Other Decks in Programming
See All in Programming
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
570
事業会社でのセキュリティ長期インターンについて
masachikaura
0
230
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
安いハードウェアでVulkan
fadis
1
930
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
340
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
220
AI活用のコスパを最大化する方法
ochtum
0
380
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
0
230
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
2
150
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
830
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
160
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
9
5.2k
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
240
Odyssey Design
rkendrick25
PRO
2
570
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
110
Abbi's Birthday
coloredviolet
2
6.5k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
Paper Plane
katiecoart
PRO
1
49k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
96
Leo the Paperboy
mayatellez
7
1.6k
Utilizing Notion as your number one productivity tool
mfonobong
4
290
Being A Developer After 40
akosma
91
590k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
96
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 ありがとうございました!