見出し画像

写経でプログラミングを爆速で上達するやり方

42 Tokyoでプログラミング学習を続ける中で、最近「写経」の効果をじわじわと感じ始めてきたので、「写経」についてまとめてみた。

なぜコピペじゃなくて写経なのか!?

書くことで記憶に定着

人はいろいろな感覚を使うことで、記憶への定着力をあげることができる。

写経することによって、コードを目で見るだけではなく、実際に手を動かすことで記憶に定着しやすくなり、体で覚えることができる。

これはプログラミングだけでなく、英単語を覚えるときや漢字を覚えるときにも言える。

タイピングが速くなる

ぼくはいままで「>」や「*」など、プログラミングでよく使う記号をタイピングする際、キーボードをみながらでないと打ち込みができなかったのだが、写経をはじめると、キーボードを見ずに、ブラインドタッチでディスプレイに目を向けたままこれらの記号がタイピングができるようになった。

まだまだ完璧とはいえないが、写経を始めてから明らかにプラインドタッチで打てる記号の数が増えた。

タイプミスするとエラーが発生するのが嫌なので写経をしない、という人もいるが、むしろタイプミスこそが写経メリットと言える。

写経すると、大抵どこかタイプミスをし、自分がどんなクセを持っているかがわかる。

例えば自分の場合だと、ブラインドタッチで「*」をうとうとすると、まちがって「&」を入力するときがある。

クセがわかると、何が問題なのかを気をつけることができ、改善するために意識することができる。

エラーの解決方法がわかる

タイプミスに気づかず、そのままコンパイルを実行しようとすると、エラーが発生し、なぜエラーが発生しているのかを自分で調べることで、様々なことを学べる。

エラーの解決方法や、ソースコードの一部を変更した結果出力結果がどう変わったかを検証することができる。

基礎文法の理解が深まる

プログラミングには、言語ごとに構文や文法が決まっている。

たとえば、「int main(void)」といったmain関数の基礎的な書き方や、ほとんどのコードの行末には「;」をつけることなどだ。

プログラミングは少しでも間違えるとエラーが起きるため、正しい基礎的な文法や構文を理解することは非常に重要となる。

写経を行うことで、自然とプログラミングの文法や構成も覚えていくことができる。

プログラミングの勘を鍛える

プログラミングを学ぶ上で最も重要なのは、頭の中にプログラミングモデルを持つことといわれる。

言い換えると、ある課題に対して「それはプログラム可能か、不可能か」ということを瞬時に想像できるようになることだ。

プログラマーというのは一定レベル以上になると、地球上に存在するどんなプログラムも想像できるようになる。

そうすると、たとえばtwitterやWindowsなど、たいがいのプログラムは「まあおそらくこのような構造になっているんだろう」と想像できるようになる。

基礎文法の話にも通じるが、写経を繰り返すことにより、プログラムの構造を一通り学び、プログラミングの勘を鍛えることができる。。

注意点!! (これをやらないと時間の無駄)

コードの構成を理解する

理解するために、printfで変数の中身を出力したり、lldbなどのデバッカーを使ってコードを1行ずつ追っていき、気になった箇所は変数を出力することで何が起きているかを確認することによって、コードの意味を学ぶことができる。

写経をする際はコードを写すことに集中しているので、コードの意味について考える余裕がない場合、写経が終わってからきちんと時間をとってコードの中身を理解することが大切だ。

そうでないと、何も考えずに素振りをしているようなもので、時間の無駄となってしまう。

どうしても理解ができない部分や、複雑な部分は、自分のレベルに落としてや、改善してみることが大切だ。

具体的には、コードを分割してみることや、コメントを付けてみること、そして、変数や関数の名前を、自分と第三者にとって最もわかりやすい表現に書き直してみるなどである。

必要性がわからない箇所は、思い切ってその箇所をコメントアウトして、実行にどのような違いが出るのかをみてみることが有効だ。

わからないことは調べる

写経をしているうちに、自分が分からないコードを目にすることが増えてくる。

そんな時には分からないまま放置せず、Googleで調べ、日本語の検索でひっかからなければ、英語でも調べ、検索力をあげることが大切だ。

変化の激しい現代は「答え」に「いち早くアクセスできる力」が必要とされている。

暗記しようとしない

そもそもプログラミングのコードの種類は無限大なので、写経をしながら丸暗記する必要は全くない。

大切なのはコードを覚えることではなく、上記で挙げた基礎文法を理解することやプログラミングの勘を鍛えることにある。

サポートいただけると、note発信の励みになります! いつもサポートしてくださっている皆様には大変感謝しています🙇 がんばっていきますので、何卒よろしくお願いいたします!