ITエンジニアなら問題の自己解決力を高めるラバーダッキング法を覚えよう!

問題解決の思考法、ラバーダッキング法

どんなエンジニアでも、問題があるプログラムのデバッグに悩まされたことはあるでしょう。
コーディングをしている時は、プログラムがうまく動くことを考え、自分の中ではすべての処理がうまく繋がっているつもりで作っていることだと思います。
しかし、そうして作ったプログラムが正常に動作しないことは多々あり、むしろ初めから全てが正常に動作するプログラムが完成することは非常にまれです。
想定通りに動作しない場合は、プログラムをデバッグしながらバク(問題点)を見つけ出し、修正をしていくことになります。


しかし、バクを探し出すという行為は、他でもない自分が作ったプログラムの誤りを見つけることになります。その作業は、自分自身を否定することに繋がるような行為であり、分かってしまえば簡単なミスに起因する問題でも、見つけることができなくてなかなか思うように作業が進まないことがあります。
誰しも苦手なデバッグも、解決法を知ることで光明を見出すことが出来るようになります。
そこで、今回はエンジニアの思考法の1つ「ラバーダッキング法」を紹介します。

ラバーダッキング法とは

ラバーダッキング法とは、問題が発生した際に、ラバーダック(ゴム製のアヒルのおもちゃ)に悩みを話しかけることで、頭の中を整理し、問題の解決を図る方法です。
エンジニアであれば、プログラムのバクなどによるエラー(不具合)に遭遇したとき、一人で考え込んでいても一向に解決しなかった問題が、アドバイスを求めるために誰かに話すことで、案外その場で自己解決してしまった経験がある方は少なくないでしょう。基本的にエンジニア自身でコーディングしたソースのミスを自分自身で探すことは気が付きにくく、第三者に相談したほうが問題解決しやすいというのが一般的ではないでしょうか。
そして、これがまさにラバーダッキング法の効果です。

いつも悩みを聞いてくれる人がそばに居てくれればよいですが、このご時世ではリモートワークの方も多いためいつでも聞けるような環境ではなく、相手の都合なども考えれば難しいため、ラバーダッキング法では身近な物に対して話しかけることで自己の考えを整理し問題解決を図ります。
ラバーダッキング法と言う名前ではありますが、話しかける相手はラバーダックでなくても、身近な物であればなんでも構いません。例えばお気に入りのぬいぐるみや、ボイスレコーダーなどのアプリでも大丈夫で、声に出すのが恥ずかしいのであれば、話し言葉でテキストを作ってもいいでしょう。
声に出して問題を明文化しよう

ラバーダックのような物に対して喋りかけるのは、最初は抵抗があるかもしれません。しかし頭の中だけで考え込んでいては、堂々巡りに陥ってなかなか問題解決しないことがあるため、そういった時は声やテキストに問題をアウトプットしましょう。
問題を言葉としてアウトプットするとき、相手に伝える説明を意識することで、問題が明文化されます。
明文化されてしまえば、たとえそれが自分で書いたプログラムであっても、客観的に物事を見ることができるようになります。
また、人へ説明することは自身の理解度を測る物差しにもなり、うまく問題点が説明できない場合は、理解が不足していることが考えられます。
自身で書いたコードをブレイクダウンし、一つ一つの処理の目的を明確化し、メソッド間の繋がりや前提条件を説明できるようにアウトプットしていくと頭の中が整理され、それだけで問題の原因が見えてくることがあります。
さらに、こういった作業を繰り返すことで、説明する力のアップにも繋がります。

問題が出揃ったら整理と解決へ進める

問題を言葉やテキストにアウトプット出来たら、今度は問題を整理して原因の追究を進めます。
このとき、問題はできるだけ分かりやすく詳細にまとめます。例えばプログラムに関する問題であれば、利用言語・バージョン・OSの種類などは必ず問題の前提条件として最初にまとめます。

問題解決するための思考法

ゴールを決める

