Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
おすすめの技術書
Search
Maku
March 27, 2023
Programming
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
おすすめの技術書
TECH WOMAN KANSAI 第6回 おすすめの技術書やツールについてのLT会 での発表資料です。
Maku
March 27, 2023
More Decks by Maku
See All by Maku
コミュニティに参加してからの1年間を振り返る
maku459
0
140
Other Decks in Programming
See All in Programming
SREの越境 / SRE Collaboration
y0hgi
2
300
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
490
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
370
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.1k
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
350
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.1k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
360
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
220
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
690
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
140
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
400
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
160
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
25k
Writing Fast Ruby
sferik
630
63k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
HDC tutorial
michielstock
2
950
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
Thoughts on Productivity
jonyablonski
76
5.4k
Designing for Performance
lara
612
70k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
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 ありがとうございました!