ソフトウェアエンジニアが開発でプログラミングに こだわりすぎてはいけないと思う3つの理由
こんにちは。
今回はタイトルをテーマに語ってみようと思います。
- はじめに
- 結論(3つの理由)
- 理由1:ソフトウェアエンジニアが生み出す価値は、ソースコードではなく製品やサービスの付加価値そのものであるから
- 理由2:開発の本質的ではない部分にかけられる工数が年々短くなっているから
- 理由3:ソフトウェアエンジニアが本当に身に着けるべきスキルは、コミュニケーション能力であるから
はじめに
先に断っておくと、私はプログラミングが大好きです。
就職してから触った言語はC、VBA、C++、HTML/CSS、JAVA、C#、matlab、Python、Julia等、数多くの言語を書いてきました。
中でも特にお気に入りはPythonで、やりたいことをとても少ないコードで素早く実現してくれます。
Pythonでスマートにやりたいことを短時間で実現できるソースコードを組めたときの達成感は気持ちいいものです。
脳汁出まくりでしばらく自尊心が高まって幸福感も高まります。
で、そんなプログラミング大好きなソフトウェアエンジニアの私が、なぜタイトルのようなことを考えているのかについて理由を述べます。
結論(3つの理由)
1. ソフトウェアエンジニアが生み出す価値は、ソースコードではなく製品やサービスの付加価値そのものであるから
→プログラミングはあくまで「手段」であり、「目的」ではない
2.開発の本質的ではない部分にかけられる工数が年々短くなっているから
→現場でのプログラミングにおけるアルゴリズム単体の価値というものは小さくなっており、スピーディにやりたいことを実現することが求められている
3. ソフトウェアエンジニアが本当に身に着けるべきスキルは、コミュニケーション能力であるから
→結局、人を相手にする仕事なんです
いかがでしょうか?同じソフトウェアエンジニアの方が読まれると、共感される方もいれば反感を持たれる方もいらっしゃるかと思います。
上記はあくまで私なりの現時点の主張ですので、これが正しい!というわけではありません。
では順番に解説していきます。
理由1:ソフトウェアエンジニアが生み出す価値は、ソースコードではなく製品やサービスの付加価値そのものであるから
ソフトウェアエンジニアとプログラマーの根本的な違いともいえるかもしれません。
あくまで「エンジニア」であり、プログラミングは製品やサービスを作るための手段でしかないのです。
製品やサービスを作るためにどういう仕様にすればよいか、どういう仕組みを構築すればよいのかを考えるのがソフトウェアエンジニアの仕事なのです。
ソースコードの質や作りにこだわること(コーディング)も重要な仕事の一部ではありますが、本来実現したい目的を思い出して優先度を考えた開発に取り組むべきなのです。
もっといいものを作るために、できることは山のようにあるはずです。
理由2:開発の本質的ではない部分にかけられる工数が年々短くなっているから
人の社会は便利さを増していき、テクノロジーも加速度的に成長していきます。
システムも複雑化・多様化していくため、開発もよりスピード感が求められていくのです。
そんな中、一からプログラムを作っていくなんてことは大規模なシステムほどありえません。
より短い期間でシステムも構築していかなければならないのです。
ゆえにプログラムにかけられる時間もどんどん少なくなっていくのです。
近年ではディープラーニングの開発には、ほとんどといっていいほどフレームワークが使われています。
例えばディープラーニング系の開発言語としてよく使われるPythonでいえばTensorflowやPyTorchが使われています。
PythonでもC言語等と比べれば飛躍的に短いソースコードが書けるのに、フレームワークを使えばさらに短くて処理速度も速いものが実装できます。
そのため、誰が書いても大体似たような書きっぷりになるので、可読性や品質の面でも優れています。
さらにこのフレームワークはデバッグ機能もあるため、普通にPythonで書いたら大変な作業も楽に実現することができます。
このように、プログラミングの在り方も変わりつつあるので、あまりプログラミングそのものにこだわらない方が良い時代になっていると考えられます。
理由3:ソフトウェアエンジニアが本当に身に着けるべきスキルは、コミュニケーション能力であるから
どの仕事でもそうなのですが、時代がどんなに変わっても、人は人のために仕事をする生き物なのです。
また一人で仕事はできないので、一緒に仕事をする人とのコミュニケーション能力が最も重要なのです。
技術的な交渉をしたり、現場の状況を連絡・相談しあったり、困難な課題に直面したら皆で考えて意見を出し合ったり。
そういった人間的なスキルが一番ソフトウェアエンジニアは重要だと思ってたりします。
プログラミングというスキルもとても重要なスキルです。
これを知っているのと知らないのとでは人生の見方が変わるといっても過言ではありません。
しかしこのスキルの基礎を身に着けるのは、実はそう難しいことでもなく短期間で習得することが可能です。
私の場合は大体半年~1年程度でC言語の基礎を抑え、その後は他の言語であまり苦労することはなく、大体1か月程度で他の言語も習得できます。
なので重要ではあるものの、開発ではそのぐらいのレベルがあれば問題ないので、あまり時間をかけすぎるべきではないと考えます。
以上3つの理由をあげてみました。
冒頭でも挙げた通り、私はプログラミングが好きなので、できる限り時間を使うようにはしています。
仕事の中でもソースコードと向き合える時間があれば向き合いますし、プライベートでもソースコードのことを考えてたりします。
とはいえ、あくまで世の中に生み出す価値のことを考えると、どんなにプログラミングが好きでも、そこは見失わないようにしたいなと思います。
今回はここまで!