Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

【LT】ソフトウェア産業は進化しているのか? -Javaの想い出とともに- #jjug_ccc

【LT】ソフトウェア産業は進化しているのか? -Javaの想い出とともに- #jjug_ccc

2024/10/27 JJUG CCC 2024 Fall にて行ったLTの資料です。

Hiroyuki TAKAHASHI

October 27, 2024
Tweet

More Decks by Hiroyuki TAKAHASHI

Other Decks in Technology

Transcript

  1. Findy Inc. 高橋 裕之 / Hiroyuki Takahashi ファインディ株式会社 CTO室 Software

    Engineer, SPI Coach, Agile Coach @Taka_bow takabow hiroyukitakah • 1989年より組込みエンジニアとして、OS開発、通信プロトコル開発、RTOSや 組込みLinuxを基盤としたガジェット開発に16年携わる。 • 2005年、それまでの経験を活かし、エンジニア人材と組織の課題解決に特化 したSPI(ソフトウェアプロセス改善)の専門家へ転身。 • 現在は、SPIコーチおよびアジャイルコーチとして活動し、DORAメトリクスを活 用したプロセス改善活動を得意とする。 • ソフトウェアエンジニアリングの潜在能力向上支援(イネーブルメント)に注力 し、組織のパフォーマンス最適化に貢献している。
  2. Findy Inc. CONFIDENTIAL ファインディ株式会社について 3 Findyは、エンジニア組織向けのサービスを提供する、2014年創業・260人規 模のスタートアップです (シリーズCの資金調達を22年に実施) 経営陣 三菱重工業、BCGを経て2010年、創業期

    のレアジョブに入社し、執行役員を経験。 その後、ファインディ株式会社を創業 CEO 山田 裕一朗 元GREEフルスタックエンジニア。 東京大学 情報理工学系研究科 創造情報学 専攻卒業後、GREE入社。 大学院では、稲葉真理研究室に所属。自然 言語処理やデータマイニング関連の論文を 執筆。 CTO 佐藤 将高 投資家 グローバル・ブレイン、ユナイテッド、SMBCベンチャーキャピタ ル、KDDI、JA三井リース、博報堂DYベンチャーズ、みずほキャ ピタル、Carbide Ventures *2019年5月 シリーズAで2億円調達 *2020年7月 シリーズBで7.7億円調達 *2022年4月 シリーズCで15億円調達 会社名 ファインディ株式会社 / Findy Inc. 代表者 山田 裕一朗 設立 2014年2月(本格的な事業開始は2016年7月) 社員数 263名(2024年6月時点) 資本金 22億5764万円(資本準備金含む) 住所 〒141-0032 東京都品川区大崎1-2-2 アートヴィレッジ大崎セントラ ルタワー 5階 事業許可番号 13-ユ-308478 事業内容 スカウト型リクルーティングサービス「Findy」 ハイスキルな業務委託エンジニア紹介サービス「Findy Freelance」 エンジニア組織支援SaaS「Findy Team+」 開発ツールのレビューサイト「Findy Tools」
  3. © Findy Inc. ファインディが展開するエンジニアプラットフォーム サービス紹介 ※ 各種数値は、2024年6月時点のFindy転職、Findy Freelance、Findy Team+、Findy Globalの4サービスの累計での社数及び登録者数です。

    
   なお、1社又は1名の方が複数のサービスに登録している場合は、そのサービスの数に応じて複数のカウントをしています。 ToC / ToB SaaS / ToB マッチングサービス 組織分析SaaS ToC / ToB 開発ツールメディア β版 GitHubやJiraを解析し、エンジニア組織の ⾒える化と⽣産性向上をサポート。 エンジニア組織の⾒える化 5万⼈以上のフリーランスエンジニアの 成功報酬型の⼈材紹介サービス。 フリーランスエンジニアの採⽤ 約12万⼈のエンジニアと880社以上の テック企業をマッチング。 正社員エンジニアの採⽤ 実際に利⽤している企業の声を元に、 開発ツールの導⼊や検討に必要な情報を 集約。企業の技術選定をサポート。 開発ツールのレビューサイト 5
  4. Findy Inc. 「私の印象では、ソフトウェア産業は学ぶことも進化することもなかなかで きないで苦闘 しているように見えます。 この相対的な停滞は、コードを実行するハードウェアのとてつもない進化 によって見えなくされている のです。」 David Farley(2021)

    引用:Farley, D.(2022), 長尾高弘 (訳). 継続的デリバリーのソフトウェア工学: もっと早く、もっと良いソフトウェアを作るための秘訣 (Nagao, T., Trans.). 日経BP社. (Original work published 2021) p.69 Modern Software Engineering 7
  5. Findy Inc. 8 私が仕事で最初にやらされた 学んだ言語は Z80 アセンブリ言語でした Yaca2671 - 投稿者自身による著作物,

    CC 表示-継承 3.0, https://commons.wikimedia.org/w/index.php?curid=3940939による 1989年ごろ
  6. Findy Inc. z80 9 org 100h msg: db 'Hello, World!$',

    0 start: ld de, msg call print ret print: ld c, 9 int 21h ret 呪文みたい デバッグが大変
  7. Findy Inc. C言語(ANSI C) 11 #include <stdio.h> int main() {

    printf("Hello, World!\n"); return 0; } アセンブリより 断然分かりやすい!!
  8. Findy Inc. C言語でオブジェクト指向設計… 14 #include <stdio.h> #include <string.h> // "クラス"構造体の定義

    typedef struct { char message[50]; void (*print)(struct HelloWorld*); // メソッドを指す関数ポインタ } HelloWorld; // メソッド関数の定義 void printMessage(HelloWorld *self) { printf("%s\n", self->message); } // "コンストラクタ"関数 void HelloWorld_init(HelloWorld *self, const char *msg) { strncpy(self->message, msg, sizeof(self->message) - 1); self->message[sizeof(self->message) - 1] = '\0'; // 文字列終端の確保 self->print = printMessage; } int main() { // オブジェクトの生成と初期化 HelloWorld hw; HelloWorld_init(&hw, "Hello, World!"); // メソッドの呼び出し hw.print(&hw); return 0; } ハードル高し!
  9. Findy Inc. Java 16 class HelloWorld { private String message;

    public HelloWorld(String message) { this.message = message; } public void print() { System.out.println(message); } public static void main(String[] args) { HelloWorld hw = new HelloWorld("Hello, World!"); hw.print(); } } なるほどね! はじめから オブジェクト指向の 言語なのね!
  10. Findy Inc. 「私の印象では、ソフトウェア産業は学ぶことも進化することもなかなかで きないで苦闘 しているように見えます。 この相対的な停滞は、コードを実行するハードウェアのとてつもない進化 によって見えなくされている のです。」 David Farley(2021)

    引用:Farley, D.(2022), 長尾高弘 (訳). 継続的デリバリーのソフトウェア工学: もっと早く、もっと良いソフトウェアを作るための秘訣 (Nagao, T., Trans.). 日経BP社. (Original work published 2021) p.69 Modern Software Engineering 25
  11. Findy Inc. 「間違った古い考えを捨てられない」から 28 David Farley(2021) 引用:Farley, D.(2022), 長尾高弘 (訳).

    継続的デリバリーのソフトウェア工学: もっと早く、もっと良いソフトウェアを作るための秘訣 (Nagao, T., Trans.). 日経BP社. (Original work published 2021) p.69
  12. Findy Inc. 「間違った考え方をなかなか捨てられない理由のひとつ は、 ソフトウェア開発のパフォーマンス(能力、業績)を効果的に計 測できていない ことにあります」 David Farley(2021) 引用:Farley,

    D.(2022), 長尾高弘 (訳). 継続的デリバリーのソフトウェア工学: もっと早く、もっと良いソフトウェアを作るための秘訣 (Nagao, T., Trans.). 日経BP社. (Original work published 2021) p.70 Modern Software Engineering 29
  13. Findy Inc. (出典) Infrastructure as Code, 2nd Edition , Figure

    1-2. Speed and quality map to quadrants 30 スピードより 品質を重視 品質より スピードを重視 スピードと品質 の両⽴ 壊れやすい 厄介な状態 高品質 低品質 遅い 速い 右下の象限: 品質よりスピードを重視 • いわゆる「早く作って壊す」という考え方で す。スピードを重視して品質を犠牲にする チームは、乱雑で脆弱なシステムを構築しま す。その粗悪なシステムによって作業が遅く なり、左下の象限に滑り落ちていきます。こ のやり方を続けてきたスタートアップの多く が「勢い」を失ったと嘆きます。以前なら素 早く対応できた簡単な変更が、システムが複 雑に絡み合っているために、今では何日も何 週間もかかるようになっています。 左上の象限: スピードより品質を重視 • 「私たちは重要な仕事をしているのだから、きちんとやらなければならない」という考え方です。しか し、納期のプレッシャーにより「場当たり的な対応」を強いられます。重厚なプロセスが改善の障壁とな り、技術的負債は「既知の問題」リストとともに増大します。これらのチームは左下の象限に落ち込みま す。改善が困難なため、結果として低品質なシステムになってしまいます。失敗への対応として更にプロ セスを追加します。このプロセスが改善をより困難にし、脆弱性とリスクを増大させます。これがさらな る失敗とプロセスの追加を招きます。特にリスクに敏感な業界では、このように働く組織の多くの人々 が、これが普通だと思い込んでいます。 スピードと品質はトレードオフではない
  14. Findy Inc. (出典) Infrastructure as Code, 2nd Edition , Figure

    1-2. Speed and quality map to quadrants 31 スピードより 品質を重視 品質より スピードを重視 スピードと品質 の両⽴ 壊れやすい 厄介な状態 高品質 低品質 遅い 速い 右下の象限: 品質よりスピードを重視 • いわゆる「早く作って壊す」という考え方で す。スピードを重視して品質を犠牲にする チームは、乱雑で脆弱なシステムを構築しま す。その粗悪なシステムによって作業が遅く なり、左下の象限に滑り落ちていきます。こ のやり方を続けてきたスタートアップの多く が「勢い」を失ったと嘆きます。以前なら素 早く対応できた簡単な変更が、システムが複 雑に絡み合っているために、今では何日も何 週間もかかるようになっています。 左上の象限: スピードより品質を重視 • 「私たちは重要な仕事をしているのだから、きちんとやらなければならない」という考え方です。しか し、納期のプレッシャーにより「場当たり的な対応」を強いられます。重厚なプロセスが改善の障壁とな り、技術的負債は「既知の問題」リストとともに増大します。これらのチームは左下の象限に落ち込みま す。改善が困難なため、結果として低品質なシステムになってしまいます。失敗への対応として更にプロ セスを追加します。このプロセスが改善をより困難にし、脆弱性とリスクを増大させます。これがさらな る失敗とプロセスの追加を招きます。特にリスクに敏感な業界では、このように働く組織の多くの人々 が、これが普通だと思い込んでいます。 スピードと品質はトレードオフではない それ、よく聞くんだけど ホントにー? 測ってみないと 信じられませんよね
  15. © Findy Inc. ファインディが展開するエンジニアプラットフォーム サービス紹介 ※ 各種数値は、2024年6月時点のFindy転職、Findy Freelance、Findy Team+、Findy Globalの4サービスの累計での社数及び登録者数です。

    
   なお、1社又は1名の方が複数のサービスに登録している場合は、そのサービスの数に応じて複数のカウントをしています。 ToC / ToB SaaS / ToB マッチングサービス 組織分析SaaS ToC / ToB 開発ツールメディア β版 GitHubやJiraを解析し、エンジニア組織の ⾒える化と⽣産性向上をサポート。 エンジニア組織の⾒える化 5万⼈以上のフリーランスエンジニアの 成功報酬型の⼈材紹介サービス。 フリーランスエンジニアの採⽤ 約12万⼈のエンジニアと880社以上の テック企業をマッチング。 正社員エンジニアの採⽤ 実際に利⽤している企業の声を元に、 開発ツールの導⼊や検討に必要な情報を 集約。企業の技術選定をサポート。 開発ツールのレビューサイト 33
  16. © 2024 Findy Inc. 開発⽣産性(パフォーマンス)を測る指標 Four Keys
 SPACE
 2
 1


    3
 4
 ✔ DevOpsの最適化 ✔ 多様な観点での⽣産性評価 S
 P
 A
 C
 E
 デプロイ頻度 変更のリードタイム 変更障害率 平均修復時間 Satisfaction and well being Performance Activity Communication and collaboration Efficiency and flow
  17. Findy Inc. 35 DevOps指標 変更リードタイム デプロイ頻度 デプロイ失敗からの 回復時間 変更失敗率 信頼性(可用性)

    Four Keys DORA Model 統計的相関 (参考)Google Cloud. ” Explore DORA's research program”. Google Cloud. https://www.devops-research.com/research.html. (参照 2023-1-10)
  18. Findy Inc. Findy Team+画面イメージ:生産性可視化・向上 36 DevOps指標やコーディングプロセスにおける生産性を測定することで、効率・クオリ ティの全体観を把握しながら、生産性向上を検討できます 開発プロセス全体の生産性把握 (特に) コーディングプロセスの生産性把握

    DevOps指標を観測し、開発効率やクオリティの全体観を把握 プルリク作成数やクローズ時間を観測すること で、コーディングプロセスの全体観を把握 現状の課題や開発組織としての目標、ビジネススピードを鑑みながら、生産性向上の打ち手を検討可能