「ただのプログラマ」で終わらないためには
ターゲット
開発者に必要なものとして挙げられるものは
- 経験
- 知的好奇心
- 知識
があるなと思っています。
これらについて、未経験の方に向けて書きます。多分私のことは伝わるかと思います。なお、本記事ではプログラミングの言語などについては触れません。プログラミングを語らずに、プログラマにとって必要な事項をお話します。
長いですがお付き合いください。
経験
経験はその名の通り「経験」を積むことでしか得られない
- 開発のコツ
- 不具合の見つける「あたり」
など、言葉で伝えても伝わらないその人しかわからないセンスのようなものです。
経験値に関しては開発歴10年の人に対して開発歴1ヶ月の人はそのままではどうしても追いつけないものです。小学生が急に「高校生の知識がほしい」というだけでは無論難しいものなのです。
※だから追いつけないとか諦めろっていうわけではないです。後述するものも含めて本記事をご一読ください。
後述する「知的好奇心」をもって色んなものに手を出しましょう。開発歴10年の人だって経験していないものはかならずあります。開発歴が浅いからこそ得られるもの、視点がかならずあります。
※余談。Web業界はあまり知りませんが、Sier業界では新入社員は割とテストから行うことがあるのではないでしょうか。私がそうでした。経験が浅いからこそテストをしたときに、先輩エンジニアが気づかないところに突っ込むことができたりするんですよね。
知的好奇心
エンジニアにとって、必要な要素ですね。どの仕事でもそうですが「もっと知りたい」「もっと学びたい」「なんでこのエラーが起きるの?!」「なんで?なんで?!」という貪欲さがその人の成長につながります。
決して無駄な残業をしてまで、というわけではなく、自分の思うがままに「学びを欲する」ことを大切にしてほしいです。
この欲求がない人はエンジニアとして致命的だとさえ思います。
例えば、食べるのにとても苦労することは明白だがとても美味しそうな料理があるとしたら、どうしますか?
「美味しそうだけど、めんどくさいからいいや」と思う気持ちもわかります。面倒ですもんね。
ただ、「面倒だけど、わくわくするからやってみよう」と挑戦する気持ちを持ったほうが、得られるものって大きいと思いませんか?
結果として美味しくないかもしれない。結局食べられなかったかもしれない。徒労に終わるかもしれない。そんなネガティブな可能性は、成長の邪魔になります。
努力は必ず報われるとは限りませんが、成功するために努力は必要なんです。日頃、学習塾の生徒に伝えていることです。料理を例に出しましたが、技術に例えると「仕事で使っていないけど目についた言語があるなあ」という些細なきっかけに、「おっ、ちょっとやってみるか」と思う気持ちがあるのならそれを大切にしてください。その積み重ねが成長へつながります。
知識
私が武器にしている知識ですが、「経験」に追いつける要素のもう一つだと思っています。
知識なので、みなさんの中には嫌いな方が多いであろう「勉強」です。代表的なものに
**情報処理技術者試験**が挙げられます。私は本職の新人研修でこれらを教えています。その他にもベンダー資格はありますが、受験料が安く手を付けやすい国家試験をおすすめしてます。※ベンダー資格も余裕があればもちろんほしいです。
正直、直接プログラミング力が上がることには繋がりません。更にいうと「資格を取るくらいならアプリ作ったりプログラムに触って力つけろ」という意見も多いです。否定はしません。
なのに、なぜ私がこれを推しているのか。
客観的な指標
国家試験なので、誰がなんと言おうとその人が持っている知識量の証明になります。
Web系の人には「ポートフォリオ」を作ることで技術力の証明とする方もいらっしゃいますが、Sierってなかなか技術力の指標ってなかなかないんです。NDAなどの機密保持契約の関係でソースコード出しちゃだめ!っていうところが多いですし、Webに比べてOSSも少ないためです。
ポートフォリオが技術力の証明。国家試験は知識量の証明として役立つと考えています。
受からなくたっていい。学ぶことに価値がある。価値のある人材を目指せ。
以前私が会社の集まりで登壇した際に受からなくたっていいということも話しました。指導者がそんなこと言っていいのか?というお叱りもあるかと思いますが、私は試験勉強をすることに意味があると思っています。
少し脱線します。読んでいる初学者さんのモチベーションを下げてしまったら申し訳ないのですが、「プログラムしか書けない人はすぐ頭打ちになる」という事実があります。一般的なプログラマは、設計に基づいて実装するのみ、なんです。そこをゴールとしてしまうと、すぐ終わりが見えてしまうんですね。
IT業界は人材不足と散々言われています。オフショアに手を出すほどです。年々必要数が増える中、変わったことがあります。
それは誰でもいい時代は終わったということです。
※詳細はIT人材白書を読んでみてください。(ボリューム多すぎるので大変。)または、私にメッセージください。
そんななか、不変なのは価値のある人材、知識を保有する人が勝ち抜く世界であること。
無論、素晴らしいアプリを公開して技術力を評価される方もいらっしゃいますが、あくまでここでは「知識量」の話をします。
勉強する中で、自分の得意分野、好きな分野、熱中できる分野を見つけてそこにひたすら熱を注ぎ込んで「これなら負けへんで!」というものを見つけられたら、それはもう「単なるプログラマ」ではありません。ちゃんと自分のキャリア形成ができていることにつながるんです。そこまでくれば、次に何をすればよいか、は自然と見つかるでしょう。
話についていける
私が新入社員1年目のとき、デブサミなどの催しに積極的に参加していました。21歳だったかな。その時は国家資格も含めていくつか持つものは持っていました。
新人のわたしが行くにはとてもハードルの高い世界かと思いきや、試験勉強で得た知識の大きさを実感しました。登壇されてるかたの話がわかったり、日本Microsoftの代表の方とお話する機会もいただけました。
他にも、先輩方の話についていけたり、トラブル解決が早くなったり、早いうちから設計に着手するなど得るものは大きかったです。
知能
コメントにて「必要な知能はありますか?」といった質問がありました。
私の解釈として「知能=学力・考え方」のようなものと捉えたため、それ前提で進めます。完全な私見なので、ご意見や意図と違ったらまたコメントください。これに関しては色々意見があるかと思います。
さて、必要な学力や考え方としては、
文系理系関係ないかな、とは思いますが、業務によっては向き不向きあるかと思います。
プログラムを書くためにはどうしても論理思考と呼ばれる考え方が必要で、具体的には数学の「集合と論理」でしょうか。
また、プログラミングだけでなく設計も行う場合は、お客様との折衝や、設計書の記載など言語化能力も欲されるため文系の文章能力が優位に立つ場合もあるかと。
と、具体例をあげてきましたが、私の結局の考えは「高校程度の文章能力と数学」がわかれば特に知能として挙げるものはないかと思いました。
最後に
私はWebの業界に長くいたことがありません。完全に趣味、もしくは、たまたまweb案件に携わった、という程度です。だからまだまだwebに関しては未熟で、Twitterでのフォロワーさんから知識をいただくことは多いです。
しかし、日頃からLaravelの開発をしている人と比べてもバグの解決速度ってあまり違わないんです。それは「あ、それみたことあるわ」という経験由来ではありません。仕事で触らないので。
では私の解決や開発スピードの理由ってなんだろう?って考えたときに、根本的なプログラムの知識や、睡眠時間を惜しんでまでもニタニタ笑いながらPCに向き合う知的好奇心があるからです。※睡眠時間を削って勉強しろという意図はありません。
知識は、国家試験から得たものや、日頃からITに関するニュースから得たものです。私はまだ若いですが「その歳でそんなに知ってる人いない」ってよく言われます。唯一の自慢です。
そんな私から話だけでも聞いてみたいという方はぜひ、Twitterでもなんでも連絡ください。
業界の話、Web以外での働き方の話、地域ごとに違う開発流行の話、なんでもお話します。
追記
(2019/09/02)
予想以上の「いいね」やストックをいただきありがとうございます。
自分の書いた記事でこんなことになったことないのであわあわしています。
また記事書きますのでよろしくおねがいします。
ご意見や交流はぜひTwitterまで!
(2019/09/03)
知能について追記しました。