💡

ソフトウェアエンジニアとして「仕事のできる人」になるために意識している8つのこと

2024/05/31に公開2

目的

  • エンジニアとして生産性を上げるために意識していることを残しておきたい&都度更新していきたい
  • ここら辺意識して仕事しておけば、ある程度仕事できるやつになれるんじゃないか説を立証したい

意識していることリスト (※全部できているわけではない)

✅ 優先順位を決めて、きっちり守る

  • 勤務中は色んな人から連絡がきたりするので、作業効率を落とさないように優先順位を決めている
  • プロダクトを前に進めること = リリースすることを基準に決めている
    • 会社としての優先順位、チームとしての優先順位と同じようになるようにしている
  • 自分の中で決めている優先順位
    1. ユーザー影響のある機能の不具合/バグ
    2. PMやエンジニア、デザイナーからのメンション (相談とか仕様の確認とかのメッセージ)
    3. 他の人のPRのレビュー
    4. 自分のPRのレビュー指摘対応
    5. 自分のタスクの実装
  • 補足
    • 1に関しては判断がつかない場合もあるのでPM等に相談することもある
    • 2, 3に関しては他の人のタスクを止めないということで優先順位を高くしている
  • ただ決めるだけではなく、きっちり実行に移すことが大切

✅ 発言する

  • リモートで顔が見えない場合、話を聞いていることを相手にちゃんと示す
    • スタンプでもいいので反応をちゃんと返す
  • グループメンションされた時も一旦反応してみる = 放置しないことを意識する
    • 「みます」とか「考えます」という1次返答だけでも良いと思う
    • 反応しないで無視してるみたいになったり、リマインダーみたいな形で再度連絡が来ないようにしている
    • 絵文字スタンプだけ押しても人によって捉え方が違うので必ず文字として反応する
  • 自分が尊敬するエンジニア、できるエンジニアはみんなのいる場でちゃんと発言している (できる) イメージがある
  • 発言する練習 = 自分の考えを言語化する練習 = 自分の意図ややりたいことを周囲に上手に伝えることができるようになる

✅ 周りの人と目線を合わせる

  • 手戻りしないように、常に周りの人と目線を合わせる/共通認識を持つ
  • 周りの人 = PM/デザイナー/エンジニア
  • そのために
    • おや?と思うことがあれば、エンジニア/PM/デザイナーに聞く
    • ドキュメントにコメントする
    • ドキュメントを更新する
    • 言葉の定義を明確にする
      • バックグラウンドが違うので同じ言葉でも違う場所/概念を指していることもあるので
      • 議論が平行線にならないように共通認識を持つ
  • チームで仕事しているんだから、チームでアウトプットを出せるように知識とか情報は基本共有した方が良いよねって話

✅ イメージする

  • 原稿を書くときに下書きするように、実際にコードを書く前に実装をイメージする
    • コードはどこに置くか?
    • コードはどこまで分割するか?
    • コンポーネントはどうやって構成するか?
    • こういうエラーだったらフロントの挙動はどうなるか?
    • こういう動作をしたい場合はAPIはどういう情報を返せばよいか?
    • etc…
  • 手を動かす前にイメージすることができれば、それだけでも手戻りを少なくできる
  • 頭の中で完結させるのが難しければ、図に書いてみる

✅ 分からないことを分からないままにしない

  • どうやってバグを見つけたのか?この概念は何か?この機能は何か?など
    • 次に自分が同じ状況になったら同じようにできるかを考えながら人の作業を見る/レビューする
  • 分からないままだと何もできないので、人に聞いて理解する
    • ツールの使い方やログの見方とか
  • 人に聞けない場合は調べる、よく言われるようにググり力大切
    • このことは自分が初めて知った、ということはほぼないので先人たちの残したサイトを頑張って見つけ出す
  • どうしても分からなければ、サイトで質問してみる
    • stack overflowに書くと秒速で解答が返ってくるのでおすすめ