問題点があれば、そこには必ず本来あるへぎ姿のゴールがあります。まずは本来あるべき姿とのギャップを知り、それを明文化しましょう。
問題点がプログラムのバクであれば、仕様書と実装に差異があり、正しく動作していないということであるため、改めて仕様書を見返してゴールである正しい姿を確認し、それを明文化します。
このとき、仕様を誤認したままゴールを設定すると結局は問題解決にならないため、自分では仕様を理解したつもりであっても、再度確認をすることが重要です。
問題点が外部のAPIやライブラリなどの技術的な課題にある場合、エラーが発生しているコードだけを問題点として上げる人がいます。
技術的な問題の場合、APIが廃止され使えなくなっていたり、ライブラリが最新のOSに対応していなかったりする可能性があり、もしAPIが廃止されて使えなくなっていたことが原因であった場合、原因は分かっても、そのAPIを使う前提では問題解決に至ることができません。
APIなどで発生したエラーの詳細情報に加えて、そのAPIを使った機能全体として何ができればゴールなのかを明確にし、さらにそれができなかった場合の問題点や影響範囲なども明文化するようにしておきます。
そうすることで代替となるAPIを使用することの検討や、その機能がシステムとして必須でなければ、機能を無くすことで、問題解決を図ることも可能になります。

解決法を自分で調べる

問題点やゴールが明確になったら、問題解決に向けて自分で調べます。
いきなり人に頼ってしまう人もいますが、昨今ではインターネットには膨大な情報があるため、まずは自分で調べることもラバーダッキング法の重要な要素です。
前の作業で問題点の原因やゴールが見えているため、ここまで来れば大抵の問題は一人で解決できるでしょう。

解決が難しい時は問題を共有する

どうしても問題が解決できない場合は、他の人と問題点やゴールを共有して解決法を探ります。
共有する相手は会社の同僚や先輩、インターネットのQ&Aサイトなどに投稿するのもよいでしょう。ただし質問する相手はあなたが作ったプログラムのことなど知らないため、誰でも理解できるように内容を整理してから質問や投稿をするようにしましょう。
ただし、インターネットのQ&Aサイトなど、オープンなサイトに投稿する場合は、掲載する内容には注意が必要です。機密情報だったりする場合もありますから、掲載内容は慎重に確認してから掲載してください。
問題の明文化と原因追及がしっかり行われていない場合は、質問された相手からすると何が問題かすらも分からないなんてことになってしまい、結局は誰にも回答してもらえなかったという結果になってしまうこともあります。
また、Q&Aサイトに投稿する時は、整理した問題点やゴールの情報に加え、自分で試してダメだった事も記載するようにしましょう。
Q&Aサイトの回答者は、お金も貰って回答しているわけではなく善意でやっているため、意味不明な質問や、自分で何も調べていない丸投げ質問には回答がつかずスルーされる傾向にあります。

妥協も一つの解決策

技術的な問題の場合、そもそも実現できないケースもあります。
問題の解決がどうしても難しい場合、最終手段としてその機能を削減するなどの妥協策を取るのも一つの解決策です。
ゴールを決める時に、その機能が実現できなかった時の影響範囲も整理しておけば、その機能が必須かどうか関係者に判断を仰ぐことが可能になります。
例えば、メールを送信するAPIに問題があり、メールが送信できない問題が発生した時のケースを、次の2つのシステムの例で考えてみましょう。
1つ目のシステムでは、メールアドレスを入力してユーザーを仮登録すると、アドレスの所有確認のため、登録時のアドレスにメールが送信され、メール本文に記載されたリンクをクリックすることでユーザーが本登録される仕組みだったとします。

このような仕組みの場合、メールが送れない=ユーザーの登録が出来ないというシステムのクリティカルな問題になるため、このシステムではメール送信機能は必須の機能と言えます。そのため、別のメール送信APIを探すなどして対処する必要があるでしょう。
2つ目システムでは、ユーザーがお気に入りの写真を登録すると、通知として登録した写真の情報をメールで送信する仕組みがあったとします。
このケースでは、お気に入りの登録自体はされているため、メールが送信されていなくても、システムとしてクリティカルな問題とは言えません。そのため、対応するための工数や費用と、問題の影響度を天秤にかけて、場合によってはメール通知機能をカットするという選択肢も考えられます。
このように、原因が同じ問題であっても、ビジネス的にクリティカルな問題かどうかで、対応方法も変わることがあるため、ラバーダッキングによって問題点を整理する時は、ビジネスとしての最終判断が下せるような情報も明記するようにしておきましょう。

