私はプロとして8年間プログラミングをしていて、趣味は12歳の時からです。
数学は必要ありません、論理は必要です。数学はひどく役に立ちますが、それが必要ではないと言うことは、人を殺すために銃は必要ではなく、ナイフを使うことができると言うようなものです。まあ、それは本当ですが、その銃はそれをはるかに簡単にします。
最低限必要なものがいくつかありますが、すでに満たす必要があります。基本的な代数式と表記法、および一般的なコンピューターの同等物を知る必要があります。たとえば、指数が何であるか(3から3は27)を知る必要があり、一般的なコンピューター式は3^3です。代数の一般的な表記法は言語間で異なりますが、それらの多くはある程度統一された方法論を使用しています。他の人(あなたのLISPを見ている)はそうしません。また、操作の順序を知る必要があります。
アルゴリズムの考え方を理解する必要があります。最初にこれ、次にこれが、この計算で使用されるこれを生成します。これを理解しているのか、理解していないのか、理解していない場合にジャンプするのはかなり難しいハードルです。これはあなたが「得る」ものであり、実際に学ぶことができるものではないことがわかりました。逆に、アートを「取得」しない人もいます。彼らは画家になるべきではありません。また、CSカリキュラムには、なぜこれが機能しないのか理解できない学生がいます。x = z + w; z = 3; y = 5; 彼らが足し算を理解していないということではなく、明確な表現の要件を理解していないということです。彼らがそれを理解していれば、コンピューターもそうすべきですよね?上記の3行の何が問題になっているのかわからない場合は、プログラマーにならないでください。
最後に、プログラミングのドメインの下にある数学を知る必要があります。会計ソフトウェアは基本的な代数で止まる可能性があります。物理学をプログラミングしている場合は、物理学(大まかに)と3次元幾何学(ユークリッド)の数学を知っている必要があります。アーキテクチャソフトウェアをプログラミングしている場合は、三角法を知っている必要があります。
しかし、これは数学よりもさらに進んでいます。プログラミングするドメインが何であれ、基本をしっかりと理解する必要があります。言語分析ソフトウェアをプログラミングしている場合は、確率、統計、文法理論(複数の言語)などを知っている必要があります。
多くの場合、特定のドメインは、無関係だと思われる知識を必要とするか、その恩恵を受けることができます。たとえば、オーディオソフトウェアをプログラミングしている場合、波形を処理するには三角法を実際に知っている必要があります。
マグニチュードも物事を変えます。1000項目の財務データセットを並べ替える場合、それは大きな問題ではありません。ただし、1,000万レコードの場合、実際にベクトル数学を理解し、バイナリレベルでの並べ替えを深く理解することで大きなメリットが得られます(システムはアルファベット順に並べ替える方法を教えてください。「a」が「b」よりも小さいことをどのように知るのでしょうか。 '?)
各プロジェクトではプログラミングの直接的な領域の外でより多くの学習が必要になるため、プログラマーとしての一般的な知識ベースが爆発的に増えることに気付くでしょう。あなたが独学についてきしむか怠惰であり、本質的に「宿題」をするために週に10時間以上費やすという考えが好きでないなら、プログラマーにならないでください。
思考演習が好きな場合、学習が好きな場合、電卓なしの数学やスケッチパッドなしのデザインなどの抽象的なものについて考えることができる場合、人生や趣味に幅広い趣味がある場合、自己批判的で捨てることができる場合」お気に入りのアイデア、完璧なものが好きなら、プログラマーになりましょう。この決定を数学に基づいて行うのではなく、論理的に考えて学ぶ能力に基づいてください。これらが重要です。数学は単なる副産物です。