新卒IT社員に伝えたいこと
はじめに
プログラムを書いてエラーが出ると「自分が否定された」「尊厳を奪われた」と感じる人もいる、という話
上記のまとめを読んで、何年か前にこういう新人さんがいたことを思い出しました。
せっかくなので私も、IT新人さんへ向けてのTIPS的なものを書いてみようと思います。各所で言われていることかもしれないですが書いてみます。
なお、あくまで私の個人的な考えなのであらゆる組織で通用する考えという訳ではないので注意してください。私自身はそんなに有名なサービスに関わっている訳でもない、ただの地方のエンジニアです。そんなに変なことは書いてないと思いますが、以下を鵜呑みにせず色々な人の「IT新人へのアドバイス」みたいな言葉を見て、必要な情報を取捨選択してください。また、分からない用語などが出てきたら都度ググってみてください。
エラーは怖くない
上記のまとめでも言われていることですが、エラーを怖がる必要はありません。正確に言えば、本番で出たエラーは怖いんですが、開発中やテスト中はむしろどんどんエラーを出すべきだと個人的には思います。
開発中やテスト中にエラーが発生すると、当然デバッグすることになります。すると本番ではそのエラーは発生しません。エラーは本番で発生すると、その調査や修正によりコストがかかります。
それらは実際にリリースされて既に価値を生み出している製品なので、稼働を止めることによる機会損失や、ユーザーの信用を失うことに繋がるからです。
一方、開発やテスト中にバグを見つけて修正することができれば、機会損失や信用の失墜を避けることができます。
上記まとめにもありましたが、エラーや警告のメッセージはあなたを攻撃したりあなたを否定したりするものではありません。逆です。「こういうミスがあるよ」「ここの書き方がちょっとおかしいよ」「一応動くけどデータによってはエラーになるかもよ」と教えてくれるものです。
動いているものが急に止まって、よくわからない英語がダラダラーっと出てくるので怖いかもしれませんが、一つ一つの文章はとても簡単な内容なので噛み砕いて理解するのは簡単だと思います。
使える機能やライブラリは積極的に使う
あなたが何かの機能を作ることになった時、その「何か」は既に他の人が似たようなものを作ったりしていることがあります。
それを自分でやることは、それはそれで良い経験になったりはしますが、ITエンジニアは「面倒なことや難しいことを1と0で解決させる」ことです。要は、基本的に面倒くさがりな人が向いている気がします。誰かが既に作っているものを自分で新しく作るのこと(車輪の再発明と言ったりします)は基本的にはやめた方が良いでしょう。
特にOSSなどで広く公開されているライブラリなどは積極的に導入を検討するのも良いでしょう。それらはあなたが個人で開発するよりも、より大勢の人の目によって使われて何度もバグが修正されていたり、最適化されていたりします。
ただ一点勘違いしてほしくないのは、「自分で書かないだけで、書こうと思えば書ける」という状態にはなっておいた方が良い、ということです。
たとえば配列のソートなんかは、だいたいどの言語でもarray.sort
的なメソッドがあります。ソートをするならそれを使えば良く、わざわざソート用のメソッドをあなたが0から実装する必要はありません。
ただし、「じゃあソートってどういうアルゴリズムなの?sort
っていうメソッドの中では何をやってるの?」という状態は好ましくないと個人的には思います。そういう状態であれば、ソートをするメソッドを書いてみるのも良いでしょう。それにより配列の特性を学んだり、なぜこの処理だと時間がかかるのか、なぜこの書き方が推奨されるのか、などを実体験として獲得できます。これは大きなアドバンテージで、この体験を積み上げていくことがとても大切です。後に同じような問題が発生した時も、これらの経験から「ここが怪しいんじゃない?」となんとなく分かるようになります。
また、エディターによっては変数名やメソッド名の自動補完や、より良い方法を示したりする機能もありあます(EclipseのContent AssistやVisualStudioのIntelliSenseなど)。それらは便利な反面、「関数名などを中途半端にしか覚えなくなったりタイピングが上達しなくなったりするなどの理由から、新人さんには使わないように言っている」という人に一度だけ会ったことがありますが、個人的には使えるものはなんでも使って言った方が良いと思います。
どうせ関数名は英語が分かればだいたい分かるし、何度も使ううちに覚えていきます。タイピングの上達は確かに大事なことですが、入力補完でtypoを減らせるのも充分なメリットです。毎日何時間もキーボードを叩いていれば自然にタイピングは上達すると思います。それにどうせ後から使う機能ならば最初から慣れておいた方が良いと思います。私だったら、気になったものはなんでも使ってみるように指導します。
ネットから拾ってそのまま使わない
上記と少し矛盾するかもですが、ネットからコードを適当に拾ってきてそのまま使うのは避けた方が良いでしょう。
理由は以下の2つです。
- そのまま使うだけでは得るものがないから
- ライセンス的に問題があることがあるから
まず1点目ですが、たとえば何かしらの関数をググってコピペして、それであなたがやりたかったことが実現できたとします。すると、あなたのコードを見た先輩や上司が「ここはなんでこの変数名なの?」「なんでこういう書き方をしているの?」などと疑問に思うかもしれません。
そのような質問をされた時に、ネットから拾ってコピペしただけだとスムーズに答えることができません。これだと、先輩の疑問も解消されませんし、何一つ学べていないということになります。ググってコピペするというだけの簡単な作業ですが、せっかくなら何をしているか分かった方が良いですよね?
特にITの世界は移り変わりが激しいので、その記事が書かれた当時ではモダンなコードだったとしても、1~2年経ったら古臭い書き方、懐かしい書き方になっていることもザラにあります。古臭い書き方が常に悪という訳ではないのですが、コードを見る人は「なんでわざわざこんな書き方してるんだろう?」と疑問に思う訳ですね。
また、致命的なバグが含まれている可能性もあります。私が執筆している記事に関してもその可能性はあります。そして、仮にコピペしたコードがバグを引き起こして何かしらの損害を被っても、そのコードを書いてネットに載せた人は一切責任を取ってはくれません。
2点目は、ライセンスの問題です。無償公開してあるものでも、MITライセンスなどは著作権表示が必要です。ライセンスポリシーによっては料金が発生するものもあるでしょう。当然不正使用となると重大な問題、コンプライアンス違反となります。
アウトプットするクセをつける
得た情報は積極的にアウトプットした方が良いです。なぜなら、アウトプットして他の人の視点が入れば、「ここはこんな感じにも書けますよ」とか「他にもこんなに便利なツールがありますよ」など意見交換に繋がるからです。発信した内容(自分が事実だと思っていたこと)に誤りがあればそれを指摘してもらい、正しいことを知るきっかけになったりします。
そしてアウトプットしておくことで、後から自分が見直すことができます。「久々に〇〇をやろうとしてググったら自分が書いたページがヒットした」みたいなのも、たまに見聞きします。
アウトプットするのもいくつか方法はありますが、オススメなのはQiitaです。アカウントを作っていなければ今すぐにでも作って良いと思います。他にも私が利用しているCrieitや1、ブログを書くというのもあります。QiitaもCrieitも、ブログではWordpressやはてなブログでもそうですが、Markdownで記事を書くことができます。Markdownに慣れておくのも良いと思うので、練習がてら書いてみると良いでしょう。
また、「今から調べることは後からまとめてアウトプットするんや…!」というつもりで情報を集めると、不思議なことに集められる情報の質が上がります。自分の理解を越えて良いアウトプットをすることは出来ないので、良いアウトプットをするなら必然的に自分の理解度を上げることに繋がります。これは最終的に自分が得をします。
また、アウトプットのクセを付ければ、他の人がわかりやすい表現をする練習にもなります。自分だけが分かる書き方ではなく、誰にとっても分かりやすい表現ができるようになります。信じられないかもしれませんが、人によっては「ボタンを押したらデータと日付を画面にオープンする」みたいなことを仕様書に書く人もいます2。結局「どのデータか」「日付はどういうフォーマットか」「画面にオープンするとはどういう意味か」などといちいち質問する必要があり、それは双方にとって不必要なコミュニケーションコストです。初めから分かりやすく書かれているに越したことはありません。
道具にこだわる
あらゆる道具にこだわりましょう。キーボード、マウス、モニター、机、椅子、OS、エディター、その他ツール…挙げればキリがありません。
キーボードなら日本語配列か英語は配列か、フルサイズかテンキーレスか、キーピッチはどうするか、直行配列にするか、セパレートキーボードにするか、トラックポイントは必要か、ワイヤレスか有線か、キースイッチは何方式か、メカニカルなら何軸か。モニターは何枚にするか、アームはつけるか、縦置きか横置きか、インチ数はどうするか、画面解像度はどうするか、デイジーチェーンにするか、など色々と拘こだわることができます。
会社の都合などで、特にハードウェアは望み通りのものを使えないことがあるかもしれませんが、こだわることは大事だと思います。たとえばタイピングしやすいキーボードはそれ自体がモチベーションにもなりますし、見た目でも性能でも気に入れば愛着がわいて長く使いたくなります。職業柄PCに向き合う時間も長くなるので、せっかくなら徹底的にこだわって好きなもので固めた方が楽しいです。
便利なショートカットを覚える
ショートカットはめちゃくちゃ便利です。使いこなせばキーボードからマウスに持ち替える動作が大幅に減り効率化できます。
Windowsであれば
Ctrl
+C
(コピー)Ctrl
+X
(切り取り)Ctrl
+V
(貼り付け)Windows
+E
(エクスプローラーを開く)Alt
+D
(エクスプローラーやブラウザのアドレスバーにフォーカス移動する)Alt
+Tab
(表示中のウィンドウを切り替える)Windows
+ 数字(タスクバーにピン留めしているアプリを起動)
あたりはマジでよく使うと思います。普段から慣れておくと良いでしょう。付箋などに書いて目に入る場所に貼っておくのも良いと思います。
タイピングに早く慣れる
馬鹿にしている訳ではないですが、「最近の新人さんはスマホ世代なので、タイピングに慣れていないどころかローマ字もよく分からない人が結構いる」みたいな発言を見ました。その状態ではプログラミングはおろか、チャットやメールなども難しいと思うので、とりあえずさっさとタイピングに慣れましょう。
上記にある通りアウトプット記事を書いてみたり、寿司打などのタイピングゲームをすれば慣れてくると思います。ホームポジションを覚えればかなりタイピングもスムーズになるでしょう。たまにタイピングが遅くてホームポジションもめちゃくちゃだけどめっちゃ優秀な人もいますが、まぁしっかりタイピングできるに越したことはないと思うのでしっかり慣れましょう。
プログラミングはほとんどが英語の単語や文章なので、ローマ字のタイピングは得意でも英単語はスムーズにタイピングできないという人もいます。できれば練習の段階で英単語も挑戦するようにしましょう。
タイピングに関してはキーボードとの相性も関わってきますので、自分にあったキーボードを見つけることも重要です。特にホームポジションは変な癖がつくとなかなか矯正できません。私も昔はずっと小さいキーボードを使っていて変な癖がついてしまっています。
わからないことをわからないまま放置しない
これが結構大事かもしれません。わからないことをわからないまま放置すると、後から調べるにも面倒になります。ググれば10秒もかからず調べることができるのですから、せめて概要だけでも知るようにしましょう。SiriやGoogleアシスタント、Alexaなどの音声アシスタントサービスを利用するのも良いでしょう。
ミーティングにPCやタブレットなどを持ち込めるのであれば、ミーティング中に出てきたよく分からん単語をその場で調べたり、メモしておいて後でググったりすると良いでしょう。ミーティングがオンラインであればなおさら簡単にできますね。ちなみに弊社は絶賛オフラインです、本当にありがとうございました。
一般的なことであればググれば分かることが多いですが、詳しい人に聞くのも効果的です。その人独自の視点や体験を交えて教えてくれるかもしれないですし、ググるだけではたどりつけない情報を知ることができるのも、人に質問することの大きなメリットです。人間は知識をひけらかしたい生き物なので、質問されて嫌な人はそんなにいないと思います。先輩だろうが上司だろうがガンガン質問していきましょう。
まとめ
色々と書きたいことはありましたが、まぁ概ねかけたと思います。他にも「ググる力を付ける」「情報取捨選択の力を付ける」「手段にこだわりすぎない」なども書こうと思ったのですが上手くまとめられなさそうなのでやめました。要望があったら書きますので、Twitterなどで反応いただければと思います。