本サイトにはプロモーションが含まれています

エンジニアの働き方

【保存版】エンジニアが効率よく質問する3つの手順【仕事の行き詰まりを解消】

こんにちは。投資エンジニアの三年坊主(@SannenBouzu)です。

今回は、仕事で行き詰まって先輩や経験者に質問をしたいエンジニアの、このような疑問に答えます。

エンジニアだけど、分からないことを上手に質問する手順を知りたい。すぐに質問すると、確かにその場は乗り切れるけど別のシチュエーションに対応できないし、かと言って長時間悩んでも行き詰まりが全然解決しない。先輩は忙しそうで何度も質問するのも申し訳ないので、エンジニアとして問題解決力を鍛えつつ、先輩やネット上の知恵を上手に借りられるように、効率よく質問ができる手順を身につけたい。

エンジニアとして仕事をしていると特に、分からないことや疑問点が次から次へと出てきて、自分ひとりで本当に解決できるのか、不安になったり焦ったりしますよね

 

この記事では、複数の職場で5年近くエンジニアとして働いてきた経験を踏まえて、効率よく質問して仕事(特にプログラミング)の行き詰まりを解消する手順を紹介します。

反射的に質問しないこと、冷静になって状況を整理することが、質問する側・される側のどちらにとってもメリットが大きいと感じています。

この記事はこんな方におすすめ!

  • 仕事で行き詰まって、つい反射的に質問をしてしまうエンジニア
  • 分からないことや疑問点が次から次へと出てきて不安や焦りを感じるエンジニア
  • エンジニアとして問題解決力を鍛えつつ、効率よく質問できるようになりたいエンジニア

 

エンジニアが面接で聞くべき逆質問についてはこちらをご覧ください。

【保存版】エンジニア面接で聞くべき逆質問13選【リアルな回答例あり】エンジニア面接で「何か質問はありますか?」と逆質問されて困っていますか?エンジニア面接で聞くべき逆質問と、Web系企業8社の人事担当者・現場エンジニアからのリアルな回答例を紹介します。求職者から質問できる機会を活用して、転職活動の満足度を上げましょう。...

エンジニアはなぜ質問をするのか?

コトバンクでは、「わからないところや疑わしい点について問いただすこと」と定義されている「質問」ですが、そもそもエンジニアはなぜ質問をするのでしょうか。

質問するのは「目の前にある問題を解決するため」ではない?

「目の前にある問題を解決するため」というのは、表面的には間違いではないと思います。

ですが、より正確には、理想と現状のギャップとして何か問題が存在して、それを解決することで本来の目的達成に役立てるため、と考えられます。

「本来の目的」「理想」「現状」が何であったか冷静に整理して、相手に過不足なく伝えられる、効率のいい質問を作る手順を確認しましょう。

 

質問の手順①:本来の目的を整理する

目の前の問題を解決しようと反射的に質問するのはNG

行き詰まったからといって、目の前の問題を解決しようと反射的に質問をしてはいけません

「プログラミングしたら目の前の問題が解決しそうだけど、そもそもプログラミングが必要なかった」という状況も考えられるからです。

「Webサイトにログイン機能をつけようとしていたけど、そもそも不要かもしれない」という場合に、ログイン機能の話をしてもしょうがないですよね。

 

日常生活の例でいうと、「東京駅で『山手線に乗る方法』を質問している人の目的地が、実は札幌だった」ような場合が挙げられます。

この人は、『山手線に乗る方法』だけを質問するよりも、「札幌に行きたいこと」も相手に伝えていれば、「東京駅から新幹線に乗る」「羽田空港に行って飛行機に乗る」など、本来の目的を達成しやすい的確なアドバイスをもらえる可能性が高いでしょう。

 

質問して問題解決しても本来の目的を達成しなければ無意味

本当にすべきことは「質問の回答を得ること」でも「問題を解決すること」でもなく「本来の目的を達成すること」です。

目の前のエラーが解決しても、質問した本人の本来の目的が達成できなければ、意味がないですよね。

 

質問の手順②:エンジニアリングで目指す理想と現状を整理する

「達成したい理想的な状態」と「自分が置かれた現状」

少し具体的に、Firebase Authenticationを使ったWebアプリケーションでログイン・ログアウト機能を作ることを考えながら、理想と現状を整理してみます。

  • 理想:行き詰まった問題を解決した後に達成している状態
    • 「ログアウトすると、ユーザ本人にしか見えないはずの情報が見えなくなる」
  • 現状:具体的に試したこと、利用したツール。いま問題として観察できること。
    • Vue.js (Nuxt.js) + vuexで状態管理
    • 「Firebase Authenticationで、firebase.auth().signOut()を実行した」
    • 「ログアウトしたはずだが、ユーザ本人にしか見えないはずのユーザ情報が見えてしまっている」

 

