Web Developer's Struggle Memories

日々の業務から思ったこと、学んだことを書き連ねていきます。

日本のプログラマ・エンジニアのこれからについて思うこと

最近転職したため、プログラマ・エンジニアの生き方に関するいろんなエントリを見るようになった。 その中で特に共感・衝撃を受けたものは以下だ。これらを読んでいろいろ思うところを書いてみる。(ちょっと長いです)

※主にSIerを対象としています。自社製品を手がけている企業はちょっと勝手が違うと思いますので、 その認識で読んでいただけると幸いです。

nzmoyasystem.hatenablog.com

www.bloomberg.co.jp

blog.btrax.com

現状の日本のソフトウェア業界

自分もソフトウェア開発会社にいるのでよく分かるが、日本のプログラマとにかく単価が安い。それに加えて給料も低い。 私が以前いた企業も例に漏れず基本給が低く、残業代がないと生活が苦しかった。(その残業代を稼ぐこと自体も苦しかったので、どっちもどっちだったが)
 

さらにお客さんの要望の大きさと、プログラマ・エンジニアの数・スキルがマッチせず、どうしても少ないプログラマ・エンジニアが頑張るしかない、 または、内外問わずとにかく手を動かせるなら金払ってでもプログラマ・エンジニアを投入し、何とかリリースに向けてデッドレースを走る。 (ブルックスの法則の通り、リリース日に遅れるか、残業して稼動を増やして無理やり間に合わすのが関の山だが)
 

しかし、頑張るだけ頑張っても残業時間でコストがかかるため評価されず、結局PM(プロジェクトマネージャー)が評価されることが多い。 結局日本のプログラマは、出世するとしたらマネージメント業務をやることに専念し、コードを書かなくなったり、新しい技術を取り入れることがかなり少なくなる。 それにより何が起こるか?
 

会社の技術に対するノウハウが溜まらないため、今の技術を使えば簡単にコストが削減できるところをマンパワーでやってしまう、というケースが増える。 また、社内にCTO以外の技術専門の人が増えないため、IT企業なのに技術に乏しい企業と成ってしまう。 すなわち、上の記事にもあるようにシニアプログラマ・シニアエンジニアがいない状態となる。
 

この場合、プログラマ・エンジニアは以下の3つの選択肢を取ると思う。

  1. プログラマ・エンジニアをやめ、マネージャーを目指す
  2. 企業と交渉しつつ、プログラマ・エンジニアを続ける
  3. 今の企業を去る

おそらく一番多い(多かった?)のが1番だろう。生活もあるし、ある時期から企業の中核となることを求められるからだ。 昔の日本は終身雇用制が当たり前で、その企業にずっといるからこそ、上記のようなことが起きる。 2番はあまり望みがない選択肢。もし給与が上がっても高は知れている。3番は今の日本のソフトウェア業界全体の問題でもあるため、やはり改善されないだろう。

現在はプログラマ・エンジニアという職種の人気が上がっており、また雇用体制・勤務体制もかなり見直されている。 実際、フレックスタイム制在宅ワーク(リモートワーク)など、個人のライフワークに沿った働き方が生み出されてきた。 プログラマ・エンジニアが働きやすい環境をどうやって作ろうかという意識が少しずつ芽生えてきている。
 

しかし、未だにプログラマ・エンジニアの単価が低いことは改善されない。

海外との差

以前いた企業で、アメリカ人とフランス人と一緒に仕事をすることがあった。ある程度は日本の働き方・日本企業の文化に合わせて仕事をしていたとは思うが、 それでも自国の文化で動かれることが多かった。例えば以下のようなことだ。

  • 定時になったら進捗に関係なく帰る
  • 進捗の報告はあまりしない(聞いたら報告してくれる)
  • いきなり休憩を取り出す
  • 可読性は低いがちゃんと動くコードを書く
  • 既存の書き方やコーディングルールにこだわらず、早く完成させることにこだわる

よく日本人は真面目だと言われるが、本当は「生真面目」が正解かな、と感じた。定時になれば帰ればいい。 少なくとも自分の担当分が終わったのであれば、本来文句は言われないはずだ。 海外の人はこの意識が強い、と言うか、これが当たり前らしい。もしバグっていたら、それは翌日直すスタンスらしい。 簡単に言うと、全体的にマイペースと言った感じ。日本人は仕事ベースでの生活の人が多いが、このマインドの差は大きい。(日本人はもう少し休めよ、と)
 

我々日本人からしたらちょっとビックリするような文化だが、それでも海外ではエンジニア・プログラマという職業はとても評価されており、 単価も日本より高く、価値ある職業と思われているようだ。平均給与も日本では考えられない金額の国もあり、 良いプログラマ・エンジニアには総合的な好待遇も用意される。必然的に、マイペースに働く人が増えるはずだ。

日本のソフトウェア業界の改善策は?

マインドや文化の差はおそらく埋まらないとは思うが、プログラマ・エンジニアの評価、市場価値などは改善できると個人的には思っている。 その対策を個人的な経験から考えると、

  1. プログラマ・エンジニアは単に仕様に沿ったコードを書くだけが仕事じゃない
  2. プログラマ・エンジニアとPMは対等の立場にする(新人は除く)
  3. プログラマ・エンジニア出身ではないPMをたてない
  4. PM指向のプログラマ・エンジニアを増やす
  5. PMはちゃんとプログラマ・エンジニアをマネジメントする

以上が大切だと思う。

1.について

