Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

新人教育と(Javaと)Python

3,780 views

Published on

PyCon mini Hiroshima 2015の発表で使用したスライドです。

Published in: Technology
  • Be the first to comment

新人教育と(Javaと)Python

  1. 1. 新人教育と (Javaと) Python 長谷場 潤也 2015-11-22 PyCon mini Hiroshima 2015
  2. 2. 自己紹介 • 長谷場 潤也(はせば じゅんや) • Twitter:@7pairs • GitHub:https://github.com/7pairs • 株式会社アイモバイル所属 • アドネットワーク担当のエンジニア • C#、JavaScript…など • 前職まで15年間SIerに勤務 • 今日の発表はその頃のお話
  3. 3. アジェンダ • なぜ新人教育でPythonを採用したのか • Pythonで教育がどう変わったか • Pythonで講師たちがどう変わったか • 配属されてからの違いはあったのか • まとめ
  4. 4. なぜ新人教育でPythonを採用したのか
  5. 5. 教育の前提 • 入社直後の新人さんに対するプログラミング教育 • 対象にはプログラミング未経験者も含まれる • 経験者は教育を早めに切り上げることも… • 教育期間は1∼3ヶ月(年度によって差違あり) • 並行してほかの研修も実施する • マナー研修、情報処理基礎、データベースなど
  6. 6. 教育の目的 • 先輩の指導下で業務がこなせるようになること • プログラミングに必要な考え方を身につけること • 言語そのものの習熟にはこだわらない • 業務で関わる機会の多いWeb開発につなげたい • 言語を問わず必要となる知識が多い • Webアプリの仕組み、セキュリティなど
  7. 7. 採用する言語の条件 「Windows環境で開発できて…」 (Pythonだ…) 「冗長な記述をする必要がなくて…」 (Pythonだ…) 「難しいパラダイムの言語ではなくて…」 (Pythonだ…) 「Webとの親和性が高い言語で…」 (Pythonだ…!)
  8. 8. それまでの新人教育 • 実務を意識してJavaで実施することが多かった • Javaでは多くのことを同時に学ぶ必要がある • プログラミングの考え方 • オブジェクト指向 • Java言語の文法
  9. 9. Java版Hello World // おまじないとして進めざるを得ない項目が多い public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  10. 10. Java版Hello Worldのおまじない (1) // クラス public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  11. 11. Java版Hello Worldのおまじない (2) // メソッド public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  12. 12. Java版Hello Worldのおまじない (3) // アクセス修飾子 public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  13. 13. Java版Hello Worldのおまじない (4) // 静的(メソッド) public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  14. 14. Java版Hello Worldのおまじない (5) // 戻り値 public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  15. 15. Java版Hello Worldのおまじない (6) // 引数 public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  16. 16. Java版Hello Worldのおまじない (7) // 配列(もしくは可変長引数) public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } }
  17. 17. Java版Hello Worldのおまじない (8) // パッケージ public class HelloWorld { public static void main(String[] args) { System.out.println("エリチカ、おうちに帰る!"); } }
  18. 18. おまじないの効能 • おまじないとして割り切れるのも才能 • 手が止まってしまう人もいる • おまじないばかりでは写経から得るものがなくなる • その時点での理解を放棄している
  19. 19. 生み出される混沌 • ファイル名と異なる名前のpublicクラス • 同一ファイル内に2つのpublicクラス • 同一クラス内に2つのmainメソッド • エントリポイントのつもりのmain2メソッド
  20. 20. Python3版Hello World // 講師に優しいHello World print("hello, world")
  21. 21. Pythonの採用によって期待されること • クラスが必ずしも必要ない • 関数が必ずしも必要ない • 対話モードならファイルすら必要ない • 最初のおまじないで微妙な空気になることもない
  22. 22. よくある反論と回答 (1) Q. 実際に業務で使う言語で教育すれば、そのあとスムー ズに実務に入れるのでは? A. 上司の指示だと報告書に書いて良いのであれば、業務 でもっとも使われているJava1.4で教育します。
  23. 23. よくある反論と回答 (2) Q. Pythonという言語は聞いたことがないが、そんなマイ ナーな言語で学習に支障はないのか? A. 弊社製独自フレームワークよりは広く使われている言 語なので、自習も容易だと考えています。
  24. 24. Pythonで教育がどう変わったか
  25. 25. 動的型付け言語である • コードを書くときに試行錯誤しやすい • 一方で設計の大切さが伝わりづらい面も… • コレクションが使いやすい • "1" + 1 が 2 にならない程度の厳密さを持つ
  26. 26. 対話モードを持っている • 様々な場面で大活躍 • 例を説明するとき • 新人さんが試行錯誤するとき • 講師がこっそり言語仕様を確認するとき • Pythonを採用したことで教育の進め方が変わった
  27. 27. Webとの親和性が高い • PythonだけでWebアプリを作ることができる • Javaで教育していた頃のことは思い出したくもない… • Tomcatを入れて… • 可読性の低いJSPを書いて… • 変更のたびに再起動をして…
  28. 28. テキストエディタで充分にコーディングできる • 非力なマシンでもなんとか進めることができる • Javaで教えていた頃のことは思い出したくもない… • Eclipseの起動に5分かかる… • コーディング中にExcelを開くと固まる…
  29. 29. Pythonで講師たちがどう変わったか
  30. 30. 学習への意欲が生まれた • 人に教えるためにはまず理解しなければならない • 新人さんに質問されたら答えなければならない • もちろん嘘を教えるわけにはいかない • 新しいことを学ぶ楽しさを思い出した
  31. 31. 英語に対する抵抗感が和らいだ • 公式ドキュメントを離れると日本語情報が少ない • 外部ライブラリのドキュメント • Stack Overflowなど • 英語を読まざるを得ない状況に • 追い込まれれば意外となんとかなる
  32. 32. 業務にPythonを取り入れる動き • ツール類をPythonに置き換える • Perlからの置き換え • シェルスクリプトからの置き換え • VBAからの置き換え • プロダクトでの導入はハードルが高かった…
  33. 33. 配属されてからの違いはあったのか
  34. 34. インデントは偉大だった • ブロック単位できちんとインデントする習慣 • 規約を意識したコーディング • PEP8も偉大だった
  35. 35. 既存の機能を使おうとしてくれる • 新人さんにありがちな車輪の再発明が発生しづらい • 標準ライブラリで解決することができないか • APIのJavadoc、MSDN等を調べる習慣 • 外部のライブラリで解決することができないか • ただ、なんでもかんでもjarを追加するのは…
  36. 36. 関数をオブジェクトとして扱う • map、filterなどで関数を引数に指定した経験 • ほかの言語でも類推して理解することができる • C#、JavaScriptなど • Java8? 何それ美味しいの?
  37. 37. 昔ながらのfor文に戸惑ってしまう for (String str : strArray) { // Pythonのforからの類推で理解できる } for (int i = 0; i < strArray.length; i++) { // 何これ? 見たことがない! }
  38. 38. 昔ながらのfor文を理解しなければいけないたった一つの理由 • Java1.4が現役であるため • Python採用2年目はJavaScriptを例に説明
  39. 39. まとめ
  40. 40. まとめ • Pythonの採用により、アルゴリズムなどの本当に教え たい部分にフォーカスできた • 業務で利用しないPythonで教育する場合、そのマイナ スを上回るメリットを提示できるように • 新人教育は講師の教育でもある • Pythonとほかの言語との違いを認識させ、もし足りな い機能がある場合は別言語を例にすることも必要
  41. 41. ご清聴ありがとうございました

×