「エンジニアに挑戦してみたいけど、プログラミングができるようになるか不安だ・・・」
「思うように頭が働かなくて、プログラミングがうまくいかない・・・」
「プログラミングでエラーが出たときにどんな方法で解決していけばいいかわからない・・・」
あなたはこのように思っていませんか?
どうも、日本一ギャグセン半端ないエンジニア、しゅういちです。
エンジニアになって、どんどん稼いでいきたい!そういう人が世の中に増えてきました。すでに業界で仕事をしている我々にとっては非常に喜ばしいことです。しかし、一方で業界を離れていく人も多々いるのが現状。その中で問題になってくるのがプログラミングが難しくて途中で挫折してしまう人が多いことです。
私もプログラミング難しいなと感じることが多々あり、何度も挫折しかけました。文系出身で、物事を論理的に考えることなんてせずに30歳を迎えたわけですから、当然のことだなと思います。
ですが、数学の一部をきちんと学ぶだけで、プログラミング能力が飛躍的に向上したと実感できたのです。
そのきっかけになった本の紹介をしていきます。
Contents
プログラミング自体は問題解決のための道具
そもそもプログラミングって一体どんなものなのでしょうか。
コンピュータのプログラミング(英: programming)とは、コンピュータプログラムを作成することにより、人間の意図した処理を行うようにコンピュータに指示を与える行為である。
Wikipediaより引用
上記のように書かれていますが、要は人間の課題や問題をコンピュータを使用して、解決していくのがプログラミングです。
ということは、プログラミングを学ぶことは、問題解決能力を磨くことになるんです。
例えば、データ入力の作業が1時間かかっていたとします。
いつも残業で30分時間を費やしていて、もっと早く帰りたいから、このデータの入力作業を30分縮小したい、という課題ができたとします。
この30分をどうにか縮小するために使うツールがプログラミングなのです。
Excelのマクロとかがいい例ですね。ちなみに、今の若い世代はPCをもっていないでスマホで何でも終わらせるようにしているとか。恐ろしい時代ですね。
話を戻すと、プログラミングができるようになれば、データの入力を30分縮小することができます。
じゃあ、具体的にプログラミングを使ってどう解決していくべきなのか?
その問題解決能力のベースとなる考え方が「数学的思考力」です。
結城浩著の「プログラマの数学」概要
数学的思考力は問題解決能力を身につけるための最も基本となる考え方です。
問題解決をするためには、順番通り筋道立てて、解決策をひとつづつ積み上げていく作業が必要になります。
ひとつづつ積み上げていくために必要な学問が数学です。
今回紹介する本は、たくさん出版されている本の中でも、文系出身の人向けに丁寧に解説されている本が「プログラマの数学」です。
なぜ、この本をオススメするかというと、極力難しい記号や思考停止につながりそうな表現を削減しているから、頭にスッと入ってくる。
著者ももともとは文系の人間だったので、数学を学ぶ際にはどのあたりで躓いているのかということがわかるので、かゆいところにも手が届く。
この本の中にこう書かれています。
問題を解くためには目の前にある問題のパターンを見抜き、一般化することが大切なのです。
問題が解決できなくて悩んでいるという人は、そもそも起きた出来事で、何が問題で、どこが問題のポイントで、どう解決していけばいいのかが見えなくなっている。
数学を学んで、繰り返し数学的な思考力を養っていけば、問題の構造を理解し、問題点を洗い出して、具体的な解決策を身につけていくようになります。
数学的思考を身につけた結果、私に起きた変化
自分のプログラミングを客観的に把握できた
これまでは、とにかく目の前にある処理をどのように解決していけばいいかをずっと考えていました。でも、全体の流れがつかめなかったため、場当たり的な対策をしていたので、いつも叱られていました。
しかし、数学的思考をプログラミングに少しづつ適用することで、プログラムの全体像を把握しながら、細かい挙動を確認できるようになりました。
多角的な視点が身についた
一つの実装方法を覚えたら、それしか使わないバカの一つ覚えでプログラミングをしていたのですが、ほかの方法を数学的思考で探してみることによって、効率のいい実装方法を見つけることができました。
細かく分けて考えるのが身に付いた
問題が何か起きたときは必ずなぜエラーが起こったのかは把握しないと先に進めません。
ということは原因を把握しないとどこでどうエラーが出ているのかなんてことがわかるはずもありません。
こういう時に役に立つのが細かく部品ごとに見ていくことです。
文系未経験の人がやってしまいがちなのは「エラーが出たけど、どこが問題となっているか全くわからない」んです。
経験を積んでいけば、ソフトウェアの問題か、プログラミングのコーディングミスの問題か、OSが問題かどうかが理解できるようになります。
知識をつけて、プログラムやソフトウェアの構造を理解して、細かい単位に分けることができるようになると、数学的思考を身につけたあなたは問題解決スピードが、けた違いに早くなります。
プログラムのエラー解決に2時間かかっていたことが、1時間に短縮できるようになる。
問題を切り分けて、ひとつづつ原因を特定していくことができる。これは仮に他の業界に行っても、使える一生もののスキルといっても過言ではありません。
まとめ 向上心をもって働きたいエンジニアには必須能力
エンジニアとして高収入を得たいと考えている人は、身につけておくべき能力の一つ「数学的思考力」。
物事を解決するために、どのように考えれば解決に向かっていくのか、どのように切り分けて考えていけばいいかが、数学を学ぶと見えてくる。
本来人間という生き物は頭がいい生き物であると私は思っているので、ちゃんと数学的思考力を身につければ、あなたはエンジニアとしても、人としても成長すること間違いないです。
是非、自分のものにして、使ってみてくださいね。