【前提】
タイトルの通りです。インフラ系は専門では無いので省いています。
賛否両論ある記事内容だと思います。色んな意見を聞けるとありがたいです!
自社の自部署の開発水準から考えた内容です。現状の業務内容としては広く浅く色んな言語や環境の開発を行っていると思っていただけると良いです。
コード規約に関連する内容やコードの書き方みたいな、プロジェクトや個人によって左右されそうなことは省いてます。
【必要そうなこと】
【プログラミングの知識】
そりゃあPGとしてご飯を食べていくならあった方があった方が良いですよね。
・コンパイラ言語系:Java or C++ or C#
この辺をやっておけば大体の言語はいける気がします。
メモリやらポインタやら触れるのが良いので個人的に好きなのはC++ですが、最近の流行りや言語を考えると優先度的にはC++ < Java < C#かなと思います。
・スクリプト言語系:PHP or Python
今時サーバサイドが絡まない内容の方が珍しい……ような気がしているので、一度はこういうスクリプト言語を触っておくべきかと。
自分自身でサーバサイドを実装しないにしろ、ネットワーク系の概念くらいはふわっと分かっておかないと色んな所で苦しくなるんじゃないかなと思います。(アプリにしろ組み込みにしろシステムにしろ)
【バージョン管理】
・Git
SubversionにしろGitにしろ、プロジェクト管理を行う上で必要になってくる概念かと思います。むしろこの辺りを使わずにどうやってバージョン管理とかしていくんだ……?
Gitの方が好きなのでGitにしました。まあプログラマをやっているとどっちも触る可能性が出てくるのであれですが……。
【基礎知識】
・IT系の基礎知識
資格は持っていなくても、ITパスポート~基本情報くらいの知識はあった方が良いかと思います。
日常会話とか客先との会話でさらっと出てきます。分からない単語を後日調べる、でも良いのですが、そんな優しい上司や客先ばかりではありません。。。
・開発工程
ITパスポート~基本情報辺りを勉強しているとさらっと出てきますが、大体の開発の流れみたいなものがあるので知っておくと良いと思います。
【論理的思考力】
どう表現すべきか迷って上記にしました。
これだけ見るとすごく広い言葉ですが、自分的は「論理的にプログラムを組めるかどうか」っていう力です。
よくわからなかったり学び始めの時期だったりは、参考書や試験問題をコピペや参考サイトに手を入れると実装出来たりします。
が、業務ともなればコピペや参考サイトだけでは歯が立たなくなることもありますし、ちょっと複雑になると躓いたりします。
何が問題かって、論理的に考える力が弱いとどうプログラミングしたらいいのかも分からないし、何を調べたらいいのか分からないし、何がやばそうとかどこが分からないとかいう質問もしにくいのです。
「全部分かんないんで全部教えてください!」で教えてくれる職場や環境なら問題ないですが、お仕事となると、いつまでもそれが許される訳じゃないですしね。
また、よくわかんないまま作っていると、「なんで動いているかわかんないけど動いた!」の状況になります。
俗にいうブラックボックスやスパゲッティコードが出来上がる一因だと思います。でも誰も幸せにならないので本当にやめましょう……。。。
【色んなことにやられないメンタル】
こういうこと言うからIT業界全体がブラックみたいに思われるかもしれないですが、まあ多分どの業界もそういう部分がありますよね。
面倒な人間関係とか縦社会とか理不尽な批判とか、まあ社会人ならそういうのに晒されるタイミングがあるかと思います。
もしかしたらIT業界は他の業界よりもそういうのに晒される機会が多いかもしれません。最初から最後まで理想通りに何の問題もなく完了するプロジェクトなんてあるんでしょうか、いやないです(断言)。
少なくとも、今まで自分は体験したことが無いです。周りに聞いても無いと返ってきます。でもそんなプロジェクトいつかはやってみたい。
という愚痴は置いておいて、技術者というのはそういった壁にぶつかるタイミングが多い気がしています。
立ちはだかる仕様変更や仕様未確定、どうやっても解決出来ないと思えてしまうエラー、納期前の絶望感、お客さんや上司の無茶振り、整合性なんて求めないスケジュール……などなど。
良くあることで済ませたくないですが、とてもよくあることです。だからこそ、あんまり気にしすぎないで下さい。気に病まないでください。
たまたま運悪くモンスターハウス引く可能性が高いだけなんです。絶望的に見えても意外に道は開けるものです。頼れる人がいるなら頼って、無理なものは無理と言って、さっさと切り替えて次のフロアに行きましょう!
【好奇心】
プログラムは一生勉強という側面が強いと感じます。言語やツールの寿命が短いので、新しい言語が現れては消え、流行ったり流行らなかったり、再来したりしなかったり。
ツールも統合開発環境も一新したりアップデートがかかるし、古いものはどんどん切り捨てられていきます。もちろん概念が一緒だったり共通点もあったりするので、全く一からの勉強になる訳ではないです。ただ、専門職で今景気の良い業界だけあってその頻度は高いです。
また、日本国内の話で行くと、今後はプログラムを義務教育でこなしてきた若者も増えます。そんな中でプログラムだけで生きていきたい人は、新しい言語やツールに興味を持って学んでいかないと、将来仕事が無くなるんだろうなあという気がしてます。
「完全に無くなる」ということは無いかもしれないですが、COBOLとかVB.6とか一世を風靡した言語の現在を見ていると、そこだけで生きていくのは難しいんじゃないかなと思います。
故に、新しいものや言語、ツールの勉強意欲につながる「興味」とか「好奇心」ってすごく大切だと思います。楽しんで学ぶのが一番効率良いし、苦しくないですしね。
【まとめ】
前提のところでも書きましたが、正直賛否両論あると思います。働いている環境だったり、状況だったり、年齢だったり、経験だったりで変わってくる部分だと思うので。
社内関係で少し考える機会があったので、せっかくなのでいろんな人の意見を貰えそうな場にばらまいてみました。
ご意見や指摘点等あれば頂けると幸いです。