Webエンジニアに必要なスキルとは?君は果たして持っているだろうか??

この記事ではエンジニアに必要なスキルってなんなのか?っていうことを書いていきたい。自分エンジニアとしていくつか仕事やってきたからそれらの経験を踏まえて、こういうの必要なんじゃないか?っていうのを述べていきたい所存。

以下の記事に自分が仕事で使ってきた言語やらは少し書いたので気になる方はどうぞ。

関連記事プログラミング初心者は何から勉強していけばいいのか?おすすめの勉強法を考える!

いくつか書いていくんだけど、あくまで一個人のものだからまあ参考程度に「ほおん?なんか言ってんな」的なノリで見てみてください。

エンジニアに必要なスキル

コミュニケーション能力

エンジニアって黙々とパソコンに向かってコードを書いているようなイメージがあるかもしれないけど、個人的にはコミュニケーション能力が一番大事だと思う。自分が思っていることを相手に論理的に伝えて相手の意図を読み取って言葉を交わせるような能力

コミュ力コミュ力って社会人になり始めるあたりから散々聞いてきてこの言葉は好きじゃないけど、この能力は大事だ。

会社や仕事内容によると思うけど、エンジニアって自分が思っていることを話したり文書にまとめること結構あると思います。朝会や会議、仕様検討、レビューなど考えを言葉にする機会は頻繁にある。

正社員やフリーランスでいくつかの企業で開発していたけど、大体やることはこんな感じだろうか。

  • 朝会・・・昨日やったこと今日やること困っていることを共有
  • コード書く・・・タスクの機能を実装する
  • 設計書やドキュメントを書く・・・実装前に設計書いたり、必要なドキュメントを書く
  • 進捗会議・・・スケジュール見つつ現状の進捗はどれぐらいか
  • コードレビュー・・・他の人の書いたコードをレビューする
  • スプリントプランニング(タスク設定したりする会議)・・・1週間や2週間単位で今後の進め方は話す

働いている企業のスタイルや自分のポジションによってやることは変わるけど、例として1日のスケジュールを作ってみるとこんな感じだろうか。

日々やることなんて変わるし超ざっくりだけどなんとなくイメージはつくかな。コード書いている時間はもちろん多いけど、ずっとSlack繋がっててそこでいろんなやりとりが行われている。通知が来たら反応して必要なことがあったらメッセージ投稿してっていうのをコード書きつつやるっていうのが仕事のスタイル。

コードを書くのに人と話すっていうことはないけど、それ以外の仕事では他の人と話すっていうことが結構ある。フロントエンドの開発している人がバックエンド開発している人と仕様相談したり、エンジニア以外の人と仕様に関して話したりタスクの進捗会議で話したりと色々だ。

Slackで話すときやコードレビューも自分の考えを文字に落とし込まないといけないしずっとコードしか書かないっていうのはない。エンジニアは結構コミュニケーション能力が必要だと思うぞ。

プログラミングへの興味・勉強心

エンジニアは(特に最初の数年は)常に勉強するような気持ちが必要だと思うんだけどどうだろうか。paiza開発日誌に「趣味の開発、プログラミング、勉強などに、週どれぐらいの時間を使いますか?」っていう質問の回答がある。

paiza開発日誌

これを見てみると結果はこんな感じだ。

  • 20時間以上・・・11%
  • 15~20時間・・・4%
  • 10~15時間・・・16%
  • 5~10時間・・・36%
  • 5時間以下・・・33%

合計してみると、5時間を超える時間勉強している人が67%。これはどうだろう、人によって捉え方は変わるかもしれないけど、1週間に趣味でそれだけ開発に時間当てるんだあ・・・って思う人もいるんじゃないかと思う。ちなみにこのアンケートの期間と人数は以下。

期間は2014年7月18日から7月31日の間、対象となったのは、20代、30代で正社員・契約社員・派遣社員の皆さん273名

自分もエンジニアとして色々開発してきたけど、エンジニアって土日や平日の夜とか開発している人多いですよね。好きでやっているから勉強っていう感じではないけど、プログラミングが好きじゃないとそこまでできないでしょう。

だからプログラミング好きじゃないけどエンジニアになりたいっていうのはお勧めしないです。エンジニアになってからもかなりきついんじゃないかと思う。

プログラミングが好きでコードを書くことが苦にならないっていう場合にはエンジニアは良いんじゃないかな、と思います。

論理的思考力

これはなんとなくイメージつくけど、プログラムって論理ですよね。こっちの記事でも書いたけど、プログラムは「こうなってこうなってここがこうなるから最終的にこうなる」みたいな塊です。

論理的な思考ができないとプログラムをうまく組むことができずに「うわああああっ」て発狂してしまうかもしれません。ただこれは個人的にやっていくうちにできるようになると思うからそんな気にしなくていいと思う。

自分とても数学苦手だったけど、エンジニアになれたしフリーランスでいくつか案件受けて仕事したりしていたからまあそんな気にすることないんじゃないかなあ、と。