自走できるエンジニアになるためには

自走できるエンジニアになるための思考法

今回紹介した「ラバーダッキング法」のような思考法の習得は、自走できるエンジニアになるために必須と言えます。
ITエンジニアの仕事は、顧客企業における業務課題の解決から、プログラムの問題(バク)解決まで、それぞれの職種に立場や業務内容の違いはありますが、基本的には常に何ならの課題に立ち向かっています。
よくITエンジニアには「論理的思考力」が必要だと言われることがあります。これは、プログラミング自体に論理的思考が必要であることや、日々発生する課題を体系的に整理し、問題解決へ導く力が必要であるためです。
ラバーダッキング法を日々実践していくと、この論理的思考力を身につけることが可能です。思考法をもって課題を自己解決できることで自走する力を得ることができ、テレワーク環境でも信頼して仕事を任せてもらうことができます。
プログラマとしてのスキルアップとしてラバーダッキング法を実践してみてはどうでしょう?
ラバーダックというと、ゴムのアヒルの人形という意味で、日本人にも馴染みのあるフォルムの人形で、思わず笑ってしまいそうになりますが、問題解決へ導く思考法を身に着けようと考え、ゴムのアヒルを見れば、親しみやすく緊張せずに話しかけることができるかと思います。

ITエンジニアの求人探しはエンジニア専門転職サイト「Javaキャリ」

転職活動はいつだって期待と不安の入り混じったものです。少しでもいいから期待の方を大きくしたい、良い求人に出会いたいと願うのは当然のことでしょう。
Javaにこだわるエンジニアのための転職サイト「Javaキャリ」ではIT業界の中でもJavaエンジニアに特化した転職サイトとして多数の求人をご用意。少しでも良い求人と出会えるよう、専門サイトならではの機能で貴方の転職活動を応援します。

エージェントサービスに登録すれば年収査定、適性診断からキャリアプランの設計まで、業界経験豊富なコンサルタントへのご相談も可能です。
「Javaキャリ」を是非あなたの転職活動にお役立てください!


「Javaキャリ」に登録してエンジニアの求人を探す!

  • ファイナンシャルテクノロジーシステム株式会社
    年収 350万円 ~ 700万円
    業界30年のノウハウと革新的な独自AIプラットフ…

    〈会社の特徴〉 弊社はFintech分野をリードする、先進的なシステム開発を得意とする会社です。 Finance(金

    ファイナンシャルテクノロジーシステム株式会社
    place東京都
  • 株式会社インプレス
    年収 300万円 ~ 600万円
    【20代・30代活躍中】オープン系SE・PG◆上…

    経営理念は、「技術の前に人ありき」。 人柄重視といっても、難しいことは求めません。 きちんと挨拶ができ、お客様や

    株式会社インプレス
    place東京都
  • 株式会社インフォメーションポート
    月給 26万円 ~ 50万円
    【SE/PG】あなたの「やってみたい!」「スキル…

    インフォメーションポートは「スキルアップを実感できる」会社です。 ◆同じような仕事でスキルアップできていない ◆

    株式会社インフォメーションポート
    place東京都
  • 株式会社クリエーション・ビュー
    年収 400万円 ~ 800万円
    一次請け案件8割/20代活躍中/残業ほぼゼロ/1…

    「手を動かすだけでは物足りない…」 そんなスキルアップを目指す、エンジニアの想いに応えます! エンジニア一人ひ

    株式会社クリエーション・ビュー
    place東京都
  • AZURE・PLUS株式会社
    年収 300万円 ~ 500万円
    上流工程で活躍する!設計・製造フェーズからのスキ…

    【当社は今、アプリケーション開発エンジニアを求めています!】 『PGから、設計・要件定義を担当するSEを目指したい

    AZURE・PLUS株式会社
    place東京都
  • 株式会社アクトプロ
    年収 480万円 ~ 900万円
    【急募!残業時間10h以下/大手交通インフラ優良…

    弊社アクトプロは長期に渡りお客様との信頼関係を構築してきました、また働く環境にしっかり配慮しております。 各プロジェ

    株式会社アクトプロ
    place東京都

SNSでもご購読できます。