深めるか、広げるか
ITエンジニアに限らずどんな職種にも言えることですが、継続的な学習は不可欠です。
何のために学習するかと言えば、スキルの向上につなげるためですが、スキルを深掘りすることと、スキルを広げることの両面が必要になります。
スキルを深掘りするのは、プログラミング能力であればより高度なプログラムが書ける、よりバグの少ないプログラムが書ける、より短時間で同じ機能のプログラムが書けるなど、その道を究めていくことになります。
スキルを広げるには、プログラミングであれば違う言語も使えるように幅を広げる、フロントエンド・バックエンドにかかわらず対応可能になる、ということもありますし、ソフトウエアだけでなくネットワークやハードウエアの知識を身につけていくこともそうでしょう。
プログラマが上流工程の要件定義やアーキテクチャ設計にスキルを広げることもあるでしょうし、プロジェクトマネジメントやマーケティングへスキルを広げることもあるでしょう。
スキルの深掘りとスキルを広げることは人によって捉え方が違うこともあると思いますが、いずれにしても自分の枠を決めてしまわず、少しずつ広げていくことで自分の世界も開けてきます。
自分の世界を絞らない
プロジェクトマネージャという立場でプログラマと接したときに、「僕の仕事の範囲は○○なので、××のことはわかりません」と言う人がいます。
確かに自分が担当していないのでわからないのかもしれませんし、自分の範疇外のことについて自信を持った回答ができないという気持ちもわかります。
それでも、同じソフトウエアを書いているメンバーがどこをどのように実装しているかを知ろうとするか、自分は知らないので関係ないと考えるかは大きな違いがあります。
当事者がいない場合に、たとえ推測が含まれるとしても「おそらくこういうことだと思います」という、聞く人が納得できる回答をしてくれる人は信頼されます。
その人は自分の範囲だけでなく、全体のことに気が回る人なわけです。
リーダー的な立場にいればもちろん知る必要もありますが、そうでなくても知ろうとする気持ちが大事です。
少しずつ全体を知るように世界を広げて行くことで、新しいソフトウエアの機能のことなどを知ることができるようになりますし、そういうことがきっかけで視野が広くなります。
その道の専門家は意外と他の技術を知らない
どんなプログラミング言語でもいいのですが、ある得意なプログラミング言語を持っていてスキルが高いなと思う人でも、HTMLやCSSを知らなかったりWeb上でのJavaScriptでできることをほぼ知らない人もいてびっくりします。
もちろん、その人はプログラミングをさせれば一級品でそれこそ惚れ惚れするようなスピードで品質の良いコードを書いてくれる人なんです。
HTMLだけでなく、「管理用にGoogle Spreadsheetを使いたい」とかいうと、「Spreadsheetは使ったことがないのでわかりません」というようでは、プログラマの能力に疑問符も付きます。
プログラム内からローカルの設定ファイルにアクセスするのは普通でしょうが、Spreadsheetで設定ができたらリモートからも設定可能になり、実は非常に便利なこともあります。
そのプログラム言語だけで解決することもありなんですが、少し目線を広げてみるともっと良い解決方法があったりします。
そういうところに目が行き、よりいい方法がありますよ、と提案してくれるプログラマは本当に安心でき心強いです。
上流工程・下流工程に手を広げる
プログラマがよりスキルを高める方法として、上流工程や下流工程に手を広げることが有効と思います。
上流工程と言えば、まずは「機能設計」ですね。もう少し上流だと「要件定義」や「システムアーキテクチャ」などです。
プログラマは決められた範囲の決められた機能を作りますが、全体を見渡して機能設計することや、将来も見越してシステムのアーキテクチャを考えることは単純な話しでは終わりません。
これを担当するには、そもそも要求は何なのか、解決したいことは何なのかということをきちんと理解する必要があります。
これをやろうと思うと、お客様の話しを理解するところまで広がり、コミュニケーション力や理解力なども求められます。
一方、下流工程と言いますと、「テスト工程」「リリース管理」などが関わってきます。
特にテスト工程では全体を俯瞰したテストが求められますので、機能全体を把握してテスト設計をすることが必要になります。
細大漏らさずテストする必要がありますが、何でもかんでもテストしていたのではテスト工数がいくらあっても足りません。
何を必須とし、どこまでテストすることで品質を担保できるのか、これを決めひとつずつテスト項目に落としていく必要があります。
ソフトウエアテストはソフトウエアの品質を決める最後の砦です。
こういったことをやることは、ソフトウエアの作り込みの大事さを知ることにつながり、プログラマとしてのスキルを高めるのに役立ちます。
エンジニアリングの枠を越える
お客様の要望なども聞き始めると、なぜこのような商品を開発することが企画されたのか少しずつ見えてきます。
いわゆる商品企画の領域です。
僕は商品企画をやることにあまりメリットを感じませんでしたが、さらにその上流のマーケティングについてはとても重要と感じています。
マーケティングとは「集客」ですが、どんな商品を作れば喜んでくれるかを形作ることです。
僕は、エンジニアはもっと「顧客の要望に敏感になる必要がある」と考えています。
エンジニアはコンピューターシステムが相手なので、ついつい0か1か(右か左か、やるかやらないか)のどっちだ、というような判断をしがちですが、人の心はそんなに単純ではありません。
機能的に整然としていても、それは往々にして使いやすいものではないことが多いです。
そういう人間の気持ちを考えて機能設計しないと、最終的に使いやすいものになりません。
機会があれば、ぜひマーケティングも体験してみるとエンジニアの感性を磨くのに役立つでしょう。