[{"data":1,"prerenderedAt":250},["ShallowReactive",2],{"article-2024_09_12_engineer_needs_math":3},{"id":4,"title":5,"body":6,"category":234,"createdAt":236,"description":237,"extension":238,"index":239,"meta":240,"navigation":241,"path":242,"publish":241,"seo":243,"series":239,"seriesTitle":239,"stem":244,"tag":245,"thumbnail":248,"updatedAt":239,"__hash__":249},"articles\u002Farticles\u002F2024_09_12_engineer_needs_math.md","エンジニアという職業に就くために数学は必要なのか？",{"type":7,"value":8,"toc":209},"minimark",[9,13,16,19,22,27,30,34,37,40,43,47,50,53,57,60,63,66,69,72,77,80,83,87,90,93,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,150,153,159,162,165,168,171,174,177,180,184,187,190,193,196,199,202],[10,11,12],"p",{},"エンジニアにとって数学が必要かどうかという議論は昔からあります。私の考えでは、「数学はまったく不要」とは言い切れないものの、大学で専攻するほどの知識は必須ではないと思っています。高校数学の基礎を理解していれば、ほとんどのエンジニアリング業務には対応できるでしょう。",[10,14,15],{},"実際のところ、数学がどれほど必要かは、どの分野のエンジニアを目指すかによって大きく異なります。例えば、アルゴリズム開発やAIの分野では高度な数学が不可欠です。一方で、フロントエンド開発などでは、それほど多くの数学知識は要求されません。このように、分野ごとに求められるスキルが異なるため、それに応じた準備が必要です。",[10,17,18],{},"また、最近では「数学は絶対に必要だ」とか「全くいらない」といった極端な主張をするYouTuberやサイトが目立ちますが、これらは前提となる「どの分野のエンジニア」を対象にしているかが曖昧なことが多いです。ただ不安を煽っているだけなので、あまり気にしない方が良いでしょう。",[10,20,21],{},"この記事では、どの分野で数学が必要か、逆に必要でない場合には何が重要とされるのかについて詳しく説明していきます。これからエンジニアにジョブチェンジしたい、またはエンジニアとして就職を考えているけれど、数学に自信がないという方々に役立ててもらえれば幸いです。",[23,24,26],"h3",{"id":25},"必要な分野不要な分野","必要な分野、不要な分野",[10,28,29],{},"エンジニアリングの分野によって、数学が必要な度合いは大きく変わります。特に、アルゴリズム開発やAIの研究などの分野では、数学は避けて通れない要素です。逆に、フロントエンド開発やライブラリを用いた実装が中心の業務では、高度な数学の知識はほとんど必要ありません。以下でそれぞれの分野について、数学の重要性を説明していきます。",[23,31,33],{"id":32},"アルゴリズム開発やaiなど","アルゴリズム開発やAIなど",[10,35,36],{},"アルゴリズム開発やAI（人工知能）の分野では、大学レベルの数学知識が必要不可欠です。特に、統計学、線形代数、微積分、確率論などは、これらの分野において基礎となるスキルです。AIのモデルを作る際には、データの処理や学習アルゴリズムを理解するために、数学的な知識が重要になります。数学が好きで得意な人にとっては、エンジニアリングの中でもこの分野は非常にやりがいのある選択肢と言えます。",[23,38,39],{"id":39},"フロントエンドやライブラリを用いての実装中心",[10,41,42],{},"私が主に活動しているフロントエンドエンジニアリングの分野では、数学はそこまで重要ではありません。もちろん、組み合わせ論や論理的な思考は多少求められるものの、日常的な業務では、どちらかというとソフトウェア設計の考え方が重視されます。DB設計、クラス設計、UI設計など、ソフトウェア全体の構成をどうするかが重要なスキルです。",[23,44,46],{"id":45},"アニメーション3dゲーム開発","アニメーション、3D、ゲーム開発",[10,48,49],{},"アニメーションや3D、ゲーム開発の分野では、ベクトルや三角関数といった数学の知識が役立つことがあります。例えば、アニメーションを描画する際には、フレームレートの調整や、物体の移動をスムーズに見せるために三角関数を使うことがあります。私も以前、Web上で水玉が特定の方向にふわふわと移動するアニメーションを実装した際、ベクトルと三角関数の知識が役に立ちました。",[10,51,52],{},"ゲーム開発においては、アニメーションの他に物理演算や処理負荷の最適化など、さらに複雑な数学の概念が求められることがあります。ただし、ノベルゲームのように動きが少ないゲームの場合は、そこまで高度な数学の知識は不要です。",[54,55,56],"h2",{"id":56},"エンジニアの多くであろう実装中心あたりについて",[10,58,59],{},"エンジニアとしてのキャリアを歩む上で、多くの人が「実装中心」の分野に携わることになるでしょう。ここで言う「実装中心」とは、クライアントやプロダクトの要件に基づいてシステムやアプリケーションを構築する業務です。特にバックエンドやフロントエンド、またはその両方に携わるエンジニアが多く、この領域では数学的な知識よりも別のスキルセットが求められます。研究という要素が少なく、要件に従った実装やそのヒアリング、ライブラリやフレームワークを利用するための調査や構築を行うことが多いです。",[10,61,62],{},"といっても流石に数学が全く不要だったかというと設計や効率的なコードを記述するにあたり学んでおいてよかった数学の知識もあります。",[10,64,65],{},"具体的に必要なスキルセットや、知っておいてよかった数学の知識は以下の通りです。",[23,67,68],{"id":68},"実務上のスキルセット",[10,70,71],{},"エンジニアとしてサービスを開発する際に、実際に必要だと感じたスキルは数多くあります。これらのスキルは、数学が得意でなくても習得できるものであり、私自身も日々の業務を通じて身につけてきました。数学的な知識が役立つ場面もあるかもしれませんが、実務においては、それ以上に重要な要素があります。",[73,74,76],"h4",{"id":75},"db設計","DB設計",[10,78,79],{},"データベース設計は、エンジニアにとって基本的なスキルの一つです。データを効率的に取り扱い、冗長なデータをなくすために「正規化」の概念が必要になります。さらに、カラムの構成や役割を理解し、データベースから必要な情報を適切に取得するためのSQLコマンドも必須です。",[10,81,82],{},"リレーショナルデータベースの考え方を把握し、エンティティ関係図（ER図）を描けるようになると、データ同士の関係を視覚的に整理でき、設計作業がよりスムーズになります。最終的には、プロジェクトの要件に従い、データベースの構造をどう最適化するかが重要な課題となります。",[73,84,86],{"id":85},"クラス設計オブジェクト指向","クラス設計（オブジェクト指向）",[10,88,89],{},"保守しやすいアプリケーション開発を行う上で、オブジェクト指向の概念は欠かせません。特に大規模なシステムや長期運用するサービスでは、コードの再利用性や拡張性を意識した設計が求められます。オブジェクト指向は学習が難しいと感じることもありますが、概念を理解しておくと、後の業務での作業が格段に楽になります。",[10,91,92],{},"実践的に学ぶためには、実際に自分でオブジェクト指向を用いたプロダクトを作成してみるのが効果的です。理論を覚えるよりも、プロジェクトを通じて実践的なスキルを養うことで、オブジェクト指向の本質に触れることができます。",[73,94,96],{"id":95},"コミュニケーション力ヒアリング力","コミュニケーション力（ヒアリング力）",[10,98,99],{},"技術力以上に重要なのが、顧客やチームメンバーとのコミュニケーションです。特に、顧客が専門家でない場合、要望が非常に曖昧なことがあります。そのため、顧客の意図を汲み取り、具体的な要件として定義する能力が求められます。技術的な要件だけでなく、ビジネスのニーズを理解し、それをシステムに落とし込むことができるエンジニアは、プロジェクトを成功に導けるでしょう。",[10,101,102],{},"さらに、顧客が気づいていない問題やリスクを指摘し、改善点や便利な機能を提案できると、信頼関係が深まり、仕事の質も高まります。エンジニアにとって、ヒアリング力と提案力は非常に重要なスキルです。",[73,104,105],{"id":105},"ドキュメントの読解と理解力",[10,107,108],{},"開発現場では、ゼロからコードを書き始めることは少なく、ほとんどのケースでフレームワークやライブラリを活用します。そのため、これらのツールのドキュメントをしっかりと読解し、理解する能力が重要です。英語のドキュメントが多いため、英語を抵抗なく読むことが求められますが、翻訳ツールを使いながらでも問題ありません。",[10,110,111],{},"ドキュメントを適切に理解できるかどうかで、開発の効率は大きく変わります。必要な情報を素早く引き出し、それを実装に反映する能力が、スムーズなプロジェクト進行に直結します。",[73,113,114],{"id":114},"バグの調査や原因の探究",[10,116,117],{},"バグの解決は、開発業務において避けては通れない要素です。原因を素早く特定し、解決に導くスキルは、エンジニアにとって非常に重要です。特に、ライブラリやフレームワークを多用する現代の開発では、バグの原因が外部要因なのか、自分の実装ミスなのかを切り分ける力が必要です。",[10,119,120],{},"具体的には、ライブラリのリポジトリにあるIssueを参照したり、StackOverflowなどのコミュニティを活用しながら、同じ問題に遭遇した他のエンジニアの知見を活用することが求められます。問題の解決には、粘り強く調査し、正しい情報を集める力が欠かせません。",[23,122,123],{"id":123},"実装中心でもあった方がいい数学知識",[10,125,126],{},"実装中心の業務において、数学知識が必須というわけではありませんが、知っておくと役立つ場面もあります。ただし、これらの知識を専門家レベルで理解する必要はありません。「どんなものかを説明できるか」が重要です。実際の計算処理はコンピュータが行ってくれるため、エンジニアとしては理論や式を構築する場面が多くなります。",[10,128,129],{},"また、実装では処理の流れや効率を重視することが多く、数学的な論理やパターンの考え方が役に立つことがあります。特に論理系の知識は、条件分岐やアルゴリズムの構築において重要です。",[73,131,132],{"id":132},"集合と論理",[10,134,135],{},"集合や論理の知識は、条件分岐やデータの取り扱いに直結します。特に、条件式を効率的に記述する能力が求められます。知らないと、冗長な条件式を書いてしまうことがありますが、論理的な考え方を理解していれば、シンプルかつ効果的な条件分岐を作成できます。",[10,137,138],{},"例えば、以下のような冗長な条件式があります。",[140,141,146],"pre",{"className":142,"code":144,"language":145},[143],"language-text","if (x == 1 && (y == 2 || y == 3) && !(z == 0)) { ... }\n","text",[147,148,144],"code",{"__ignoreMap":149},"",[10,151,152],{},"これを論理的に整理すると、以下のように簡潔な式にできます。",[140,154,157],{"className":155,"code":156,"language":145},[143],"if (x == 1 && y > 1 && y \u003C 4 && z != 0) { ... }\n",[147,158,156],{"__ignoreMap":149},[10,160,161],{},"論理を整理することで、コードが読みやすくなり、バグの発生も減らすことができます。",[73,163,164],{"id":164},"組み合わせ",[10,166,167],{},"組み合わせの考え方は、要件の中で複数の要素が組み合わさる場面に役立ちます。例えば、ユーザーの入力によって異なる結果を表示するシステムでは、どのようなパターンがあり得るのかを予測し、それに対応した処理を実装することが必要です。特に、脆弱性を防ぐためにも、可能な限りパターンを見つけ出し、考慮に入れることが重要です。",[10,169,170],{},"具体的な数学的な組み合わせの計算を行うというよりも、要件に対してどんな組み合わせがあり得るかを考え、それをシステム設計に反映する能力が求められます。",[73,172,173],{"id":173},"統計学",[10,175,176],{},"統計学は、データを扱う際に特に役立ちます。ただし、データ解析に携わらないエンジニアであれば、それほど深い理解は不要です。しかし、統計的な概念を理解していると、正確なデータ分析や結果の解釈ができるため、役立つ場面が出てくることもあります。",[10,178,179],{},"例えば、A\u002FBテストなどのデータ分析を行う際には、統計の基本的な知識があった方が、より精度の高い判断ができます。",[73,181,183],{"id":182},"数列指数関数","数列、指数関数",[10,185,186],{},"数列や指数関数は、エンジニアリングの現場では、特に処理の効率やデータの増加に関わる場面で役立ちます。例えば、アルゴリズムの計算量を評価する際には、数列や指数関数の考え方が重要です。データが増加するにつれて処理時間やメモリ使用量がどのように変化するかを予測するためには、これらの概念が不可欠です。",[10,188,189],{},"また、物理シミュレーションやグラフィカルな処理においても、数列や指数関数を使って計算を行うことがあります。例えば、一定間隔で増減する値や、特定の割合で増加・減少するデータを処理する際には、数列や指数関数の知識が役立ちます。",[10,191,192],{},"さらに、リソース管理の観点からも、指数的に増加する処理負荷を見積もる際に使われます。大量のデータを処理するシステムにおいて、時間やリソースの効率的な利用を計画するために、指数関数の理解は重要です。",[54,194,195],{"id":195},"でも数学は学んでおいて損はないと思う",[10,197,198],{},"エンジニアリング業務において、数学が直接的に必要ない場合も多いですが、学んでおいて損はありません。特に、実装中心のエンジニアであれば、まずは使用するプログラミング言語の仕様や設計の知識を優先的に習得すべきです。しかし、アニメーション系の開発、ゲーム開発、そして研究職になるほど、数学の重要性が高まっていきます。",[10,200,201],{},"数学は抽象的な概念を扱うため、最初は理解しにくく、何に役立つのかがわからないことが多いです。だからこそ、まずは実際にコードを書きながら実践し、必要性を感じたタイミングで学んでいくのも一つの方法です。例えば、私自身もGIS（地理情報システム）を用いたアプリケーションを開発する際に、数学の知識があればさらに深く学べたと思ったことがあります。",[10,203,204,208],{},[205,206,207],"strong",{},"補足）GISとは？","\nGIS（Geographic Information System、地理情報システム）は、地理的なデータを収集・解析・可視化するためのシステムです。地図をベースにデータを管理・操作する技術で、都市計画、交通分析、環境モニタリングなど、さまざまな分野で利用されています。これらのアプリケーション開発においては、緯度や経度などの座標データを扱うため、三角関数やベクトルといった数学的な知識が役立ちます。",{"title":149,"searchDepth":210,"depth":210,"links":211},3,[212,213,214,215,216,233],{"id":25,"depth":210,"text":26},{"id":32,"depth":210,"text":33},{"id":39,"depth":210,"text":39},{"id":45,"depth":210,"text":46},{"id":56,"depth":217,"text":56,"children":218},2,[219,227],{"id":68,"depth":210,"text":68,"children":220},[221,223,224,225,226],{"id":75,"depth":222,"text":76},4,{"id":85,"depth":222,"text":86},{"id":95,"depth":222,"text":96},{"id":105,"depth":222,"text":105},{"id":114,"depth":222,"text":114},{"id":123,"depth":210,"text":123,"children":228},[229,230,231,232],{"id":132,"depth":222,"text":132},{"id":164,"depth":222,"text":164},{"id":173,"depth":222,"text":173},{"id":182,"depth":222,"text":183},{"id":195,"depth":217,"text":195},[235],"myopinion","2024-09-12","よく言われるエンジニア数学必要論について","md",null,{},true,"\u002Farticles\u002F2024_09_12_engineer_needs_math",{"title":5,"description":237},"articles\u002F2024_09_12_engineer_needs_math",[246,247],"dev_exp","carrier","2024_09_12_engineer_needs_math\u002Fthumbnail.webp","D_weARn9rztnF82t4tSpUG5nn-OAzcNSgt0p8tjz33E",1780987143282]