あなたはプログラミングを始めるとき、何を考えて、どのように手をつけ始めますか?
「とにかく書かなきゃ始まらないっしょ。」
確かにやる気やモチベーションに関して言えば、スイッチのように取り組み出すことで上昇するものでもあるため、書き始めることで取り組みが進むのは否定できません。
また、プログラムを作成していく中で、わからない状況になれば参考書やサンプルコード等が貼ってあるサイトなどを参照することもあるでしょう。
わからない内容やエラーコードが発生してしまった場合、すぐに検索してたりしませんか?
これ自体も決して悪い行動と判断はできませんが、なかなかどうしてこのような考え方でプログラミング学習を続けていたとしても、成長することは難しいです。
ネット上だけでも多くの情報を取得できることから、コピペするだけで簡単に動作するプログラムを作成することができます。
この内容から引き起こされてしまうプログラムへの理解不足、コードに対する言語化能力の低下に結びついているように思えます。
さらに言えば、プログラミングの考え方が欠如していることからパターン認識の感覚が強くなり、暗記ゲーのようにプログラミングを捉えてしまい、肝心の”モノづくり”の発想はなくなり、既存のものしか対応できなくなる初心者が増加してしまいます。
そんなパターン認識だけの考え方から脱することで、本来のプログラミングに対する考え方が身についてきます。
ここでは、すぐに回答やサンプルコードを検索しコピペしてしまうような状況から脱してステップアップしたい人へ、全力で思考法をお伝えしていきます。
目次
コピペする人の特徴は会話すれば分かる
これはとてもシンプルな方法だが、間違いなく分かる方法として作成してもらったプログラムを説明してもらうことです。
すると、プログラムを理解して作成しているかしていないかはっきり分かれます。
もちろん、言語化に慣れていない初心者の人もいらっしゃってうまく説明できないこともありますが、コピペした人はそれ以上に説明できないので、すぐに見分けがつきます。
コピペする人の特徴は、何と言ってもすぐに検索して利用できる類似のプログラムをすぐに探し始めてしまうところです。
これ自体は効率的と言えますし、一概に悪いとは言い切れませんが、問題を出されたらすぐに解答を見るかのような感覚です。
つまり、考えることを諦めている人が多いです。
熟練のプログラマーもググることもありますし、コピペを利用することはありますが、考える時間が短縮されていて、すぐにプログラムを動かしフィードバックループに入るため、まるで何も考えずそれこそコピペして動かしてるだけじゃんと思われるかもしれません。
ただ習慣化しているからこそ、多くの処理を頭の中で行なっており、かつ効率よくこなすわけです。
まずはプログラムを作成して動かしてみようと考える人がいるかもしれませんが、それ自体は決して悪いことではなく、理解に努めたかどうかが大切になります。
動いたことをいいことに、理解を放ったらかしにしている人がいるように思えてなりません。
ステップアップを考えている人であれば、絶対に理解を深めていきましょう。
頭が悪い・理解できていないコピペプラグラマーの特徴
そもそも頭が悪いとあまり表現として美しくない言葉を利用していますが、実際には決して取り組んでいる人の頭が悪いということではありません。
プログラミング未経験で右も左もわからない状態であれば、自然とにコピペプログラマーに陥りやすい状況が多くあることが問題でもあります。
例えば、まだプログラミングに従事したことがない人が調べ物としてプログラミングに関する疑問や悩み、あるいは取り組み方をググったとしましょう。
その際に表示される多くの情報は、どうしてもオンライン教材であったりプログラミングスクールに関する情報ばかりです。
それらの情報が間違っているわけではありませんが、初めてプログラミングに挑戦しようと考えている人にとってはその情報が正しいと認識してしまいます。
学習方法が正しいのか正しくないのか、コピペや写経がどれほどの効果がありどのように学習において活用すれば良いのかわからないため、当然の結果としてコピペプログラマーとなってしまいます。
こればかりは、多くの情報に触れながら実践的に体験を積まない限り見えてこないこともたくさんあります。
そのため、継続的にプログラミングの学習を続けていたとしても、全く学習方法や理解する上でのプロセスなどを改善しなかった場合、頭が悪い・理解できていないコピペプログラマーになってしまうことになります。
コピペは100%悪と言えるのか?
理解していない類似コード群がプログラム内に散在化してしまい、保守性を下げてしまったり、共有のしづらさを発生させてしまいます。
しかし、全てが悪いわけではありません。
プログラミングにおける文法等を全て覚えることは困難ですし、おそらく取り組んでいるプログラミング言語や利用するプログラミング言語によってライブラリも膨大に存在します。
そのため、覚えきることができなかった文法やライブラリの使い方に対して、サンプルコードをコピペすることは問題ないと思います。
これは、どれだけベテランな人でも変わらないと思います。
コピペしてステップアップができない人とステップアップしながらプログラミングに取り組み続けられる人の違いは、プログラム内にコードを貼り付ける理由・意味を持って利用できているかどうかになります。
プログラムの過程を理解した上で、使用方法やその表現をコピペしているかどうかです。
理解している上でコードを使用しているならば、たとえ中身をあとまわしにしたところで、使用方法に関して応用することができますし、プログラムに対してリファクタリングできますし、不具合・エラー等も解決できるはずです。
動けばよしと考えるのは、あくまでも自分自身で扱うプログラムまでですし、他者が利用することを考えたり、ましてやプログラミングで稼ぐということは、理解ある状態が非常に大切なことになるわけです。
コピペはパターン認識に陥ってしまう原因になる
ここで問題視しなければならないことが、コピペだけを駆使してプログラムを作成する人でも、選択したプログラミング言語とフレームワークを利用すれば、ネット上の多くの情報によってパターン認識で動作するアプリやプログラムを作成できてしまうことです。
もちろん、個人だけで完結するプログラムであれば何も問題はありません。
しかし、チームで開発したり、他者と共有しながらコードレビューを行う際に、コピペを利用したパターン認識のプログラムだと非常に周りは苦労を伴ってしまうことになります。
つまり、意図が読めないコードが散在化することで、共有することができないコード群になってしまうわけです。
変数名、関数、クラス、ループ処理の有無、存在する機能の分割など、意図したコードでないからこそ本人すらも理解できていないということなので、共有された側もコードの意味を汲み取ることは困難になります。
理解していなくても動作してしまうことから、内部改善するためにリファクタリングするにも中途半端な判断をさせられてしまうのです。
いっそ0から作り直す方がシンプルなものになってしまうため、手を出しにくいものを残したコード群が完成してしまいます。
もちろん、パターン認識による弊害はこれだけにとどまらないです。
一番残酷なのは、与えられたものでしかプログラムを作成できなくなってしまうことです。
課題創造型のプログラミング業務であれば、間違いなく何が課題となり得るのかわからない状況に陥ります。
また、すでにある課題に対して解決まで導く課題解決型のプログラミング業務であっても、ググるといった検索行為や参考となるものがなければ、太刀打ちできない状況を招いてしまうことになります。
それほどまでにコピペにはパターン認識という危険な要素が存在していることになります。
なぜコピペを多用してしまうのか?
一般的に考えれば、作業効率を上げるためにすでに動作するコードがあるなら利用したいに決まってます。
また、コンピュータは正しいプログラム(指示書)でなければ読み込み、動作することができません。
つまり、動くものを想定できなければコードにしても結果を得られないわけです。
このような状況だと、プログラミング初心者にとって学習が苦痛になってしまうことがあります。
そして、挫折という苦い経験になってしまうのですが、すでにできているプログラムをコピペすることでそれを解消することができます。
利用できたタイミングで理解のステップに移行せず、次のプログラムに作業を移してしまうことが原因として考えられると思います。
そして、類似プログラムが出現した際に、パターン認識として覚えていたコードをまた引っ張り出し、理解していないが動作してしまうプログラムを量産してしまうループに入ります。
正直、パターン認識でプログラムを作れてしまうことは、PCさえ使えればプログラミング未経験者であっても可能なため、プログラミングを学び理解しているとは言い難いものになります。
もしプログラミングを継続して取り組んでいきたいと考えている人であれば、間違いなくプログラミングに対する考え方を見つめ直すタイミングが訪れます。
コピペは非常に楽ですが、必ずそのツケが回ってくるので、プログラムの理解に時間を費やしていきましょう。
プログラミング脳を鍛える必要がある
おそらく、すでにプログラミング学習に取り組んでいる初心者の人は、無料学習サービスサイトやアプリ、書籍等を駆使してそれぞれの学習方法を選択していることだと思います。
しかし、それらの情報はどれも文法に関しての知識を習得するために、サンプルコードなどが存在し、それこそコピペのように利用することになるでしょう。
もちろん、何度も繰り返しますがそれ自体が悪いことではなく、理解せず暗記ゲーのようにパターン認識だけで通り過ぎてしまうことに問題があるわけです。
そして、このような学習方法を継続しても、学生時代の暗記科目同様、文法や単語といったパターン認識に留まり、プログラミング脳を鍛えていくことはできません。
理解を深めるフェーズを設けた学習が必要になってきます。
このプログラミング脳を鍛えていくことで、検索しても出てこない課題等への取り組みに真価を発揮します。
プログラミングの考え方を身に付けるには?
では、具体的にプログラミングの考え方をどのように身につけていけば良いのか解説していきます。
また、プログラミングにおいて様々な概念が存在することから、一概にここで解説する内容が正しく共通するものではありません。
ですが、プログラミング初心者にとって初歩的なプログラミング脳を構築してもらうために、単純化を図った過程を順序立てて説明していきます。
1. 作成するプログラムの仕様を把握・理解
2. 確認フェーズを設ける
3. プログラムの工程を考える
4. コーディング開始
5. リファクタリング(コードの内部改善)
これらを取り組みの中に組み込むだけで、初歩的なプログラミング脳を会得し始めることができるはずです。
さらに詳しく一つ一つを解説していきたいと思います。
作成するプログラムの仕様を把握・理解
当然のことですが、プログラムは何か結果を得るために作成されます。
必ずそのプログラムに意図が存在します。
そのため、作成するプログラムはどんな仕様なのか把握し、理解することから始まります。
つまり、そのプログラムに関しての要件を満たすために、必要とされる要求事項の集まりを把握・理解します。
例えば、カレーを作るのであれば、材料・調理方法・環境等、カレーに対して必要なものを考えることになります。
確認フェーズを設ける
ここでは、必要に応じてプログラムが正しく動作するか確認する箇所や想定をあらかじめ設けることになります。
先ほどの例のカレーで言えば、作っている最中に味見を行い、正しく作れいているか確認を取っていくイメージです。
もちろん、レベルが高くなればテストコードも記述できるようになってくると思いますが、初心者の人であれば、プログラムの工程ごとに出力関数を利用してどこまで動いているか確認するだけでも、最初は動作の流れが確認できると思います。
こういったちょっとしたプログラムの確認を行っていくと、自然と頭の中でプログラムを想定した時に、確認を脳内で行うようになり、改善箇所や問題となる箇所も先に見つけられる癖がつき、検証するポイントなども把握できるようになります。
プログラムの工程を考える
ここでようやく目的となるプログラムに対して、細分化した工程を考えていきます。
どのような流れでプログラムの目的を達成させるか考慮していくわけです。
例として受験で考えると、合格することが目的となるため、受験勉強における科目選択や学習スケジュール、時間配分や必要となる学習教材等、受験のために工程を細分化していきます。
プログラムにおいても、どのように組み立てていくか考えていきます。
コーディング開始
選択したプログラミング言語の記述ルールに従って、コーディングを開始していきます。
小さいプログラムから始まり、拡張性を考えながらさらなるコーディングを書き加えていきます。
このように、プログラミング脳を鍛えていくためにはプログラムの工程を考えたのちにコーディングする癖をつけていきましょう。
リファクタリング(コードの内部改善)
最後に、コードの改善を図っていきます。
コード短縮や効率的な機能追加など、プログラムのアップデートを考えていきます。
しかし、多くの人の場合いきなりここまでの順序を当たり前のように取り組むことができません。
筆者自身も例外ではなく、始めからこのようなプログラミングの考え方を行うことはできませんでした。
だからこそ既存のプログラムを利用するわけですが、理解を深めるフェーズをしっかり設ける、ロジックを考えることがプログラミング脳を養っていく訓練になります。
コピペではなく、写経をする
初学者の捉え方によっては、車輪の再発明のように感じて効率的ではないし、それこそコピペでいいじゃないかと思われるかもしれません。
しかし、大切なのはプログラミング脳を鍛えて、プログラミングの考え方を身に付けることにあります。
効率化を図るのは、プログラミングを理解できているからこそ始まっていきます。
パターン認識に陥ってしまうコピペの多用は、残念ながら本人の成長には繋がりません。
プログラミング初心者の学習方法をまとめているものや写経の効果を詳しく解説している記事がありますので、そちらも合わせて参考にして頂ければと思います。
あなたの学習計画・行動指針を正しく把握すること
プログラミングの学習において、基準値を知ることが重要になります。
例えば、HTML/CSSでサイトを作った経験があるのであれば、周囲の人はどのレベルに仕上げているのか気になりますよね。
おそらく作成したものに動作を加えたり、デザインの精度を高めるためにjQueryやJavascript、BootStrapなど多様な言語やフレームワークを利用することでしょう。
このような内容でどのような成果物を作成した卒業生が存在しているのか、周囲でどんな結果を残しているのか、プログラミングスクール等で実施している無料カウンセリングでお聞きするのがオススメです。
やはり費用がかからず利用できるものはじゃんじゃん使うのが筆者のモットーでもあります笑
それに、今後の学習方針やキャリア相談も含めて無料カウンセリング実施できるので、活用して損はありませんよね。
さらに、比較対象を作るあるいは多くの情報を得るためにも、複数の無料カウンセリングを利用するのが賢い方法だと思います。
そのかき集めた情報の中で、あなたの目的・目標に合った内容に取り組んでいきましょう。
DMM WEBCAMP 無料カウンセリングはこちら ※プログラミング未経験者のためのサポート体制がしっかりしてます |
【COACHTECH】無料カウンセリングはこちら ※学習管理とモチベーション維持のコーチングが好評です |
【リナックスアカデミー】無料カウンセリングはこちら ※18年間の実績があり、無料資料請求から始められます |
まとめ
ここまで、コピペに関する見解やプログラムを作成するにあたっての具体的な解説を行なってきました。
おそらく、継続してプログラミング学習を行う人にとって、コーディングによるエラーや課題への取り組みは、膨大に出現すると思います。
その中で、プログラムの工程を言語化できるようになることが大切です。
プログラムは何を行なっているのか、それぞれのコードによる機能はどんなものか、機能はどんな働きをしているかなど、言葉にできているかできていないかで理解の深まり方は大きく変化し、プログラミングへの成長に関してステップアップしていくことができます。
あなたのプログラミング学習において、課題創造するにしても、目の前の課題解決にしても、必ずこういったプログラミングの考え方は役に立ってきます。
最後まで一読していただき、ありがとうございました。
プログラミング学習で作りたいものがない場合
独学・未経験から始める人も少なくないので、プログラミング学習の継続や学習を続けたスキルアップにはそれなりのハードルが設けられています。
また、プログラミング学習においても、学習者によってはすでに学習対象とするプログラミング言語や狙っている分野が存在するかもしれません。
そのため、費用を抑えて効率的にピンポイント学習で取り組みたいと考える人も少なくありません。
また、プログラミング学習において目的を持って取り組むことは大切ですが、『何を作ればいいかわからない。。』といったスタートの切り方で悩む人もいると思います。
そういったプログラミング学習の指標となる取り組み方について詳細に記載したまとめ記事がありますので、そちらも参照して頂けると幸いです。