1K Views
August 26, 24
スライド概要
『Tsukulink Tech Talk 〜作り上げる技術のあれこれ〜』
https://tsukulink.connpass.com/event/325647/
がんばります
『ソフトウェアエンジニアリング』 ってなんですか? #つくてくトーク ツクリンク株式会社 あっきー(@kuronekopunk)
⾃⼰紹介 ● あっきー @kuronekopunk ● ツクリンク株式会社 ● 経歴 ○ ○ エンジニアリングマネージャー 2011年 新卒 SESでPHP 2012年 ㈱ハンズシェア創業(現:ツクリンク㈱) ■ ツクリンクの0→1の開発 ■ PHP→Railsのリプレース ■ SEO、グロースハック ■ データアナリスト ■ DevRel ● イベント『EMゆるミートアップ』『カクカクシカジカモデリング』 ● ポッドキャスト『ぐんぐんfm』
『ソフトウェアエンジニアリング』 ってなんでしょう?
『プログラミング』とは?
プログラミングとは? コンピュータに特定の動作をさせるための命令を作成する⾏為、またはその過程を指す。 引⽤:「プログラミング」 Weblio辞書 ● プログラムを作ること ● コードを書くこと
『エンジニアリング』とは?
エンジニアリングとは? 国際世界の教育研究における「⼯学」は次の意味だと述べている。 「⼯学(Engineering):数学,⾃然科学の知識を⽤いて,健康と安全を守り,⽂化的,社会的及び環境的な考慮を ⾏い,⼈類のために,設計,開発,イノベーションまたは解決を⾏う活動.」 ⼯学は⼤半の分野で理学(数学‧物理学‧化学等)を基礎としているが、⼯学と理学の相違点は、ある現象を⽬の前 にしたとき、理学は「⾃然界(の現象)は(現状)どうなっているのか」や「なぜそのようになるのか」という、既 に存在している状態の理解を追求するのに対して、⼯学は「どうしたら、(望ましくて)未だ存在しない状態やモノ を実現できるか」を追求する点である。或いは「どうしたら⽬指す成果に結び付けられるか」という、⼈間‧社会で 利⽤されること、という合⽬的性を追求する点である、とも⾔える。 したがって⼯学では安全性、経済性、運⽤‧保守性といった、実⽤上の観点の価値判断が重要である。使⽤できる時 間‧⼈員‧予算等といった資源の制約の中、⼯学的⽬的を達成するための技術的な検討とその評価を⼯学的妥当性と ⾔い、⼯学的な性質の分析には、環境適合性、使いやすさ、整備のしやすさ (Maintainability)、⽣涯費⽤(ライフサ イクルコスト)など、(質量、速度などのある意味、即物的で⼀意的に測定できる性質とは違った、⼈間がある配慮 のもとに構成した) 評価⽅法が必要なものが多い。そうした評価⽅法の開発も⼯学の重要な分野とされる。 引⽤:⼯学 - Wikipedia
『ソフトウェアエンジニアリング』とは?
ソフトウェアエンジニアリングとは? ⼈類のために,設計,開発,イノベーションまたは解決を⾏う活動 ⼯学では安全性、経済性、運⽤‧保守性といった、実⽤上の観点の価値判断が重要である。使⽤できる時間‧⼈員‧予 算等といった資源の制約の中、⼯学的⽬的を達成するための技術的な検討とその評価を⼯学的妥当性 引⽤:⼯学 - Wikipedia ● ソフトウェアで⼈類のためにイノベーション、課題解決を⾏う活動 ● 制約の中で、実⽤上の価値判断をし⽬的達成を図る活動
ソフトウェアエンジニアリングとは? ソフトウェアエンジニアリングとは時間で積分したプログラミングである 引⽤:Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを⽀える技術、⽂化、プロセス
積分? 積分は「分けたものを積んで集めて考える」ことで、 ある⼀瞬の変化をあわせて全体の量をとらえるための⽅法 引⽤:微分‧積分をざっくり理解!|ひとふり
時間で積分したプログラミング プログラミングの時間で積分したものがソフトウェアエンジニアリング 積分対象になるプログラミングの中⾝って何だろう?
プログラミングの結果‧中⾝ ● コード ● 機能 ● ユーザー価値 ● 利益 コードだけが増えても意味がなく 作って動くソフトウェア(機能)で事業活動をしているので ユーザー価値や利益まで含めたところまで期待したい ※開発⽣産性の話にも近いかも 仕事量の⽣産性、期待付加価値の⽣産性、実現付加価値の⽣産性 参照:Qiita 開発⽣産性について議論する前に知っておきたいこと
時間軸を考慮してみる 時間の積み重ねがある→コードが継続して運⽤している状態 運⽤?DevOps? DevOpsとは「開発チーム(Development)と運⽤チーム(Operations)がお互いに協調し合うことで(図1参照)、開 発‧運⽤するソフトウェア∕システムによってビジネスの価値をより⾼めるだけでなく、そのビジネスの価値をより確 実かつ迅速にエンドユーザーに届け続ける」という概念である 引⽤:DevOpsとは何か?
時間軸を考慮してみる 時間の積み重ねがある→コードが継続して運⽤している状態 継続してプログラミングを積み上げていくためには、技術的負債が敵になる 持続可能なソフトウェアを作ることが⼤事
時間軸以外を考慮してみる たとえば『⼈』、チーム開発で複数⼈がアウトプットを出す ⼀⼈のアウトプットが少なくても積分した結果が最⼤化されれば良い
積分した結果を最⼤化していくために 初速を出すため、必要に応じて技術的負債を借りるときはある →後で⽣産性が落ちる時期や⼈数などを考慮し⽤法⽤量を守ること 期待される時間を考慮する →1回の実⾏だけで終わるコードであれば関係ない →「このコードは何年後にどうなるか」に思いを馳せる 例:データ数の増加、メンバーの⼊れ替わり、技術トレンドの変化、etc...
さいごに ユーザー価値を最⼤化するため 時間軸を考慮して ソフトウェアエンジニアリングしていきましょう
Thanks. 🙌