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
ku-mu
March 25, 2023
1.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
学校で学んだことが ソフトウェアエンジニアという 仕事につながるまで
JOIの2023年3月 春季セミナー 全体講演会でお話した内容です。
ku-mu
March 25, 2023
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
940
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Exploring anti-patterns in Rails
aemeredith
4
540
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Transcript
ֶߍͰֶΜͩ͜ͱ͕ ιϑτΣΞΤϯδχΞͱ͍͏ ࣄʹͭͳ͕Δ·Ͱ 1
2 • ιϑτΣΞΤϯδχΞ • ͓ͷਫঁࢠେֶ/େֶӃ ཧֶ෦ ใՊֶՊ • ڝٕϓϩάϥϛϯά •
TopCoder :੨ ※AtCoderͷલʹ༗໊ͩͬͨͭ • ISUCON4 ֶੜ ༏উ • ߴߍ࣌ͷಘҙՊ: ࠃޠɾࣾձ Chica Matsueda ͘ʔΉ @ cocodrips
3 • 2002 ~ FinalFantasy9ʹײಈ͗ͯ͢͠࡞ͬͯΔ ήʔϜձࣾʹब৬͢Δ͜ͱΛܾΊΔ • 2015 ~
SQUARE ENIX ήʔϜϓϩάϥϚ • 2017 ~ σʔλੳͷελʔτΞοϓ σʔλੳίϯαϧλϯτ • 2018 ~ ϝϧΧϦ ιϑτΣΞΤϯδχΞ (AI / Backend / iOS) Chica Matsueda ͘ʔΉ @ cocodrips
Q: ϓϩάϥϛϯάΛ ͡Ί͖͔͚ͨͬʁ 4
Q: কདྷͲΜͳ͓ࣄΛ ͯ͠Έ͍ͨͰ͔͢ʁ 5
ࠓͷ͓ • ϓϩάϥϛϯάΛ͏͓ࣄ • ֶߍͷษڧڝٕϓϩάϥϛϯά ͍ͭࣄʹཱͭͷ͔ • ਐ࿏ɾࣄΛબͼํͷώϯτ 6
• ֶɺڝٕϓϩάϥϛϯάΛֶΜͰ͍ΔதͰɺ ͦΕ͕ͲΜͳ෩ʹকདྷʹཱͭͷ͔ͷ ྫΛ͍͔͓ͭ͘ݟ͍ͤͨ͠ͱࢥ͍·͢ • ษڧΛؤுΔϞνϕʔγϣϯʹͳͬͯ͘ΕͨΒخ͍͠ • લதֶੜʹͰ͖Δ͚ͩΘ͔ΔΑ͏ʹઆ໌͠Α͏ͱ͠
͍ͯΔͷͰɺߴߍੜͷํʹୀ۶ͳ෦͋Δ͔ • ࠷ޙͷํͨ͘͞Μֶ͠·͢ • Θ͔Βͳ͍෦ͲΜͲΜ࣭͍ͯͩ͘͠͞ʂʂ 7
ϓϩάϥϛϯάΛ͏͓ࣄ 8
ϓϩάϥϛϯάΛ͏͓ࣄ 9 ήʔϜϓϩάϥϚ ήʔϜΛ࡞Δ͓ࣄɻ144XJUDI͔ΒεϚϗ·Ͱ 8FCΤϯδχΞ 8FCαΠτͷϑϩϯτΤϯυɾόοΫΤϯυ ΫϥΠΞϯτΤϯδχΞ J04"OESPJEɾ8FCͷ࣮Λ͢Δ όοΫΤϯυΤϯδχΞ αʔϏεͷޙΖͰΔγεςϜ
"1* Λ࡞Δ γεςϜΤϯδχΞ 8FCγεςϜͷઃܭΛߟ͑Δ ηΩϡϦςΟΤϯδχΞ γεςϜΛڴҖ͔ΒकΔ "*ΤϯδχΞ "*ͷϞσϧΛ࡞ͬͨΓɺ݁ՌΛݕূ͢Δ σʔλੳΤϯδχΞ σʔλΛੳͨ͠ΓɾࢪࡦͷޮՌݕূΛͨ͠Γ͢Δ .-0QTΤϯδχΞ "*ͷϞσϧΛαʔϏεԽͤ͞ΔͨΊʹ͢Δ ΠϯϑϥΤϯδχΞ αʔϏεΛ͓٬͞Μʹಧ͚Δج൫Λ࡞Δ
ϓϩάϥϛϯάΛ͏͓ࣄ • ͍·ͲΜͳ͓ࣄ͕͍͔ͨ͠૾͢Δͷ͍͠ • ͲͷࣄΛ͢Δ͔ܾΊΔඞཁͳ͍ 10
ֶͱཧՊͰ༡Ϳ
ΩϟϥΫλʔʹଉΛͤ͞Δ 12
ΩϟϥΫλʔʹଉΛͤ͞Δ 13 scale = 1 + 0.1 * Mathf.Sin(speed *
Time.time);
ΩϟϥΫλʔʹଉΛͤ͞Δ 14 1Λϕʔεͷେ͖͞ͱͨ͠ͱ͖ʹɺఆഒͷsinθΛ͢͜ͱͰ Ұఆ࣌ؒͰαΠζ͕େখ͢ΔΦϒδΣΫτ͕࡞ΕΔ scale = 1 + 0.1
* Mathf.Sin(speed * Time.time); θݱࡏͷ࣌ؒΛ͏͜ͱͰ࣌ؒܦաͰΛมԽͤ͞ΒΕΔ
ΩϟϥΫλʔΛམԼͤ͞Δ 15 ࣗ༝མԼͷެࣜ མԼ Y2 = Y1 + (1/2) *
Gt2 t: ࣌ؒ, G: ॏྗՃ(=-9.8) Y2 = Y1 + Ct t: ࣌ؒ, C: ఆ(<=0)
ΩϟϥΫλʔΛམԼͤ͞Δ 16 ࣗ༝མԼͷެࣜ →தֶ̏ੜͷཧՊͰश͏ࣗ༝མԼӡಈ ɹΛͬͯࣗવͳམԼΞχϝʔγϣϯΛ࡞ΕΔ མԼ Y2 = Y1 +
Ct t: ࣌ؒ, C: ఆ(<=0) Y2 = Y1 + (1/2) * Gt2 t: ࣌ؒ, G: ॏྗՃ(=-9.8)
ABςετ
ABςετͱʁ 2ͭͷҧ͏όʔδϣϯͷWebϖʔδɾΞϓϦɾࠂͳͲΛɺ ϥϯμϜʹϢʔβʹදࣔͯ͠ɺͲͪΒͷ΄͏͕ίϯόʔδϣ ϯ(ߪೖɾొɾΫϦοΫ)Λ͔ͨ͠Λൺֱ͢Δ࣮ݧ 18
ͲͬͪͷσβΠϯ͕ྑ͍? 19 AҊ BҊ ίϯόʔδϣϯ ߪೖͯ͘͠Εͨ 5% 6% ࠓͳΒ
0'' ຊ࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ 🐶ʻͬͪ͜ͷ΄͏͕Αͦ͞͏ →→→→ •1pt up! •120%
ͲͬͪͷσβΠϯ͕ྑ͍? 20 AҊ BҊ ίϯόʔδϣϯ ߪೖͯ͘͠Εͨ 5% 6% දࣔͨ͠Ϣʔβʔ
100 100 ࠓͳΒ 0'' ຊ࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ 🐶ʻͬͪ͜ͷ΄͏͕Αͦ͞͏ʁ
ͲͬͪͷσβΠϯ͕ྑ͍? 21 AҊ BҊ ίϯόʔδϣϯ ߪೖͯ͘͠Εͨ 5% 6% 100
100 ࠓͳΒ 0'' ຊ࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ දࣔͨ͠Ϣʔβʔ 🐶ʻͬͪ͜ͷ΄͏͕Αͦ͞͏ʁ
ҧ͍ۮવͰͳ͍ͷ͔ʁ AҊ: 100ਓͷ5% = 5ਓ BҊ: 100ਓͷ6% = 6ਓ
࣮ࡍʹ1ਓ͔͠ߪೖͯ͘͠ΕͨਓҧΘͳ͍ͷʹɺ ͜ΕۮવͰͳ͘BҊ͕ϕλʔͩͱݴ͑Δͷ͔ʁ 22
౷ܭతԾઆݕఆ ʮBҊͱAҊͷίϯόʔδϣϯ͕ҟͳΔʯͱ͍͏͜ͱ͕ ޡࠩͰੜͨ͡ͱߟ͑ʹ͍͘͜ͱͰ͋Δ͔Λ֬ೝ͢Δํ๏ ࣜෳࡶͳͷͰؾʹͳΔਓ ʮΧΠೋݕఆʯʮTݕఆʯͰௐͯΈΑ͏ ※େֶͷ౷ܭֶͷतۀͰৄ͘͠Δൣғͷ༰ ABςετͷ݁Ռʹ౷ܭతʹ༗ҙʹ͕ࠩ͋Δ͜ͱΛ
ࣔͨ͢ΊʹɺेͳαϯϓϧΛ४උ͢Δඞཁ͕͋Δ 23
ͲͬͪͷσβΠϯ͕ྑ͍? 24 AҊ BҊ ίϯόʔδϣϯ ߪೖͯ͘͠Εͨ 5% 6% 10,000
10,000 ࠓͳΒ 0'' ຊ࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ 🐶ʻ౷ܭతʹ༗ҙʂ ͬͪ͜Λ࠾༻͠Α͏ʂ දࣔͨ͠Ϣʔβʔ
AIΛͬͨγεςϜΛ࡞Ζ͏
ը૾ݕࡧγεςϜ • ͋ͳͨͱ͋ΔECαΠτΛӡӦ͍ͯ͠Δ • Ϣʔβ͕ΠϯελάϥϜͷը૾Λૹ৴͢Δͱɺ ࣅͨը૾ͷΛ100ݸฦ͢γεςϜΛ࡞Γ͍ͨ • ͳ͓ECαΠτʹ1ԯݸͷ͕͋Δ 26
ը૾ݕࡧγεςϜͷ࡞Γํ STEP1(ֶश): ը૾ಛྔσʔλϕʔεΛ४උ͢Δ ը૾ͯ͢ΛಛྔϕΫτϧʹมͯ͠σʔλϕʔεʹ͍ΕΔ ※ ը૾ใ Width *
Height * 3ͷྻใ ※ ͍ΘΏΔσΟʔϓϥʔχϯάͷٕज़Λ͍ ը૾Λࣈใ(floatͷଟ࣍ݩྻ)ʹม 27 200 x 200ͷը૾ͳΒ, ͞120,000ྻͰ͋Δը૾ใΛ ͞100ఔͷྻʹѹॖ͢ΔΠϝʔδ (R, G, B) → ઢܗֶ(େֶ)ඍੵͷ͕ࣝඞཁ
ը૾ݕࡧγεςϜͷ࡞Γํ STEP2 (ਪ): ը૾ಛྔͷ͍ۙΛฦ͢γεςϜΛ࡞Δ ೖྗը૾ΛಛྔϕΫτϧʹม͠ɺ ࠷ۙ୳ࡧʢNNʣΛͯ͠ɺ͍ۙϕΫτϧΛ୳͢ 28 →ΞϧΰϦζϜͷجૅ͕ࣝඞཁ
ڝٕϓϩάϥϛϯάͷ෩ʹͯ͠ΈΔ 29 • Nݸͷ͞Mͷྻ͕༩͑ΒΕΔ • ৽ͨʹ͞Mͷྻ͕ೖྗͱͯ͠͞Εͨͱ͖ɺ ϢʔΫϦουڑͷ࠷͍ۙྻΛ100ݸฦͤ • 100
< N < 108 , 0 < M < 102 ಛྔϕΫτϧ
ڝٕϓϩάϥϛϯάͷ෩ʹͯ͠ΈΔ 30 • Nݸͷ͞Mͷྻ͕༩͑ΒΕΔ • ৽ͨʹ͞Mͷྻ͕ೖྗͱͯ͠͞Εͨͱ͖ɺ ϢʔΫϦουڑͷ࠷͍ۙྻΛ100ݸฦͤ • 100
< N < 108 , 0 < M < 102 ※ ͓٬༷Λͨͤͯߦ͚ͳ͍ͷͰ1ඵҎʹܭࢉ͢Δඞཁ͕͋Δ͕ɺ αʔόʔͷεϖοΫࣗͰߟ͑Δ͜ͱ͕Ͱ͖Δ ʹ> AtCoderͷจʹ͋ΔʮϝϞϦ੍ݶ1024 MBʯ ఫഇͰ͖Δ ಛྔϕΫτϧ
୯७ʹܭࢉ͢Δͱ… 100 < N < 108 , 0 < M
< 102 • ϝϞϦ༻ྔ N * M * M * 4byte(float) = 108 * 102 * 102 * 4 ≒ 4TB • ܭࢉྔ O(N * M * M) => 1012 31
୯७ʹܭࢉ͢Δͱ… 32 ݱ࣮త͡Όͳ͍… 100 < N < 108 , 0
< M < 102 • ϝϞϦ༻ྔ N * M * M * 4byte(float) = 108 * 102 * 102 * 4 ≒ 4TB • ܭࢉྔ O(N * M * M) => 1012
Ͳ͏ͬͯղܾ͢Δ͔ʁ 33 ࣄͰɺཁ݅Λᘳʹຬͨ͢ඞཁͳ͍ తΛՌͨͨ͢Ίͷϕλʔͳղܾํ๏ΛఏҊ͠Α͏ • 99ݸʹ͍ۙͱ96ݸͷॱ൪͕ҧͬͯ ϏδωεతͳӨڹେ͖͘ͳ͍ •
ͦͦશΛσʔλϕʔε͍ೖΕΔඞཁ͋Δͷ͔ʁ
Ͳ͏ͬͯղܾ͢Δ͔ʁ 34 • ࠷ۙ୳ࡧΞϧΰϦζϜΛΊͯ ۙࣅ࠷ۙ୳ࡧΞϧΰϦζϜ (Faiss)Λར༻͢Δ • GPUΛͬͯܭࢉ͢Δ
→ ίετ͕ߴ͘ͳΔͷͰخ͘͠ͳ͍ • ಛఆͷ݅Λຬ͚ͨͩ͢ΛΠϯσοΫεʹ͍ΕΔ ※ ྫ: աڈ3ϲ݄Ҏʹߪೖ͞Εͨཤྺ͕͋Δ͚ͩ → ҰؾʹରσʔλΛݮΒͤΔՄೳੑ͕ߴ͍ ϏδωεతͳӨڹΛܭࢉܾͯ͠ΊΔ
ಛʹ͍ͬͯΔֶߍͰֶΜͩࣝ 35 • தֶ • ֶશ෦ • ӳޠ • ߴߍ
• ࡾ֯ؔ (2) • ࢦɾର • ඍɾੵ • ֬ɾظ • ӳޠ • େֶ (ཧֶ෦) • ౷ܭ • ઢܗֶ • ίϯϐϡʔλجૅ • (ඍɾੵ)
ಛʹ͍ͬͯΔֶߍͰֶΜͩࣝ 36 • ͜ΕΒͷษڧΛ͍ͯ͠Δ࣌Ͱ ҰମԿʹʹཱͭͷ͔Θ͔Βͳ͔ͬͨ •
ֶͷ͕ࣝಛʹඞཁͳ 37
ใܥͷֶՊͰֶͿίϯϐϡʔλͷ͕ࣝ ಛʹʹཱͭ (ࢲݟ) 38
ਐֶઌʹ͍ͭͯߟ͑Δ • ઐֶߍब৬: Γ͍ͨ͜ͱ͕໌֬ʹܾ·ͬͯΔਓ˕ • େֶબͼ: ཧֶ෦ֶ෦ͷใܥͷֶՊ͕͓͢͢Ί • େ͖ͳେֶ͍ΖΜͳ͜ͱΛֶͼ͍͢
খ͞ͳେֶઌੜಉڃੜͱ͍ۙڑͰͬ͘͡ΓֶΔ • େֶͷHPͰଔۀੜͷਐ࿏͕ݟΕΔͷͰ ͕ࣗ૾͍ͯ͠Δਐ࿏ʹਐΜͰΔਓ͕ଟ͍͕ݟΔͱ˕ • ໌֬ʹΓ͍ͨ͜ͱ͕ܾ·ͬͯͳ͍ͳΒ ֶΔબࢶͷଟ͍େֶ͕͍͍͔? () 39
ιϑτΣΞΤϯδχΞ(SWE)ͷࣄ • ʮৗʹษڧ͠ଓ͚ΔʯࣄͱݴΘΕ͍ͯΔ… • ࣌ͲΜͲΜมΘ͍ͬͯ͘ͷͰ͔ͨ͠ʹ ϓϩάϥϛϯάݴޠɾϥΠϒϥϦΛֶͿඞཁ͋Δ • ֶɾίϯϐϡʔλͷجૅࣝɾΊͪΌͪ͘Όಘҙͳ
ϓϩάϥϛϯάݴޠ1͕ͭ͋ΕΩϟονΞοϓ͘͠ͳ͍ • ίϯϐϡʔλαΠΤϯεܥͷֶՊͷେֶͷ͕ࣝͳͯ͘ SWEʹͳΕΔɻͨͩͦͷ͕ࣝ͋Δͱࣄͷ෯͕Δ 40
ࠓ·Ͱͷࢲͷ͓ࣄ 41
ࠓ·Ͱͷࢲͷ͓ࣄ 42
SWEͷࣄͱڝٕϓϩάϥϛϯά • ࣄڝٕϓϩάϥϛϯάͷΑ͏ʹ ՝͕໌֬ʹܾΊΒΕ͍ͯͳ͍ɻ ࣮͢ΔͷͪΖΜͷ͜ͱɺ Γ͍ͨ͜ͱΛจʹམͱ͠ࠐΉͱ͜ΖࣄʹͳΔ •
ڝٕϓϩάϥϛϯάҰ෦ͷ࣮ྗͷ܇࿅ʹͳΔ • ࢲͷਓੜͷʹཱͪଓ͚ͯΔ ҧ͏ձࣾɾֶߍͷ༑ୡͨ͘͞ΜͰ͖ͯ࠷ߴͩΑͶ 43
ΞϧΰϦζϜҎ֎ͷڝٕϓϩάϥϛϯά • Kaggle (ఆظ) AIͷਫ਼Λڝ͏ • ISUCON (1)
Πϯϑϥ(αʔόʔͷϨεϙϯεͷ͞ɾޮΛڝ͏) ίϯςετ • SECCON ηΩϡϦςΟʹؔ͢Δίϯςετ • Codingame (ఆظ) ήʔϜAIͷίϯςετɻଞͷϢʔβͱରઓͰָ͖͍ͯ͠ 44