やっていくうちにできるようになるなら、プログラミングが好きでこれからも学び続けていこう!っていう気持ちの方が大事さ。

ちなみに数学的なことでいうと、人工知能開発なんかでは行列とかベクトルとか出てきたりするからちょっと「うっ」ってなるかもしれない。

英語力

エンジニアってプログラミング能力は必要だと思うけど、英語に耐性がないとやってられないですよね。ドキュメントはほとんど英語だしエラー文も英語です。コードを書いていると毎日何回のエラーに襲われるだろうか。簡単なエラーだとこんな感じだけど、こういうのが何行も表れたりすることもある。

エラー解決の流れについてはこっちに書いたのでよかったらどうぞ。

ドキュメントやGithubも英語ばかりだ。日本語なんてマイナーな言語なんだと思い知らされる。これらの英語と戦っていくにはそのまま英語を読んで理解するか翻訳ツールなどを用いてやっていくしかないが、やっぱり英語に「うっ」っとなってしまう時もある。

そんな「うっ」と戦っていくことが必要なのだ。ただ今は数々の翻訳ツールがある。あらゆる手段を使って英文を理解していこう。

技術力

会社やポジションによって扱う言語や業務は変わってくると思うけど、業務知識は必須ですよね。フロントエンドならHTML・CSS・JavaScriptへの理解。バックエンドならPHPやRuby、Goなど業務で扱う言語への理解。インフラならAWSやGCPなどの理解。

企業によってフロントとバックエンドが分かれていたり分かれていなかったり、そもそも全部ほとんど一人でやったりと様々だから、仕事する前にどんな業務内容なのかはちゃんと確認しておこう。参画した後にこんなはずじゃなかった・・・ってなったらきついからね。

ただ技術力は必要だけど、技術力が全てじゃないと思う。個人的には技術力が最高だけど人当たりが悪いエンジニアより、技術力は低いが素直で人当たりが良いっていう人の方が一緒に働きたいんじゃないかな、なんて思っている。

見積もり・スケジュール管理

仕事ならこのサービスをいつまでにリリースしたいっていうのがありますよね。でもそれを決めるには大体の実装目安が分からないといけません。だからこの機能がいつまでにできるのか?っていう見積もりが必要になってくる。

どの企業も大体それらのスケジュールをBacklogやスプレッドシートに落とし込んでいくのではないだろうか。こんな感じのBacklogのマイルストーンとかよく組みますよね。

Backlog

最初は先輩がこういったことをやってくれるからあまり気にしないかもしれないけど、仕事を続けていくとおそらくタスクの見積もりをしてこの機能はこのぐらい、これはこれぐらいっていうスケジュールを落とし込んでいくはず。そしてこのスケジュールを元に進捗会議とかが行われたりするんだ。

そしてこういうことをする時に必要になってくるのがタスクの見積もり力。開発する機能の難易度やチームメンバーを見て大体どれぐらいかかるか?を考えなくてはならない。

そんなんわからねえよ!ってなるけど、今までの経験から何となくだけど、どれぐらいかかるかは示さなくてはならないんだ。経営陣もいつリリースできるかっていうのは知りたいはずだからね。ただ自分はこういう作業好きじゃないし苦手だ。

それとスケジュールがここまでって前もって決まっている場合もあるよね。そういう時にはそこに間に合うようになんとかするしかない。ただ時間とクオリティはある程度トレードオフだと思うから、無茶振りしてくる人にはそういうこと知っておいてもらいたいよね。

課題解決能力

何か作っていくと必ずバグが起きますよね。なんか動きがおかしい、想定しない値が返ってくる、勝手に落ちる・・・プロダクト開発をしていればよく起きることです。そういった問題は解決していかないといけないんだけど、なかなか原因が分からないっていう時もあります。

問題はSQLか?Webサーバーか??いやそもそもフロントの処理か???などなど考えを巡らせる時が多々ある。問題を切り分けて特定してそれを解消するっていうことが必要だ。

まとめ

今回はエンジニアに必要なスキルっていうものを挙げてみたけど、この記事で書いたのはこんな感じだ。

  • コミュニケーション能力
  • プログラミングへの興味・勉強心
  • 論理的思考力
  • 英語力
  • 技術力
  • 見積もり・スケジュール管理
  • 課題解決能力

いくつかそれっぽい言葉を並べて書いたけど、正直やっているうちに身についてくるものばかりだと思うから、そんな「あ、この能力ないから向いてないかも・・・」とか思わなくていいです。実際にやってみて「あ、これは違うわ・・・」ってなったらその時別の方向に行けばいいんじゃないかと思います。

何より大事なのはプログラミングへの興味や勉強心でしょう。エンジニアになる前もそうだけど、なってからもその気持ちがないとちょっときついんじゃないかなあ、なんて思ってしまうよ。たくさん勉強して良いコードを書いていこう。