昨年度1年間OJTをしている中で、1年目エンジニア(とくにエンジニアリング初心者の方)に伝えたいことがいろいろと浮かんできたので、ここにまとめてみます。
どの立場で言うのか
- 社会人7年目のエンジニアです
- エンジニア歴=社会人歴です
- 仕事は自社開発のアプリ作ったりしてます
- 転職はしたことないです
誰に対する記事か
- 入社1年目のエンジニアの方
- 文系出身でプログラミング初心者ですって方
- (もしかしたら)これからOJT等で新入社員を指導する立場の方
本題
というわけで本題です。
「どうすれば良いですか?」って聞かれても困っちゃう件
よく質問で「これ、どうすれば良いですか?」とか「この処理、どうやって書けば良いですか?」って聞かれるのですが、そう聞かれたときの答えはほぼ例外なく「分からん」です。これは後輩に対する意地悪とかではなくて、本当にそれだけの情報では判断できないので「分からん」なのです。
この仕事をしていてよく思うのですが、たとえ些細なことでも絶対的な正解なんてのは存在しないです。あるのはその時に選べる選択肢と、その選択肢を選んだときのメリット/デメリットです。さらに言えば、そのメリットとデメリットも状況によって大きく変わりますし、正確に予測することは先輩社員でも困難です。
例えば、
String name = person.getName();
って書いてある行でNullPointerExceptionが出てるから直しておいてね。
というタスクがあった場合、
String name = null;
if (person != null) {
name = person.getName();
}
「このように直せば良いですか?」と後輩に聞かれてもやっぱり「分からん」です。
- nameの初期値はnullで良いのか、なぜ空文字ではなくnullなのか。
- personがnullだった場合、name変数は何もセットされずに処理を続けてしまって良いのか。
- そもそもpersonオブジェクトがnullになる状況にしちゃいけないのではないか。
等々、簡単なnullチェック一つをとっても、システムの仕様や要件によって修正方法は全く変わります。もしかしたら本当にif文を入れるだけで良いかもしれませんし、もしかしたらPersonデータを登録する部分を変えなければならないかもしれません。
ということを考えていると、「この場合はこうしておけば良い」という場合分けで覚えて仕事をすることは、ちょっとした状況の変化に耐えられなくなり危険だと思っています。
今目の前にある課題、その周辺にある条件、こう解決するとこうなる、別の解決方法ならこんなメリットがある、というところを常に考え、結果一番現状を踏まえて最善だと思う手を模索することを身につけると、一気に応用力が上がるはずです。応用力があると、いろんなポジションでいろんな仕事ができるようになって楽しいです。
勉強は自分一人でやってほしい件
やる気のある新人だと、「まだ業務ではやったことのないサーバ開発について教えてください」と言って時間を確保されることがあります。この姿勢は別に悪いことではないのですが、「教えてもらう」ではなく「自分で調べる」姿勢も1年目のうちに一緒覚えてほしいと思います。
上にも書いた通り、仕事にも開発にも正解なんてありません。そうなると、学校の勉強のように「正解を教える」ということは先輩社員にもできないのです。できるのは「以前はこうだったよ」という経験を伝えることと、「自分はこう思うよ」という考え方を伝えることくらいです。
さらに言えば、先輩社員だってシステムや技術について全てを知っているわけではありません。というより、一人が全てを知るのは不可能なほどIT技術というのは幅広く底も深いです。
そうなると、一方的に教えるよりも、まずは自分でググって調べて自分で考え、「こう考えたんですけどどう思いますか?」、「この部分がどうしてもググっても出てこないんですけど何か知りませんか?」といった聞き方をしたほうが確実に効果的です。特にサーバ開発のようなごく一般的な内容であれば、僕よりはるかに知識も経験もある方がネット上にはいくらでもいます。
さらに、「授業を受ける」という受け身の姿勢ではなく「自分で調べる」という姿勢で臨んでいる分身につくのも早いです。
※ ただし、ググっても絶対出てこない問題(社内特有のルールやシステムなど)についての質問は大歓迎です。調べても時間の無駄になることはわかっているので、これは社内特有のものだと判断したらすぐに聞いてください。特有なのかどうかが判断できない場合もやっぱり聞いてください。一般的な内容だった場合は「ググってね」で終わるだけなので。
学校の勉強方法は忘れてください
ここまで書いた通り、学校の勉強と会社の勉強は
- 正解がない
- 先生がいない
という点で全く別のものだと考えた方が良いです。ネットや本を見ろと書きましたが、それすらも「正解」ではなく単なる選択肢の一つに過ぎません。
日々、少しでも多くの情報を頭に入れ、それを自分の頭で解釈し、実験し、失敗し、試行錯誤をしながら、仕事をする上での最適な判断を下す力を鍛えるのが良いと思っています。「この場合はこれが正解」ではなく、「こんな状況でこういう前提があって今こちらにはこんなカードがあるから、今とるべき行動はこれだろう、そうするとこんな結果が予測できるので、そうなったら今度はこうしよう」という考え方です。
おそらくこの考え方は机に向かって生真面目に本を読んで内容を覚えるだけでは身につきません。仕事やブログ等で考えを伝えて議論することで、他の人の思考回路を盗んでくる努力も必要です。
まとめ
いろいろと偉そうなことを書きましたが、要は僕(先輩社員)も日々試行錯誤しているし、その中でよりよい思考回路を作る努力をしているんだよ、ということを伝えたい次第です。
先輩だろうが上司だろうが、誰が正しいということは無いのが開発のお仕事ですので、常に自分で考え、考えたことを自信をもって発信することが自然にできるようになると、開発も仕事も楽しくなると思います。
というわけで、タイトルの意図は「学生の時の勉強方法なんて忘れてエンジニアの勉強方法を身につけてね」ということでした。
長々と読んでくださってありがとうございます。