SlideShare une entreprise Scribd logo
1  sur  77
Télécharger pour lire hors ligne
Developers’ Summit 2009




コミュニケーションとしての
   レガシーコード
   ~ Developers' 川柳 ~

      2009/2/13
  中谷 秀洋@サイボウズ・ラボ
Developers' 川柳

  身近でゆるやか~な切りくちで
 レガシーコードをかたってみましょう
略すと

Developers’Summit が
「デブサミ」ですから……
デブセン
 ですね!
開発者の人情
 心の機微を
   愚痴や
 うらみつらみも
5・7・5の
リズムにのせて
  うたうように
それが
   デブセン
ほかのものを想像しちゃってるひと
    いませんよね?
デブセン 第1集
~ 孤独との戦い ~
メンテナーの嘆き――




 システムのメンテナンスするひと
   まいにちたいへんです
動いてる
   誰も仕様は
     知らんけど
仕様書がなくても――




  仕様書があってもなくても
 なんとかしなくちゃあなりません
まだわかる
 正常時の仕様なら
   で、異常時は?
うちは Windows 2000 で
まだまだ頑張ってます――




   経費削減ってやつでしょうか?
XP
     サポートしてない
          ライブラリ
 Linuxのひとは「カーネル2.4」で
  Java1.3とかVB4でもOKだよ!
開発には
デュアルディスプレイ必須――




     便利ですよね~
  でも、必ず必要とまでは……
2画面分
  ネスト深すぎ
     24重……
単純なバグ修正だったはずが――
修正が
  修正を呼び
     帰れない
先輩の
 捨てるに捨てられぬ
      謎コード
もうだめだ
  なにもかにもが
      お手上げだ
メンテナンス
孤独との戦い

  現場でひとり
 がめんに向き合い
頼みは自分だけ

 相談するあいても
  なかなかいなく
「なぜ自分だけ
こんな目に……」
その原因は!

  ものごとには
 かならず原因が!
レガシーコード
なぜって
さっきの
デブセン
レガシーコード本に
  全部載ってます
“Working Effectively with Legacy Code”
         のことだよ、もちろん
Break
 Dependencies
修正が
  修正を呼び
     帰れない
   レガシーコード本の
  メインテーマの一つです
Monster Method
2画面分
  ネスト深すぎ
     24重……
     ポケモンと違って
かんたんにコンプリートできちゃうけどね
We Feel
 Overwhelmed.
もうだめだ
  なにもかにもが
      お手上げだ
   レガシーコード本の
  24章のタイトルがこれ
困っている
現場の人達
共有できない

   なやみや情報を
わかちあうことができなかった
語る言葉を
持ってなかった
そんなあなたも
今日からは
「うちのコード
Break Dependencies が
 なってへんくて……」
「あー
うちもそうやわー」
共有できる!
「それ
  Link Seam で
なんとかならへん?」
 「Object Seam もええかも」
相談できる!
一人じゃない

すばらしいことだと
 おもいません?
「医者は一人で手術を
  するわけじゃない」
Doctors never operate alone.
   (see WEwLC Ch.23)
      23章にのっている
      だいすきな言葉です
デブセン 第2集
~ 残す者/残される者 ~
引き継いだけど――
仕様書の
  最終更新
     3年前
エンハンス
  の前に元の仕様
       教えてよ
仕様書より
 テストコードの方が
      まだわかる
引き継いで
ずいぶんたつけど――
早2年
  目を通してない
     コード多数
   いじれるファイルがきまってて
それ以外は開いたこともないんでしょうねえ
本日が最終出社日――




 「ありがとうおせわになりました」
     と言いたいところ
ああごめん
 こんな引き継ぎで
    ほんとごめん
     なんか
   目から汗が……
引き継ぎ
異動とか
転職とか
誰もが
残す者、
残される者に
 なりうる
   IT業界は
流動化してますからね
どれだけ資料を
  書いても
できるだけのことをしたいと
   おもっていても
足りない

満足な引き継ぎができたなんて話
 ついぞ聞いたことありません
どれだけ資料を
 書いてもらっても
       幸運にも(?)
ぶあつい仕様書を残してもらえたとしても
役に立たない

  けっきょく
 よむのはソース
そんなとき!

 そんななやみをもつあなた!
(今はなくても、必ず直面します)
レガシーコード
なぜって
レガシーコード本に
 全部載ってます
  あなたのなやみは
  全部のってるんです
Hack Points
早2年
 目を通してすらない
     コード多数
Characterization
     Tests
仕様書より
 テストコードの方が
      まだわかる
引き継ぎとは
何を残していくか
 言葉で説明
みなさん
得意な「言葉」は?
コード
レガシーコードとは
「コードで説明され
 ていないコード」
資産じゃなくて
遺産(legacy)
最後に
今日
聞いてくれたみなさんに――
明日からは
  二言目には
   レガシーコード
    あなたもテストコードを書いて
遺産(レガシー)を資産(リソース)にしましょう

Contenu connexe

Tendances

【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らずdevsumi2009
 
Rsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_sessionRsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_sessionKazuhiroNiwaya
 
Service design 20201225
Service design 20201225Service design 20201225
Service design 20201225Winny Wang
 
くるくるりぼんふわふわひこうき
くるくるりぼんふわふわひこうきくるくるりぼんふわふわひこうき
くるくるりぼんふわふわひこうきimayasu
 
Rsgt2021 exploratory testing
Rsgt2021 exploratory testingRsgt2021 exploratory testing
Rsgt2021 exploratory testingNoriyuki Nemoto
 
NOPATS
NOPATSNOPATS
NOPATShiro25
 