もう一つ、再び、東京駅にいる人の例を考えてみます。

  • 目的
    • 札幌→「新宿駅の近くで友人の結婚式に出席する」
  • 理想
    • 「新宿駅にいる」
  • 現状
    • 「東京駅にいる」
    • 「自宅の最寄駅から電車で東京駅に来た」
    • 「Suicaを持っていて、残高は300円→20円」

「理想と現状のギャップを埋めるために何を聞くべきか」明確になるように整理していきましょう。

 

エンジニアが現状を理解するためのツールの例

エンジニアの仕事で使うツールにも、「現状」を理解するために役立つものがたくさんあります。以下に一例を挙げます。

  • Developer Tools(ChromeやFireFox)
  • Vue.js Devtools(フレームワークVue.jsでの開発)
  • アプリケーションログ
  • デバッガ(プログラム実行中に変数の内容を確認)
  • historyコマンド(自分が試したコマンド一覧を確認)

 

質問の手順③:ギャップ=問題の原因を特定→解決策の候補を洗い出すために質問する

本来の目的に加えて、理想と現状が明確になってはじめて、質問をすることができます。

質問といっても、エンジニアの先輩に対面で質問する以外にもいろいろな選択肢がありますよね。

  • Google検索(手順②でゲットしたエラー情報を使って)
  • プログラミング情報共有サイト(Qiitaなど)
  • 言語やライブラリの公式サイト
  • GitHubでコードを読む
  • 質問サイト(teratailStack Overflowなど)

 

「言語やライブラリの公式サイト」は、英語だったり分かりにくかったりして敬遠しがちですが、自分の行き詰まりを解消してくれる答えがしっかり書いてあることもたまにあるので、チェックしておいて損はありません。

 

Google検索履歴の一覧を公開します【エンジニアのある一日】

参考までに、エンジニア業務中に使ったGoogle検索の履歴を(可能な範囲で)公開してみます。

ベストなGoogle検索の使い方を実践できているかは分かりませんが、自分の検索履歴を見返しながらいくつか発見があったので、あわせて共有します。

  • 「ライブラリ名+メソッド」「エラー名」検索多め
  • 同じ検索クエリが続いている時は、いい検索結果が出なかったか、集中力が切れていたか
  • 英語で検索する方が多い。たまに日本語も。

 

pandas dataframe to json lines – Google 検索
pandas dataframe to json – Google 検索
pd dataframe サンプル – Google 検索
pd dataframe sample data – Google 検索
pandas to_csv format – Google 検索
scikit-learn logisticregression class_weight – Google 検索
logisticRegressionCV score – Google 検索
pd concat merge – Google 検索
ndarray to pandas series – Google 検索
LogisticRegressionCV LogisticRegression – Google 検索
LogisticRegressionCV – Google 検索
obtain cross validated model from scikit-learn – Google 検索
obtain cross validated model scikit-learn – Google 検索
use cross validated model scikit-learn – Google 検索
predict with cross validation – Google 検索
logisticregression multi_class – Google 検索
predict_proba – Google 検索
cross_val_score – Google 検索
cross validation scikit learn – Google 検索
cross validation – Google 検索
pandas unique – Google 検索
df copy – Google 検索
pandas loc 破壊的 – Google 検索
pandas dataframe query replace – Google 検索
pandas dataframe filter overwrite – Google 検索
Target is multiclass but average=’binary’. Please choose another average setting. – Google 検索
confusion_matrix ravel too many values to unpack (expected 4) – Google 検索
confusion_matrix too many values to unpack (expected 4) – Google 検索
confusion matrix too many values to unpack (expected 4) – Google 検索
confusion_matrix(y_true, y_pred).ravel() – Google 検索
scipy sparse ndarray – Google 検索
logicregression predict sparse matrix – Google 検索
logicregression predict sparse matrix – Google 検索
sparse matrix ‘list’ object has no attribute ‘shape’ – Google 検索
csr_matrix ‘list’ object has no attribute ‘shape’ – Google 検索
scipy.sparse.csr.csr_matrix ‘list’ object has no attribute ‘shape’ – Google 検索
scipy.sparse.csr.csr_matrix ‘list’ object has no attribute ‘shape’ – Google 検索
scipy.sparse.csr.csr_matrix – Google 検索
scikit-learn train_test_split – Google 検索
scipy.sparse.csr.csr_matrix logisticregression fit predict – Google 検索
scipy.sparse.csr.csr_matrix fit predict – Google 検索
scipy.sparse.csr.csr_matrix – Google 検索

 

