優秀なIT技術者の定義
最近、優秀なIT技術者になりたいってよく聞かれるのでここに書くことにしました。
まず大きく勘違いしているのが、コアな技術をやってる人が優秀という定義。
こんな話をよく聞きます。
- JavaScriptやHTMLは基礎であり初級者向け。
- PHPやPerlといったインタプリタ言語はダメ。
- Socket通信をPHPでかけないとダメ(あまり使われないメソッドやライブラリを使いこなせると優秀)
- JAVAやC#は技術力が上。
- さらにいうとC言語出来る人が優秀。
- さらにいうとLinuxのカーネル書けるとさらに優秀。
- データベースのチューニングできると優秀。
- 学術的な音声認識技術や画像解析技術といった分野に入り込むとさらに優秀なエンジニアとなる。
もちろん、上記の技術はどれも大切だし優秀な技術者だと思う。
でもね。自分が考える本当の優秀な技術者は違います。
優秀な技術者とは
【最適解を常に出せるエンジニア】
だと思っています。
例えば、システムを設計するときにオープンソース系のエンジニアって、有償OSは最初から除外する傾向にある。
MicrosoftOSは有償OSなので除外。みたいな感じにシステム設計します。
ホントにそのシステムにMicrosoftOSは向いていないのでしょうか?
また、言語の選定でRubyが優れているからRubyにしましょうとか。
ホントにそのシステムにRubyが向いているのでしょうか?Railsの思想が優れているということ=Rubyと考えている感じでしょうか?
また、PHPフレームワークの選定でSymfonyにしましょう。他のは事例が無いから。
ホントにそのシステムにSymfonyはあってるのでしょうか?
また、Socket通信のシステムを作りたい。->それならnode.jsにしましょう。
ホントにそのシステムにnode.jsがあってるのでしょうか?
最近ではベンチャー企業でもC#をベースにtoC向けのサービスを提供している会社も出てきました。
システムを選定するときって、当然その選定する技術を熟知する必要があると思っています。
有償だからNGとか、実績無いからNGとか、なんとなく好きじゃないからNGって話じゃなくて
C#もJAVAもMicrosoftもLinuxも。Symfonyもfuelも。非同期通信だってnode.jsだけの技術じゃないし。。。
多くの技術が世の中にあってそれをちゃんと把握すること。
案外、そういう観点で他の言語やOS、フレームワークを体験すると自分のよく使う好きなソリューションのことを逆に知れたりする。
結構、各社(団体など)の思惑なんかが見えてきたりするんです。
こうやって多くの技術知識を持ち経営判断レベルで技術選定ができることが優秀なエンジニアだと思ってます。
しかも、(他のものを知らないので)これでいいのかな?って不安になって前に進みづらくなる状況も無くせることができ、開発スピードが上がるんです。
たくさんの技術知識をつけていきましょ!絶対いろんなところで役立つので。
最後に・・・
最近ではスマホというソリューションのおかげで、IT技術者とゲーム開発者の垣根がなくなってきました。
MMOのようなUDPベースの通信技術や、3D開発技術など。さらに覚える範囲が広くなってきましたが、それはそれで探求していくと案外面白くてハマれます。
このあたり、IT技術者なのでUnityは踏み込まないとかって話じゃなくて、こういった状況も含め知識の幅広げてみると面白いかもしれません。
Unityはゲームがメインですが、ITサービスを作る上でも使えるツールともいえます。
ゲームにしろ、SNSにしろ、コマースにしろ、情報系サービスにしろ、インターネットを介した技術であることには変わりないので。
是非、自分は○○エンジニアって型にはめずにいろいろ挑戦してみましょ。
目の前にパソコンあるんだもん。 インストールするだけですよ。
有償系も必ず開発フェーズは無料のものとかが入手できる手立てが整ってます。
コメントは停止中です。