Mylynとおともだち
MylynとおともだちMylynとおともだち
MylynとおともだちHiroki Kondo
 
Dev Love20090325 Takahashi
Dev Love20090325 TakahashiDev Love20090325 Takahashi
Dev Love20090325 TakahashiDevLOVE
 
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングDesign Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングKenji Wada
 
プロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入について
プロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入についてプロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入について
プロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入についてKatsumi TAZUKE
 
Tasks Sharing In tugboat.GTD ver.0.8.6
Tasks Sharing In tugboat.GTD ver.0.8.6Tasks Sharing In tugboat.GTD ver.0.8.6
Tasks Sharing In tugboat.GTD ver.0.8.6autumn_dream
 
広告代理店様用Ad Local媒体資料
広告代理店様用Ad Local媒体資料広告代理店様用Ad Local媒体資料
広告代理店様用Ad Local媒体資料guestd1d6539
 
Regional scrumgatheringtokyo2021
Regional scrumgatheringtokyo2021Regional scrumgatheringtokyo2021
Regional scrumgatheringtokyo2021bonbon0605
 
ラスベガス学園
ラスベガス学園ラスベガス学園
ラスベガス学園amettke
 
RSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になった
RSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になったRSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になった
RSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になったSatoru KawaBuchi
 
Requirement Development Chronicle
Requirement Development ChronicleRequirement Development Chronicle
Requirement Development ChronicleKent Ishizawa
 
Xen+DRBDによるライブマイグレーション
Xen+DRBDによるライブマイグレーションXen+DRBDによるライブマイグレーション
Xen+DRBDによるライブマイグレーションmkawase
 
だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向Anto Mioyama
 

Tendances (20)

【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
 
Rsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_sessionRsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_session
 
使用M部落App學習mBot程式設計
使用M部落App學習mBot程式設計使用M部落App學習mBot程式設計
使用M部落App學習mBot程式設計
 
Service design 20201225
Service design 20201225Service design 20201225
Service design 20201225
 
くるくるりぼんふわふわひこうき
くるくるりぼんふわふわひこうきくるくるりぼんふわふわひこうき
くるくるりぼんふわふわひこうき
 
Rsgt2021 exploratory testing
Rsgt2021 exploratory testingRsgt2021 exploratory testing
Rsgt2021 exploratory testing
 
NOPATS
NOPATSNOPATS
NOPATS
 
Mylynとおともだち
MylynとおともだちMylynとおともだち
Mylynとおともだち
 
Gl Rotate
Gl RotateGl Rotate
Gl Rotate
 
Dev Love20090325 Takahashi
Dev Love20090325 TakahashiDev Love20090325 Takahashi
Dev Love20090325 Takahashi
 
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングDesign Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
 
プロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入について
プロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入についてプロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入について
プロモーション用DVDコンテンツ制作におけるUser Centered Design視点の導入について
 
Tasks Sharing In tugboat.GTD ver.0.8.6
Tasks Sharing In tugboat.GTD ver.0.8.6Tasks Sharing In tugboat.GTD ver.0.8.6
Tasks Sharing In tugboat.GTD ver.0.8.6
 
広告代理店様用Ad Local媒体資料
広告代理店様用Ad Local媒体資料広告代理店様用Ad Local媒体資料
広告代理店様用Ad Local媒体資料
 
Regional scrumgatheringtokyo2021
Regional scrumgatheringtokyo2021Regional scrumgatheringtokyo2021
Regional scrumgatheringtokyo2021
 
ラスベガス学園
ラスベガス学園ラスベガス学園
ラスベガス学園
 
RSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になった
RSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になったRSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になった
RSGT2021 NTTみたいな企業で新アプリをスクラム開発してみんな笑顔になった
 
Requirement Development Chronicle
Requirement Development ChronicleRequirement Development Chronicle
Requirement Development Chronicle
 
Xen+DRBDによるライブマイグレーション
Xen+DRBDによるライブマイグレーションXen+DRBDによるライブマイグレーション
Xen+DRBDによるライブマイグレーション
 
だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向
 

Plus de Shuyo Nakatani

画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15Shuyo Nakatani
 
Generative adversarial networks
Generative adversarial networksGenerative adversarial networks
Generative adversarial networksShuyo Nakatani
 
無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)Shuyo Nakatani
 
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)Shuyo Nakatani
 
人工知能と機械学習の違いって?
人工知能と機械学習の違いって?人工知能と機械学習の違いって?
人工知能と機械学習の違いって?Shuyo Nakatani
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRShuyo Nakatani
 
ドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoRドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoRShuyo Nakatani
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...Shuyo Nakatani
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章Shuyo Nakatani
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章Shuyo Nakatani
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
Zipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPZipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPShuyo Nakatani
 
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...Shuyo Nakatani
 
ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014Shuyo Nakatani
 
猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測Shuyo Nakatani
 
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5Shuyo Nakatani
 
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013Shuyo Nakatani
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門Shuyo Nakatani
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013Shuyo Nakatani
 
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門ノンパラベイズ入門の入門
ノンパラベイズ入門の入門Shuyo Nakatani
 

Plus de Shuyo Nakatani (20)

画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
 
Generative adversarial networks
Generative adversarial networksGenerative adversarial networks
Generative adversarial networks
 
無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)
 
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)
 
人工知能と機械学習の違いって?
人工知能と機械学習の違いって?人工知能と機械学習の違いって?
人工知能と機械学習の違いって?
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
 
ドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoRドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoR
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
Zipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPZipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLP
 
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
 
ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014
 
猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測
 
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
 
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
 
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門ノンパラベイズ入門の入門
ノンパラベイズ入門の入門
 

コミュニケーションとしてのレガシーコード