Skip to content

Instantly share code, notes, and snippets.

@keokent
Last active December 23, 2015 12:49
Show Gist options
  • Save keokent/6638436 to your computer and use it in GitHub Desktop.
Save keokent/6638436 to your computer and use it in GitHub Desktop.
YAPC::Asia Tokyo 2013 9-20

YAPC::Asia Tokyo 2013 9-20

学術分野におけるperl

  • 研究テーマが大規模で先輩から引き継ぐ系が多くそのため、perlのコードが代々引き継がれる  - 学生はperlを書かざるをえない

  • perlは言語処理という印象

  • 正規表現、文字列処理に強い
  • コンパイラのテスト  開発段階でコンパイラに関するテストツールの開発・提供 およびバグレポートを行っている

  • 学生がPerlを便利と思った点

  • 純粋にスクリプト言語は便利
  • とりあせず適当に書いてもコードが動く
  • 不便わかりにくい点
  • コーディングルールが難しい
  • POD形式の可読性が低い
  • 指導教員のPerlの印象 
  • Cと比べて行数が少なくできる
  • すべてのメソッドがpubicなのでいい加減なコードになりがち
  • GPGPU
  • グラフィックカードの演算資源を画像処理以外のものに応用する技術
  • GPUの各コアで処理を並列実行
  • シミュレーション 暗号解読 音声処理などに有用
  • PerlにおけるGPGPU
  • KappaCUDA
  • ExtUtils::nvcc
  • OpenCL
  • 他のLL言語におけるGPGPU
  • ParaRuby
  • RubyのGPGPUフレームワーク
  • Ikra ・・ruby

大規模Perl初心者研修を支える技術 (DeNA)

  • 入社した学生
  • WEB開発経験豊富な新卒は少ない -少し経験あるくらい
  • どんなエンジニアになってもらいたいか
  • 変化に対応できる 主体的に技術習得できる 技術以外も成長できる
  • 自走できるエンジニア
  • 研修の設計
  • ワークショップ:個人 71人すべてへの個別指導
  • 研修の基準
  • 設計:MySQL
     大規模想定の深い知識 Index, Transaction

  • 実装:Perl, OOP
    CPANモジュール普通に使える

  • 研修の概要
  • 座学(講義 テスト)
    libux network mysql web security git  Perlは独学
  • ワークショップ
     企画、設計、実装をひとりでできるくらいに
  • 研究の詳細
  • すでにある企画書がベース
    最低限必要な技術(batch daemon ranking)を詰め
    遷移図、DDLを作成

  • MySQLについて深い理解
     高トラフィック対応に必要な現場で得られる知識

  • SQL、DDLを作成  SQL一覧作成し、DDLと照合

  • オブジェクト指向でのWeb Aplication開発

  • 高トラフィック、レプリケーション遅延も対応
      トランザクション

  • チーム開発を意識した情報整理 一貫性のあるコード
    オレオレコード撲滅 MVC
    実装しながら理想的な実装を学ぶ

  • 技術力確認テスト :perl
     筆記テスト
    スクラムワークショップ
    ストレスマネジメント研修
    Sys障害にどう対処するか

  • 研修で発生した問題
  • 顔と名前が一致しない
    顔の名前のリスト 意識的にコミュニケーション
  • 71人の進捗状況を把握できない
      Google Docsで管理
  • 講師の意思疎通が大変
  • 信頼関係を築くのが大変
      ランチ、宅飲み会
      レビューでしっかりぶつかる 研修生に尊敬される
  • 人多すぎでよかったこと
  • 急成長メンバーが複数出てくる
  • 同じ問題を抱えるメンバーが複数出てくる
      誰かが改善すれば他のメンバも改善できる
      研修生同士で教え合える
  • データ比較することで傾向や平均を導出できる
  • 規模に依存しない起きた問題
  • オブジェクト指向を理解させることは大変
  • 完全未経験の新卒をエンジニアにするのは大変
  • 研修生の意識を変えること
  • OOPの教育
  • Sampleを参考にしてオブジェクト指向を学ばせる
    OOPなWAF使う
      SAL:Makerだどを読んでもらった
  • 未経験者の育成
  • 基礎スキル向上のきっかけをつくる
      MECE KPT タスク管理を指導   面談で研修生の弱みを指摘
  • フォローアップで個別ケア
  • 優秀な同期が刺激に
  • 意識面での育成
  • 経営目線に触れてもらう
      取締役のありがたいおはなし
  • フォローアップで個別ケア
      言い訳は成長阻害の最大の要因
      自身を客観的に観測
      セルフモチベーションコントロール
  • 規模にい依存しないよかったこと
  • フォローアップで成長加速をサポート
      どうやったら底上げできるかノウハウが溜まった
  • 研修生に手を上げてもらい 積極的に任せた
  • 研修生自身での振り返り手法を早期から共有
      振り返りが巧い研修生は急成長
  • 現場の技術志向高いメンバが技術基準を決めたこと
      現場で即戦力となる技術知s機に集中して教える
  • 参考となる書籍 CPANを教えたこと
  • GitHub活用してレビューを進めた
  • 技術テストを実施
      研修生にテストの解説
  • 参考になった書籍(Perl)
  • CPANモジュール
    Class::Data::Inheritable SAL::Maker
  • モダンなperl入門
    デザインパターン テスト
  • すぐわかるオブジェクト指向Perl
    オブジェクト指向の概念は別書籍で
  • Perlベスト・プラクティス
  • 独習Perl
      プログラミング未経験者向け
  • 初めてのPerl、続・初めてのPerl
  • 参考になった書籍(MySQL)
  • 鍵本
  • Webエンジニアのための データベース技術[実践]入門
  • 漢のコンピューター道
  • 公式リファレンス
  • 実践ハイパフォーマンスMySAL
    第三章のIndexについて
  • 参考になった書籍(Git)
  • Gitによるバージョン管理
  • Gitポケットリファレンス
  • こわくないGit
  • 参考になった書籍(その他)
  • オブジェクト指向のこころ
  • リーダブルコード
  • 初心者へ伝えたいこと 
  • 知識を人に晒してインプット
  • 不確実なWebの情報を信頼しない

モダンなPerlリファクタリング

  • carton +cpanfile
  • 全体をひとつのモジュールに

実行環境とアプリケーションを分離する

  • CUIならSTDIN STDOUTの I/O

WEBアプリケーションの場合

  • Plack化 Plack::Test
  • Plack::App;;WrapCGIでPlack化する

独自FWの場合

  • headlessブラウザでE2Eテストする
  • capybara-webkit + headless
  • そのあと Plack化して分離

より粒度の細かいテストを追加

  • 細かいデータでの E2E
  • 内部モジュールのユニットテスト

テストさえあれば どんなレガシーでもリファクタリングは難しくない

  • バグを発見したら、バグを明らかにするテストを書く
  • 回帰テストを貯めこむ
  • バグ発見 ー> 回帰テストを書く ー> テストを通す
  • テストはこまめに回す。
  • 1日1回は全体テストを回す
  • tracis ci  circle ci
  • Guard + guard-tap

テストは無理せず「ほどほど」程度に

  • カバレッジは100%目指さない
  • テストファーストにこだわりすぎない
  • テストはだいたいで でも頻繁に実行
  • リファクタリングが怖くない程度にテストがあればいい
  • リファクタリング中に見つけたバグの回帰テストを貯める
  • 作ったテストはちょっと更新の度、頻繁に実行する
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment