Advertisement

新人教育と(Javaと)Python

Nov. 23, 2015
Advertisement

More Related Content

Advertisement
Advertisement

新人教育と(Javaと)Python

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