世界全体でIT技術の進歩がして、年々プログラミングの知識・スキルが必要になっています。
また、IT技術を培うことで就職や転職で有利になり、年収が数千万の世界もあります。
プログラミングスキルは人生を変えられて、とても魅力的です。
何から始めてよいか分からない。
とりあえず、教本を読んでみる。スクールに通って始める。
ほとんどの人はこんな感じで挫折してしまいます。
特に、意識高い系の大学生や完璧主義者は、プログラムは処理できたけど、コードが美しくない。
余分なことに気を取られてしまうので、実践的なスキルがいつまでも身につかずに挫折をします。
確かに、スクリプトに大文字と小文字程度のミスが1つでもあると、エラーで実行できません。
本記事では、完璧主義の考えを捨てて、正しいプログラミングの始め方と挫折しないための学習を紹介します。
- プログラミングの始め方が分からない人
- 完璧主義だけど、一向にプログラミングができるようにならない
- 勉強の仕方が分からない人
完璧主義の考えは捨てるべき
冒頭でも述べたように、正しく処理するには、完璧なコード(間違いのない)を書く必要があります。
したがって、文法のミスがないように文法をすべて覚える必要がある。
完璧を求める人はこのように考えてしまうでしょう。
しかし、文法をすべて覚えることは不可能です。
例えば、TOEIC(英語)の文法問題で、一問も間違えないことは至難の業です。
プログラミングするときはカンニングOKなので、文法を覚える必要もありません。
当サイトを運営している私は、VScodeのようなエディターに任せているので、文法を覚えていません。
未だにPythonの「print()」とUnity(C#)の「Debug.Log()」が混同してしまいます。
とにかく実践をする
文法暗記は、自分の脳に依存し、非常に学習に時間がかかってしまいます。
Pythonで、「1から10までの偶数和(2+4+…+10)」
例えば、上記のようなコードを書こうとします。
1から10までの和というコード例は頻繁にあるので、できる人も多いでしょう。
しかし、偶数だけの和と処理が加わると突然できなくなる人がいます。
「1から10までの和」はfor文で、偶数にはif文で2で割って余りが0になる値の総和と考えることができます。
total = 0
for i in range(1, 11):
if i % 2 == 0: # iが偶数かどうか
total += i
print(total)
例題は1つの条件しか加えていないので、単純です。
しかし、実際のプログラムはいくつもの分岐して、複雑になります。
複雑なコードが書けるようになるには、素数の和というように色々と試して実践するべきです。
プログラミングの始め方・適している人
「なぜプログラミングを始めましたか?」
お金が稼げるから、できるとかっこいいから、ITに興味があるから、自分でゲームをつくってみたいから。
様々な意見があると思います。前半に挙げた、お金が稼げる、かっこいいなどの動機は比較的に挫折率は高い傾向があります。このようなステータス的な動機は自分自身の気持ちで変わるので、作業が滞ると、すぐにやめて挫折になります。
一方で動機が、後半のIT・ゲーム好きな人はどんなにエラーが発生しても、どうしてもこのシステムやアプリを完成させたいという好きなことには何時間も没頭できて、絶対にやりきるハングリー精神が芽生えるので、挫折率は低いです。
挫折する人の特徴
では、プログラミングを挫折する人はどのような人なのか。
個人的な考えですが、
- よく誰かにやり方を聞く人
- 完璧主義者(自分の能力を過信する人)
- 文法を暗記しようとする人
- 人気の言語を一度に抑えようとする
このような人は挫折をすると断言できます。
誰かにやり方を聞く人
「分からない問題はすぐに先生に聞け」
これは、受験の現場でよく出てくる言葉です。時と場によりますが、個人的に分からない問題をすぐに聞くことは否定的な考えです。
受験に限れば、たったの3年間で共通テスト(旧:センター試験)と大学独自試験で合格点を取らなければいけません。教師に聞けば、数分もかからずに解法が分かるのに、頑なに質問をしないとたった1問で膨大な時間を費やしてしまいます。積極的に質問した人は現役で志望校に合格、しなかった人は浪人をしてしまうような状況も想定されます。したがって、受験勉強という短い期間の場合は積極的に質問してもよいでしょう。
しかし、質問を頻繁にする人が陥りやすいことが、自分の頭で考えなくなるため数学や物理で表れます。自分の頭で考えることを放棄していることで、思考力・論理力の欠如し、今までに解いてきた問題を組み合わせれば、解けると至らないです。
プログラミングでは、エラーが発生したとき、「;」(セミコロン)忘れや変数の定義をしていないなどありがちな間違いは教えてくれますが、ほとんどの場合、エラーの原因は提示されることがないです。したがって、どうして思うように動かないのか自分の頭で考えるしかありません。その状況下で、ネットに落ちているソースコード例を見て、このようにすればよいのかと思いつくことが蓄積することで、プログラミングはすんなりとできるようになります。
暗記する人・自分の能力を過信する人(完璧主義的)
勉強ができる高学歴な人ほど完璧にこなしたいと思い、結果挫折をします。
文法を覚えていなかったり、同じ動作やif文山脈など、稚拙なコードであっても、プログラミングは、動作すれば勝ちです。
しかし、挫折する人は、教本のサンプルコードを暗記してコードを美しく書こうとします。特に問題なのは、教本を何周もしようとしてしまうこと。確かに、周回は受験勉強や資格には有効ですが、プログラミングをするときはいつでもネット検索ができて、カンニングし放題です。文法を忘れてもその都度検索をして思い出せば問題ありません。
暗記をしても意味ないですし、暗記をすると、〇行目のコードはなぜ必要なのか理解することができません。
人気の言語を一度に学ぶ
人工知能を扱えるPython、ウェブデザインに欠かせないHTML・CSS・Javascript、ゲーム作りにC#・C++、家電のソフトウェアにJavaなど、あらゆる言語を一度に学ぼうとする人がいますが、やめるべきです。プログラミングは言語という通り言葉として認識した方がよいです。人気の言語を複数同時に学ぶということは使用人口の高い、英語と中国語、スペイン語を同時に学んでいることと同じです。
個人的には、
- ゲーム開発をしたいならUnityでC#
- ウェブアプリ・人工知能・データ分析ならPython
- ウェブページを作りたいならHTML,CSS,(JavaScript)
英語とドイツ語はゲルマン系、スペイン語とフランス・イタリア語はラテン系で、それぞれ雰囲気が似ているので、属する言語は勉強しやすいといわれます。日本人にとっては、中国語が読めてしまうそんな感覚です。この現象は、プログラミングでもいえます。
例えば、C#とJavaは、C言語とC++から派生した言語で両者は非常に似ています。したがって、プログラミングをしている内に、こういうこともしたいなと思うことがあり、そのときに別の言語を取り入れればよいので、初めは1つの言語に集中しましょう。
プログラミングができるようになるには
人に聞いたり、完璧主義・暗記をしたりすることはよくないと述べてきましたが、どのようにすれば、できるようになるか紹介します。
【数学編】受験勉強の観点から
プログラミングは学問で例えると、数学と外国語の複合だと言えるでしょう。
前述したようにプログラミングは、作りたいプログラムは個々の動作を組み合わせて作ります。これは、数学の定理や公式を組み合わせて問題を解くことと同じです。
個人的な経験ですが、数学の偏差値が夏休みの1か月で10前後あがったことがありました。要因は、2次試験用の数学問題集をやったためです。
青チャートのような辞書的な問題集や学校指定の教科書は解法や計算方法が事細かく載っていますが、2次試験用の問題集は、あたかも、この考えは自明のように紹介されています。この解答を入試で書くと減点になるぐらい解答が荒い(雑)です。したがって、2次試験用の数学問題集で分からないときは、教科書や辞書的な問題集、ネットで解法を調べていました。
「なぜ次の行で、このようなことがいえるのか」と考えるとき、これらで検索しているときに、細々した問題・解説、類題を読んでいると、突然「分かった!」と思いつきます。この閃く瞬間を何度も蓄積して数学ができるようになりました。
これはプログラミングでも同じです。書いたソースコードにエラーが発生し、エラーの原因を解決しようとネット検索して、正常の動作を何度も繰り返していくうちにできるようになっていきます。
【外国語編】受験勉強の観点から
そして、それぞれの言語の文法に従うことで作り上げられます。
英語で、「私は、買い物へ行きます。」は、「私:I」・「は:am」「買い物:shopping」・「へ:to」「行きます:go」が想定されます。
これらを並び替えると、次のようになり、「am」と「to」は不要です。
- I go shopping.
- i go shopping. (初めは大文字)
- I go shopping (文の最後は「.」)
- I go to shopping. (to は不要)
人は、右のような文でも、「買い物行くのか。」と各自で補填し理解できますが、プログラミング言語は、右のような間違いは動作しません。ここは言語と大きく違うところです。
プログラムを具体的に言語化する。
例えば、3分間のキッチンタイマーのプログラミングをするとします。
このときどんな仕組み(コード)が頭に浮かびますか?
スタートして、00秒になるまで、秒を-1をし続ける(繰り返し)。
00秒になったとき(条件)、00秒から59秒にして、分を-1にする。
00分00秒で終了する。
このようなプログラムを言語化ができるでしょう。
For文を使わなくとも、言語によってデクリメント演算子があるので、if文で00秒になるまで-1し続けることも
言語化したら、これをコーディングしていきます。これがプログラミングができるようになる1歩です。
しかし、このキッチンタイマーの不便なことは、3分しか計測できません。したがって、3分計測の部分を任意の改善しようと発想になっていきます。要するに、一歩一歩レベルを上げていくことでより、優れたシステムが開発できるようになります。
完成しているコードにコメントアウトでフリガナを振る
コードの1行1行にコメントで、どうしてこのコードが欲しいのか書いていきます。
これの目的は、あくまで理解で、暗記しようとしてはいけません。
おすすめ言語
プログラミングをしたいだけど、何を学べばよいか分からない。そんなときは「Python」がおすすめです。パソコンに「Python」をダウンロード、ライブラリをインストールする必要がありますが、基本的にプログラミングでやりたいことは「Python」で解決します。
前述したキッチンタイマーをPythonで作成しましたので、あわせてご覧ください。
まとめ
プログラムを動かす(コンパイル・デバック)ときは、インターネットで試験の合否を確認をクリックしたときに待っている間のような感覚です。自分の思うように動いた時の嬉しさは、合格が表示された瞬間そのものです。しかし、始めたばかりの頃はプログラミングが想定通りに動くことなんてめったにないです。何度も、不合格だと表示されても何度も挑戦できる忍耐力が強い方であれば、是非ともプログラミングを始めるべきです。