新人プログラマのうちに身に付けたい習慣、考え方（この半年で学んだことと反省）

# 新人プログラマのうちに身に付けたい習慣（この半年で学んだことと反省）

## はじめに
半年よりちょっと前に未経験からプログラマになりました。
プログラマと言っても、この約半年間はほとんど研修を受けさせていただいていた感じなので、偉そうなことは言えません。

しかし、この約半年で反省したことや学んだことを自戒の念も込めて、まとめました。

## 主体的に学ぼう
能動的に自ら学び、自走しましょう。
新しい技術を学ぶということは非常に楽しいことです。
すごい先輩方は大抵、新しい技術を身につけるためにその技術を学ぶことを「その技術を勉強した」というよりも、「その技術を使って遊んでみた」と表現している気がします。つまり、必要だからしょうがなく学ぶのではなく、半ば趣味として新しい技術で遊んでいたら、身についたーという感じでしょう。
教えてもらって学ぶという姿勢ではなく、自ら楽しいから学ぶ(=その技術で遊んでたら身についた)という風な姿勢がプログラマにとっては一番かもしれません。

## なぜそうなるかを説明できるように
「なぜ、その技術を使用するのか」
「なぜ、そのようなコードになったのか」
など、必ず「なぜそうなるのか」、「どのような思考過程を経てそうなったのか」を説明できるようになりましょう。これは、つまりコードのコピペや表面上の理解でなく、根底から理解する必要があるということです。心の中で常に「なぜ?」を繰り返しましょう。深い理解のためには、多少時間をかけても良いと思います。
この「なぜ」を説明できないと先輩方に論破されて泣く羽目になります。

## 分解して考えよう
ある問題を解決する時や、何かの機能を実現するときには、全体を一気に作っていくのではなく、細かいところから積み上げて考えていきましょう。プログラミングは、論理的思考（ロジカンルシンキング）が非常に求められるようです。大きな問題を小さく分解して、論理的に組み立てていきましょう。以下の本が参考になりました。
[ロジカル・シンキング―論理的な思考と構成のスキル (Best solution) | 照屋 華子, 岡田 恵子 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4492531122)
この他にも、「ロジカルシンキング」や「問題解決能力」というテーマの書籍は大量に出版されています。調べて、読みやすそうなものを手に取ってみることをお勧めします。

## 良い習慣、正しい習慣を身につけよう
コードの書き方や命名規則、スタンダードな表現の仕方…良い習慣や正しい習慣というのは非常に多く存在します。
先輩からコードのレビューを受ける際に、これらの指摘を受けることが多々あるでしょう。それらのことは、メモを取り、習慣化してしまいましょう。

## 自動化できないか考えよう
繰り返し行うめんどくさいことは自動化できないか検討しましょう。
例えば、自動でチェックできるツールがないか調べ、自分の能力に頼らずとも自動的に良いコードになるようにすることも大事です。コードのフォーマットをいちいち行うのは非常に面倒ですし、やり忘れる可能性もあります。また、文法的に好ましくないコードを書き続けてしまうこともあるでしょう。これらのことを自動でIDE等に行わせたり、自動でチェックさせることは非常に良いことだと思います。"linter"、"静的解析ツール"、"フォーマッタ"...この辺を調べてみて自動化させると良いかもしれません。
もちろんその他の繰り返し行うことも積極的に自動化していきましょう。

## プログラミングだけできれば良いというわけではない
プログラマのお仕事は、プログラミングをすることです。しかし、プログラミングだけできれば良いというわけではありません。例えば、お客さんやデザイナーさん同僚のプログラマなど、多くの人とやりとりをしながら、仕事を進めなくてはなりません。詳しくは後述しますが、プログラマにとってコミュニケーション能力って大事なんだなってことを痛感します。

