ごきげんよう。トウマです。
先日業務をしていたらチームリーダーに呼ばれあまり接することのない更に上の役職の方とミーティングする機会がありました。
僕が尊敬しているチームリーダーが「あの人はエスパー並みにすごい」と言っているような方で、実際話してみると無駄を嫌い物事の本質を分かっている風な優秀そうな気配を感じました。
今回はそんな方とのミーティングで教わったプログラミング、ひいては運用業務など幅広く仕事を進める上での3つのコツについて書いていきます。
3つのコツとは

結論、以下の3つを意識することがコツです。
- ①まずは全体の設計を行う
- ②先にエラー処理を考慮する
- ③関数化を行う
言葉の意味云々は置いといて、パッと見どれも斬新な話ではありません。
社会人であれば聞いたことのあるようなごく基本的なことです。
ですが多くのプロジェクトを管理している方からすると、これらが出来ている人のほうが圧倒的に少ないそうです。
プログラミングをするときにとりあえず動くものを目指していきなり書き始めてしまったり、、、
期待する結果が常に得られる前提で運用を組んで想定外の事態に手戻り等の無駄が発生しやすかったり、、、
チームのノウハウの蓄積が全然たまっておらず業務の引き継ぎにダラダラと工数を消費してしまったり、、、
いろんなプロジェクトで何度も同じような無駄な失敗を目の当たりにしてきたためウンザリしていると。
今回僕たちのチームで新しいプロジェクトが始まるのに際してこういった失敗を繰り返さないために、基本的であるけど改めて意識してほしいとのことで3つのコツを教えてくれました。
僕なりの解釈・例も交えて1つずつ解説していきます。
①まずは全体の設計を行う

学生時代、国語の時間に耳にタコができるレベルで言われたこととして
文章を書く時は”起承転結”を設けてストーリーの大枠を作ってから中身を詰めましょう
といったことがあります。
これ文章を書くときのみならず、どんな仕事を進める時でも先にある程度全体の設計をすることで例えば以下のようなメリットがあります。
・全体を通して見たときに前後関係が破綻しにくい
・それぞれのシーン(段階)で何が目的か、何が必要かを把握できる
・ある程度アタリをつけることができるので全体の難易度やスパンがわかる
この他にも多くのメリットがあるのでまずは全体の設計を行いましょう。
逆にこれをしないと無駄な手戻りや細かいミスが発生しやすく、また以降紹介するコツ②③が利用できません。
ex)カレーを作る場合
コツ①について、プログラミングに馴染みのない方でもわかりやすいように「カレーを作る場合」を例に考えてみましょう。
まずは全体の設計を行う、ということで行うべき段取りを最初に考えましょう。
- レシピを用意する
- 必要な材料や調理器具を把握する
- 家にある材料や調理器具を把握する
- 足りない材料や調理器具を揃える
- 玉ねぎを買いに行く(中身を詰める部分)
- 豚肉を買いに行く(中身を詰める部分)
- (省略)
- 調理する
- (省略)
- カレー完成(目的達成)
こういった段取りを最初に考えないと、、、
・いきなり調理から入ってしまい「そういえばアレばない」という事態になったり
・レシピを用意せず行き当たりばったりなので必要な工程が抜けて(抜けていることにも気づかず)期待外れの結果になったり
・なんとなくで玉ねぎを買ってきたけど実はすでに家にあって余らせてしまったり
などなど無駄や失敗が起こりそうですよね。
これらを防ぐためにもまずは全体の設計から行いましょう。
②先にエラー処理を考慮する

エラー処理とは想定外の事態や通常のルートから外れた事態への対応のことです。
(例外処理・Try-Catch処理などとも呼ばれますね)
つねに物事がトントン拍子で進むわけではありません。
想定外の事態はパニックにもなりやすく前提が崩壊してしまったりクリティカルな失敗に繋がりやすいです。
なのでなるべく多くの事態を想定内とするため発生する可能性の高いエラーにはちゃんと備えましょう。
ではどういう観点でエラーに備えればよいのか?
コツ①でそれぞれのシーンの目的・必要なものが分かっているので、それが達成されない・用意できないパターンを考えその場合はどんな対応で目的・必要なものを満たす(正規ルートに戻す)のか考えましょう。
ex)カレーを作る場合 材料を揃えるシーン
「カレーを作る場合」の材料を揃えるシーンで考えてみると、、、
豚肉を買う、だけ決めたら豚肉が手に入ると思ったら大間違いです。
事態①
足を運んだ肉屋に豚肉が売っていない場合どうする?
→豚肉が見つかるまで別の肉屋へ足を運ぶ?
→代用品(鶏肉)が売っているならそれを買う?
(鶏肉が売っていない場合どうする?)
事態②
手持ちのお金が足りない場合どうする?
→ATMを探しておろしてくる?
(ATMが見つからない場合どうする?)
→カード払いする?
など考慮しておくことでシーンごとの目的が達成されるようにしましょう。
③関数化を行う

