
プログラマーで実際に数学を使っている人ってどれくらいいるの? 192
ストーリー by headless
計算 部門より
計算 部門より
eggy 曰く、
本家/.記事「Ask Slashdot: How Many of You Actually Use Math?」より
私はコンピューターサイエンスやゲーム開発に関連する仕事に興味のある高校生で、先生や両親からテクノロジー関連分野に進むなら数学クラスの選択が必要だといわれています。しかし、私はUnity3DやOGREを2年以上使っており、プログラミングはそれよりも長く続けていますが、高校1年で習った三角法よりも高度な数学が必要になったことはありません。それで疑問に感じたのは、実際に微分積分以上の高等数学が必要になるのか、それとも「プログラムを書くのには数学が必要」と世間で思われているだけなのかという点です。みなさんの経験をお聞かせいただけますか。
数学がいる例 (スコア:5, 参考になる)
FFTによる多倍長計算の高速化
スペクトラムと乱数
テンソルと画像処理
信号処理と微分積分
暗号と強度
高信頼プログラムと論理学
2D/3D, 座標変換(アフィン写像とか)と三角関数
自然現象の解析と分布および非線形性
3Dとガロア体
通信と符号理論
「数学がいらない」とかいう認識であるうちは、世界をリードする技術要素となるテクノロジを生み出すシリコンヴァレーのようなベンチャ企業はでてこないと思ってるけどなあ。
Re:数学がいる例 (スコア:2)
画像処理と応用範囲はオーバーラップしてるけどコンピュータビジョン(顔認識とか)や機械学習にはまた別の数学分野が必要ですね。
同意。
ずっと3Dゲームエンジン作る際に線形代数とか使ってましたが「事前演算済み放射輝度伝播」というレンダリング技術がSiggraphで提案された時(もう十年以上前か)、量子力学とかで使われる「球面調和関数」を使ったと聞いたときはのけぞりましたねぇ。
Re:数学がいる例 (スコア:1)
待ち行列理論とキャパシティプランニング
グラフ理論応用(ソーシャル、ルーティング、セマンティックデータベース/RDF)
ゲーム理論
あたりもかじっておいて損はなさそう。
Re:数学がいる例 (スコア:3, 興味深い)
使っているじゃなく、使ったことがあるものなら答えられるな。
あり
あり
無いけど、知ってれば取れた仕事はあった。
あり
あり
あり
あり
あり
なし
あり
Re:数学がいる例 (スコア:1)
私はプログラマではありませんので。:-p
という話はさておき、悲しきかな、実際日本にはそういう仕事は少ないし、評価も低いのが現実ですね。
Re:数学がいる例 (スコア:4, 参考になる)
日本でも土方呼ばわりされる組込で使ってたりしますよ。
わかりやすい例だと機械のフィードバック制御や、測定系に
微分、積分、線形代数が必要だったりします。
ナノオーダーで計測したりするレーザー干渉計では
複雑な数学の計算式に空気の屈折率などの様々な物理パラメータを当てはめて
計算したりしています。
評価が低いのは全くもってその通り
微分積分いい気分 (スコア:5, 興味深い)
数学の問題風に書いてみると
問1
2点(x1,y1)(x2,y2)を通る半径 r の円弧を描きなさい。
二通りありえるが、半径の符号で区別するものとする。
問2
点(x2,y2)から円弧になめらかにつながる長さ l の直線を引き、その端点の座標(x3,y3)を求めなさい。
「なめらかにつながる」という事はそこで元の曲線の傾きが必要になります。つまり円の方程式を微分することが求められます。
種明かしをすると、工業用ロボットのアームの軌道計算でした。
問1は、要するに凸と凹のどちらかになるわけですが、実機に数値を入力するときにいちいち判定するのが面倒なので、半径に負の値を入力したら単純に逆にしてくれ、という要望があったらしいです。
実際には「お前が一番最近まで学生だったんだからやれ」と言われて式を計算しただけで、実際のプログラムは上の人がやってたので、あまり偉そうなことは言えないんですが(汗)、数学が必要かどうかというよりは、どこで役に立つかわからないよ、という話でした。
教育 (スコア:4, すばらしい洞察)
中高生に「〇〇って役に立たない。勉強する必要あるんですか?」って訊かれて、
「〇〇だから役に立つ」とか「俺は〇〇で必要になった」とか答える人は残念ながら愚直と言わざるを得ない。。
こういった言葉の裏にはたいてい「勉強したくない。しなくていいですよね?」という意味が隠れている。
質問に素朴に答えたところで「〇〇って役に立つのか!頑張って勉強するぞ!」なんていう学生はまずいない。
このタレコミを見てまっさきに数学が役に立つ例を探してしまった人は気をつけたほうがいい。
理屈っぽい男性に多いタイプだから、プログラマやソフトウェア開発者は特に。
Webサイト上では無理だが、実際に口頭でこういう相談をされたら、質問の答えを考えるより
うまく相手の悩みを聞き出してストレスを取り除いてやることのほうが重要になる。
また、勉強することそのものを褒めてやったり、
役に立つかどうかではなく勉強に楽しみを見いだせるように誘導してやるほうがはるかに効果があるだろう。
(もちろん、件の高校生のことなんかどうでもよくて、
単にプログラミングで数学が役に立つ例だけ語り合いたいだけの人はそれでもいいが。)
Re:教育 (スコア:4, すばらしい洞察)
質問者は質問にある以上の疑問を持っているだろうとは僕も思う。けど、だからといって聞かれた質問の答えを考えもせずに質問者の悩みだけを取り除けると思っているような高慢な大人は、なんというか、僕は好きじゃない。まあ人それぞれだけど。
Re:教育 (スコア:2)
僕が「質問にある以上の疑問」と書いたのは、「学校で学ぶことなんて将来の役に立たないんじゃないの? 俺たち無駄なことに時間使わされてんじゃないの?」みたいな疑問のことです。それを疑問とは呼ばない、というならそうかもしれませんが、とりあえず誤解はしてないつもり。
もちろん「何の役に立つの」と聞かれて「FFT」と答えても、相手に意味が通じなければ意味がないわけで、どう説明するかは考える必要がある。でも、それは「何の役に立つの」という疑問の答えを考えても意味がないというのとは全然違う。
あと、僕は聞かれたことに答えればそれで万事解決などとは言ってない。聞かれたことの答えを考えずにどうバレないようにはぐらかすか考えるような大人が、聞かれたことに答えなくてももっと重要なことだけ解決できると思い込んでいるのが高慢だと言っているだけ。
簡単なことだ (スコア:3, すばらしい洞察)
「知らないことについては、その必要性すらわからない」
知識は、「使ったことがないものがたくさんある」ぐらいで調度良い。
fjの教祖様
ここまで、計算量の議論をしてくれる人がいない件 (スコア:3)
アルゴリズム自体は先人の作ってくれたものでいいとして、みんな何を根拠にアルゴリズム選択してるの?
Re:ここまで、計算量の議論をしてくれる人がいない件 (スコア:2, おもしろおかしい)
コピペできるソースコードが転がってるかどうか
計算量 (スコア:3)
数論とかλ計算を理解するためには、高校レベルの数学は一通りえり好みせずに勉強しておいた方が良い。
あと、ここの数学問題を解く能力と言うより、数学的に問題を捉える脳力(typoではありません)がプログラミングには重要だと思う。スポーツ選手がランニングしたり筋トレで体力筋力をつけるのに似て、数学は、プログラマの基礎脳力育成手段。
作るプログラムの種類による (スコア:2)
プログラム・業務の種類によるでしょう。
科学計算・数値計算系ならばりばり使うと思いますが、
通常のWebアプリ開発だと全く使わないことも少なくないかと。
comutt
Re:作るプログラムの種類による (スコア:3, 興味深い)
指数関数も理解できない人間が金融・経済を扱うなんてちゃんちゃらおかしい.
# そういう人間が, よく借金で首が回らなくなる
Re:作るプログラムの種類による (スコア:1)
経済学部にはそういう教員がわんさかいますがね
↑これに尽きます (スコア:2, 参考になる)
高度なアルゴリズムを必要とするアプリケーションなどの開発の場合
当然のように高度な計算式がソースコード内に記述されます。
逆に必要としないアプリは本当に足し算引き算程度で終わる。
本当に作成するプログラムによります。
某ライフライン用のアプリケーションは、まじで高度なアルゴリズムを
用いたプログラムでそれの実行結果にそって出来上がったものを利用
する事でより皆さんの生活が成り立ってる部分があります。
Re:↑これに尽きます (スコア:1)
日本だと語学と違って数学は覚えられる(教えてもらえる)場所がかなり限られてる気がしますが…みんなどうしてるんだろう
いざ使いたい時に覚えらるだけの受け皿があるのとないのとでは大違いですね
Re:↑これに尽きます (スコア:1)
数学は選択じゃない。義務だ。わかったな?
自分にできないことを計算機にやらせたら、間違えてもチェックできないじゃないか?
必須ではないが、高度化させるのに知ってたほうが良い。 (スコア:2)
別に"必須"ではないでしょう。
ただし、「自身のプログラム技術を高度化させるために知っておいて損はない」と言う理由で、
「学校で勉強できるならできるだけ多く身に付けておけ」って言うことではないでしょうか。
例えば、カメラ繋いで映像をゲーム中に取り込んだり、
Kinectなどを使って大量の外界情報を取り入れて処理させたいような時に、
三角法で止まってしまっているのと、そうでないのとでは、ワケが違うと思います。
#日本で言うことろの、「英語がある程度読めれば、より多くの情報にアクセスできる」って事にも、感覚的には近いんじゃないかと。
#大学4年にもなって、未だに基本的な積分計算も結構間違う私が言えた事じゃないですが。
抽象化能力 (スコア:2)
プログラマは四則演算が分かればOK (スコア:2)
数値解析はMATLABみたいのを使うのが一般的でしょう。
構造計算、応力解析、動特性みたいなのは専用ソフトを買うと思います。
そういうの以外、例えばAIの遺伝的アルゴリズムとかニューラルネットなどは
セコセコ自分で書くかな。いや、やっぱりエンジンはどこからか探してきますね。
ということで、プログラマが高等数学を使う事ってあまりないと思います。
プログラマではない、構造解析屋とかシミュレーション屋とかそういった専門職の人が
購入したプログラムを使いこなすというパターンでしょう。
そういう人は当然、自分の仕事に関わる数学は理解しています。でも、入出力はルーチンが
書けなかったりするので、そういうのはプログラマに書いてもらうこともあります。
Re:プログラマは四則演算が分かればOK (スコア:2, すばらしい洞察)
ただのコーダーなら数学的な考え方は必要でも高等数学はいらない。
高等数学で解析した結果を仕様書に落とすような上流過程や、高等数学が必要な共有ライブラリを作るなら、高等数学は必要。
ただのコーダーで終わりたいなら、プログラム言語さえ知っていればいいという仕事もある。もっとも業界の底辺にいる掃いてまとめて捨てられるような人材ですけどね。
数学のウチに入らないのかもしれないけど、 (スコア:2)
「andの否定は否定のor」とか言うやつ。
if文の条件書く時に分岐のどっちを上に持ってくるかで時々使う
数学と言うほどの事も無いその他細々 (スコア:2)
計算誤差(イプシロン?)について知っとけとか
オーバーフローとか負数の表現とか
単純なはずの加減乗除にも罠が潜む。
論理学は? (スコア:2)
少なくとも代数方程式をこなせないと論理学の基礎を身につけられないと思うんだが・・・
教育ルーティンでプログラマを育てるなら、その過程としてある程度の数学をやらせるほうが、そうでない個々人に対して個々の教育を行うより簡単じゃないのかな
「俺は微積は使わない!」っていうプログラマいるけど、その人の作ったループ処理の実装はまんま微分だったりすることあるし、こんな微分しなくても式解いてしまえば簡単なのに・・・っていうの見たことあるよ
先輩の「使ってない」という思い込みは信用しないほうがいい職業だと思う
微分積分とか高度杉 (スコア:1)
5で割った余りや3で割った余りの計算すら必要ないらしいですよ?
(数学を使わずに)算数で考えるんだ! - Firefoxを操りつつ (スコア:1)
…というか考えるときに数学を使ったり使わなかったりOn/Offできるものなの?という…。
プログラマじゃなくても数学は必要だと思う (スコア:1)
普通の事務屋でも、数学の知識は必要だと思うな。
特に公的団体の事務屋なんて、なんでもやらなければいけないし。
就職して、いろんな仕事を担当するうちに統計とか、幾何学だとかの知識が必要なことが幾たびも・・・。
仕事で必要になって「昔、どこかで教わったことがある」なんて調べてみたら、高校時代や大学で教わってたなんてことがたびたび。
学校にいる間は、先生なりに詳しい友人なりに聞くことができるけど、勤めてしまうと、なかなかそういうチャンスはないし、高校の数学(数学1から代数幾何・基礎解析、確率・統計)くらいまでは、学生時代までにマスターしておくべきだったと身にしみてます。
数学に限らず、学校で教わることって、そのままの形では出てこないけど、考える基礎として必要なものですね。
学校のカリキュラムは、その時代の定説をもとに、夾雑物をそぎ落とした「純粋理論」みたいなものだから、あんまりおもしろいものではないけど、必要なときに、これを手がかりに必要な知識を調べていくことができる道しるべみたいなものだと思いますよ。
で、必要な力は、そういう「道しるべ」みたいな骨格を元に、自分で調べて肉付けしていける能力だろうと思います。
Re:数学より論理 (スコア:1)
論理的思考能力が必要というのはその通りだと思う。
ただ、数学を勉強することで論理的思考が身につくか、
かりに身につくとして、数学を勉強するのは論理的思考を身につけるための効率的な方法と言えるか、
は分からない。
むしろ、国語の勉強をやったほうがいいだろうね。
(ただし、日本における国語は、物語を読んで主人公の心情を推察せよ、というのがメインで、
論理的思考にはあまり役立たないと思う。アメリカみたいにプレゼンやディベートを重んじる
教育をやれば、それは論理的思考の育成につながるだろうけど)。
あとは、外国語をやれば、言語そのものの構造を意識せざるを得ないから、
論理的思考能力は鍛えられるだろうけど、外国語の勉強はむしろ単語を覚えることの
ほうが負荷になってしまい、それだと効率的とは言えない。
Re:数学より論理 (スコア:2, 興味深い)
> (ただし、日本における国語は、物語を読んで主人公の心情を推察せよ、というのがメインで、
> 論理的思考にはあまり役立たないと思う。
国語が苦手な人はたいていそう言いますが、あれは極めて論理的かつ常識的なものです
いちど予備校のテキストとか読んでみ
Re:数学より論理 (スコア:1, すばらしい洞察)
その「常識的」という部分が問題なんじゃないか。ちっとも論理的でない。
Re:数学より論理 (スコア:1)
国語が苦手な人は現代文の問題は直感や共感で答えるものだと思っているんだよね。
実際には大量の文章の中から仮説を裏付ける客観的な証拠を探し出す、論理的な作業。
#2210847 は外国語なんて本気で言っているんだろうか?
自然言語の構造や文法なんて例外だらけで、論理を学ぶにはまったく不適だよ……。
Re:数学より論理 (スコア:2, すばらしい洞察)
まともに作られた問題は、万人とは言わないけど95%くらいの人間が理解できる常識を前提にしてるよ。
必要な情報も紙面に書かれている。もちろん、それらを理解しないで作られたナゾナゾのような質の低い問題もあるにはあるけどね。
だって「いくらでも解釈できる」のなら、それは何らかの情報を伝えてはいない。それを問題にするのは設問として不適切だ。
センター試験の解説(PDF) [toshin.com]なんかを見るとわかりやすいかも。
指示語の整合性の解析や、本文中にない内容からの選択肢の消去とか論理の塊だよ。
それに、言葉っていうのは、そもそもいろんな常識に依存している。
別に自分がその常識に当てはまる必要はないが、自分以外の多くの人間に当てはまることは理解しておかなければならない。
その常識を理解するのも、国語の勉強のうちなんだよ。そうでなければ言葉で何かを伝えることなんかできやしない。
その品のない例えを使えば、自分がHしても気持ちよくないという人間でも構わないが、大多数の人間は「Hしたら気持ちいい」ということは理解しておきたい。
Re:数学より論理 (スコア:2)
これで国語を嫌いになった人は多いと思う。
出題者(作者ではない)が要求する答えを書くのが正しい。
けど、主語と述語と擬音程度で会話をしている連中を見ると「もうちょっとまともな本を読んでおけばよかったね」とは思う。
Re:数学より論理 (スコア:1)
> 国語が苦手な人はたいていそう言いますが,あれは極めて論理的かつ常識的なものです
ただし,高校の定期テストレベルだと,
「だって,出題の範囲外の文章にそう書いてあるから」って 出題範囲の文章からは想定しようもない答えを正解にされたりしたことはある.
誰かに,意図を伝えようと思うと 文章の構成とか展開を意識しないといけないから,そりゃあ論理的にもなるんだと思う.
けど,日本の『国語』の授業は そんなんじゃない.
文章を書かせる訓練,文章構成とかを意識したテクニカルライティングを教えるのって,
大学で論文を書くようになる段で 初めて,というくらいだし.
『国語』に限定するなら,あのときの経緯を思い出して「常識的,かあ…」って思うわ….
Re:数学より論理 (スコア:2, 興味深い)
>(ただし、日本における国語は、物語を読んで主人公の心情を推察せよ、というのがメインで、
いいえ。すくなくとも後期中等教育でそれがメインとなるようなことは少ないです。初等教育でやれというなら多分それは誤りでしょう。
それから「日本における国語」などという明確な物はありません。あなたが受けた教育と聞きかじった言論から勝手に推測しているだけです。(正確な実体なんて文科省がどれほど欲しがっている情報か)
Re:数学より論理 (スコア:1, すばらしい洞察)
少なくともこういう何が言いたいか最初から最後までわからないようなグダグダな文章書いてるようではダメだな
Re:数学より論理 (スコア:1)
逆じゃないですかね。
数学を無事修了できた人なら、十分な論理的思考力を持っている、と。
つまり数学は篩なんですよ。
Re:ベクトルや行列 (スコア:3)
シューティングゲームの弾幕を作るのに色々使ってる [togetter.com]みたいですね。
Re:ベクトルや行列 (スコア:2)
ひとくちにゲームエンジンといっても守備範囲が色々ありますが
ゲームエンジンを作るプログラマなら必須です。
スクリプタとか、レベルデザイナとか、昔ながらの企画職(何でも屋)とか
ゲームエンジンをを使う職種なら必須という程でもないかと。
# ゲームを作りたいのか、ゲームプログラムを作りたいのかは
# 野球とサッカーくらいの違いがあると個人的に思う
Re:ベクトルや行列 (スコア:2)
Unityの作者の人はUnity作りながら自分はゲームが作りたかったんじゃ無かったって気がついたって言っていました。
Re:ベクトルや行列 (スコア:1)
>> ゲームプログラムを作りたい
>
>そんな人いるの?
非ゲーム用途ですが、業務で好き好んでレンダリング エンジン作ってます。エンジンのクライアント コードからその先に対してはあまり情熱がないです。エンジンというかフレームワークを作るのが好きな人っていうのはニッチだと思いますが、いくらかはいると思いますよ。
あと、レンダラ作ってると、数学の知識は…、線形代数は欲しいかも。微積分はフィルタ作るときに知ってると役に立つレベルでしょうか。
Re:ベクトルや行列 (スコア:1)
知らなくても何とかなるかも知れないが(ベクトルや行列の基礎に相当するものくらい、教えられなくても必要に応じて思いつくだろう)、
ベクトルや行列の演算のいろんな公式を知っていれば、演算量を格段に減らせる場合もあるので、知っていたほうがいい。
おれは小学~中学時代、自己流でプログラミングをやっていて、ゲームで使うためにベクトルに相当する物を自分で思いついていたけど、
内積に相当する物を思いつかなかったし、三角関数も知らなかったので、2つのベクトルのなす角度を求めるのにものすごく苦労した。
Re:ベクトルや行列 (スコア:2)
内積なんか教えられなくても必要に応じて思いつくでしょう.
私は小学校の時に複素平面まで思いついてましたよ.
Re:ベクトルや行列 (スコア:2)
Re:集合、確率、微積分とか (スコア:1)
経験不足なだけの高校生に馬鹿馬鹿言って勝ち誇る器の小さい男の人って……
Re:SQL文は? (スコア:1)
「集合論」と言うと全てを集合で記述するという数理論理の方法論のことになってしまうので、語弊があると思います。
Re:微分積分以上ではなく,微分積分以外 (スコア:2)
何かのアルゴリズムが、正しい計算をしているかの検算をするためには、微積分にかぎらず、結構広い数学の知識が必要になると思うのだが。
逆に、その知識がないプログラマは、検算の方法がわからないので、プログラムソースをひたすら眺めて、正しいかどうかをチェックする。でもそのチェックは、アルゴリズムのチェックではない。
数学で一番重要な感覚は、ある結果にたどり着くのに、複数の道があり、しかもどのみちを辿ってもかならず同じ答えが導かれる(だから脇道に見える方で解いても、正しい答えが出る)、というところだと思うのだけれど。で、それは、プログラムを検証する上でも、有用(というよりこれができないプログラマは信頼したくない)