## 短く、簡潔に、分かりやすく話そう
他人に何かを伝えるのは非常に難しいことです。特に最初は、話し方について先輩方から注意されることが予想されます。話すときには、前提条件を述べ、相手が知らなそうなことはしっかりと説明し（自分が知っていることはみんなが知っているわけではありません）、結論から簡潔に述べましょう。「ウェーイ」とノリで行う「コミュ力(笑)」ではなく、伝えたいことを正確に伝えることが本当のコミュニケーション能力のようです。

## インプットしまくろう
知っていることと知らないことは雲泥の差があります。ある技術やその背景を知っていれば、10分で実装できたものを、それを知らないがために3時間ウンウン唸りながら考えるという経験をしたことが有ります。
そうならないために、徹底的にインプットの量を増やしましょう。書籍、公式ドキュメント、ブログ、Qiitaなど様々なツールからインプットしまくりましょう。
余談ですが、根本的な概念や基礎的な考え方のインプットは、同じ書籍を3回くらい読むと真の理解が得られるような気がします。

## 英語を積極的に読もう
日本語で育ってきた私たちにとって、英語よりも日本語のドキュメントの方が読みやすいのは紛れもない事実です。しかし、最新の技術を追おうと思ったら、残念ながら英語で読めないとしんどいことが多々あります。最新の公式ドキュメントなんか大抵英語で書かれています。最新の公式のソースにあたるために英語のドキュメントを積極的に読みましょう。最初はやっぱりきついですが、最近はネットですぐに単語の意味も調べられるし、だんだん慣れてくるものです。

## なるべく、最新で公式のドキュメントを
すでに述べましたが、なるべく公式のドキュメントを読みましょう。

## デバッガを使い倒そう
最初はデバッガを使い倒しましょう。
デバッガは、デバッグをするのに非常に有効なツールです。また、それだけではなく、自分で書いたプログラムが実際にどのように動いているかということをリアルタイムで確認することができます。これはプログラムを理解するのに非常に有効だと思います。デバッガを有効に使用して、プログラムがどのように動いているのかを確認しましょう。

## 設計をしっかり行おう
早く実装したいと思うことが多々あると思いますが、まずはクラス図を書いてしっかりと設計を行いましょう。オブジェクト指向などの理解にもつながります。アジャイル云々はその後の話だと思います。

## まずは日本語で仕様化して、手順を考えてみよう
実装する際には、まずは自分の言葉で仕様を理解しましょう。また、どうやったらその機能を実装することができるのかという手順を、前述したように細かいところから日本語で考えてみましょう。最初のうちは、1行ずつその機能を実現するのに必要な手順を紙に書いていくのがオススメです。

## ツールの意義や使い方をちゃんと理解しよう
特にJavascriptをまともに動かそうとすると、様々なツールを使用する必要があると思います。そのツールの意義や、背景、使い方をしっかりと理解した上で導入しましょう。でないと、適切に使用できません。

## 他人の力も活用しよう
僕が最もできなかったことのうちの1つです。
まずは、自分で調べる、考える。
ある程度の時間、調べたり考えてわからなかったら、周りの人に聞きましょう。
時間は有限です。私は、他人に聞かず、長時間自分で調べたり、考えて時間を浪費して失敗したことが多々あります。時間を浪費するよりも、ある程度の時間自分で対処しても解決できない場合は、先輩方に聞きましょう。
もちろん、まずは自分の頭で考え、調べることは非常に重要です。

## 何よりも楽しもう
言われるまでもないかもしれませんが、プログラミングは非常に楽しいものです。
時には先輩に怒られて凹み、時には自分の実力のなさに落胆することもあるでしょう。それでも、プログラミングは非常に楽しいものです。常にその楽しみを味わいながら、行いましょう。僕はすでに趣味というか、ライフワークになっています。

## 最後に
長々と偉そうなことをかいてしまいました。僕自身まだまだなので、頑張ります。

以上

※ ブログでも同一記事を投稿している
[新人プログラマのうちに身に付けたい習慣、考え方（この半年で反省と学んだこと） - sekky0905’s blog〜文系元営業プログラミング未経験からエンジニアへ〜](http://www.sekky0905.com/entry/2017/04/11/新人プログラマのうちに身に付けたい習慣、考え方)