Upgrade to Pro — share decks privately, control downloads, hide ads and more …

学校で学んだことが
ソフトウェアエンジニアという
仕事につながるまで

Avatar for ku-mu ku-mu
March 25, 2023
1.5k

 学校で学んだことが
ソフトウェアエンジニアという
仕事につながるまで

JOIの2023年3月 春季セミナー 全体講演会でお話した内容です。

Avatar for ku-mu

ku-mu

March 25, 2023
Tweet

Transcript

  1. 2 • ιϑτ΢ΣΞΤϯδχΞ • ͓஡ͷਫঁࢠେֶ/େֶӃ ཧֶ෦ ৘ใՊֶՊ • ڝٕϓϩάϥϛϯά •

    TopCoder :੨ ※AtCoderͷલʹ༗໊ͩͬͨ΍ͭ • ISUCON4 ֶੜ࿮ ༏উ • ߴߍ࣌୅ͷಘҙՊ໨: ࠃޠɾࣾձ Chica Matsueda ͘ʔΉ @ cocodrips
  2. 3 • 2002೥ ~ FinalFantasy9ʹײಈ͗ͯ͢͠࡞ͬͯΔ 
 ήʔϜձࣾʹब৬͢Δ͜ͱΛܾΊΔ • 2015೥ ~

    SQUARE ENIX 
 ήʔϜϓϩάϥϚ • 2017೥ ~ σʔλ෼ੳͷελʔτΞοϓ 
 σʔλ෼ੳίϯαϧλϯτ • 2018೥ ~ ϝϧΧϦ 
 ιϑτ΢ΣΞΤϯδχΞ 
 (AI / Backend / iOS) Chica Matsueda ͘ʔΉ @ cocodrips
  3. ϓϩάϥϛϯάΛ࢖͏͓࢓ࣄ 9 ήʔϜϓϩάϥϚ ήʔϜΛ࡞Δ͓࢓ࣄɻ14΍4XJUDI͔ΒεϚϗ·Ͱ 8FCΤϯδχΞ 8FCαΠτͷϑϩϯτΤϯυɾόοΫΤϯυ ΫϥΠΞϯτΤϯδχΞ J04΍"OESPJEɾ8FCͷ࣮૷Λ͢Δ όοΫΤϯυΤϯδχΞ αʔϏεͷޙΖͰ૸ΔγεςϜ

    "1* Λ࡞Δ γεςϜΤϯδχΞ 8FC΍γεςϜͷઃܭΛߟ͑Δ ηΩϡϦςΟΤϯδχΞ γεςϜΛڴҖ͔ΒकΔ "*ΤϯδχΞ "*ͷϞσϧΛ࡞ͬͨΓɺ݁ՌΛݕূ͢Δ σʔλ෼ੳΤϯδχΞ σʔλΛ෼ੳͨ͠ΓɾࢪࡦͷޮՌݕূΛͨ͠Γ͢Δ .-0QTΤϯδχΞ "*ͷϞσϧΛαʔϏεԽͤ͞ΔͨΊʹ޻෉͢Δ ΠϯϑϥΤϯδχΞ αʔϏεΛ͓٬͞Μʹಧ͚Δج൫Λ࡞Δ
  4. ΩϟϥΫλʔΛམԼͤ͞Δ 15 ࣗ༝མԼͷެࣜ ౳଎མԼ Y2 = Y1 + (1/2) *

    Gt2 t: ࣌ؒ, G: ॏྗՃ଎౓(=-9.8) Y2 = Y1 + Ct t: ࣌ؒ, C: ఆ਺(<=0)
  5. ͲͬͪͷσβΠϯ͕ྑ͍? 19 AҊ BҊ ίϯόʔδϣϯ཰ 
 ߪೖͯ͘͠Εͨ཰ 5% 6% ࠓͳΒ

    0'' ຊ೔࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ 🐶ʻͬͪ͜ͷ΄͏͕Αͦ͞͏ →→→→ •1pt up! •120%
  6. ͲͬͪͷσβΠϯ͕ྑ͍? 20 AҊ BҊ ίϯόʔδϣϯ཰ 
 ߪೖͯ͘͠Εͨ཰ 5% 6% දࣔͨ͠Ϣʔβʔ਺

    100 100 ࠓͳΒ 0'' ຊ೔࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ 🐶ʻͬͪ͜ͷ΄͏͕Αͦ͞͏ʁ
  7. ͲͬͪͷσβΠϯ͕ྑ͍? 21 AҊ BҊ ίϯόʔδϣϯ཰ 
 ߪೖͯ͘͠Εͨ཰ 5% 6% 100

    100 ࠓͳΒ 0'' ຊ೔࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ දࣔͨ͠Ϣʔβʔ਺ 🐶ʻͬͪ͜ͷ΄͏͕Αͦ͞͏ʁ
  8. ҧ͍͸ۮવͰ͸ͳ͍ͷ͔ʁ AҊ: 100ਓͷ5% = 5ਓ 
 BҊ: 100ਓͷ6% = 6ਓ

    ࣮ࡍʹ͸1ਓ͔͠ߪೖͯ͘͠Εͨਓ͸ҧΘͳ͍ͷʹɺ 
 ͜Ε͸ۮવͰ͸ͳ͘BҊ͕ϕλʔͩͱݴ͑Δͷ͔ʁ 
 22
  9. ͲͬͪͷσβΠϯ͕ྑ͍? 24 AҊ BҊ ίϯόʔδϣϯ཰ 
 ߪೖͯ͘͠Εͨ཰ 5% 6% 10,000

    10,000 ࠓͳΒ 0'' ຊ೔࣌·Ͱ 0'' ߪೖ͢Δ ߪೖ͢Δ 🐶ʻ౷ܭతʹ༗ҙʂ 
 ͬͪ͜Λ࠾༻͠Α͏ʂ දࣔͨ͠Ϣʔβʔ਺
  10. ը૾ݕࡧγεςϜͷ࡞Γํ STEP1(ֶश): ը૾ಛ௃ྔσʔλϕʔεΛ४උ͢Δ 
 ঎඼ը૾͢΂ͯΛಛ௃ྔϕΫτϧʹม׵ͯ͠σʔλϕʔεʹ͍ΕΔ 
 ※ ը૾৘ใ͸ Width *

    Height * 3ͷ഑ྻ৘ใ ※ ͍ΘΏΔσΟʔϓϥʔχϯάͷٕज़Λ࢖͍ 
 ը૾Λ਺ࣈ৘ใ(floatͷଟ࣍ݩ഑ྻ)ʹม׵ 
 27 200 x 200ͷը૾ͳΒ, 
 ௕͞120,000഑ྻͰ͋Δը૾৘ใΛ 
 ௕͞100ఔ౓ͷ഑ྻʹѹॖ͢ΔΠϝʔδ (R, G, B) → ઢܗ୅਺ֶ(େֶ)΍ඍੵͷ஌͕ࣝඞཁ
  11. ڝٕϓϩάϥϛϯάͷ໰୊෩ʹͯ͠ΈΔ 30 • Nݸͷ௕͞Mͷ഑ྻ͕༩͑ΒΕΔ • ৽ͨʹ௕͞Mͷ഑ྻ͕ೖྗͱͯ͠౉͞Εͨͱ͖ɺ 
 ϢʔΫϦουڑ཭ͷ࠷΋͍ۙ഑ྻΛ100ݸฦͤ • 100

    < N < 108 , 0 < M < 102 ※ ͓٬༷Λ଴ͨͤͯ͸ߦ͚ͳ͍ͷͰ1ඵҎ಺ʹܭࢉ͢Δඞཁ͕͋Δ͕ɺ 
 αʔόʔͷεϖοΫ͸ࣗ෼Ͱߟ͑Δ͜ͱ͕Ͱ͖Δ 
 ʹ> AtCoderͷ໰୊จʹ͋ΔʮϝϞϦ੍ݶ1024 MBʯ ͸ఫഇͰ͖Δ ঎඼਺ ಛ௃ྔϕΫτϧ
  12. ୯७ʹܭࢉ͢Δͱ… 100 < N < 108 , 0 < M

    < 102 • ϝϞϦ࢖༻ྔ 
 N * M * M * 4byte(float) 
 = 108 * 102 * 102 * 4 
 ≒ 4TB 
 • ܭࢉྔ 
 O(N * M * M) => 1012 31
  13. ୯७ʹܭࢉ͢Δͱ… 32 ݱ࣮త͡Όͳ͍… 100 < N < 108 , 0

    < M < 102 • ϝϞϦ࢖༻ྔ 
 N * M * M * 4byte(float) 
 = 108 * 102 * 102 * 4 
 ≒ 4TB 
 • ܭࢉྔ 
 O(N * M * M) => 1012
  14. Ͳ͏΍ͬͯղܾ͢Δ͔ʁ 34 • ࠷ۙ๣୳ࡧΞϧΰϦζϜΛ΍Ίͯ 
 ۙࣅ࠷ۙ๣୳ࡧΞϧΰϦζϜ (Faiss౳)Λར༻͢Δ • GPUΛ࢖ͬͯܭࢉ͢Δ 


    → ίετ͕ߴ͘ͳΔͷͰخ͘͠ͳ͍ • ಛఆͷ৚݅Λຬͨ͢঎඼͚ͩΛΠϯσοΫεʹ͍ΕΔ 
 ※ ྫ: աڈ3ϲ݄Ҏ಺ʹߪೖ͞Εͨཤྺ͕͋Δ঎඼͚ͩ 
 → Ұؾʹର৅σʔλΛݮΒͤΔՄೳੑ͕ߴ͍ 
 ϏδωεతͳӨڹΛܭࢉܾͯ͠ΊΔ
  15. ಛʹ࢖͍ͬͯΔֶߍͰֶΜͩ஌ࣝ 35 • தֶ • ਺ֶશ෦ • ӳޠ • ߴߍ

    • ࡾ֯ؔ਺ (਺2) • ࢦ਺ɾର਺ • ඍ෼ɾੵ෼ • ֬཰ɾظ଴஋ • ӳޠ • େֶ (ཧֶ෦) • ౷ܭ • ઢܗ୅਺ֶ • ίϯϐϡʔλجૅ • (ඍ෼ɾੵ෼)
  16. ਐֶઌʹ͍ͭͯߟ͑Δ • ઐ໳ֶߍ΍ब৬: ΍Γ͍ͨ͜ͱ͕໌֬ʹܾ·ͬͯΔਓ͸˕ • େֶબͼ: ཧֶ෦΍޻ֶ෦ͷ৘ใܥͷֶՊ͕͓͢͢Ί • େ͖ͳେֶ͸͍ΖΜͳ͜ͱΛֶͼ΍͍͢ 


    খ͞ͳେֶ͸ઌੜ΍ಉڃੜͱ͍ۙڑ཭Ͱͬ͘͡Γֶ΂Δ • େֶͷHPͰଔۀੜͷਐ࿏͕ݟΕΔͷͰ 
 ࣗ෼͕૝૾͍ͯ͠Δਐ࿏ʹਐΜͰΔਓ͕ଟ͍͕ݟΔͱ˕ • ໌֬ʹ΍Γ͍ͨ͜ͱ͕ܾ·ͬͯͳ͍ͳΒ 
 ֶ΂Δબ୒ࢶͷଟ͍େֶ͕͍͍͔΋? () 39
  17. ιϑτ΢ΣΞΤϯδχΞ(SWE)ͷ࢓ࣄ • ʮৗʹษڧ͠ଓ͚Δʯ࢓ࣄͱݴΘΕ͍ͯΔ… • ࣌୅͸ͲΜͲΜมΘ͍ͬͯ͘ͷͰ͔ͨ͠ʹ 
 ϓϩάϥϛϯάݴޠɾϥΠϒϥϦΛֶͿඞཁ͸͋Δ • ਺ֶɾίϯϐϡʔλͷجૅ஌ࣝɾΊͪΌͪ͘Όಘҙͳ 


    ϓϩάϥϛϯάݴޠ1͕ͭ͋Ε͹ΩϟονΞοϓ͸೉͘͠ͳ͍ • ίϯϐϡʔλαΠΤϯεܥͷֶՊͷେֶͷ஌͕ࣝͳͯ͘΋ 
 SWEʹ͸ͳΕΔɻͨͩͦͷ஌͕ࣝ͋Δͱ࢓ࣄͷ෯͸޿͕Δ 40
  18. SWEͷ࢓ࣄͱڝٕϓϩάϥϛϯά • ࢓ࣄ͸ڝٕϓϩάϥϛϯά໰୊ͷΑ͏ʹ 
 ՝୊͕໌֬ʹ͸ܾΊΒΕ͍ͯͳ͍ɻ 
 ࣮૷͢Δͷ͸΋ͪΖΜͷ͜ͱɺ 
 ΍Γ͍ͨ͜ͱΛ໰୊จʹམͱ͠ࠐΉͱ͜Ζ΋࢓ࣄʹͳΔ •

    ڝٕϓϩάϥϛϯά͸Ұ෦ͷ࣮૷ྗͷ܇࿅ʹͳΔ • ࢲͷਓੜͷ໾ʹཱͪଓ͚ͯΔ 
 ҧ͏ձࣾɾֶߍͷ༑ୡ΋ͨ͘͞ΜͰ͖ͯ࠷ߴͩΑͶ 43
  19. ΞϧΰϦζϜҎ֎ͷڝٕϓϩάϥϛϯά • Kaggle (ఆظ) 
 AIͷਫ਼౓Λڝ͏ • ISUCON (೥1) 


    Πϯϑϥ(αʔόʔͷϨεϙϯεͷ଎͞ɾޮ཰Λڝ͏) ίϯςετ • SECCON 
 ηΩϡϦςΟʹؔ͢Δίϯςετ • Codingame (ఆظ) 
 ήʔϜAIͷίϯςετɻଞͷϢʔβͱରઓͰָ͖͍ͯ͠ 44