すぎいです。
この記事はiRidge Advent Calendar 2019 4日目の記事です。
「ソフトウェア開発をもっとうまくやりたい」
こう考えてIT業界でずっと仕事をしてきました。
長年やってると様々な方法論や知識体系に触れる機会があります。
私が影響を受けたいくつかの方法論を紹介していきたいと思います。
設計・コーディング
デザインパターン
Gang of Four(GoF)と呼ばれる4人組(Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides)がまとめたものが有名です。
「オブジェクト指向における再利用のためのデザインパターン」
ソフトウェア開発にパターンを持ち込むことで再利用性や汎用性が高まり、業界そのものの生産性がよくなったと言われています。
非常に画期的でした。
「パターン」とはもともとは建築家のクリストファー・アレグザンダー氏が提唱したもので、GoFの方々によってソフトウェアに応用されました。
ここから派生して、アーキテクチャパターンとかクラウドデザインパターンとか出てきています。
Python Enhancement Proposal(PEP)
Python推しの弊社。PEPの紹介です。
方法論とは少し違うかもしれませんが非常に良いドキュメント群だと思います。
The Zen of Python(PEP20)は素敵ですね。
お気に入りはこれです。
Now is better than never.
ずっとやらないより今やろう。
Although never is often better than right now.
ただし今すぐやるならやらないほうがよい。
開発プロセス、方法論
PMBOK
言わずと知れたPMBOK。
開発というよりはマネジメントを体系化したものです。
ソフトウェア開発と開発プロセスは切り離せないもので、どういったプロセスでやるにしてもPMBOKに書いてあることを参照するのがよいと思います。
アジャイル関連
アジャイルマニフェストをベースに、XP(Extreme Programming)、Scrumなど様々な方法論があります。
https://agilemanifesto.org/
XPには「価値」が定義されており、その1つに リスペクト があります。
私はこのリスペクトがソフトウェア開発の方法論の1つであるXPに含まれていることをとても気に入ってます。
その他
リーンスタートアップ
リーンスタートアップといえばこの書籍。
リーン・スタートアップ
ソフトウェア開発というよりはビジネスを作る方法論といったところでしょうか。
MVP(Minimum Viable Product)やBuild-Measure-Learnの考え方は非常に素晴らしいと思います。
デザイン思考(Design Thinking)
共感 (Empathise) 、定義 (Define)、概念化 (Ideate)、試作 (Prototype)、テスト (Test)の5つのプロセスが有名です。
特に「共感」という考え方は個人的に画期的でした。
デザイン思考にも様々な方法があるようですので今後深掘りしていきたいところです。
UXD/HCD
雑にまとめるとUXポリスの標的になりそうですが(笑)
UXD(User Experience Design)、HCD(Human Centerd Design)などがあります。
これらはソフトウェア開発だけの考え方でないのですが、私はスマートフォンアプリを開発しているので「ユーザー体験」は非常に重要になります。ちゃんと勉強して実践したい分野です。
最後に:「ソフトウェア開発」とは何か
世の中には上記に挙げた以外にも様々な方法論やツールが存在します。チームビルディングや組織開発などもその1つでしょう。
しかしその一つひとつを見ると完璧なものはなく、複雑で深淵なる1つのシステムとも言える「ソフトウェア開発」をいくつかの角度から照らしたものに過ぎないのかな、と思います。
私にはまだまだ「ソフトウェア開発」が何なのかわかりません。いくつかの角度から照らしたものから限定的に把握しているにすぎません。
「こうすればよかった」「次はこれを試してみよう」とずっと考えています。まだまだやりたいことばかりです。
今後もソフトウェア開発をもっともっと上手くできるように、より多くの知見を得て、ソフトウェア開発を様々な角度から照らし続けたいと思います。