imaizumeの個人メモ

コードとか旅とか飯とか

社会人でやり続けるとマズいエンジニアの勉強方法5選

僕は専攻が情報系ということもあり、周りにはIT業界でシステムエンジニア(SE)やプログラマを志望する学生さんがたくさんいて、プログラミングなどでの相談を受けたりすることがよくあります。 するとその中で「この勉強の仕方を社会人で続けたらまずいな」と思う人がそこそこいます。

僕が見た範囲だと、多くの学生さんは普段授業で習った範囲でプログラミングをしていて、卒研や修論をしていても新しい言語やライブラリの使い方などの勉強は正直そこまで力を入れているという印象がありません。 僕はこういう『今の自分にできる範囲』で課題を片付けようとしてしまう姿勢に、いつも疑問を感じてしまいます。

課題提出期限までの時間がないとか、(モダンな)プログラミングに詳しい人がいないとか、社会人経験がいないというような事情があるのもわかりますし、そういうことは社会人になってから身につければ良いという考え方もあるかもしれません。

しかしSEにとって、勉強とは習慣であり、習慣は身につけるのにも直すのには時間や労力がかかるものです。時間のある入社前に「SEとしての正しい勉強方法」を知っておくと、入社後の成長の下地になると思います。

そこで今回は僕が感じた、社会人でやり続けるとマズいエンジニアの勉強方法を5つ紹介します。

1. プログラムやエラー文をしっかり読まない

プログラムやエラー文をしっかり読まない

まずはしっかり自分が書いたプログラムやエラー文を読む習慣を付けましょう。

経験ある人も多いかと思いますが、自分も研究室で「○○っていうエラーが出てるんですけどどうしたらよいですか???」みたいな質問を受けます。 そこでたいてい言うことは次の通り。

  • まずエラー文はちゃんと読んだ?
  • エラーの発生前はどんな処理をしている?
  • エラーの位置は何行目の何文字目?
  • その関数は何を入力に何を返却するもの?
  • 公式のリファレンスにはなんと書いてあった?

すると「よくわかっていないけど、とりあえずコピペで動かしてみた」というケースがやたら多いのですが、これは絶対に直した方がいいです。 今自分が書いたコードは何をしているのか、どんなエラーがどうして発生したのかをよく読む癖をつけないと、いつまでもパターンを覚えられず、関連するプログラムへの知識が一向に深まりません。

関連する話としてデバッグの方法を知らないという人も多いですね。 例えばステップイン実行をするだけで、変数の値がどこで予期せぬ値に変わるのかが分かりますが、見ているとそもそもやり方を知らないという人が多いので覚えておきましょう。

2. 知らない言葉を調べない

知らない言葉を調べない

Unixには「知らないコマンドは絶対叩かない」という格言(?)があります。 これは、逆に言えば意味を知らなければ何もできないということです。

プログラミングをしていると、知らない言葉に頻繁に出会いますが、そういう時に放置してしまう姿勢は考え物です。 単に自分が困るだけではなく、クライアントやチームメンバーと話をするときもわかったフリして話を進めた結果、タスクの実行が困難になったり期待はずれのことをしてしまい全体に迷惑がかかるからです。

ここで注意してほしいのは、必ずしも100%の理解をする必要はないということ。

例えば「HTMLとは何か」の認識が完璧にできていなくても

  1. HTMLというよくわらないもの
  2. HTMLというホームページを作るための書き方でカッコで何かわからない文字を尖りカッコで囲った難解な文章

では、その後にできることがだいぶ違いますよね。 「よくわからない」では相手もどこから話を始めていいか分からないでしょう。 でも、ある程度わかっていれば、ホームページの話をしていることは共通認識として持てますし、次はHTMLタグの種類を説明すれば良いというように、理解が足りない部分が具体的になります。

言葉の意味を多少でも知っておくだけで、再び勉強するときもとっつきやすくなるし、「ある程度知っているなら」という条件付きでプロジェクトに参加できる可能性も増えます。

3. 言われたことを言われた範囲でしかやらない

言われたことを言われた範囲でしかやらない

仕事でもそうですが、言われたことだけをやり続けるのもご法度。

例えばぼくの大学では1年生の授業でプログラミングを教える際、先生がエディタとしてTerapadというエディタを紹介します。 Terapadは汎用性があり軽量なのですが、補完やオートインデントなどの機能がないためある程度プログラミングをしていると不便に感じてきます。

しかし、卒研の段階でも複雑なプログラムやLaTeXで書く論文をTerapadで書き続けている人が大勢いるのを見てとてもびっくりしています。 「不便じゃないの?? もっと便利なエディタがいっぱいあるよ」と教えると「え、そんなものあったの??」というような顔をされます。 こうなってしまうのはTerapadしかない」「教えられたものだけしか使ってはいけない」という頭、言い換えれば「他にどんなエディタがあるのだろう」と発想できない頭になってしまっているからにほかなりません。

そうなってしまっては、学習の幅も機会も相当狭まってしまいます。 ぜひ言われたことの『上下左右』を考えましょう。

例えば最初にHTMLの勉強をしたら

  • なぜHTMLは表示されるのだろう
  • 同じことをまとめておけないだろうか
  • クリックしたら動くようにするにはどうするのだろう
  • サーバーってなんだろう
  • もっと楽にHTMLを書けないだろうか

などの思考を持つと学習することの幅がグッと広がります。

4. 英語を避ける

英語を避ける

これもあまりに多すぎます、英語しかないから諦めるという人。 海外の公式ドキュメントやStackOverFlowに当たっただけで、ブラウザのバツボタンを押しちゃう人がかなりいます。

これはとってももったいないこと! ほとんどの記事は高校レベルの英語力で充分に読めるので、少し時間をかけて読めば日本語のソースを探し続けるよりもよっぽど効率が上がります。 簡単な内容でも、なぜか日本語には答えがなく、逆に英語だとすぐに答えが見つかることも多いです。

かく言う自分も、実は以前インターンしていた時にあるフレームワークの使い方を日本語で調べていました。 その時は日本語の方が早く見つかるし理解も正確にできると思ってたのですが、先輩から「英語じゃないと一次情報(=誰かの伝聞や翻訳されていない公式の情報)に当たれないから、日本語はやめたほうがいいよ」とアドバイスされました。 それまでも特に英語には苦手意識はありませんでしたが、なんとなく日本語の方が読みやすいと思っていたのでついついそっちを見てしまっていたのでした。

それから英語のドキュメントを読む習慣をつけたところ、まるで道が開けたように使えるライブラリが増えたり知らない情報を自分のものにできるようになりました。 決して英語を勉強しなおす必要はなく、知らない単語だけ辞書で調べる程度で充分なのです。 大事なのは「英語だから見ない」という意識をなくすことです。

5. 勉強したこと自体に満足する

勉強したこと自体に満足する

勉強は何のためにするのでしょうか? それがわからないで盲目的に勉強することは、貴重な時間を無駄にするだけです。

会社の目的はお金を稼ぐこと。 あなたの興味と会社の必要性は、一致する場合もありますがそうでないこともあります。 (なので僕は可能な限りそこが一致する会社に行くことを選んだのですが)

なので「とても有意義に勉強できた!!」で終われば、それは会社的には何もやらなかったことと同義です。 趣味としてやる勉強自体はよいですが、しっかり普段の仕事のスキルを上げるための自分磨きをする習慣を付けたいところ。

そのためには「この勉強をすることで仕事にどう役立つのだろう?」という疑問を考える習慣をつけるべきです。 普段の勉強でも、目的を考えてやるだけでその後のアウトプットが大きく改善されると思います。