プログラム
プログラムを写経するのやめませんか? 意味ないよ
突然ですが、
- プログラムを写経すると安心したりしていませんか?
- 写経してプログラミング学習したと思っていませんか?
- プログラミング学習の次のステップに行きたくない言い訳としてプログラムの写経をしていませんか?
俺はプログラムの写経はほぼ意味がないと思っています。
この記事ではプログラムを写経をすることの無意味さ語るとともにプログラミング学習者はどのようにスキルアップしていけばいいのかを説明していきます。
ぜひみなさんにはこの記事を参考にしていただき、そしてプログラムの写経が無意味だという感覚を持っていただきたいです!
なぜプログラム初心者は写経に陥りがちなのか?
まずはこの理由から説明したいと思います。
かくいう俺もプログラムを勉強し始めたての頃に写経したことがあります。
しかも俺の場合はルーズリーフに手書きでやっちゃったりしてました(笑
そんな経験を経ている俺自身、なぜプログラミング初心者が写経しがちなのかわかっているつもりです。
それではなぜプログラム初心者は写経に陥るのか?
プログラムの写経は安心する
一番の理由は、写経することによって安心できるからだと思います。
写経は何も考えなくていいし、結果として何らかのプログラムは出来上がります。
なので写経することによって何もやっていない自分を安心させることができます。
プログラムの勉強をしているふりができる
次の理由は、プログラムの勉強をやってる感を出せるからです。
写経は手を動かして難しいプログラムの塊をそのまま写すので、めちゃくちゃやってる感が出ます。
まるでどこかの映画で出てくるスーパーハッカーに自分がなれたと錯覚してしまうほどに気持ちいいです。
そして写経が終わった後はめちゃくちゃプログラムの勉強をしたつもりになれます。
でもプログラムの写経は無意味です
断言します。
プログラムの写経は全くの無意味です。
なぜなら、何も考えずにただ書かれている通りに書き写しているだけだからです。
ただただやってる感を出したくて、プログラムの勉強、スキルアップをしたくない言い訳を写経でごまかしているだけです。
写経するく らいならプログラムから一旦離れてリフレッシュするほうがまだ有意義だと俺は思います。
写経はプログラムの勉強ではない
あなたはある学習サイトで過去にやったことのある問題の答えを見ながら写経しているとします。
過去の問題の答えを書き写すことになんの意味もないです。
写経をして勉強したつもりになっているあなたに俺は聞きたいです。
プログラムを書き写す時、あなたはそのプログラムときちんと向き合っていますか?
そのプログラムがどのような動きをして、どうしてそのようなプログラムの構成になっているのか考えたりしていますか?
ただ何も考えず書き写しているなら全くの無意味です。
プログラムをただ書き写すことはプログラムの勉強、スキルアップに全くつながらないです。
後述しますが、写経するくらいなら「なんでこんな処理をしているのか?」「どうやって実現しているのか」をプログラムを読んで理解するほうが大事です。
あなたが写経をやめるべき理由
写経は実践的ではない
そもそも、実務でプロジェクトで開発しているプログラムを写経することなんてないです。
もし当たり前じゃんと思ったあなた、それではなぜ写経するんですか?
実務で写経しないとして、どうやって新たなスキルを学ぶべきか考えていますか?
今現在プログラムの学習で写経してる人は写経する以外のスキルアップする方法について考えたことはありますか?
プロのエンジニアになってあるプロジェクトに参加したとして、何か新しいスキルを学ぶ時どうするつもりですか?
ここで答えがすぐに出せない人は写経に依存しすぎています。
本当に写経大事ですか?
その写経意味あります?
スキルが上がらない
写経は目の前にある文字列を書き写しているだけに過ぎません。
何も考えず書き写しているだけでスキルが上がることは絶対にないです。
もしスキルを上げたいなら別のことに取り組むべきです。
プログラムは暗記するものではないから
写経の一つの目的として暗記することがあると思います。
プログラムは暗記するものではないです。
「プログラムを書く」ということは、頭の中にあるやりたいこと、実現したいことをプログラムという形で表現することです。
それを行うのに関数名だとか、メソッド名だとか、クラス名だとか覚える必要なんてありません。
メソッド名とかは覚えなくていいことはわかった。
それでは処理の内容を暗記するのは悪くないんじゃないの? と思われる方いると思います。
これも写経してまで暗記する必要ないです。
重要なのはあなたが写経対象とするプログラムでどんなことができ、どんなアプローチがされているのかということです。
これさえ確認しておけば、自分がプログラムで実現したい何かが出てきた時に、そういえばあんな方法でやってたなと思い出せます。
完全に覚えていなかったとしてもあの方法使えるんじゃないかと わかったら再度調べて確認すればいいです。
ここまで読んだ方の中で、基本的な関数名とか処理方法は暗記したほうがいいんじゃないのか? そっちのほうが効率いいでしょ、と思われる方がいるかもしれません。
ですが、関数名とかメソッド名とか処理の仕方とか、特別に写経して覚える必要はないです。
普段よく使うやつは自然に覚えます。
わざわざ写経しなくていいです。
俺は未だに文字列、配列の数を返す関数を覚えられないです。
多分一生覚えることはないと思います。
俺は仕事で色々なプログラム言語を触ります。
フロントエンド、バックエンドの両方に触れる機会も少なくないので、一つのプロジェクトで二つの言語を扱うことになることも結構あります。
例えば、フロンエンドがJavaScript or TypeScript、バックエンドがJava or PHP or C#などです。
このように、色々な言語を使っている内に各言語の文字列、配列の数を数える方法なんて忘れてしまいます。
配列の数を数える関数を覚えれば多少効率は上がるでしょう。
ですがそれを覚えるくらいなら、「あるアプリケーションの新機能を追加するためのアルゴリズム」を考えるための脳のリソースを確保しておくほうが有意義です。
「配列の数を数える」というような汎用的なこととはまた別の話ですが、もう少し頻度の少ない関数名などを覚えて何度も使うようことをしている時点で効率が悪いと思っています。
プログラムは共通化、アルゴリズム化して同じ処理をなるべく書かないようにするべきです。
それなのに暗記してよく使うということはそもそもプログラムの書き方とマッチしていないと個人的に考えています。
関数名とか特定の処理の仕方を覚えることには否定的ですが、プログラムで何ができるかは覚えるようにしています。
簡単な例だと、
- forを使えば繰り返し処理ができるとか
- こういう場面では三項演算子を使うことが有効だなとか
- 先に無効な処理確認を行い、無効な場合はすぐにreturnして、それ以降に本来の処理を書くとか こんなことを覚えています。
プログラムではどのようなことができて、どのような考え方をすれば効率良く不具合の少ないプログラムを書くことができるか、ということは暗記というか考え方を覚えるようにしています。
もし新しい言語を学習する時、今自分が扱えるプログラム言語でできることがわかっていれば、新しい言語ではそれができるのかという学習アプローチができます。
その結果、今まで知らない手法でその言語で行えることがわかったりなど新たな発見があったります。
ただ写経をして指を動かしているだけではこの域には達することはないです。
時間の無駄
プログラムの写経には一種の気持ちよさがあります。
目の前にある写経対象であるプログラムを写すことによって目の前にかっこいいプログラムができあがるからです。
ですが、何も考えずに写したその結果は、キーボードのタイピングが上手くなっただけでプログラムの学習につながらないです。
つまりプログラミング学習の上で、写経は時間の無駄です。
特に、プログラムを書き写している時に自分が知らない単語、技術、スキルが出てきてもとりあえず写している人は本当に時間の無駄です。
なぜなら新たな情報について調べていないからです。
調べなくても書けるくらいのプログラムを書き写すのは、既に扱える技術で書かれているプログラムを書き写しているだけなので、新たなスキルに対しての習得に全く繋がっていません。
写経対象に新たな技術がなければなおさら写経は無駄です。
ただの思考停止だから
プログラム学習サイトで出題された答えを写経することはただの思考停止です。
写すくらいなら、そのプログラムを読む方がいいです。
むしろ読み込んでください。
もし写経したとして、次同じような課題が出てきてもほぼほぼ同じような書き方はできないです。
プログラムは、元のプログラムを見なければ、全く同じものを書くことはすごく難しいです。
プログラムで大事なこと
ここからは、プログラムを写経することの無意味さを語るのをやめ、プログラムで大事なことについて説明していこうと思います。
プログラムで大事なことは以下になります。
- 考えること
- 書くこと
- 読むこと
それでは説明していきます。
プログラムは読むことが大事
写経は無駄と言いましたが、どんなプログラムも読むことは大事です。
写経対象のプログラムも読むなら無意味ではないです。
例えば、写経対象のプログラムを読むことによって、自分が知っている関 数の新たな使い方を発見することに繋がったります。
自分が書いたプログラムと同じような使い方をしていれば、自分の使い方が間違っていないことを確認することができます。
自分が知らない技術が使われているプログラムを読むことは特に重要です。
知らない技術が書かれているプログラムを読むということは、そのプログラムを理解するということになります。
理解するには知らない技術について調べる必要が出てきます。
調べた結果、新たな技術を習得することになります。
この流れは実務では当たり前のように発生します。
実務で使われるプログラムは、たとえ知っている技術を使って書かれていたとしても、自分以外の誰かが書いたものであり、読んで理解する必要があります。
知らない技術、ちょっとした知らない書き方と対面した時、よく読み、調べ、理解していくということになります。
写経、暗記などをしているだけでは到底たどり着くことのできない領域です。
プログラムを読む、ということを普段から心掛けるようにするとスキルアップに繋がります。
俺は自分が使うフレームワーク、ライブラリ、気になる技術がオープンソースで公開されていたらソースコードを読みに行くことが多々あります。
読んで理解できれば、フレームワークなどの仕組みなど自分が一人でやっていては得られない知識を得られます。
プログラムを読むことはめちゃくちゃ大事です。
プログラムは書くことが大事
プログラムは書くことが大事です。