「プログラミングの上級者になるにはどうすればいいのか」
プログラミングをしている人は、誰しも『上級者』という基準は気になるかと思います。
なので、本記事ではプログラミング歴が浅い方に対して、「上級者とは何か」について書いていこうと思います。
ちなみに『上級者≠プログラミング歴』ではないことを理解したうえで読んでみてください。
ボクの経歴エンジニア歴:6年(IT企業:2年・フリー:4年)
習得言語:VBA、JAVA、Ruby、Dart(最近始めた)
プログラミング上級者の条件は?
そもそも『上級者』という定義が曖昧なモノである
「プログラミング上級者になりたい!」と考えても、そもそも『上級者』の定義は人によって違うかと思います。
例えば、システム開発に携わる人からしてみたら「チームを率いてクライアントの要望に応えることができる」かもしれません。
フリーランスだったら「月に安定して100万円の収益が得られるほどの案件をこなせる」ことかもしれません。
正直、『上級者』という曖昧な定義にこだわること自体が目標設定としてイマイチな気がします。
それよりも「〇〇ができるようになったら」といった定義の仕方が正しいのではないかと考えています。
現役エンジニアが考える上級者の条件とは
ボクは計6年間エンジニアとして活動してきています。
そして、企業勤めの時には他企業からの要望に応じて基幹システムやアプリケーション開発、フリーでは個人や中小企業へのアプリケーション開発を行ってきました。
もちろん、自分自身で考えたアプリ・ゲームをリリースするという活動をしてきました。
エンジニアとして色々な凄腕エンジニアと関わってきたボクが考える『ザックリとした上級者の条件』は次の通りです。
・他者が作ったシステムのコードを理解できる
・他者に要求された要望に応えられる
・自分のイメージを形にできる
・コード内を無駄なくす・最適化できる
上はどれも上級者の条件だと考えています。
ですが、その中でも赤文字で書いてある2つはとても重要です。
そんな上級者の条件について簡単に説明していきます。
他者が作ったシステムのコードを理解できる
企業でのエンジニアの業務に『自分以外の人間が作ったシステムの改修・保守』があります。
自分が以前開発に携わったシステムであれば、システム内の処理の意図が容易に理解できるので苦戦しにくいです。
しかし、全く関係のない人が作った(関わったことがない分野で使うシステム)場合は理解難易度は一気に引きあがります。
企業に勤めていると関わりの少ないメンバーたちで構成されたプロジェクトに中途半端な時期に入れられることがあります。
しかも、全然知らない分野のシステム開発であることもあります。
こういった無茶ぶりな状況に対して、開発メンバーとして適応できる人は上級者であるといえます。
「他者や関わったことのない分野のシステムにでも、少しの時間の準備時間で対応できる」
コレは間違いなく上級者の条件と言えます。
他者に要求された要望に応えられるか
企業でも、フリーでも最も主流なエンジニアの収益化は『他者からの要望に応える』ことです。
自社開発をしている企業でないほぼ全ての企業がお客様と直接関わり、「〇〇を作ってほしい」と要件を聞いたうえで作り、商品として納品します。
なので、プログラマーとして、相手の要望をヒアリング(要件定義)し、その要望を実現する技術力を持っている必要があるのです。
加えて、それが「与えられた状況の中で実現できるかどうか」などの見極めができることも上級者になるためには必要だと考えています。
コスト・納期・開発環境など、お客様によっては割と制限が設けられることがあり、その中で実現できることが求められます。
また、そういった制限の中で、ある程度要望に応えられる知識・技術力が備わっていることも上級者の条件だと思っています。
企業で働いている人視点で考えた場合、このタイプが上級者と呼ばれると思います。
自分のイメージを形にできるか
企業でもフリーでも、自分の思うようにシステムを作ることができる人材は重宝されます。
また、個人でアプリやゲームを作成するときには欠かせない能力だったりします。
ボクの経験上、「この人凄いな」と思われる人は「開発スピードが速い」もそうですが、処理やコード最適化にて「えっ!そんなことできんの!?」と高度で柔軟な思考をコードに反映できている人です。
そういう人は企業内でも「技術力が高い」と評価されていることが多かったです。
突拍子のないイメージを実現できる能力がある人は間違いなく初心者以上の存在です。
「上級者になりたい」と考える人はこのタイプを目指すべきかなと思います。
コード内を無駄なくす・最適化できるか
意外とネット上にあるコードをコピペするだけでも、ある程度のシステムが作れたりします。
ただネットの情報を貼り付けてできた継ぎはぎシステムは最適化されていなかったり、保守のことを何も考えられていないことがほとんどです。
ですが、プロのエンジニアはユーザーの使用時はもちろんですが、それと同じぐらい後々の処理修正のしやすさや他人が見て理解しやすいコードを心がけていたりします。
他人が作ったシステムの改修作業をすることがありますが「なんじゃ、こりゃ…」ってなることがあります。
意味のない変数・クラス名、同じ処理を何回もコードに記述していたりと、「素人が作ったのか」と疑いたくなることがあったりします。
「ただ動くだけのシステムは誰にでも作れる」
「自分以外の人間が改修や保守をするときのことを考慮できて、やっと一人前」
ボクが企業で勤めていた時に社内で3本の指に入るほどの実力エンジニアが言っていた言葉です。
上の考え方はエンジニアにとってとても当たり前なことです。
だから、この考え方がコードに反映されていないコードを書くエンジニアは上級者とは言えないと思っています。
スポンサーリンク
プログラミング上級者になるための方法は?
上の「上級者の条件」を見てもらえば分かると思いますが、一応『上級者になる方法』について書いていきます。
「基礎を身につける」は前提にしているので、ここで紹介することを実践する前に本やネットで基礎を固めておいてください。
ちなみに断言しておきますが、「参考書を読んでいるだけでは絶対に上級者に到達できない」ということを覚えておきましょう。
そして、上級者になるためにやるべきことは下の2つだと考えています。
・他者の要望に応えまくる
・自由に自作システムを作りまくる
では、上について簡単に書いていきます。
他者の要望に応えまくる
上でも書きましたが、エンジニアとしてお金を稼ぐ最も主流な手段が”他者の要望に応える”ことです。
そして、他者の要望に応えるといった実践を積みまくることで”知識・技術をストックする”ことができます。
その結果、自身の技術によって安定した収入が得られるようになったときには、自身をプロと呼べるレベルになっていると思います。
ちなみにボクがオススメする方法は下の通りです。
会社勤めでは仕事で、フリーでは『クラウドワークス』『Bizseek』といったクラウドソーシングサービスで案件を獲得し、他者の要望に応えてみると良いかと思います。
これが難しい人は『クラウドワークス』『Bizseek』にある案件を確認して、具体的な要件の書かれた案件ページの情報を参考にして、報酬抜きでその要件を満たすシステム開発をしてみてもよいかと思います。
仕事(実践)が何よりも、自身の成長に繋がります。
それを報酬抜きの疑似的な経験でも全然OKだと思いますので、ぜひ試してみてください。
自由に自作システムを作りまくる
もしも、「こういうモノ作ってみたいな」「あったら便利だな」というアイディアがあるのなら、それを形にしてみると良いです。
投資に使う分析ツール作ってみたいな → VBAを使ったエクセルツールを作ってみる
スマホゲームを作ってみたいな → Unity(C#)で無料配布されているゲームを改造してみる
プログラミングの情報はネットで調べれば、大抵分かります。
なので、「こういうことできるのかな」と思ったら、その場でググってみて「できそうだな」と思ったら即効で作り始めましょう。
ボクが思いついたアイディアをスマホにメモるようにしています。(「〇〇アプリ:△△を組み込む、◇◇でシェアできるようにする」みたいに)
そういったアイディアをガンガン作っていくと、結果的に「ほとんどググらずにある程度作れるようになってきた」と実感できる時が来ます。
それが上級者になれた証拠だと思っています。
それでは、最後まで読んでいただきありがとうございます。
またね(/・ω・)/
スポンサーリンク
スポンサーリンク
コメント