プログラミングをやってみようと一念発起してみるも、構文の記述の仕方だったりアルゴリズムを理解できずに、絶望してしまうときってありますよね。
実は、当方もその一人です。
そもそも、プログラミングをするための環境を準備する段階で躓(つまづ)いて、何時間も考え込んでいたときがありました。
いくら考えても考えても理解できないときは必ずあります。
当方の場合、学生の頃は短気だったので、ムカついて机をぶん殴ってみたり、ノートを一枚破いたりしたこともありました。(苦笑)
今回は、プログラミングで絶望しそうな方に向けて、どのように乗り切り、対処するべきか自分なりに試行錯誤したことをお話したいと思います。
プログラミングが難しいと感じる理由
プログラミングが難しいと感じる理由は、単純にその作業に
慣れていないというのが理由です。
大概はその理由で片が付きます。
初心者の段階であれば、文法など記述の仕方に対する「慣れ」が足らず、ある程度構文に慣れた方でも他人が書いたコードを読むことに対する「慣れ」が足りないためです。
決して「自分は能力が低いのかな...?」と簡単に考えないようにしてください。
初心者のときは全てが未知の情報
当方は、プログラミングの準備段階で躓いてしまった人間の一人です。
プログラミングの環境を準備するにしても、今まで触れたことのない情報に晒(さら)されるわけですから、理解と作業が遅くなって当然なのです。
この段階で、すんなりと準備できたという方は、以前に何らかの似た作業を必ず行っているはずです。
似た作業を行っていないとしても、似た考え方を必要とする何らかの情報に触れているはずです。
人間は
一度経験した物事に対する処理を速めていく能力を持っていて、プログラミングでも例外ではありません。
他の人と比べ、自分の理解や作業が遅いとき、「自分は他人と比べて能力が低いのではないか?」と劣等感に晒されるかもしれませんが、それは間違いです。
まず、その理解や作業が遅いときにすべきことは、それに
慣れるために何度も何度も繰り返すこと一択です。
繰り返してもできなさ過ぎて「繰り返したって、才能のある人には勝てない」という心配が脳裏を過(よ)ぎることがあるかもしれませんが、それも無視してOKです。
作業の早い人たちは、過去に要領を掴む何かを実行していたために、現時点で差が発生しているのは仕方のないことです。
心配せずに、自分を信じてひたすら繰り返しましょう。
他人が書いたコードが読めない
他人の書いたコードというのは非常に難解です。
他人でなくても、半年前に自分が書いたコードでさえ意味が解らないことが多々あります。
プログラムの書き方そのものに慣れてきた方は、自分でプログラムを構築できるけど、他人のコードが読めないという壁にぶち当たると思います。
考えても考えても、「なぜこのように記述したのか?」と、頭の中が混乱して熱くなってくることでしょう。
この状態のときは、
処理のアルゴリズムの詳細を知ろうとせず、「仕組みはよく解らんけど、こういう機能を実現したかったのね」と大雑把な機能の概要を掴むようにすればOKです。
こちらも、繰り返し他人のコードを読みまくっている内に、いつの間にかできるようになってきます。
人間の能力は、あなた自身が思っている以上に高いです。安心して繰り返してください。
プログラミングは挫折しそうなときがチャンス
プログラミングに限らず、難関の資格試験に挑戦したことがある方なら分かると思いますが、理解できない問題や概念に対して、先の見えない絶望感に苛(さいな)まれると思います。
SEやプログラマの経験者なら、担当しているシステム内でエラーが起きたとき、何が原因でエラーが起きたのか解らないときも同じことがいえます。
実は、こういうときこそチャンスだったりします。
これは
能力が上がる過渡期であり、絶望して勉強や作業を止めたくなるときに、あえてそれをやり続けることで思いもよらない発想が浮かんだりします。
まさに先の見えない暗闇に光が差す瞬間を体現できるはずです。
とはいえ、あえてやり続けたけれど、どうしても答えが導き出せないというときは、その作業を止めましょう。
そして、一呼吸終えてから、再挑戦してみてください。
当方が大学時代にお世話になった教授(恩師)がこのようなことをおっしゃっていました。
誰であれ、情報を繰り返し頭に叩き込むことで、どんなに難しい理論であっても必ず理解できます。
例え、一度で理解できなかったとしても、時間を置いて再び挑戦すると不思議と頭にアイディアが浮かんで理解が進みます。
その日に理解できなかったとしても、2、3日後に理解できることがあります。
どうしてもすぐに理解できないときは、このように一呼吸おいて理解に努める事も大切です。
これはスランプのときの対処法に似ているかもしれません。
スランプのときは、現在取り組んでいるものに一切手を付けず、やる気が出たときに再びやってみることで克服する、ということを聞いたことがあります。
深く考えすぎず、どうしても難しいときは、プログラミングを忘れることも大切です。
プログラミングに才能はあまり関係ない
プログラミングに才能はあまり関係ないと思います。
というのも、「頭の回転が速い」と感じる人があなたの周りにもいると思いますが、彼らは
以前に経験した考え方や概念を組み合わせているだけです。
如何(いか)に、過去に難しい問題を解いたり、考える訓練をしたかの差でしかありません。
しかし、その差は大きく、習得が難しいことであり、尊敬すべきことでもあります。
やはり、理解できるまで作業を繰り返すことが何よりの近道ですよ。
「習うより慣れろ」と「継続は力なり」の終着点は同じ?
「習うより慣れろ」と「継続は力なり」は、意味を確認するとそれぞれ違う定義が書いてあります。
しかし、これらに共通するところは、
作業や勉強などを繰り返すことで徐々に慣れて行き習得できる、というところです。
これらの ことわざ・標語 は、それぞれ別な形で生まれた言葉ですが、創られた経緯は似たような経験を基にしていると感じます。
プログラミングに限らず、物事がなかなか上達しないと悩んでいる方は、慣れるまで繰り返せばOKです。
習得がみんなより遅かろうが、他のみんなは以前に似た経験をしていると割り切ることが大切です。
心無い人は、「才能がない」の一言であなたをけん制するかもしれませんが、あなたが実力をつけて少数の既得権が危うくなることへの単なる「恐れ」のようなものなので、気にしなくてOKです。
「習うより慣れろ」
習うより慣れろとは、人や本から教わるよりも、自分が練習や経験を重ねたほうが、よく覚えられるということ。
出典:故事ことわざ辞典
「継続は力なり」
今現状としては実力不足でも、くじけずに訓練していけば、いつかは大成できる。
出典:コトバの意味辞典
どんなに辛くても続けてください。それだけで、能力は少しずつ上がっていきます。
能力向上の実感はないとしても、気が付いていないだけで考えた分だけ思考力は上昇します。
理解の仕方は2種類存在する
物事の理解は、2種類存在するのではないかと思います。
それは...
- その場で理解できたと分かる理解の仕方
- 理解したと後で気づく理解の仕方
1. の場合は、比較的簡単で具体的にイメージしやすい問題に接したときに起き、
2. の場合は、イメージしにく抽象的な内容の問題に接したときに起こる、
と経験を通して感じます。
何処かの研究によって導き出された考え方ではありませんので、違った意見もあるかもしれません。
その場で理解できたと分かる理解の仕方
これは、小学校の
算数の問題を解くときがいい例です。
というのも、算数は数学と違って「変数」といった抽象的な数は使用せずに、一貫して
具体的な数値を計算するからです。
計算方法さえ教われば、すぐに理解できたと感じるはずです。
理解したと後で気づく理解の仕方
これは、
数学を勉強しているときがいい例です。
数学は、「変数」や「等式」を使って具体的な数値を使わずに、数式によって形作られる概念を理解しなければなりません。
算数同様に、計算方法は勿論(もちろん)のこと、それを使ってどのような物事を成し遂げなくてはならないのか、考えないといけないからです。
実は、この作業がプログラミングにも共通しています。
こういった抽象的な概念の理解は、兎に角回数を熟(こな)して、
抽象的な物事を自分自身の経験によって具体化しないとならないため時間が掛かります。
それは同時に、理解に達するまでの間、非常に辛い作業を強いられることになるということです。
この段階で脱落してしまう方が多いのではないかと思います。
しかし、この理解できない壁を乗り越える簡単な方法は、くどいようですが兎に角
繰り返すことです。
でも繰り返す(習慣化)って難しい...
とはいえ、くどいように「繰り返しが大切」と述べてきましたが、そもそも「繰り返すこと = 習慣化」って非常に大変な作業です。
頭では分かっていても、心が追て来てくれませんよね...。
なので、いきなりガンガンとプログラミングの作業に打ち込むのではなく、ダラダラでもいいので
ゆる~く継続すること試してみてください。
「ゆる~く」とは、毎日勉強や作業をせず、例えば、
「昨日はプログラムのこのアルゴリズムを理解できたから、今日はサボろうっと」という具合に始めてみようということです。
もちろん、これについては賛否が分かれると思います。
ダラダラと継続するということは、シビアに継続するよりも結果が出るまでに時間が掛かってしまうという事実があるためです。
しかし、自分のペースで超鈍足(どんそく)でも継続することによって「確実」に習慣化されるのでやる価値は十分にあります。
ダラダラとでも継続することで習慣化に近づいて行くので、
諦めないことが何よりも大切です。
最後に
プログラミングでも何でもそうですが、繰り返し続けた人だけが生き残ります。
本当の勝者とは、諦めずに、その土俵に居座り続けた人間です。
当方も偉そうなことはいえるような人間ではありませんが、学生時代のド底辺のときと比べたら、大幅に頭の回転は速くなったと実感しています。
諦めずに続けましょう!
それでは、続きはまた次回にご期待を!