Pythonとプログラミング

 Pythonとプログラミング

PyCon mini Hiroshima 2016の資料です。
http://pyconjp.connpass.com/event/39164/

サブのスライドです。
https://speakerdeck.com/eiel/pythonkaramiruduo-xiang-falsehua

1a679952cdf455ecd6a15cbde7ae80d5?s=128

Tomohiko Himura

November 12, 2016
Tweet

Transcript

  1. Pythonͱϓϩάϥϛϯά 2016-11-12 PyCon mini Hiroshima 2016

  2. Րଜ ஐ඙ • 0x20୅ • ޿ౡҭͪɺ޿ౡੜ·ΕͷϓϩάϥϚ • ޷͖ͳPythonͷػೳ ಺แදه •

    Twitter: eielh • GitHub: eiel
  3. None
  4. None
  5. None
  6. 広島に来たら我馬へ

  7. すごい広島

  8. すごい広島 • エンジニアが集まっている • 雑談とか • 自分の作業とか • 毎週水曜日 19時

  9. LT駆動開発

  10. LT駆動開発 • 毎月発表して勉強する勉強会 • 毎月発表するのは大変 • とても勉強になる • 毎月 第一土曜日

    or 日曜日
  11. ITエンジニア合同忘年会 広島ITエンジニア合同忘年会2016 12月10日(土) 18:00

  12. Pythonͷࢥ͍ग़

  13. Pythonの思い出 • 時代はPythonかなって(2009年ごろ) • Perl/PHPが強い時期

  14. Pythonの思い出 • 時代はPythonかなって(2009年ごろ) • Perl/PHPが強い時期 • 仕事でPython、趣味はRuby

  15. Pythonの思い出 • 時代はPythonかなって(2009年ごろ) • Perl/PHPが強い時期 • 仕事でPython、趣味はRuby • /usr/bin/pythonを置き換えてしまった

  16. Pythonの思い出 • 時代はPythonかなって(2009年ごろ) • Perl/PHPが強い時期 • 仕事でPython、趣味はRuby • /usr/bin/pythonを置き換えてしまった ZVNಈ͔ͳ͘ͳΔʂʂ

  17. ࠓ೔ͷ͓࿩

  18. 「いろいろなプログラミング言語 を適材適所で使うということがピ ンと来ない」という人たちがいる

  19. そういうことで 「広島でいろいろなプログラミ ング言語に関心を持っている人」 である火村さん

  20. None
  21. 「最新」ばっか
 追いかけててもだめだよ

  22. 「最新」ばっか
 追いかけててもだめだよ ͳΜౖ͔ΒΕͦ͏ͩͳʜ

  23. 1ZUIPOͷݞΛ࣋ͭ

  24. 広島 プログラミング言語 火村 Pythonの肩を持つ

  25. あじぇんだ • プログラミング言語の使い分け • いろんなプログラミング言語を学ぶ理由 • 雑なプログラミング言語紹介 • 例になるのかよくわかないけど例 多相

    • まとめ
  26. お詫び Pythonとプログラミングという タイトルをつけましたが、そん なにタイトルにあった内容に なりませんでした。僕自身が楽し んで話せるように進めていきた いと思います。

  27. ϓϩάϥϛϯάݴޠ࢖͍෼͚

  28. なぜプログラミングするのか

  29. プログラミングする主な理由

  30. プログラミングする主な理由 • アプリケーション作成の依頼を受けた

  31. プログラミングする主な理由 • アプリケーション作成の依頼を受けた • 仕事

  32. プログラミングする主な理由 • アプリケーション作成の依頼を受けた • 仕事 • 目の前の手作業がめんどくさい

  33. プログラミングする主な理由 • アプリケーション作成の依頼を受けた • 仕事 • 目の前の手作業がめんどくさい • 計算機の利用・自分のための自動化

  34. プログラミングする主な理由 • アプリケーション作成の依頼を受けた • 仕事 • 目の前の手作業がめんどくさい • 計算機の利用・自分のための自動化 •

    プログラミングやコンピュータへの理解を深める
  35. プログラミングする主な理由 • アプリケーション作成の依頼を受けた • 仕事 • 目の前の手作業がめんどくさい • 計算機の利用・自分のための自動化 •

    プログラミングやコンピュータへの理解を深める • 学習・知的好奇心
  36. アプリケーション作成

  37. プログラミング言語より ϓϥοτϑΥʔϜ

  38. • Windows • C# VB • Mac iOS • Objective-C

    Swift • Webフロントエンド • JavaScript
  39. 選ぶ余地などない

  40. プログラミングは手段

  41. プログラミングは手段 ໨త͕͋Δͱ͖͸ͦ΋ͦ΋೰·ͳ͍

  42. webバックエンド

  43. • Python • PHP • Java • Ruby • Scala

    • Elixir
  44. たいていの場合、PHPが正解 状況によってはJava

  45. 我々はプログラミング言語 に使われているんだ…

  46. r 1ZUIPOͷݞʹͷΔ1Z$PONJOJ)JSPTIJNB IUUQXXXTMJEFTIBSFOFUBUTVPJTIJNPUPQZUIPO

  47. 深さに到達するために 余計につまづく必要はない

  48. 状況に適したものを選択する

  49. 自分の目的へ向かうための自動化

  50. 好きなもの使いやすい

  51. 1ZUIPOͷݞʹͷΔ1Z$PONJOJ)JSPTIJNB IUUQXXXTMJEFTIBSFOFUBUTVPJTIJNPUPQZUIPO

  52. 適用範囲が広い 強い(確信)

  53. 1ZUIPOͷݞʹͷΔ1Z$PONJOJ)JSPTIJNB IUUQXXXTMJEFTIBSFOFUBUTVPJTIJNPUPQZUIPO

  54. 素直なので 学びやすい

  55. 他と比較しやすい

  56. 私がよく使う プログラミング言語

  57. 最近よくつかうプログラミング言語 • Haskell 学習 他にない機能がたくさん • Ruby 自動化 さくっとかきたい •

    Scala 自動化 がっつりかくとき • JavaScript 自動化 仕方ないんだ • PHP    仕事 仕方ないんだ
  58. 最近よくつかうプログラミング言語 • Haskell 学習 他にない機能がたくさん • Ruby 自動化 さくっとかきたい •

    Scala 自動化 がっつりかくとき • JavaScript 自動化 仕方ないんだ • PHP    仕事 仕方ないんだ 1ZUIPOͳ͍͡ΌΜʂʂ
  59. 最近よくつかうプログラミング言語 • Haskell 学習 他にない機能がたくさん • Ruby 自動化 さくっとかきたい •

    Scala 自動化 がっつりかくとき • JavaScript 自動化 仕方ないんだ • PHP    仕事 仕方ないんだ 1ZUIPOͳ͍͡ΌΜʂʂ 1ZUIPOৄ͘͠ͳ͍Ͱ͢
  60. • 楽に解決したい • 学びたい プログラミング言語の使い分け

  61. ͍ΖΜͳϓϩάϥϛϯάݴޠ ΛֶͿཧ༝

  62. プログラミングそのものを 理解を深めるため

  63. None
  64. None
  65. None
  66. None
  67. ԁபͰ͢Ͷ

  68. 一方向からみてるだけでは 全体像は把握できない

  69. 言語に問わない知識を 見つけ出すために さまざまなプログラミング言語を試す

  70. プログラミングという概念を 理解することが目的

  71. もっと楽に プログラミングがしたい

  72. 構造化定理 • 全てのアルゴリズムは3つの基本構造を組 み合わせてつくることができる • 順次 • 繰り返し • 選択

  73. 言語の持つ多くの機能は なくてもなんとかなる

  74. プログラミングは 小さな部品を組み合わせて 大きな部品を構築する

  75. 大きな部品を使えば 見通しがよくなる

  76. ࡶͳݴޠ঺հ

  77. 本内容は個人の主観と偏見で 満ちています。なるべく間違っ たことを言わないように気を つけてはいますが、すべてを 知っているわけではありませ ん。気軽な指摘や反論はご自 由にお願いします。

  78. 覚えて損はないGoogle言語

  79. Python • 人類をPerlの闇から救った • 文法がニュートラルな言語 • 利用範囲が広い • 非プログラマにも多く利用されている •

    計算機を活用したいなら覚えるべき
  80. Java • 硬いPython。比較的似ている気はする • ビッグデータの活用に活躍している • Python利用者であれば • Jythonがある •

    Java利用者であれば • Groovyを覚えるほうが現実的かもしれない
  81. Go • Pythonの思想をC言語の得意な世界で • Pythonとはちょっと違った非同期 • Go製のコマンドラインツールが増えてる • GoとPythonが使えると強い

  82. JavaScript • Pythonと似てきている • await/async • ジェネレータ • モジュールシステム •

    非プログラマでも使えるべき • ブラウザを使うなら覚えるべき言語
  83. async/awaitで使うloopが初めから動 いてる感じの言語 loop = asyncio.get_event_loop()

  84. Pythonと立ち位置が近い言語

  85. Perl • Pythonが闇に葬った言語 • Pythonを利用しているなら • 必要がないなら覚える必要はない

  86. PHP • Pythonが使えるなら覚える理由はあまりない • 世界に追いついていく言語 • Pythonも使えると幅が広がる • クロージャがPythonよりも丁寧に扱える

  87. # Python def hoge(): n = 1 def goro(): n

    + 1 # n͕ࢀরͰ͖Δ return goro() hoge() # => 2
  88. // PHP <? function hoge() { $n = 1; $goro

    = function() use ($n) { // use ($n) ͕ඞཁ return $n+1; }; return $goro(); } hoge(); // => 2
  89. Ruby • Pythonの良きライバル • Lispが好きならRubyのほうが楽しい • 世界に高階関数を浸透させた功績

  90. Lisp • ポール・グレアムがPythonにはクロージャ がないがLispにはある • python3には nonlocalがある • マクロが強力 •

    docstringがある
  91. 特定のプラットフォーム

  92. Swift • Pythonに似ているといえば似ている • というか最近の言語にいろいろい似ている • Appleに興味がなければ覚えなくてもいい • 言語という点には学べる点が多い

  93. C# • async/awaitはここからきた • ひとつの標準言語

  94. おまけ

  95. Haskell • 文法的にはPythonに似ている言語 • 使い勝手は全然違う • どんな言語と比べても学びが多い • Pythonより強力な内包表記がある

  96. Scala • Pythonにはそんなに似てない • どちらかというとRubyに似ている • forがリストの内包表記として使える • Replにペーストモードがある

  97. # Python [ (x, y) for x in range(1,10) if

    x % 2 == 0 for y in range(1,10) if y % 3 == 0 ] // Scala for { x <- 1 to 9 if x % 2 == 0 y <- 1 to 9 if y % 3 == 0 } yield (x, y)
  98. Erlang • Pythonと縁は少ない • バイナリの内包表記という機能がある • 分散・リアルタイムシステム • 学べる点が多い •

    個人的には • ScalaのAkkaとの違いを学ぶために勉強している
  99. %% erlang όΠφϦͷ಺แදه << <<X>> || <<X>> <= <<1,2,3,4,5>>, X

    rem 2 == 0>>.
  100. Elixir • erlangがRubyっぽくなりました • これからのwebの有力候補

  101. Julia • 科学計算処理でPythonを脅かしている • 実行が早い • CythonやNumPyなら負けないとか • Haskellでデータ処理がんばってた人が •

    Julia使いになってた
  102. Rust • 今後オープンソースの世界で活躍するはず • Haskellを使う人が「良い」と言う言語

  103. C • 標準であるけどニュートラルではない • Pythonのソースをよむためにも覚えよう

  104. C++ • 闇のPython • さらなる進化を続けている

  105. Re: θϩ͔Β͸͡ΊΔϓϩάϥϛϯά • JavaScript • Python • Ruby

  106. ࣮຿Ͱૺ۰͠΍͍͢ • C#/VB • Java • PHP • JavaScript •

    C/C++
  107. ϓϩάϥϛϯάͱ͍͏֓೦Λ
 ֶͼ͍ͨͳΒ • Erlang • Haskell • Lisp

  108. 文法的な部分を中心に話をしましたが コミュニティやエコシステムの違いも 本来は言語の違いになると思います

  109. 言語機能 多相

  110. None
  111. まとめ

  112. プログラミングは 多くの場合 手段

  113. 目的のために 楽な手段を選択すべき

  114. 多くの場合、言語は 使い分けさせられる

  115. もしプログラミングが 目的するなら

  116. 得意な言語を軸に 他のプログラミング言語を学ぶことで プログラミングという概念が学べる

  117. 素直な言語なので Pythonと比較するのはおすすめ

  118. Haskell は 面白い機能がたくさんある

  119. まとめ • 言語の使い分け • ほとんどプラットフォーム • 楽できるものを使う • いろんな視点をみることで •

    プログラミングの本質がみえる • プログラマーとして一歩前に出たいなら • すこし特徴的な言語にも挑戦してみて