まず、プログラマ・エンジニアは単に仕様に沿ったコードを書くこと「だけ」が仕事と思ってはならない。 自分たちがまさにプロダクトを実際に作っている自覚と責任を持たなければならない。でなければ、マネージャーと対応とは口が裂けても言えない。(それでは新人のままである) 「仕様通りに作りました。だからバグリました。」これはプログラマ・エンジニアの怠慢である、という認識を持つことはとても重要で、 仕様が正しいとは限らないのだから、技術者側から仕様の相談をマネージャー、またはお客さんとすることも作る側の仕事である。
 
したがって、プログラマ・エンジニアはプログラミングに限らず、とにかく技術的な話・作業のみを触っていれば良いのではない。ちゃんと必要があれば相談・報告する義務がある。 あくまでプログラマ・エンジニアは、プロダクト開発・問題解決に技術的な知見から解決に導くことが仕事なのだ。技術以外のことはPMにまかせっきりではない。

2.について

冒頭で紹介した記事にもあったが、プログラミング仕事は新人だけの仕事ではない。 確かに新人がやるケースが大半なのは事実だし、ある意味駆け出しエンジニアは、プログラミングから入った方が良いと思う。 いきなりマネージャーの仕事をしても、お客さんと仕様を決めたり進捗の確認はできるかもしれないが、 コードのレビュー、交渉、開発工数の見積もり、メンバーのマネジメントなどはできないだろう。
 

だからと言って、プログラミングがマネジメントより下の仕事という認識は間違っている。ポジションに応じて役割が異なるだけで、 どちらの役割も重要かつ、本来は対等なもので、片方がかけてもお客さんの望むプロダクトは作れない。実際に作るのはプログラマ・エンジニアである。 この認識がない企業があまりにも多すぎる。

3.について

自分の経験上、プログラマ・エンジニアを経験していないPMは、プログラマ・エンジニアをだめにする。 技術に対する知見がなさ過ぎるため、自分が分からない範囲になった途端たいてい丸投げに逃げる傾向にある。 たまに、お客さんとプログラマ・エンジニアを話させる場を設けて、自分は話を聞くだけ(なんとなく位は理解するだろうが)ということもある。
 

また、開発工数の見積もりもあいまいなことが多く、見積もりの根拠を聞いても話せない人がいる。 技術的知見がないため、指導したとしても説得力に欠けるため、メンバーの信頼が下がってしまう。(というかお客さんの信頼をどうやって得ているのだろうか?)

4.について

3.を踏まえると、「じゃあ結局プログラマ・エンジニアがマネージャーに移らなければならないじゃないか」、という意見が出てくる。 これはある意味で正解で、マネジメントに特化した人間はプロジェクトに不可欠だと私は考える。 したがって、プログラマ・エンジニア畑で頑張ったが次はマネジメントに進みたい、と考えるメンバーをいかに増やせるかが重要。 もちろんプログラミングしながらマネジメントもできるならそれに越したことはないが、メンバー全員がそうでないのならば、 誰かが必ずマネジメント業務をやることは必然である。でなければ、プロジェクトは収束せず燃える。
 

これはPMの仕事と私は思う。自発的にマネジメントをやる、と手を上げてくれるメンバーがいるのならば、 これほど嬉しいことはない。プログラマ・エンジニアは、できればずっと技術に触れていたい、と思っているだろうから。(現実はどっかで方向転換する可能性大)

5.について

3.の内容とちょっと被るが、PMはちゃんとメンバーをマネジメントしなければならない。決してプログラマ・エンジニアに丸投げをしてはいけない。 それはPMの怠慢である。だからこそ、PMも今の技術を学ぶことが望ましい。技術畑を出ていないPM(もし存在するのであれば)はなおさら勉強して欲しい。 でないと、プログラマ・エンジニアに相談されたとき、相談にならないからだ。それだとマネジメントとは言えない。

人間と人工知能・機械の役割

最後に、冒頭の記事の一つに「人工知能 (AI)や機械に絶対奪われない3つのスキル」というものがあるが、 この記事の中に、「現在の職業が20年後に機械に奪われる可能性」という項目があり、

 プログラマー: 48.1%
 ソフトウェアエンジニア: 4.2%

と記載があった。個人的には約50%の確率でプログラマーの職業は奪われると言うのが意外と言うか、脅威だった。 上でも書いたが、プログラマ・エンジニアはプログラミングをしていき、プロダクトの設計や仕様の決め方、作り方を学んでいくのだが、 プログラミングを機械に奪われるとなると、技術力が付いていない技術者が量産されることにならないだろうか? また、機械が高速にコードを書いてくれるのはいいが、それが正しいコードなのかを判断することができない技術者ばかりにならないだろうか?
 

一方で、機械がプログラミングすることになれば、ある程度技術力がなくても機械がやってくれる、と考えることもできる。 確かに、プログラミングはある程度自動化することはできるし、それを機械にやらせればものすごくコスト削減になる。 機械学習が進み、AIのクオリティが上がれば、お客さんの要望をリスト化しそれを必要な作業に落とし込んで、 後は機械にやり方は任せて仕事させるだけでよくなるため、プログラマは不要となることも、大いに有り得る。

終わりに

少しでも日本のソフトウェア業界が良くなり、プログラマ・エンジニアが働きやすくなることを望むばかり。

またプログラミングを奪われるにしろ、そうでないにしろ、プログラマ・エンジニアが生き残っていくためには、「考えること」が不可欠となる。(人間全般もそうかも) 問題や仕事を生み出すのは人間であり、その正解を持っているのも、やはり人間だ。 機械学習とは言っても、人間の考えると機械のそれとは別物と思うので、人間的な仕事と言えば、やはり考えることだろう。 何か問題が発生しても、機械が考えて解決に導くことは難しい。特定の問題ならば既にできる機械は生み出されているが、 この社会での様々な問題を解決に導くのは、やはりプログラマ・エンジニアだと私は思うし、そうあって欲しい。