✅ モチベーションで仕事をしない

  • モチベーションによって業務スピードが落ちたり、質が落ちる社会人は2流 (とどこかのCOOが言ってた)
  • 言い換えると、1流のエンジニアはモチベーションに左右されず、いかなる時も質の高いプロダクトを素早く開発できる (でも現実的には難しいよね)

✅ 開発環境を心地いいものにする

  • 無駄なアプリを使わない
    • 音楽のアプリとか業務に関係ないアプリは常時開かないとか
    • アプリを使ったらその都度終了させるとか
  • スニペットを登録したり、ショートカットを登録する
    • ミスしやすいものとかはテンプレート化してしまう
  • Vimのキーバインディングを学ぶ
    • emacsでもいい
    • 矢印キーやdeleteキーを使わずにコーディングする
    • ファイルの移動やコピペなどをキーだけで完結させる
  • ヘッドホン等をして外部からの雑音を排除する

✅ 機能をさわる

  • 自分が開発した機能以外の機能を触ってみる
  • 自分が知らない機能があったら、どんなものか軽く調べてみる
    • 次やるタスクが似たようなものであれば、簡単に実装できる
    • 単純に手数が増える
  • 普段からアプリを触る癖があれば、異常に気付ける

おまけ

chat GPTにも聞いてみたよ。

ソフトウェアエンジニアとして「仕事ができる」人の特徴には以下のようなものがあります:

1. **タスクの優先順位をつける能力**:
   - 多くのタスクの中から最も重要なものを選び、効果的に優先順位をつけることができる。

2. **結果志向**:
   - 明確な目標を持ち、その達成に向けて具体的な行動を起こすことに集中する。締め切りを守り、期待される結果を提供する。

3. **自己管理能力**:
   - 自分の作業スケジュールを管理し、時間内にタスクを完了させることができる。プロジェクトの進捗を追跡し、自己の生産性を維持する。

4. **効率的なコミュニケーション**:
   - 必要な情報を適切に収集し、共有することで、チーム内外でのコミュニケーションを円滑に進める能力。明確で簡潔な報告を行う。

5. **チームワーク**:
   - 他のエンジニアやステークホルダーと協力して、プロジェクトを成功に導く。チームメンバーの意見を尊重し、効果的に協働する。

6. **柔軟性と適応力**:
   - 変化する要件や環境に迅速に適応し、新しい技術やツールを迅速に習得する。問題が発生した際にも冷静に対応する。

7. **詳細への注意**:
   - 細部にまで注意を払い、バグやエラーを未然に防ぐ。コードレビューやテストを通じて、品質の高い成果物を提供する。

8. **プロアクティブな姿勢**:
   - 問題が発生する前に予測し、先手を打って対策を講じる。改善点を常に探し、自主的に改善を行う。

9. **技術的スキル**:
   - 高度なプログラミングスキルや専門知識を持ち、実際のプロジェクトでそれを活用できる。新しい技術を迅速に学び、適用する。

10. **フィードバックの受け入れと提供**:
    - フィードバックを建設的に受け入れ、自分のスキルや成果を向上させる。また、他人に対しても建設的なフィードバックを提供する。

これらの特徴を持つ人は、ソフトウェアエンジニアとして高い生産性と成果を上げることができるでしょう。

意外と技術に関することが少ないね。

Discussion

zomysanzomysan

ウンウンと思う項目がたくさんありました。同時に改めて「たしかに!」と思うところも多く、大変参考になりました。良い記事をありがとうございます。

モチベーションに左右されないというのは大事で、ただこれがなかなか難しく、私はどうしても多少波ができがちです。イマイチ乗らないとき、Panaさんはどのようにエンジンをかけてますか?

PanaPana

コメントありがとうございます。

確かにモチベーションの話は自分も難しいと感じます。そういう時はちょっとだけでも技術に触れてみるというのを意識してます (どこかで行動してるとやる気が生まれる的な話を聞いたような気がします)。

例えば

  • 気になる本を目次だけでも目を通してみる → 気になる章だけ読むとか
  • なんか気になるコードやライブラリを斜め読みしてみる → 挙動が気になるようであれば手元で試してみる

とかですかね。何かの参考になれば幸いです!