Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

君たちはどうプログラミングするか

 君たちはどうプログラミングするか

モデリングフォーラム2023の基調講演をさせていただいたときの発表資料です
https://umtp-japan.org/event-seminar/mf2023/13453

Hisateru Tanaka

November 26, 2023
Tweet

More Decks by Hisateru Tanaka

Other Decks in Programming

Transcript

  1. 8)0".* ͸͡Ί·ͯ͠ͷօ͞ΜΑΖ͓͘͠ئ͍͠·͢ w Α͘1)1ίϛϡχςΟʹݱΕ·͢ w ๭ࣗࣾαʔϏεͷ8FCγεςϜͷ໘ ౗ΛઐଐͰݟΔ࢓ࣄΛ΍͍ͬͯ·͢ɻ ΋͏গ͠Ͱ೥΄ͲʹͳΓ·͢ w 5XJUUFSͰίϚອը͸͡Ί·ͨ͠

    w ʮͪΐ͏ͥͭιϑτ΢ΣΞઃܭೖ ໳ʯஶऀͰ͢ !UBOBLBIJTBUFSV ాதͻͯ͞Δ ͪΐ͏ͥͭιϑτ΢ΣΞઃܭೖ໳ ʕʕ1)1Ͱཧղ͢ΔΦϒδΣΫτࢦ޲ͷ׆༻ ాதͻͯ͞Δஶ *4#/
  2. શମͷྲྀΕ w γϟϊϯͷΤϯτϩϐʔɾϑϥΫλϧ 
 ۙ୅ͷʮՊֶతʯࢥߟɾωΞϯσϧλʔϧਓ w ݪࢠɾଠཅܥɾੜ໋ɾΧΦεͷ෵ 
 ৘ใγεςϜͷΞʔΩςΫνϟɾࣗసंϞσϧ w

    νϡʔϦϯάɾϊΠϚϯɾνϣϜεΩʔɾϚοΧʔγʔɾέΠ 
 ੜ੒จ๏ɾϓϩάϥϛϯάݴޠ ʙ ࠶ߟ w ΦϒδΣΫτࢦ޲ʹܗࣜతఆ͕ٛʮͳ͍ʯͱ͍͏͜ͱ40-*% w ʮීวจ๏਎ମث׭ʯͷӕɾώτͷݴޠ஌ੑ֫ಘͱ͸ 
 σΧϧτɾύεΧϧɾΧϯσΟϯεΩʔɾϝΠϠεʔ
  3. ৘ใྔΛϓϩάϥϜίʔυͰᄻ͑ͯݴ͏ͱ ৘ใྔʮՄೳੑͷର਺ͷׂ߹૯࿨Λऔͬͨ΋ͷʯͬͯײ͡ print(“Hello, World.”) if hello: print(“Hello, World.”) else: print(“Goodbye.”)

    ৘ใྔϏοτ ৘ใྔϏοτ MPH͸ͭͶʹͳͷͰ 1J͸ʮJʹͳΔ֬཰ʯ MPHͱ͢Δͱ ͕͜͜ର਺ͳͷ͕ϙΠϯτ
  4. if hello: print(“Hello, World.”) if foo and bar: print(“...") elif

    baz: print(“...") else: print(“...") else: print(“Goodbye.”) if foo: if bar: print(“...") else: print(“...") else: Ϗοτ Τϯτϩϐʔͷ૿େ ຊ࣭తͳ෼ذ ͦΕͱ΋৑௕ͳ͚ͩ  ͱʹ͔࣮͘ମ͸ͲΜͲΜෳࡶʹͳ͍ͬͯ͘
  5. Τϯτϩϐʔ௥͍ग़͠ํ๏͋Ε͜Ε w ؔ਺Λઃ͚ΔˠৄࡉͷӅṭ w ม਺΍ؔ਺Λ·ͱΊΔˠڽूɾ݁߹ 
 ߏ଄Խϓϩάϥϛϯά͕Μ͹Δ w ܕ੍໿ͱෆมੑˠՄೳੑΛߜΔ 


    ΤϯτϩϐʔԼ͛ʹΘΓͱ௚઀ޮ͘ 
 ੍໿Λ୲อ͢Δݴޠͷಋೖ͕େ͖͍͚Ͳ w ͳͲɺߴڃݴޠͷػೳΛआΓͯ 
 ͏·͘΍Ζ͏Ͷ டংˢ ΧΦεˢ ૊৫Խ 
 ͱ͘ʹࣗͣͱܗʹͳ͍ͬͯ͘৔߹Λ ෺ཧֶͰࣗݾ૊৫Խͱݴ͏ ྫ݁থ
  6. Dͣͬͱ D       ʜൃࢄ D

       ʜ॥؀ D໿ʹऩଋ DK KͱKΛަޓʹ॥؀
  7. D KҰ؏ੑ͕શ͘ͳ͘ɺ΍͕ͯͲ͔͜΁ඈΜͰ͍͘  K   K   K

      K   K   K  K    K   K   K   K   K  K   K   K   K   K   K   K   K   K   K    K   K   K   K   K   K   K   K   K  K  D KҰ؏ੑ͕ͳ͍Α͏ʹݟ͑ͨͷʹɺ܁Γฦ͍ͯ͠ Δͱ࣍ͷ఺Λ௨Δपظؔ਺ʹͳΔ  K   K   K   K   K  K   K    K  K  ·͞ʹΧΦε
  8. 'PSNαϯλϑΣݚڀॴ w ΫϦετϑΝʔɾϥϯάτϯ w ηϧɾΦʔτϚτϯͷݚڀ w ൴ͷ೥ͷൃݟʹ༝དྷ w ενϡΞʔτɾΧ΢ϑϚϯ w

    ੜ໋ͷىݯɾਐԽΛߟ࡯ͨ͠ w ੜ໋͸ΧΦεͷԑʹ͓͚Δࣗݾ ૊৫Խͩͱදݱͨ͠ ਓ޻ੜ໋
  9. ଠཅܥ͓΋͠Ζࡶֶ w ଠཅόεέοτϘʔϧ͙Β͍ͩͱ͢Δͱ 
 ໦੕N཭Εͨͱ͜Ζʹ͋Δϐϯϙϯۄ 
 ΧΠύʔϕϧτͷԿඦ΋ͷ४࿭੕܈LN཭Εͨ##஄ w ෆࣗવͳҐஔʹ͋ΔఱମʮέϨεʯ 


    ΧΠύʔϕϧτʹ͋ΔΑ͏ͳ४࿭੕΋Ͳ͖͕ɺͳ͔ͥ໦੕ͷखલͷখ࿭੕ଳʹ͋Δ 
 ͓ͦΒ͘஍தʹେྔͷਫΛ࣋ͭණͷఱମ ້Ԧ੕ͳͲʹࣅ͍ͯΔ  w ͦΕݴ͏ͳΒ஍ٿΑਫͷΑ͏ͳ͍ܰ෺࣭͸ॳظʹͬ͞͞ͱਧ͖ඈ͹͞Εɺ 
 ΄ͱΜͲ͕ఱԦ੕ɾւԦ੕ΑΓ֎ʹଘࡏ͢Δ͸ͣʜ 
 εϊʔϥΠϯͷ಺ଆͰӷମͷਫΛอ࣋͢Δ࿭੕͸ɺ௒ෆࣗવͳఱମͳΜͰ͢
  10. $"ͱଠཅܥΛൺ΂ͯΈΔͱ w ߃੕ͱ࿭੕ˠ࿭੕ͱӴ੕ 
 ΫϦʔϯΞʔΩςΫνϟ͸࠶ؼ͢Δ͔΋͠Εͳ͍ ͪΐ͏ͥͭຊ  w ·Εʹଞͷ߃੕ܥͱͷ૬ޓ࡞༻͕ى͖Δ͜ͱ΋ʜ 


    ΫϦʔϯΞʔΩςΫνϟ͸͢΂ͯͷத৺Ͱ͸ͳ͘ɺ 
 ֎෦ʹ͋Διϑτ΢ΣΞ΋·ͨಠࣗͷΞʔΩςΫνϟΛ࣋ͭ ͪΐ͏ͥͭຊ  w ॳظখ࿭੕രܸݱࡏΦʔϧτͷӢʹಧ͘ክ੕ͷପԁيಓ 
 ֎ԑ෦ͷৼΔ෣͍͕಺෦ʹ࣮࣭తͳՁ஋ΛੜΉ ஍ٿͷਫ͸Ͳ͔͜Β 
 ݟ͑ͳ͍͙Β͍ԕ͘ʹ͋Δ΋ͷ͕ɺ಺෦ʹ༗ҙٛͳมԽΛ΋ͨΒ͢ ґଘͷ޲͖
  11. νϣϜεΩʔ֊૚ w จ๏ͳ͠ 
 ޠኮͷฒͼॱ͸೚ҙνϡʔϦϯάϚγϯϊΠϚϯܕͷػցޠ w จ຺ґଘจ๏ 
 औΓಘΔޠኮͷॱংΛ໢ཏ͢Δจ๏ ͋·Γ࢖͍ಓ͸ͳ͍

     w จ຺ࣗ༝จ๏ 
 ߏ଄తͳ૊Έ׵͕͑ՄೳͰɺ͔͠΋ແݶ࠶ؼߏ଄Λ࣋ͭ 
 ˠϓϩάϥϛϯάݴޠͷఆٛʹ׆༻͞Εͨ w ਖ਼نจ๏ 
 ࠶ؼ͕༗ݶͰࣗવݴޠͱͯ͠΋ݱ࣮తˠͦͷ··ਖ਼نදݱͱͯ͠ݱଘ
  12. "-(0- ʙ w νϣϜεΩʔͷΞΠσΞʹӨڹΛड͚ͨ࠷ॳͷݴޠ w '0353"/ͷδϣϯɾόοΧε w όʔδϣϯʹՃΘͬͨϐʔλʔɾφ΢Ξ w จ຺ࣗ༝จ๏ʹόοΧεɾφ΢Ξه๏

    #/' ΛఆΊͯ։ൃ w ैདྷͱҟͳΓɺઌʹϋʔυ΢ΣΞதཱͳจ๏ઃܭΛஔ͍ͨݴޠ w ޙͷଟ͘ͷϓϩάϥϛϯάݴޠͷ࢝૆ͱͳͬͨ
  13. ػցޠ໋ྩʹϚοϓ͞ΕΔ൓෮ͱ෼ذ FOR i FROM 1 TO 100 DO IF i

    MOD 15 = 0 THEN printf (( $ "FizzBuzz" l $ )) ELIF i MOD 3 = 0 THEN printf (( $ "Fizz" l $ )) ELIF i MOD 5 = 0 THEN printf (( $ "Buzz" l $ )) ELSE printf (( $ n(width(i))d l$, i )) FI OD
  14. -*41 ೥ʙ ެ։͸೥͝Ζ w δϣϯɾϚοΧʔγʔʹΑΔνϣϜεΩʔͷผղ w ΧοίͱࣜͷϦετҎ֎ɺԿ΋ͳ͍ۃ୺ͳจ຺ࣗ༝จ๏ w ࠷େͷಛ௃ϊΠϚϯܕͷܭࢉϞσϧΛهड़͠ͳ͍͜ͱ w

    -*41ͷීวจ๏ઢܗϦετϥϜμܭࢉ w ͕ɺ͜Ε΋·ͨສೳνϡʔϦϯάϚγϯͷͻͱͭ 
 ໋ྩྻͷϙΠϯλҠಈ͚ͩ͡Όͳ͍
  15. ߏจ໦Λ໌ࣔతͳΧοίͰද͢จ๏ ໘౗ͳจ๏نଇͷ࢓༷͕࠷খͰࡁΉ (map (lambda (n) (cond ((= (remainder n 15)

    0) "FizzBuzz") ((= (remainder n 3) 0) "Fizz") ((= (remainder n 5) 0) "Buzz") (else (number->string n)) )) (iota 100 1)) (+ 1 2) + 1 2 + 1 * 3 4 (+ 1 (* 3 4))
  16. ීวจ๏͕ҟͳΔܥྻ ΠϧΧ͸ڕྨ͡Όͳ͍Μͩ -*41 "-(0- 42- .- 1SPMPH 4NBMMUBML 1BTDBM "EB

    $ 4JNVMB 3VCZ )BTLFMM $ 3VTU (P એݴܕ ໋ྩܕ $0#0- '0353"/
  17. έΠͷΦϒδΣΫτࢦ޲ w 4NBMMUBML͸ʮ։ൃ؀ڥ࣮ߦ؀ڥʯͷ(6* w ಈతܕɾ஗Ԇଋറˡ͜͜௒ॏཁ 
 ͢΂ͯͷม਺͸࣮ߦ࣌·Ͱ࣮ମ͕ԿʹͳΔ͔Θ͔Βͳ͍ w ܭըతίʔσΟϯά͔ΒͷҰൃ੒ޭͳ΍ΓํΛ൱ఆ 


    ˠΠϯλϥΫςΟϒͳ*%&Ͱͷࢼߦࡨޡ ͳ͓೥୅  w 0CKFDUJWF$ʹܧঝˠʮ$ͷ··ʯͱʮ4NBMMUBMLͦͬ͘ΓʯͷΩϝϥ 
 ˠ"QQMFͱ/F95ͷ(6*Ͱ׆༂ˠ (P'σβΠϯύλʔϯ
  18. ϝοηʔδϯά ͦΕ͕4NBMMUBMLͷීวจ๏ yesOrNo ifTrue: [ Transcript show: ‘Yes’; cr. ]

    ifFalse:[ Transcript show: ‘No’; cr. ]. #PPMFBOTVCDMBTT5SVF JG5SVFUSVF#MPDLJG'BMTFGBMTF#MPDL ?USVF#MPDLWBMVF #PPMFBOTVCDMBTT'BMTF JG5SVFUSVF#MPDLJG'BMTFGBMTF#MPDL ?GBMTF#MPDLWBMVF USVF#MPDL͚ͩධՁ͢Δ GBMTF#MPDL͚ͩධՁ͢Δ ͢΂͕ͯʮΦϒδΣΫτϝοηʔδʜʯͷཧ۶Ͱಈ͘ɻ ͳΜͱɺஞ࣍ॲཧͳͷʹ*'ߏจ΋8)*-&ߏจ΋ͳ͍
  19. w ʮ0014JNVMBىݯͷ$  +BWBͷΑ͏ͳ΋ͷʯͱ͍͏ҹ৅Λ ࠜ෇͔ͤͨுຊਓ w &J ff FMʙΦϒδΣΫτΛʮந ৅σʔλܕͷ௚ܥࢠଙʯʹҐஔͮ

    ͚ɺ੩తܕͷܧঝΛΘΓͱॏࢹ έ Π΍.BU[ͱͷܾఆతҧ͍  w ѱ͘͸ͳ͍Μ͚ͩͲɺผ֓೦ͷͱ ͜Ζ͸໊લΛม͑Ζ όʔτϥϯυɾϝΠϠʔ
  20. ීวจ๏͸໾໨Λऴ͑ͨ w ීวจ๏ͷΞΠσΞ͸੯͔͕ͬͨ͠ɺ΋͸΍೥ લͷݹ͍ΞΠσΞ w νϣϜεΩʔ͸ಥવҨ఻ࢠʹ૊Έࠐ·Εͨʮ਎ମث ׭ʯͩͱ݁࿦͚ͮͨ ۙ୅఩ֶͷԆ௕ൃ૝  w

    ੜ෺ֶతʹߟ͑ͯͪΐͬͱ͋Γ͑ͳ͍ w ೥ͷՊֶతͳݚڀͷੵΈॏͶˠݴޠೳྗ͸ݱࡏ ʮޙఱతʹߏங͞ΕΔ΋ͷʯͱߟ͑ΒΕ͍ͯΔ ൃചͷॻ੶
  21. "*ίʔσΟϯάҎલ w ͋Ε ϦΞϧλΠϜͳϑΟʔυόοΫΛ׆͔͢ϓϩάϥϛϯάͬͯɺ͜Ε·Ͱʹͳ ͔͚ͬͨͬ  w *%&ͱର࿩ܕγΣϧ͸ ˠ4NBMMUBMLҎޙΘΓͱҰൠతʹʜ w

    .BDSPNFEJB%JSFDUPS 4DSBUDI #MFOEFS w *OUFMMJ+ͷ੩తղੳͳΜͯ"*ฒΈɺͱ͍͏͔"*ͱิ׬ؔ܎ʹ͋Δ͙Β͍ w 5%%ͷαΠΫϧ͸ ˠ46OJU +6OJUʜ w ʮॻ͍ͨΒͦͷ৔Ͱ͙͢୯඼࣮ߦʯ͸΋͏౰વͷ΍Γํ