優れたプログラマーも数学が得意であるという従来の知恵が示唆しているようです。または、2つが本質的にリンクされていること。私が読んだ多くのプログラミングの本は、数学の問題の解決策であるか、または数学に何らかの形で関連している多くの例を提供します。
ですから、私が浮かせたいのは、優れたプログラマーになるためには数学が得意である必要がありますか?
優れたプログラマーも数学が得意であるという従来の知恵が示唆しているようです。または、2つが本質的にリンクされていること。私が読んだ多くのプログラミングの本は、数学の問題の解決策であるか、または数学に何らかの形で関連している多くの例を提供します。
ですから、私が浮かせたいのは、優れたプログラマーになるためには数学が得意である必要がありますか?
回答:
どんな種類のプログラミングをしたいかによって決まると思います。ビジネスの世界でプログラマーである限り、答えはノーだと思います。高度な数学を知らなくても優れたプログラマになることができます。最終的に数式を処理する必要がある場合、数式は通常、ビジネス要件で定義されるため、コードで実装するだけで問題になります。
逆に、低レベルのプログラマーになりたい場合や、3Dグラフィックエンジンを作成したい場合は、数学が大きな役割を果たします。
私は穀物に反対し、はい、あなたは数学の考え方が必要だと言っています。ほとんどの人は、数学を算術や難解な数式を記憶することと考えています。これは、優れた作家になるために完璧な綴りや並外れた語彙が必要かどうかを尋ねるようなものです。
執筆はコミュニケーションに関するものであり、数学/プログラミングは明確で論理的な思考のプロセスに関するものです(間違いを犯さないように、方程式がバランスをとらない、またはプログラムがコンパイルされない)。具体的には、その論理的思考は次のように現れます。
したがって、事実と定理のコレクションではなく、プログラムの実行内容のメンタルモデルを構築および操作できる数学的な考え方が必要だと言います。グラフィックやデータベースなどの特定のフィールドには、必要な特定の事実もありますが、私にとっては「数学が得意」であることの本質ではありません。
プログラミングにはさまざまな分野があり、それらの多くは数学的知識の特に高い水準を必要としません。3Dエンジンを作成することは決してできませんが、ビジネスおよびWebアプリケーションを開発することは確かにできます。それに直面しましょう-ほとんどのコンピュータープログラムで最も一般的な数学的操作は、数字を1つ増やします。
私は数学が特に好きだったり、それが得意ではなかった(私は実際に英文学の学位を取得して卒業しました!)ことを12年以上にわたってプロの開発者として働いてきたことを非常に喜んで認めます。私はほとんどWebアプリケーションを開発していますが、それほど多くの数学を必要とすることはめったにありません。さらに重要なのは、論理的に考え、問題をチャンクに分解し、関連するさまざまなテクノロジーとフレームワークを幅広く理解できることです。
プログラマーとしては、まったく新しいアルゴリズムを考案するよりも、既存のアルゴリズムを実装する必要があります。たとえば、複利を解決する必要がありますか?数式を調べて適用するだけで、自分で計算する必要はありません。ほとんどの問題はすでに解決されています。選択した言語でソリューションを実装する方法を知る必要があります。それは数学が得意だからといって利点ではないと言っているわけではありません。それは完全に必須ではないというだけです。
80年代半ばに学校にいたとき、あまり一般的ではない家庭のコンピューターで、数学の宿題を解決するプログラムをよく書きました。頭の中でできないことがよくありましたが、ソフトウェアルーチンとして必要な式は何でも適用できました。直角三角形の最も長い辺を処理するために別のピタゴラスである必要はありませんa² + b² = h²
。選択した言語でコーディングできる必要があります。
あなたは数学が得意である必要はありません。ただし、ロジックと問題解決が得意である必要があります。ただし、ロジックと問題解決が得意な人は通常、数学も得意です。それは本当に数学の種類に依存すると言うでしょう。あなたは微積分学(私のような)でひどくなり、それでも良いプログラマー(私のような)になれます。しかし、Discrete MathとSet Theoryに問題がある場合、プログラミングの多くの側面が非常に難しいことに気付くでしょう。
数学が好きではない理由をよく見ることが重要だと思います。
学問分野の嫌悪は、通常学校で起こることであり、教師との何らかの対立、科目内の自分の能力に対する自信の欠如、または仲間のグループのプレッシャーが原因である可能性があります。
プログラミング!=数学。私にとっては、数学のように「感じる」ことすらありません(そして、公式の勉強が終わる頃にはあまりうまくいかなかったにもかかわらず、数学を楽しんでいました)。あなたが数学で使用するかもしれない多くのスキルは有用であり、プログラミングでも必要ですが、多くのプログラマーはほとんどの部分で自分自身を教えます。学校で数学が好きではないことは、プログラミングの能力や楽しみにほとんど影響しません。
数学は本当に人間とコンピューターの間の普遍的な言語であるため、数学とプログラミングは非常に密接に関連しています。高度なプログラミングの多くは舞台裏にあるので、多くの数学を知る必要はありませんが、より高度なプログラミングの概念を理解するのに役立ちます。より低レベルのプログラミング(システムまたはデバイスプログラミング)を行う場合は、さらに多くの数学を知る必要があります。
良い 1?ありそうもない。ほとんどのデザインパターンには、数学的な概念に少なくともある程度の基礎があります。変数、ループ、プロシージャ、オブジェクトなど、プログラミングに不可欠なものは、代数、計算、集合論などの数学分野の概念に類似しています。
また、コンピューターサイエンスは数学のサブセットであることも考慮してください。すべてのプログラミングの基礎となるアルゴリズムと形式的ロジックは、基本的に数学です。
数学が嫌いなら、プログラミングは嫌いです。
ほとんどの人が答えました:「良いプログラマーになるには数学を知る必要がありますか?」これに対する正しい答えは、多くの人がすでに言っているように、「いいえ、実際はそうではありませんが、助けになります」です。
しかし、私の質問の解釈は、「数学の適性とプログラミングの適性の間に強い相関関係がありますか?」です。これに対する正しい答えは、「はい、あります」です。あなたが代数、幾何学、および微積分を苦労しているなら、おそらくあなたは抽象化に対処したり論理的に考えたりするのがあまり得意ではないでしょう。数学が苦手な人は、おそらく素晴らしいプログラマーになることはないでしょう。(試してはいけないというわけではありません。)
「いいね」と「有能であること」は完全に異なるものです-あなたが適切に数値化されている限り、私はあなたが数学を好きにしなければならない理由を見ることができません。
しかし、ここでは絶対に明確にしましょう-プログラミングは数学に強力な基盤があり、遅かれ早かれほとんどすべての非自明な開発には計算が関与することになります-これを隠すことはできません。
プログラミングには論理(数学の基礎)が含まれ、ほとんどの現代のプログラミングにはおそらく(明白ではない場合でも)集合論が関係するもの(SQLなど)が含まれ、そうでない場合は、さらに明示的に数学に基づいたレルム(ゲームプログラミングなど)(レンダリング-数学、AI->確率とランダム性-数学...)
上記の結果は、数字に慣れなければならないということです-「世界には10種類の人、バイナリを理解する人と理解しない人」が面白いのはなぜかを理解する必要があります。しかし、おそらく「2 + 2 = 5 ... 2の非常に大きな値に対して」と言い訳されるでしょう。
正直に言うと、私は学校で恐ろしい数学の学生でした。代数は当時私を完全に超えていたので、Dよりも高くなったとは思いません。
しかし、数年後、プロのソフトウェア開発者として働いた後、私は大学に戻り、代数のコースを取りました。驚いたことに、それは私が持っていた最も簡単なクラスでした、そして、私はそれでAを得ました。
事実は、プログラミングは代数を教えてくれました。なぜなら、事実上すべてが単なる代数的な表現だからです。
いいえ、開始する必要はありません。これは役立ちますが、必須ではありません。数学を教える手段としてのソフトウェア開発の素晴らしい点は、コンパイラ、デバッガー、および実行プログラムが、正しい答えを得たことを確認する素晴らしい方法であるということです。この点で、特にデバッグは学習にとって大きな恩恵です。コードをステップスルーして、アルゴリズムの評価の各ステップを見ることができるからです。
確かに傷つけることはできませんが、それはあなたが何をしているのかによって多少異なります。
たとえば、コンピューターサイエンスを専攻した人は、学位を取得するために多くの数学を経験する必要があります。CSは通常、アルゴリズムとその正確性に重点を置いており、高レベルの数学スタイルの証明によって証明されています。多くのUniversitieのCSプログラムは数学プログラムに非常に近いため、ダブルメジャーは数コースしか離れていません。私はソフトウェア工学専攻としても、数学の副専攻から2コース離れていました。
しかし、そうは言っても、私が学んだ証明、データ構造、検索方法、アルゴリズムの正確性などの多くは、学校を卒業してから直接使用することはできませんでした。しかし、少なくとも私が低レベルで何をしているかについての良い基礎とより良い理解を与えてくれなかったと言うのは難しいでしょう。
どう見ても、最低レベルでは、やっていることはすべて数学に帰着するからです。
あなたは数学なしで良いソフトウェア開発者になれますか?はい、そう思います。あなたは、人々がいつも語るような英雄的なプログラマーになることができますか?私はそうは思いません。
問題は、すべてではないにしても、ほとんどの場合、英雄的なプログラマー(デニスリッチーを考えてください)、コンピューターサイエンスまたは数学のバックグラウンドを持っていることです。真に優れたプログラマーになるには、単なる表面的なレベル以上のレベルでアルゴリズムを理解する必要があります。つまり、正式なコンピューターサイエンスを掘り下げる必要があります。そして、コンピュータサイエンスは数学を応用したものです。
同様に、ラムダ計算の理解は、OSアーキテクトや言語設計者にとって非常に貴重です。
このトピックが何度も議論されているのを見てきました。私は、数学の学位を持っていて、1年か2年以内にキャリアを変えることができると考えていた人々と仕事をしました。私が一緒に仕事をしたことのある最高のプログラマーの1人は、生化学の博士号を持ち、学校で正式なプログラミング/ CSクラスを受講したことはなく、独学で成功したソフトウェア会社を設立しました!
最終的に、優れたプログラマーにとって良いのは、ロジック、ワークフローを理解できる人であり、解決策を模索して研究する意欲がある人です。また、あなたはあなたのアプリケーションが対象とするビジネスを学ぶ必要があります。私は、会計を理解していないが会計アプリケーションを書いていると思うプログラマーが嫌いです。彼らは常に間違った仮定をし、本当に開発を遅くします。
どの学校に行っても、4年間の学校よりも1年間で多くのことを学ぶことができます。学校は、基本的なスキルセットで学習する方法を教えますが、実世界での経験は時間とともに非常に価値があります。
経験は最高の教師であり、ビジネスを学ぶ限り、ソフトウェア開発に数学を適用しなければならないとき、あなたは大丈夫です。また、以前の投稿で述べたように、3DグラフィックエンジンやGISアプリケーションのようなグラフィック座標システムで作業する場合を除き、高校で学んだ数学が本当に必要なすべてです。
私は会計および請求システムに取り組んできました-そして、総勘定元帳の処理やデータ入力を許可するためにLog(x)、SIN、COSなどを把握する必要はありませんでした。エージングジャーナルは「高数学」ではなく、APの問題を評価するために重要です。
それについて考えに来てください、私は彼らの机の上に科学計算機を持つ会計士に会ったことがありません!
数学を学ぶか、自分で作成する必要があります。いずれにせよ、何らかの形でそれを上手にすることが重要です。
限り、あなたは値を処理し、彼らが何をしているか、なぜ、あなたができるかを理解することができますようにする彼らが行う、そして伝統的な数学は必ずしも必要ではないかもしれません。場合によっては邪魔になることもあります。
数値以外のバイトの値を視覚化する別の方法がありますが、それらは間違いなくメソッドの後に最も考えられます。たとえば、すべての値を色として考えるプログラムを作成することは可能です。
今日のプログラミングは、1と0を異なるタイプのデータとして表現できることから、その価値の多くを引き出しています。本当にそれらの1と0はまったく数字ではなく、電気的な波長の変化ですが、数学は物理学ほど重要ではありません... しかし、...それは何を理解するのに非常に重要です他のプログラマーが言うとコード。
それでも、数学がなくても難しいプログラマーになることは可能でしょう。
離散数学のイントロコースを終えたばかりですが、プログラミングのおかげで述語論理に関するほとんどすべてをすでに知っていることがわかりました。新しくなったのは構文だけで、基本的にはブール値を操作するだけでした。
要するに、おそらく数学を明示的に学ぶ必要はないかもしれませんが、プログラマーになるだけで、おそらく気付かずに数学を学んだことでしょう。つまり、「優れたプログラマー」であることで、あなたは本当に(ある程度)数学者でもあります。
カリー・ハワード対応は私が何を意味するかを示しています。基本的に、それは証明して、特定のコンピュータプログラムはつまり、彼らは同じことを書くの異なる方法があり、「同型」であることを述べています。もちろん、これは実際にはこれよりも複雑ですが、私は数学者ではありませんので、これは私が与えることができる最高の説明です。うまくいけば、それがあまりにも遠くないことを願っています。
要約すると、CSの多くのフィールドを実行するだけでなく、プログラミングには多くの数学が含まれるだけでなく、基本的なプログラミングのアイデア(ブールなど)でも基本的には変装した数学です。
これは答えるのが非常に難しい質問であり、おそらく多くの議論を巻き起こすでしょう。
この質問が非常に難しい理由の1つは、あなたがどのような種類の仕事をしているのかに一部依存していることです。ほとんどのビジネスアプリケーションには多くの数学が関与していないため、代数とビジネス数学をしっかりと理解することで対応できます。ただし、より高度なアプリケーションではより高度な数学が必要であり、微積分、線形代数などの確実な理解が必要になります。
ただし、プログラミング自体の実践にはある程度の数学が依然として必要であるという点で、これは方程式の一部にすぎません。もちろん、基本的な代数だけでなく基本的なプログラムも書くことができるようにするには、ロジックに慣れる必要があります。基本的なプログラムを動作させるだけではありませんが、特定の問題に適したアルゴリズムを使用するために何が必要かを判断するには、離散数学の特定の側面を理解する必要があります。
しかし、質問の中心に戻るために。私は個人的に、あなたが優秀なプログラマーになるために数学者である必要はないと思います。ただし、優れたジェネラリストプログラマーになるには、数学に慣れている必要があると思います。
はい、間違いなく。
ミルビジネスプログラミングの実行でも、数学のスキルが必要です。
ミルビジネスプログラミングの実行にはデータベーススキルが必要です。優れたデータベースプログラマーになるには、データベースの仕組みと、クエリプロセッサがクエリを変換するときに使用するアルゴリズムを理解する必要があります。制限と導関数を理解しないと(または、行y = xが行y = x ^ 2と2回交差するという基本的な理解さえない)、ハッシュ一致内部結合クエリプランとネストされたループ結合を正確に比較することはできませんクエリプラン。
また、優れたプログラマーは、ゲーム、シミュレーション、組み込み開発、コンパイラー、オペレーティングシステム、Webスタッフ、データベースなど、少し勉強すれば、ほぼすべてのドメインで作業できます。これらすべてのことを行う方法を正確にすばやく学習できるようにするためには、かなりの数の数学のバックグラウンドが必要です。
私はある時点で次のような経験をしているべきだったと思います。
数学の知識は、一部のアプリケーション(ゲーム、人工知能、コンピューターグラフィックスなど)に適していますが、数学は単なる数式や複雑な方程式を超えて何かを教えてくれます。
数学の学習は、新しいプログラミング言語を学習するようなものです。実際、プログラミングには数学が適用されます。新しい言語を学ぶとき、あなたはより良いプログラマーになる多くのことを学びます。数学と違いはありませんが、数学を本当にマスターすれば、仕事で高度な数学を使用しなくても、永久に優れたプログラマーになります。
その理由は簡単です:数学は他の目で世界を見ることを教えます。必ずしもプログラミングすることなく、さまざまなアプローチで問題を解決することを教えます。この新しい考え方は、確かにあなたがあなたの仕事をするためのより良い方法へと導いた。
プログラミングは芸術です。数学は芸術です。両方を組み合わせると、より良いアーティストになります。
番号。
ほとんどの科学分野と同じように、数学の概念をよく理解することは、特に効率などを評価するときに役立ちます。ただし、ほとんどのプログラミングタスクでは、解く問題が数学に関連している場合にのみ、数学の能力が関係します。
コンピューターは数学を行うのに優れているので、初期のコンピューターは、多くの複雑な数学作業に関連する「うなり声の多い作業」を行うために広く使用されていたことが理にかなっています。ソフトウェアの多くはまだないような場合には数学が得意であることは、あなたがより良いプログラムを書くのに役立ちます、複雑な数学の問題を解決するが、それはあなたの優秀なプログラマーにするものではありません。
通常、ほとんどの作業を行うために、たとえば微積分または三角方程式を知る必要があるという意味ではありません。あなたが重いグラフィック/ゲームプログラミングをしているなら、はい。有名な数学のハック地震については、この良い例です。ただし、高レベルの数学を扱うときに入らなければならないという考え方は、プログラミングにも当てはまります。プログラミングでは、独自の論理構造、独自の機能、独自の「証明」を開発しています。
私の仕事で数学に出くわしたのは(社内エンタープライズワークフローとアプリ)統計情報の知識を必要とするレポートアプリを実行するときだけですが、それは要件に直接適用できるからです。
優秀なプログラマーになるために数学が得意である必要は絶対にないと言います。
プログラマーとしての最初の仕事は、B-52および巡航ミサイルのミッション計画のために3Dグラフィックスを行うことでした。それは数学を集中的に使うアプリケーションでしたが、本当に数学が得意な人だけにアクセスする必要がありました。2点間の大円距離を計算するための式を知る必要はありませんでした。プログラミング言語で機能するように数式を変換する方法を知る必要がありました。飛行シミュレーションでも同じです。ボーイングは、私たちがそれを適用しなければならなかったすべての計算を行いました。
また、この経験は、誰が優れたプログラマーであり、誰がそうでないのかという感覚をつかむのにも役立ちました。この仕事にはパイロットとナビゲーターがプログラマーとしての任務を見学し、プログラマーがミッションのニーズを理解するのを助けました。通常、数週間以内にどのパイロットとナビゲーターが得意かを知ることができます。数学専攻は通常、すぐにプログラミングを始めました。
したがって、数学が得意であれば、プログラミングが得意になる可能性が高くなると思いますが、数学があまり得意でない多くの優秀なプログラマを知っています。
私は数学が好きではなく、常に数学の成績が低かった。私は優秀なプログラマーだとは言いたくありませんが、私はソフトウェア業界に10年間携わっており、大きな成功を収めています。
数学が嫌いな人が優れたプログラマーになることは可能ですか?
いいえ、いいえ、いいえ、はい、いいえ!
いいえ、頻繁に必要になるからです。
(! (a | (! (b && c) || d) && (! e)))
なぜ機能しないのですか?
foo ('a', 'b', 19, g(h))
bar ('c', 'd', 44)
より抽象的な方法で書き直すことができますか?
968ミリ秒は0.7秒以上ですか?必要なMBの数、マシンのGhzの数、1バイトで十分です-数学は毎日の仕事の一部です。時には明示的かつ高等数学。
常に暗黙的に数学を下げます。
数学は、計算から行列、幾何学、論理、統計、カテゴリ理論、グラフ理論まで、幅広い分野です。あなたが数学を使わずにプログラミングをしていると信じているなら、あなたは間違っているかもしれません。
Project Eulerのページで問題を見ると、パズルを見つけることができます。ここでは、パズルを解くために数学がどのように使用されているのかはわかりません。(数学なしでそれらを解くことができたわけではありません。)通常、問題の大きさはそれほど大きくないので、力ずくで解くことはできません。
しかし、私はそれらの多くを解決できないので(今では約2/3)、数学が好きではないということですか?
あなたが数学を勉強していなかったなら、あなたはおそらくプログラミングを含むあなたの日常生活で数学をどこで見つけることができるか分からないでしょう。
画面上でGUIコンポーネントを動かして見栄えを良くしただけでも、何らかの方法で計算を行っています。