Webエンジニアの業務内容を解説【1日の仕事の流れも具体的に】Webエンジニアの業務内容が知りたいですか?この記事ではWebエンジニアが取り組む具体的な仕事内容を、1日の仕事の流れと併せて現役エンジニアが具体的に説明します。個人でのWebアプリ開発とは違う点も3つ紹介しています。Webエンジニアを目指す方は是非記事を参考にしてください。...

最近は、Webエンジニアの仕事に限らず、pandasscikit-learnを使ったデータ分析寄りの仕事もできる状況になっていて、キャリアの幅を好きな仕事で少しずつ広げている実感があります。

エンジニアのキャリアを好きな仕事で広げるたった3つの方法【会社員の実体験】会社で「誰かの仕事」を背負いこんで消耗していませんか?エンジニアのキャリアを好きな仕事で広げるたった3つの方法を紹介します。キャリアに役立たない雑務に忙殺される「何でも屋」で終わらず、具体的に行動して好きな仕事でエンジニアのキャリアを広げましょう。...

 

現状の理解→原因の特定→打ち手の決定→実行

という一連の問題解決の流れは、『世界一やさしい問題解決の授業』がとても参考になりました。実生活で直面する問題に対して、「悩んで何も解決できない」「理想論ばかりで行動しない」状況を脱して、自分で打ち手を考えて行動につなげたい方におすすめの一冊です。

 

Minimal, Complete, and Verifiable example“は、質問サイトStack Overflowいい回答を得やすくする質問の作り方を紹介しています。

  • Minimal – Use as little code as possible that still produces the same problem(最小:同じ問題を引き起こす、できる限り少ないコードを使う)
  • Complete – Provide all parts needed to reproduce the problem in the question itself(完全:質問の中で、問題を再現するために必要な全ての部分を提示する)
  • Verifiable – Test the code you’re about to provide to make sure it reproduces the problem(検証可能:提示するコードを確認して、きちんと問題を再現できる状態にする)

 

エンジニアの質問フォーマットを作りました【埋めるだけ】

以上の内容を踏まえて、エンジニアが効率よく質問するためのフォーマットを作りました。

これらのポイントを一つずつ埋めていくだけで、行き当たりばったりで質問するよりもずっと適切な答えが得やすくなると思います。

  • 実現したい内容(=本来の目的)
  • 環境・バージョン(=最小・完全・検証可能)
  • 再現方法(=最小・完全・検証可能)
  • 期待する挙動(=理想)
  • 実際の挙動(=現状)
  • 参考リンク

もし口頭で先輩や経験者エンジニアに質問するようなシチュエーションなら、

「環境・バージョン」で「再現方法」すると、「期待する挙動」になるのが理想ですが、実際には「実際の挙動」になりました。「参考リンク」はこちらです。「実現したい内容」を実現したいのですが、何が原因で、何を試せばいいでしょうか…

みたいに聞くのがいいでしょう。

 

このフォーマットにある程度近い実際の質問例として、GitHub上にあがっていたissueが参考になると思います。

Logout does not clear the tokens #210

 

注意:社内など特殊な環境に依存するハマりは悩みすぎずに早めに聞く

「質問する手順」として様々な事前準備を紹介してきましたが、「社内など特殊な環境に依存する問題は、知っている誰かに聞いてしまうとすぐに解決する場合もある」ことは知っておいてもいいかなと思います。

  • Google検索で情報を得られない(一応社内のWikiなどは確認すべき)
  • 身につけた解決スキルが他の場所であまり役に立たない
  • 「知っているか知らないか」だけの問題なので、知っている人に聞けばその人の時間もあまり奪わない

こういう条件にあてはまりそうな内容は、悩みすぎずに身近な経験者に聞いてしまうのも手です。

悩みすぎずに効率よく質問して、快適なエンジニア生活を送りましょう!

 

関連記事:こちらも読まれています

【保存版】エンジニア面接で聞くべき逆質問13選【リアルな回答例あり】

Webエンジニアの業務内容を解説【1日の仕事の流れも具体的に】

転職後の「合わない・仕事できない」はアフターフォローで解決?【3つの事前準備】

エンジニアのキャリアを好きな仕事で広げるたった3つの方法【会社員の実体験】

 

▼経験の棚卸しで納得のキャリアを▼
▼自宅で簡単・お得にふるさと納税▼
【期間限定】無料登録でプレゼント
RELATED POST

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください