プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

プログラミングって数学が得意じゃないとできないの?

プログラミングって数学が得意じゃないとできないの? VIPワイドガイド

どんなプログラムを作るかによる。

数学を必要とする分野も確かにある。基本的には必要な時にやり方を学習すればいいので、最初から知っている必要はないと思う。前提とする数学の知識が豊富に必要なのであれば、それを熟知した人にプログラムが行なって欲しいことを説明してもらう方がたぶん効率がいい。

多くはそれほど数学の知識は要求されない。もちろん全く知らなくていいわけじゃなくて、四則演算、つまり算数程度は必要だけど、ま、そこはいいかな :)

逆に数学が得意ならプログラミングは出来るのかというと、それはちょっと違う気がする。

プログラミングに必要なのは

数学よりも、国語力と倫理思考だと思う。

国語力って意外!?

でもそれが一番大事なんだよ。

ソフトウェアは人が使うためにあるので、人とのコミュニケーションが不可欠。ソフトウェアに求められるものを理解し、利用者と一緒に仕様を決定し、作ったものを確認してもらう。ソフトウェアが作られるまでの一連の流れには必ず人とのコミュニケーションがある。相手の話を理解し、自分の考えを伝える、ということがうまく出来ないと、よいプログラムを作ることができない。

コーダーと呼ばれる、仕様通りにプログラムを書く人であっても、仕様を作った人とのコミュニケーションが存在する。フリーソフト作成者であっても、ネットの向こう側にいる人とコミュニケーションをする。自分のためだけのプログラムだって、実は自分自身と会話をしている。コミュニケーションはどこにでもある。

プログラマというと一人で黙々とプログラムを書いているイメージがあるかもしれないけど、それは実装(コーディング)やデバッグなど、ごく一部に過ぎない。プログラミングの目的である「プログラムを作る」という視点で見ると、実はほとんど対話で成り立っている。

論理思考も大事だ

やりたいことをソフトウェアで実現する方法に正解はない。アルゴリズムはもちろん、実際に動く環境によっても実現方法は変わる。人によって考え方や価値観も違う。

多くの方法から最適なものを選び、様々な条件下で発生する矛盾を解決するには、論理的な思考が不可欠だ。人間であれば曖昧な表現でも理解してもらえるが、プログラムではそれをコンピュータが実行可能な単位まで細かく分解し、矛盾なく構築されなければならない。

論理思考はデバッグにも欠かせない。問題が発生した時は、まず仮説を立て、期待通り動いているどうかを検証する。可能性を一つ一つ潰していき、最終的に矛盾点を見つける。これは数学の証明問題が得意だといいかもしれないけど、やってると慣れるから心配しなくてもいい :)

だから

数学が得意じゃないからプログラミングは出来ないということはないよ。

もちろん数学が得意な方がより効率のよい実装が出来る可能性が高いし、数学を必要とする分野もないわけじゃない。けど、プログラミングの必須条件じゃない。

ここまで書いておいて何だけど

実は国語力と倫理思考だって、プログラミングするための必須条件というわけじゃないんだよね :)

本当に必要なことはプログラムを作りたいという情熱だけなんだ。ぶっちゃけ、プログラムが作れるようになるために必要なものなんて、何もないと思う。上に書いたことなんて、やっていくうちに覚えていくもので、最初から出来る人なんていないよ(たぶん)

前も書いたけど、情熱というか、やってて楽しいかどうか、かな。

また長くなっちゃたよ。歳とると話が長くてダメだね。いつも読んでくれて、ありがとう :)