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
A Ruby Programming Episode: Ruby is my glasses,...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Koji SHIMADA
PRO
November 24, 2017
Programming
9.1k
17
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
A Ruby Programming Episode: Ruby is my glasses, my stationery, and my language
福岡Ruby会議02での発表資料です。
http://regional.rubykaigi.org/fukuoka02/
Koji SHIMADA
PRO
November 24, 2017
More Decks by Koji SHIMADA
See All by Koji SHIMADA
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
35
12k
日本Rubyの会: これまでとこれから
snoozer05
PRO
6
1k
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
8
720
One Enishi After Another
snoozer05
PRO
1
540
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
26
8.8k
WHOLENESS, REPAIRING, AND TO HAVE FUN: 全体性、修復、そして楽しむこと
snoozer05
PRO
10
26k
スタッフエンジニアの道: The Staff Engineer’s Path
snoozer05
PRO
55
22k
ソフトウェアアーキテクチャメトリクスの基礎: Software architecture metrics in a nutshell
snoozer05
PRO
35
15k
これから学ぶ人のための ソフトウェアアーキテクチャ入門: Software architecture is a tool to enhance our humanity
snoozer05
PRO
44
28k
Other Decks in Programming
See All in Programming
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
420
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
Cloudflare is Agents
chimame
0
190
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
200
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
180
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
540
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
330
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
120
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
620
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
620
My Marp Sample
sinoue0108
0
140
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Building Applications with DynamoDB
mza
96
7.2k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
A Modern Web Designer's Workflow
chriscoyier
698
190k
Optimizing for Happiness
mojombo
378
71k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
230
Building Adaptive Systems
keathley
44
3.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Google's AI Overviews - The New Search
badams
0
1.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Transcript
ౡాߒೋ !TOPP[FS Ԭ3VCZձٞ/PW "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF
ౡాߒೋ!TOPP[FS w גࣜձࣾ͑ʹ͠ςοΫ w 3VCZࡳຈ w Ұൠࣾஂ๏ਓຊ3VCZͷձ
IUUQSFHJPOBMSVCZLBJHJPSHGVLVPLB
普段どおりにRubyでプログラミング を⾏い、そこから⾒えてくることから、 カンファレンスのテーマである「私に とってRubyがどのような技術か」を 考えていきます
ϓϩάϥϛϯάΤϐιʔυ
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
FYFSDJTNJP
FYFSDJTNJP
FYFSDJTNJP
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
Inner Peace
実際にやっていきましょう
ͦͷલʹʜ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜͬ͘͠Γ͘ΔղΛબ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜͬ͘͠Γ͘ΔղΛબ͢Δ
ࠓͷ͓
IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT
IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT จࣈྻͱO͕༩͑ΒΕΔͱ͖ɺจࣈྻ͔ΒOࣈ ͣͭ࿈ଓ͢Δ෦จࣈྻͷू߹ΛऔΓग़ͯ͠ग़ ྗ͢Δ series = Series.new('01234') series.slices(1) #=> ['0',
'1', '2', '3', '4'] series.slices(2) #=> ['01', '12', '23', ’34'] series.slices(3) #=> ['012', '123', '234']
࣮ԋ
class Series def initialize(string) @string = string end def slices(n)
#TODO end end ४උ
string = '01234' n = 2 string[0, n] #=> `01`
string[1, n] #=> `12` string[2, n] #=> `23` n = 3 string[0, n] #=> `012` string[1, n] #=> `123` string[2, n] #=> `234` ఴࣈΛҠಈͤ͞ͳ͕Β෦จࣈྻΛूΊ͍͚͍͍ͯʁ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ จࣈྻͷ֤จࣈΛͣΒ͠ͳ͕Βɺ͞Oͷ࿈ଓ͢Δ෦จࣈྻΛ औΓग़͍ͯ͘͠ͱ͍͏ʁ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ ࠷ޙʹΓΛΘ͟Θ͟ॻ͔ͳ͍͚ͯ͘ͳ͍ͷ͕ؾʹͳΔ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ ࠷ޙʹΓΛΘ͟Θ͟ॻ͔ͳ͍͚ͯ͘ͳ͍ͷ͕ؾʹͳΔ &OVNFSBCMFXJUI@PCKFDUΛ͓͏
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎ Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ͠ͳ͕Β ผͷϦετʹೖΕͯΔͷͰ
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎ Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ͠ͳ͕Β ผͷϦετʹೖΕͯΔͷͰ &OVNFSBCMFNBQͰྑ͍ͷͰ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
͞Oͷ࿈ଓ͢Δ෦จࣈྻΛऔΓग़ͤΔఴࣈΛ ରԠ͢Δʹม͢Δʁ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
<>ͰΞΫηε͍ͯ͠Δͷந͕߹ͬͯͳ͍ؾ͕͢Δ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
<>ͰΞΫηε͍ͯ͠Δͷந͕߹ͬͯͳ͍ؾ͕͢Δ 4USJOHTMJDFʹͯ͠ҙਤΛίʔυͰද໌͠Α͏
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ͖͑Ε͍ͯͳͯ͘ؾʹͳΔ
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ͖͑Ε͍ͯͳͯ͘ؾʹͳΔ ͍ͬͨΜશ෦TMJDFͯ͠͠·͔ͬͯΒαΠζ͕߹Θͳ͍ͷΛ ϑΟϧλ͢ΔɺͩͱͲ͏͔ͳʁ
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end ͜͜ఴࣈΛશ෦औΔͱ͍͏෩ʹॻ͚ͦ͏ʁ
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end TMJDFͷڍಈΛѲͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔ Θ͔Βͳ͍ͷͰඍົ͔ͳ͋
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end TMJDFͷڍಈΛѲͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔ Θ͔Βͳ͍ͷͰඍົ͔ͳ͋ ࠷ॳʹTFMFDU͔ͯ͠ΒTMJDF͢ΔͩͱͲ͏ͩΖ͏ʁ
Ҋ̓ def slices(n) @string.chars.each_index.select {|i| i + n <= @string.length
}.map {|i| @string.slice(i, n) } end
Ҋ̓ def slices(n) @string.chars.each_index.select {|i| i + n <= @string.length
}.map {|i| @string.slice(i, n) } end ͬͪ͜ͷํ͕·ͩTMJDFͷڍಈΛؾʹ͠ͳͯ͘ಡΊΔ ϚγͰ͔͢Ͷ͑ɻͰ͏ͪΐͬͱ͔ͳ͋
Ҋ̓ DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰʁʢ͋Γͦ͏ʣ def slices(n) @string.chars.each_index.select {|i| i + n
<= @string.length }.map {|i| @string.slice(i, n) } end
Ҋ̓ DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰʁʢ͋Γͦ͏ʣ def slices(n) @string.chars.each_index.select {|i| i + n
<= @string.length }.map {|i| @string.slice(i, n) } end ͦ͏͔ɺͭ·ΓFBDI@DPOT͔
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢ จࣈྻ͔Βʮ͞Oͷ࿈ଓ͢Δ෦จࣈྻʯ Λͯ͢औΓग़͢
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢ จࣈྻ͔Βʮ͞Oͷ࿈ଓ͢Δ෦จࣈྻʯ Λͯ͢औΓग़͢ ͏·͘ݴ͑ͯΔͷͰʁʁʁ
࠷ऴҊ class Series def initialize(string) @string = string end def
slices(n) @string.chars.each_cons(n).map(&:join) end end
None
ࢲʹͱͬͯ 3VCZ͕ͲΜͳݴޠͰ͋Δ͔
΅͘ʹͱͬͯ3VCZͱ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
ʁʁʁ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
3VCZΊ͕ͶͰ͋Δ
3VCZΊ͕ͶͰ͋Δ ΛΑ͘ݟ͑ΔΑ͏ʹͯ͘͠ΕΔ
3VCZΊ͕ͶͰ͋Δ ੈքΛͲ͏ղऍͨ͠Βྑ͍͔ͷ ࢹ࠲Λ༩͑ͯ͘ΕΔ
3VCZϖϯͰ͋Δ
3VCZϖϯͰ͋Δ ΅͘ʹͱͬͯ3VCZ͍ͪΜࣗવͳ ॻ͖৺͕͢ΔϖϯͷΑ͏ͳͷ
3VCZϖϯͰ͋Δ ⾝体になじむペンは思考を促進する l ʰത࢜ͷѪͨ͠3VCZͱֶʱʢݪ৴Ұ ͱͪ͗3VCZձٞʣ
3VCZϖϯͰ͋Δ l ʰത࢜ͷѪͨ͠3VCZͱֶʱʢݪ৴Ұ ͱͪ͗3VCZձٞʣ 計算をする⼈間と紙の間にあるの がペン。投げ出しそうになった瞬 間に、あと10秒余計に考えられる かどうかはペンで決まる。
3VCZݴޠͰ͋Δ
3VCZݴޠͰ͋Δ ᅳޭҰʰதಈଶͷੈքҙࢤͱͷߟݹֶʱ l思考の可能性は、⾔語能⼒に結びつい ている。というのも、⾔語とは形式を 持った意味の構造であり、思考すると は⾔語の記号を操ることだからである。
3VCZݴޠͰ͋Δ FBDI@DPOT͖ͯͬͯͨ͠Ϧετͷ֤ཁૉΛ KPJOͨ͠จࣈྻͱNBQͯ͠Δ
3VCZݴޠͰ͋Δ ϙʔϧάϨΞϜʰϋοΧʔͱըՈίϯϐϡʔλ࣌ͷऀͨͪʱ lプログラミング⾔語はプログラマ がプログラムを考えるためのもの であって、既に考えたプログラム を書き下すためのものじゃない。
3VCZݴޠͰ͋Δ l私たちはもはや、正直⾔ってそれ をコンピュータ⾔語とは呼べない。 それはプログラマ語だ。それは私 たちが思考する⾔語なのだ。 XIZUIFMVDLZTUJ⒎ʰϗϫΠͷ ײಈత 3VCZΨΠυʱ ʮݴޠͱɺݴޠͰҙຯ͍ͯ͠Δͷʯ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
ところで、私はRubyというめがねを通して問題を 認識して、Rubyというペンをつかって外部へアウ トプットしていて、頭ではRubyで思考している。 これはもう私⾃⾝がRubyと⾔ってしまっても過⾔ ではないのではないだろうか…??
けれど、実際には⼀体ではないからこそいい のである。⼤事なのはRubyと⾃分が息が合 うこと。⼀体だと錯覚してしまうと、協⼒関 係から依存関係になってしまう(よくない)
ҧ͏ͷʹ৮ΕΔͱɺΑΓʮͦͷͷʯͷ͜ͱ͕Θ͔Δ w ҧ͏Ί͕ͶͰࣄΛݟΔ w ҧ͏ॻ͖৺ͷϖϯΛ͏ w ҧ͏ݴޠͰࢥߟͯ͠ΈΔ
·ͱΊ
ϓϩάϥϛϯάΤϐιʔυɿ
FYFSDJTNJP
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜదͩͱײ͡ΔղΛબ͢Δ
今⽇ご覧いただいたような、⼩さな表 現の選択を積み重ねながら「そのもの がソフトウェアのことを語っているよ うなコード」を探っていく⾏為が、プ ログラミングという活動において⾮常 に重要な点なのではないかと考えてい ます。
Inner Peace
ࢲʹͱͬͯ 3VCZͱͲΜͳٕज़Ͱ͋Δ͔ɿ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w εΫϦϓτݴޠ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w εΫϦϓτݴޠ w ϓϩάϥϛϯάݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦ w εΫϦϓτ w ϓϩάϥϛϯάݴޠ Ͱ͋Δ
ΦϒδΣΫτࢦεΫϦϓτݴޠ3VCZ
ちょっと⼤げさに表現すると、Ruby の究極の⽬的は、有限の⼈⽣において プログラミングの楽しい部分にできる だけ集中できるように助けることです。 ·ͭͱΏ͖ͻΖɺੴ௩ܓथʰΦϒδΣΫτࢦεΫϦϓτݴޠ3VCZʱ l
ౡాߒೋ !TOPP[FS Ԭ3VCZձٞ/PW "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF