データ分析は、ソフトウェア開発の初期段階のプロセスで、ビジネスアクティビティを調べ、それをソフトウェアアプリケーションに変換するための要件を見つけ出すプロセスです。これは正式な定義であり、データ分析はシステムアナリストに任せておくべき行動であると信じるかもしれませんが、プログラマーは誰かが設計したものをコーディングすることに焦点を当てるべきです。厳密にソフトウェアエンジニアリングのパラダイムに従えば、正しいかもしれません。経験豊富なプログラマーがデザイナーになり、鋭いデザイナーがビジネスアナリストになり、すべてのデータ要件について考えることができ、明確なタスクを実行することができます。これは、データがすべてのプログラミング活動の中核となるため、完全には正確ではありません。あなたのプログラムで何をしても、あなたは移動しているか、データを変更しています。ビジネスアナリストはニーズをより大規模に分析しています。ソフトウェアデザイナーは、このような規模をさらに絞り込んで、問題があなたの机の上に着くと、巧妙なアルゴリズムを適用して既存のデータを移動するだけです。
そうではありません。
どの段階で見ても、データはうまく設計されたアプリケーションの主な関心事です。ビジネスアナリストが顧客の要求からどのように要件を取得しているかを詳しく見れば、データが基本的な役割を果たすことがわかります。アナリストはいわゆるデータフローダイアグラムを作成し、すべてのデータソースが識別され、情報フローが形成されます。どのデータをシステムの一部にするかを明確にした上で、データベース関係、データ交換プロトコル、およびファイル形式の観点から、設計者はデータソースを整形してプログラマに渡す準備が整います。しかし、プロセスはまだ終わっていません。この徹底したデータ洗練プロセスの後であっても(プログラマ)、可能な限り最良の方法でデータを分析する必要があるからです。あなたの仕事の最終行は、いくつかの言語の父であるNiklaus Wirthの中核メッセージです。 "アルゴリズム+データ構造=プログラム"単独でアルゴリズムを立てることは決してありません。すべてのアルゴリズムは、少なくとも1つのデータに対して何かを行うことになっています。
したがって、アルゴリズムは真空で車輪を回転させないので、他人があなたのために特定したデータとコードを書き留めるのに必要なデータの両方を分析する必要があります。簡単な例では、問題がより明確になります。ライブラリの検索ルーチンを実装しています。あなたの仕様によると、ユーザーはジャンル、著者、タイトル、出版社、印刷年、ページ数の組み合わせで書籍を選択できます。ルーチンの最終的な目標は、バックエンド・データベースを検索するための正当なSQL文を生成することです。これらの要件に基づいて、いくつかの選択肢があります。「switch」ステートメント、または複数の「if」ステートメントを使用して、各コントロールを順番にチェックします。データコントロールの配列を作成し、各要素が設定されているかどうかチェックします。すべての特定のコントロールを継承する抽象コントロールオブジェクトを作成(または使用)し、それらをイベントドリブンエンジンに接続します。要件に特定の順序で項目がチェックされていることを確認して、クエリのパフォーマンスをチューニングすることも必要な場合は、コンポーネントのツリーを使用してSQL文を作成することを検討することができます。ご覧のとおり、アルゴリズムの選択は、使用する、または作成するデータによって異なります。このような決定は、効率的なアルゴリズムと悲惨なアルゴリズムとの間のすべての違いを生じさせる可能性がある。しかし、効率だけが懸念事項ではありません。あなたは、あなたのコードに名前付きの変数を12個使用し、これまでどおり効率的にすることができます。しかし、そのようなコードは簡単に保守できないかもしれません。おそらく、変数の適切なコンテナを選択することで同じスピードを保つことができ、さらに、来年には、同僚がコードをよりよく理解できるようになります。さらに、明確に定義されたデータ構造を選択することで、コードの書き換えを行わずにコードの機能を拡張することができます。長期的には、データの選択によって、コードの終了後にコードが存続する期間が決まります。もう一つの例を挙げてみましょう。思考のための食べ物はもう少しあります。アナグラムが同じ辞書内の別の単語でなければならない、3つ以上のアナグラムを持つ辞書のすべての単語を見つけることがあなたの仕事であるとしましょう。それを計算の仕事と考えるならば、あなたは無限の努力に終わり、各単語のすべての組み合わせを試して、それをリストの他の単語と比較しようとします。しかし、手元のデータを分析すると、単語そのものとその文字のソートされた配列をIDとして含むレコードで各単語を表すことができます。そのような知識を身につけて、アナグラムを見つけることは、追加のフィールドでリストをソートし、同じIDを共有するものを選ぶことを意味します。ブルートフォースアルゴリズムは、実行に数日かかることがありますが、スマートなアルゴリズムはほんの数秒です。難しい問題に直面しているこの例を覚えておいてください。