わいの考えた最強のxx駆動開発


こんにちは、Qiita駆動開発中のむっそでございます。

最初にお詫びしておきます。**わいの考えた最強のxx駆動開発というタイトルは過言**でした。
出来心でYouTube的な耳触りの良いタイトルをつけてPVを増やそうとしたことを心よりお詫びします。

あとこの記事では**ドメイン駆動開発**やら**テスト駆動開発**やらの流行している話はしません。そういうのが知りたければ、私の記事の100万倍タメになる本をお読みください。

[エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)](https://www.amazon.co.jp/dp/4798121967/ref=cm_sw_em_r_mt_dp_JCYEEPKX12NBHWSJKA13?_encoding=UTF8&psc=1)
[テスト駆動開発](https://www.amazon.co.jp/dp/4274217884/ref=cm_sw_em_r_mt_dp_SNR9MZ09JJ0H9D964QF2)


# はじめに

巷には××駆動開発が溢れているので、私も渾身の自作××駆動開発とやらを提案してみようじゃないかという試みです。
割と真面目に書いたやつからネタ的な感じで書いたやつもあります。駆動開発の意味とかは私が勝手に書いてるだけなのであまり真に受けないようにお願いします笑

ちなみにこの記事は下記の記事の続編として書いてますが、続編から読んでいただいても大丈夫です。

https://qiita.com/muson0110/items/c15d6a0ba0582da204e1

「××の部分になにを入れると面白いか」という大喜利にもなるので**開発チームで大喜利しても良いかもです。**

# わいの考えたxx駆動開発

## １.アウトプット駆動開発
### 意味：
OSS活動、Youtube配信、Qiitaや個人ブログ作成などのアウトプット対象をまず決定してからインプットを開始することを **アウトプット駆動開発**と呼ぶ。
(※調べてみたら「アウトプット駆動」という言葉自体は既出でした。自分が考えたみたいなこと書いていすいません。N番目です。)

### どんな時に使えそうか：
 - なにか新しい技術をインプットしたいがやる気がまったく起きない場合
 - 「この技術についてこんだけ知っているぜ」というのをネット上でアピールしてセルフブランディングしつつ、インプットもしていきたい場合

インターネット上でなにかを公開するためには、多くの人にとって理解しやすくてちゃんとしたコンテンツを作る必要があるため、インプットの質が上がる気がしてます。

Qiitaで記事を書き始めてから「次はこの記事を出すから、逆算してこの知識を勉強しなくては！」って思うようになりました。結構私にとって **アウトプット駆動開発は効果的な気がします。まぁ大変ですけど...**


## ２.デバッグ駆動開発
### 意味：
新しいプログラミング言語の習得やなにかのプログラムのロジックを追っているような時に、対象のプログラムにデバッガのブレークポイントを仕込んで変数の値や関数の呼び出し階層を理解しながら開発を進めていくことを **デバッグ駆動開発**と呼ぶ。


### どんな時に使えそうか：
 - よくわからないプルリクエストをレビューしなくてはいけなくて、やる気が出ないのでとりあえずデバッガを動かして処理を確認したい場合
 - 機能開発時になんか処理が脳内でトレースできなくなってきた場合
 - 大きいプロジェクトのコードを理解しなくてはいけないときに小さい部分の機能からまず理解していきたい場合


ソースコードをただ読んでいるだけだとなんか眠くなったり処理を脳内でトレースするのが厳しい時がありますね。不思議とデバッガで1行ずつ実行していくと **「あーこういうことか、完全に理解した！」って気分になって** 開発が進捗していく気がします。

コードリーディングについては、この記事がすごい参考になります。

https://qiita.com/zizynonno/items/3a14fe6cbf52451a366c

あとデバッグが重要ということを書いた記事もご覧ください。

https://qiita.com/muson0110/items/3f45f723968eb0338f75



## ３.職務経歴書駆動開発
### 意味：
半年くらいの間隔で職務経歴書をアップデートしていくことで直近の半年で自分が成長できているかを確認できる時間を設けて、これから習得したい技術について長期的な予定を立てて開発や勉強を進めていくことを **職務経歴書駆動開発**と呼ぶ。


### どんな時に使えそうか：
 - 売り手市場とはいえ自分のエンジニアとしての市場価値やブランディングに自信を持てるようにしていきたい場合
 - 過去を振り返って自分の強みや弱みを理解する時間を設けたい場合


自分が直近でなにをしたかって意外と忘れがちです。企業によってはちゃんと自己評価の時期などがあってちゃんと振り返ることができるかもしれないですが、**ITエンジニア市場の目線で**自分を振り返ることって結構重要な気がします。

いつのまにか社内独自技術にロックインされてて転職が難しいスキルセットができあがっていた...というのはちょっと恐ろしいです。

転職できるという自信を持ち続けるために定期的なスパンで転職して開発スキルをアップデートしていくという **転職駆動開発** という手段もあるかもしれないですね。環境に順応するのは大変ですけど **色んなタイプの開発現場を知っていて、順応できるという経験は今の時代重宝されるのでは**と思います。

私のスタートアップ転職体験記事も時間があればご覧ください。

https://qiita.com/muson0110/items/b0a997e8b3221a2786d5



## ４.資格駆動開発
### 意味：
取得したい資格をまず決めて、その資格に必要な知識に関して車輪の再発明的な感じで自分で実装していくことで体系的に理解して、さらに資格も取得するという開発スタイルのことを **資格駆動開発** と呼ぶ。

### どんな時に使えそうか：
 - 資格というスキルも手に入れたいし開発実装スキルも並行して取得したいというコスパ命で生きていきたい場合
 - 作りたいアプリケーションのアイデアなどはないけれど、興味がある分野に関する開発をしてみたい場合


IT系の資格で有名なのは**IPA(情報処理推進機構)の各種資格**だと思います。たとえば基本情報技術者試験は暗記でゴリ押しでいくという人もいるようですが、**あえてちゃんと実装してみて体系的に理解する**というのをするだけで**めちゃくちゃエンジニアスキルが高まる**と思います。
他にもクラウド系の資格やLinux系の資格なんかでも良さそうですね。

https://www.jitec.ipa.go.jp/

基本情報技術者試験の過去問道場を見ていただければITのさまざまな分野を網羅していることを実感できるはずです。

https://www.fe-siken.com/fekakomon.php


## ５.海外赴任駆動開発
### 意味：
母国語に溢れた世界から離れて海外に赴任することで一切の母国語コンテンツや誘惑を遮断して、ひたすら精神と時の部屋のように自分を追い込んで開発を進めていくことを**海外赴任駆動開発**と呼ぶ。
(あくまで私のイメージです)

### どんな時に使えそうか：
 - 海外の地でひたすら自己研鑽を積みまくりたいし、外国語も習得したいという場合
 - 海外移住も視野にエンジニア人生を歩んでいきたい場合


メンタルがめちゃくちゃ強い人ならできるかもしれないですが、海外赴任駆動開発は結構ストイックじゃないと厳しいかもしれないですね。

前職でソフトウェアエンジニア未経験のタイ人の方(日本語は話せない)と働いていたのですが、彼はほとんどの娯楽を断ちひたすらプログラミングをしまくっておりました。その結果、1か月単位でえげつない成果を出してスキル面では私なんかを一気に追い抜いていきました。笑

そもそものポテンシャルがすごいとか才能だとかの話はもちろんありますが、**毎日ちゃんと努力してればこんなに伸びる人もおるんやなぁ**という経験になりました。


## ６.カジュアル面談駆動開発
### 意味：
他の企業で働いているエンジニアなどとカジュアル面談をすることで、採用しているアーキテクチャや、そのアーキテクチャを採用した経緯などを知ることができて、その経験を仕事やプライベートの開発に生かしていくスタイルを **カジュアル面談駆動開発**と呼ぶ。

### どんな時に使えそうか：
 - 社内で開発しているサービスのアーキテクチャに飽きてきたので他の企業のアーキテクチャも知って刺激を受けたい場合
 - 強そうなエンジニアとコネクションを作り上げて、あわよくば何かしらのコミュニティに参加していきたい場合

仕事においてどういう人と働くかというのはすごく重要ですよね。カジュアル面談を通じて **良くも悪くも「こういう人が世の中にはいるんやなぁ」** って気持ちにさせてくれたりします。そういう刺激も時には必要ですし、あわよくば転職活動してみるのも良いと思います。転職活動した結果 **「やっぱ転職しなくていいか。」** ってなるのも一興かと。


## ７.つよつよエンジニア駆動開発
### 意味：
インターネット上で強そうなソースコードを共有していたりなにかの大会の優勝者みたいな人を追っかけて、その人の行動を真似してみたりソースコードリーディングなどをしていくスタイルを **つよつよエンジニア駆動開発**と呼ぶ。

### どんな時に使えそうか：
 - 強くなりたいと思っている分野があって、その分野のつよつよなエンジニアを発見した場合
 - つよつよエンジニアの強烈なファンである場合

**何事もマネをしてみる**というのが学習の一歩になると思います。
クセが強すぎるつよつよエンジニアだとマネするの厳しいかもしれないですが、**自分も将来的にこういう人になりたいなぁと思える理想的なつよつよエンジニア**の行動をマネるのが大事ですね。

ただ自分の思い通りにならない人間が大半なので、尊敬してる人が何かやばい発言しだした瞬間に一気に憎悪に変わること(**可愛さ余って憎さ百倍現象?**)がないように祈っております。


## ８.他分野交流駆動開発
### 意味：
エンジニア業界の人ではなく営業や経理といった違う分野の方と話したり課題を聞いたりすることで開発のアイデアを生み出して開発を進めていくスタイルのことを **他分野交流駆動開発**と呼ぶ。

### どんな時に使えそうか：
 - ほかの業界の人から見てエンジニア業界がどう見えているのか、他分野の方たちのシステム的な課題は何なのかを知る機会がほしい場合
 - 「他分野にいるけれどITスキルに関する勉強がしたい」という人に対して、ITスキルを教えたい場合

 **「他分野からはIT業界ってこういう風に見られているのか」** という気づきがあったりします。
以下の記事も営業の友達と久しぶりに話したことがきっかけで書いたので、他分野の人と話してみると、思いもよらない刺激を受けたりするもんだなぁという気づきがありました。

https://qiita.com/muson0110/items/402a094a339b10f2b25e


## ９.YouTube駆動開発
### 意味：
知りたい分野に関してまず関連するYouTubeチャンネルを登録して見ることで理解して、そのあとに開発を進めるスタイルのことを **YouTube駆動開発**と呼ぶ。

### どんな時に使えそうか：
 - 学びたい内容の動画を見てみることで、なんとなく概観をつかみたい場合
 - 開発していてつまづいた時に関連する動画を探してデバッグをしたい場合(英語でライブコーディングしている動画などがネットにあったりします)

仕事だとウェブアプリケーションばかり開発しているので、プライベートでは趣向を変えてデータベースやらOS周辺をちゃんと学びたいなぁと思って、いろいろとチャンネルを登録してます。オススメを共有しておきます。

forkwellさんありがとう。

https://www.youtube.com/c/Forkwell_jp

KOBA789さん、強すぎてかっけぇです

https://www.youtube.com/c/KOBA789

RustでOS開発する記事書きたいと思いつつ手が進んでない(ごめんなさい)

https://www.youtube.com/channel/UCZi_C-xvC5qNcALfD_5JKIg


# Twitterのみんなの駆動開発
こういう記事を書き始めてから知りましたが、人間には**自分の記事がどれだけの人に影響を与えられたのかを知りたくなってしまう本能**があるようです。(エゴサ本能というか)

Twitterで誰かが自分の記事をシェアしてないかなぁ...って思って **「駆動開発」** で検索しまくっておりましたが、Twitterのみんなのつぶやいている駆動開発が面白すぎたので、いくつか共有したいと思います。


## 感謝駆動開発

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ひさしぶりにスターついたよって通知が来たので眺めてたけど、これ11年前なんだ……<br><br>感謝駆動開発 TDD (Thanks Driven Development) - Thanks Driven Life <a href="https://t.co/ytkwFziuHN">https://t.co/ytkwFziuHN</a></p>&mdash; Wataru MIYAGUNI (@gongoZ) <a href="https://twitter.com/gongoZ/status/1524942351973888000?ref_src=twsrc%5Etfw">May 13, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

今の時代に必要なのは感謝駆動開発です！！
みんな悪口はほどほどにして、**支えてくれているみんなに感謝して生きような！
お兄さんとの約束だぞぉ**

</br>
</br>

---

## 酒駆動開発

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">酒駆動開発<br>SDD(Sake Driven Development)</p>&mdash; ぬま (@__N_u_m_a) <a href="https://twitter.com/__N_u_m_a/status/1524752925326974976?ref_src=twsrc%5Etfw">May 12, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

**アルコール駆動開発** などのつぶやきもありました。</br>
ほろ酔いのほうがコーディングが進むという強者もいるみたいですが、私は睡魔が襲ってくるのでできないですね。

あとは何事も考えすぎるのは良くないですから、アルコールで適度に脳をバグらせてるくらいが生きるのにちょうど良いのかもしれないですね。

</br>
</br>

---

## 退職日駆動開発

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">退職日が決まると頑張れる退職日駆動開発</p>&mdash; keihan🤘🤪🤘 (@keihan_r) <a href="https://twitter.com/keihan_r/status/1522490373087514625?ref_src=twsrc%5Etfw">May 6, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

転職駆動開発とか締切駆動開発とまぁ似てますが、退職日前って引継ぎだったり次の会社のための勉強だったりで、**結構成長する機会ではありますよね。**
文章力とかは引継ぎ資料のおかげで養われたような気がします笑
(今でも引き継いでもらった後輩には迷惑かけてごめんって気持ちです)

</br>
</br>

---

## コメント駆動開発

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">[2022/04/30 06:00] トレンド9位<br>コメント駆動開発(コメントドリブン)という考え方 by shimajiri <a href="https://t.co/Juz3VjPkRs">https://t.co/Juz3VjPkRs</a></p>&mdash; Qiita:Trend (@QiitaTrend) <a href="https://twitter.com/QiitaTrend/status/1520146000236920832?ref_src=twsrc%5Etfw">April 29, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

**これ、自分もやってるやつや！** って驚きました。</br>
暗黙的にやっている事にちゃんと命名があったのかという発見です。説明を書いてから実装してるので、ビヘイビア駆動開発にも近いですね。

</br>
</br>

---

## メスガキ駆動開発

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">メスガキ駆動開発。 <a href="https://t.co/GFIxEMF0dU">https://t.co/GFIxEMF0dU</a></p>&mdash; あさひ@ｵﾄｸﾗﾁｬｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱ (@Straylight_0104) <a href="https://twitter.com/Straylight_0104/status/1524306237499707392?ref_src=twsrc%5Etfw">May 11, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

**どんな駆動開発やねん笑**</br>
って思いましたけど、よくQiitaのデイリートレンド上位を占めているメスガキ駆動開発っぽい方がいたなぁってなぜか連想してしまった。
連想してしまってごめんなさい...

https://qiita.com/Yametaro/items/621bfd8c894f8fd36539


</br>
</br>

---

## せやかて駆動開発

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">せやかて駆動開発</p>&mdash; ぐっちょむ (@gutchom) <a href="https://twitter.com/gutchom/status/1524668457681227776?ref_src=twsrc%5Etfw">May 12, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この発想はなかった笑</br>
なにかアーキテクチャや実装の計画してるときに、心の中の服部平次 が **「せやかて工藤！」** と突っかかってくることで、思考がより深堀りされるという大発見ですね。(苦しい理屈)

</br>
</br>

---

## 性欲駆動開発

ちょっとつぶやきを載せることはできないですが、性欲駆動開発とかそういう系統の駆動開発もありました。馬の鼻先に人参をぶら下げて走らせるみたいな感じで **欲をベースに開発を進めていくのもいいかもしれないですね。**

私自身は非常にツボにハマっておりましたが、あまり **〇ンポ駆動開発(TDD)** とかつぶやくのはやめてくださいね！！
お茶吹き出しそうになりました。

</br>
</br>

---

# 最強の駆動開発はみんなの心の中にあるんやで

いろいろ駆動開発を考えてみましたが、これらを組み合わせられれば人生捗りそうですね。起点イベントが発火して、処理実行して、また起点イベントが発火してという流れ(ルーティン)を作り上げるのが良さそうです。
(AWSで言うところのlambda -> SQS -> lambdaみたいな感じ)

駆動開発を組み合わせた例を考えてみました。

## 1週間の過ごし方(例)
1.ユーザー機能駆動開発(アジャイル)
ユーザーの求めていることを明確化したうえで予定を組み、機能実装担当を決める。

2.テスト駆動開発
実装担当となっているタスクを進めるためにまずテストを最初に書くことで引数、返り値などのインターフェースが明確になる。

3.コメント駆動開発 & メスガキ駆動開発
実装手順についてまずコメントで書いてみてそのあとに実装を始める。やる気がなくなってきたら幼女に罵られてやる気を取り戻す。

4.実装を完了する

5.感謝駆動開発 & 酒駆動開発(金曜日または開発期間終了日)
みんなに感謝する、時々飲みに行って、ほろ酔いのまま趣味の開発を進める。

6.アウトプット駆動開発 & youtube駆動開発(休日)
記事を書くためにソースコードを読んだり、IT系のYouTubeから刺激を得る。だるいときはバラエティ系YouTubeなどで笑いまくってストレスを解消する。


## 半年ごとの過ごし方(例)
1.職務経歴書駆動開発
直近半年でちゃんと成長できているかを言語化する。足りないスキルについて趣味の開発をしてみる。

2.カジュアル面談駆動開発
成長を感じない、または停滞感がある場合は転職する気がなくてもカジュアル面談してみて、その知見を開発に生かす。

3.退職日駆動開発 & 資格駆動開発
転職を決めたら退職予定日から逆算して、しなくてはいけないことをやり始める。必要ならば資格を取るための開発勉強もする。


# あとがき
自分に合った駆動開発してみれば、なんか良い感じにアウトプットできて良いエンジニア人生を送れるんじゃないかと思えてきました。
(多分辛いものもあるけど)

エンジニアキャリアを作り上げていくにあたって悩んでいる方や、救世主(メシア)的ななにかに突き動かされて学習や開発を進めていきたい方も、自分に合った最強の駆動開発を見つけていただけたら私は嬉しいです。