関数化とは要はテンプレート化のことです。
何度も繰り返す作業やほとんど同じような作業は関数化(テンプレート化)してそれをコール(参照)するようにしましょう。
汎用性が高くなるため工数が減るだけでなく、後から作業の修正や見直しもしやすくなります。
ex)カレーを作る場合 材料を揃えるシーン
またまた「カレーを作る場合」の材料を揃えるシーンで考えてみると、、、
「玉ねぎを買う作業」の工程
- 八百屋に行く
- 玉ねぎを探す
- 玉ねぎが見つからない場合のエラー処理をする
- 玉ねぎをレジへ持っていく
- 代金を支払う
- 手持ちのお金が足りないときのエラー処理をする
- 玉ねぎをエコバッグにつめる
- 八百屋を出る
「豚肉を買う作業」の工程
- 肉屋に行く
- 豚肉を探す
- 豚肉が見つからない場合のエラー処理をする
- 豚肉をレジへ持っていく
- 代金を支払う
- 手持ちのお金が足りないときのエラー処理をする
- 豚肉をエコバッグにつめる
- 肉屋を出る
並べてみると「玉ねぎを買う作業」と「豚肉を買う作業」はほぼ同じものなので、別々のものとして考えるのをやめて以下のように「おつかい作業」として関数化(テンプレート化)しましょう。
「おつかい作業(欲しい物:〇〇 目的地:△△)」の工程
- △△に行く
- 〇〇を探す
- 〇〇が見つからない場合のエラー処理をする
- 〇〇をレジへ持っていく
- 代金を支払う
- 手持ちのお金が足りないときのエラー処理をする
- 〇〇をエコバッグにつめる
- △△を出る
これにより例えば誰かに作業を頼むとき「玉ねぎを買う作業」と「豚肉を買う作業」の両方を説明しなくても「おつかい作業」を説明するだけで済みます。
また「ポイントカードを提示する」といった工程を追加する場合も「おつかい作業」の中身を修正するだけでよくなります。
面倒くさがらず実践あるのみ

3つのコツ、いかがだったでしょうか。
なるほどと思っていただけた方は今日から小さなことでもこれらを意識的に行っていただけると無駄を減らすことができるのでぜひ実践してください。
「こんなの当たり前だよ」と思われる方も多かったのではないかなと思います。
それでも冒頭書いたようにこれらのことができない人が多いようですので改めて再認識いただければ嬉しいです。
それにしてもなぜこれらのことが出来な人が多いんでしょうね、、、
おそらく単に面倒くさいからという理由と、とりあえず形となって動くものを目指しがちで動いたら動いたでそれで良いとなってしまう部分があるのかなと思います。
(僕自身これまで意識的にやってこなかったですし、、、)
経験を積んで3つのコツを繰り返し実践していくことで、実践する前と比べて無駄や失敗が減ったなと実感できるようになれたらかなり成長していると思います。
僕も実感できるように頑張ります。面倒くさがらずにね。
ここまでお読みいただきありがとうございました。
また他の記事や動画でもよろしくお願いします。
ということで、お疲れ様でございました。
(下書き時点の文字数:3263文字 記事執筆時間:5時間)
コメント
5時間もかけてブログ書いて下さったんですか?😣
読みやすい様に分かりやすい様にカレーの例えは助かりました😁
3つのコツは1人1人が意識しないとですね。1人だけでは重荷になります。
少なくとも自分の職場では💦
昔からこうしてきてるんだ!と時間も仕事も非効率なやり方を全うする年代がいる職場でも面倒くさがらず、意識持ってくれると思います?😆
自分も今年で10年目になります😏
ここ、2、3年、辞めたい、辞めると言いながら現時点で辞めてないという、やめる、やめる詐欺な感じですがww
それに尊敬できる上司がいるのは羨ましい環境です。
面倒くさがらず⋯⋯むずっww
箱推し様コメントありがとうございます!
本当は5時間どころじゃなくもっと細部まで詰めてから公開すべきだと思いますが限界でした、、、笑
理由が「昔からこうしてるんだ」というだけで他に効率的な方法があるかもと模索しないのはもったいないなぁと思います。年をとるほど変化を拒むのは人間のサガなのでしょうがないのかぁ
僕も早く自立して会社頼りではなく自分でお金を稼げるようになりたいなぁ、、、