コンピュータサイエンスの研究とソフトウェアエンジニアリングのギャップを埋める[終了]


8

コンピュータサイエンスの研究とソフトウェアエンジニアリングの問題の間にギャップがあると思いますか?たとえば、ソフトウェアエンジニアは、「ファクタリングとグラフの同型」や、複雑なコンピュータサイエンスの問題について心配する必要がありますか。おそらく違います。

また、コンピュータサイエンスとアプリケーションを構築するエンジニアとの間に隔たりがある場合はどうでしょうか。それは工学と科学が存在すべき方法ですか?エンジニアは、何年にもわたる研究論文に潜り込み、特定の問題を解決しますか?

編集-1:それについて考えた後、一般科学はおそらく同じ問題を抱えています。マクドナルドやタコベルのような会社で働いているトップの化学者が、ハンバーガーをより良く、より簡単に製造することを任されていると確信しています。


どんなギャップ?保有期間と付与が必要な場合は、「ファクタリングとグラフの同型性」を考慮し、ショッピングカートサイトを構築する場合は、Cookieとセッションデータを考慮します。橋渡しするためにどのようなギャップがありますか?
davidk01

なんらかのワークフロー(ショッピングカートなど、平凡なものを含む)を構築する場合は、グラフなどについては間違いなく心配する必要があります。そうしないと、ワークフローがメンテナとエンドユーザーの両方にとって使用できなくなり、理解できなくなる可能性があります。
SK-logic

回答:


10

ほとんどのソフトウェアエンジニアリングポジションでは、次の2つの理由のいずれかにより、コンピュータサイエンスの根本的な問題が発生することはほとんどありません。

  • これらは、使用するツールによって解決されています。たとえば、コンパイラで使用するプログラミング言語の解析アルゴリズム、オペレーティングシステムで実行するアプリケーションのスケジューリングアルゴリズム、使用するデータベースでのクエリ解決などです。
  • それらは単に、達成しようとしているものにとって重要ではありません。それらが役に立たないからではなく、平凡な自動化タスクが最大の最適化されたバージョンよりもはるかに重要であるためです。

非常に多くのソフトウェアエンジニアが理論的な観点から取るに足らない情報システムを構築している理由は、単にそれらが必要なためです。私たちの世界が現在自動化されている方法は、おそらく達成できることの0.01%未満です。したがって、今後数十年は、おそらくほとんどが情報システムとインターフェースを構築することになるでしょう。それらが得られると、いくつかの根本的な問題が現れ始めます。

これらの問題は、たとえばスケーラビリティやスレッド化などに関して現在存在しますが、実行する必要があるすべての問題のごく一部にすぎません。したがって、企業が比較的些細な情報システムを何度も構築しているのは、(1)人々がそれらを必要としている、(2)基本的な問題を解決するよりもはるかに簡単(かつより有利)なためです。


1
「私たちの世界が現在自動化されている方法は、おそらく達成できることの0.01%未満です。」それは私が考えていたものです。残念ながら、基本的に1つの形式からデータを取得してデータベースに格納するアプリケーションを構築しているため、その高度な科学、研究、および天才のすべてが失われる可能性があります。
berlinbrown2

3
@ベルリン、それはフレームワークが対処しようとしている問題だと思います。いずれにせよ、私たちは正しい方向に進んでいます。キャビネット内のファイリングレコードを無駄にしていた天才などについて考えてみてください。
エセルエヴァンス

6

コンピュータサイエンスの研究とソフトウェアエンジニアリングの問題の間にギャップがあると思いますか?

私の経験では、商用/実用的なソフトウェア開発は、学術研究に5〜30年以上遅れています。画期的な学術論文から商用出荷製品までの最速の時間枠の1つはSQLでした。この論文は1969年に発行され、IBMやその他の人々は実行可能な製品を作るために多くの時間と労力を費やし、最初の実際に商業的に実行可能な製品はRelational Softwareでした。

関数型言語は1960年代に研究者によって開発されました。今日、どれくらい一般的に使用されていますか?いくつか。彼らは最近、大学のツタに覆われた壁の外でしたよりもはるかに多くの利用を得ています。しかし、それを行うには30年かかりました。

エンジニアは、何年にもわたる研究論文に潜り込み、特定の問題を解決しますか?

はい。私はいつもそれをしています。ストレージエリアネットワークを構築している会社で働いていたとき、出荷され始めた製品の多くは、5〜6年前に発行された研究論文に記載されていました。

別の例には、「患者マッチング」と呼ばれる問題が含まれていました。人間は、のようなものを見ているのが得意ですChem. Dept.Department of Chemistryそのようなものを決定することは同じです。ほとんどのアルゴリズムには、そのようなことを決定するのにひどい時間がかかります。私は電子医薬品の処方箋、検査報告、保険金請求を扱う会社で働いていました。患者の治療の有効性と有効性をカバーする長期的なデータを(匿名で)持つことができれば有益でした。そのようなことは、文字列の近さを決定する能力に依存する必要があったでしょう。1990年代、この領域のほとんどの研究者はHuman Genomeプロジェクトに姿を消し、彼らの研究のほとんどはWebから姿を消しました(NDAと知的財産により、これらの人々が私的産業のために仕事に行くと、Webから発明したすべてが消えます)。911以降、名前の一致は「国家安全保障」の問題になりました(Mohammedを英語で綴る方法は約25通りありますが、そして、オサマを綴る約12の方法)そして残りの多くは同様に消えました。だから一つ発明者 /会社には、「明白でない関係アナライザー」と呼ばれる人と関係を一致させる製品があり、DB2のアドオンに消えてしまいました。論文をよく掘り下げる必要があります。ショッピングカートを作成するのではないかもしれませんが、他のプロジェクトで作成するのはごく一般的です。

論文:ほぼ重複するデータベースレコードの適応型検出と、情報発見のためのデータベース統合アプローチ
論文の関数のいくつかを実装するライブラリ


良い反応で、実際の論文をアプリケーションに関連付けました。私はまだそれがほとんどのソフトウェアエンジニアリング、開発タスクの標準ではないことを主張します。あなたが言ったように、私はソフトウェア開発がそこにある研究よりも数年または数十年遅れていると思います。そして、それは「グーグル検索」や生体認証アプリケーションのような興味深いタスクのためのものです。
berlinbrown2

それは真実ではありません。たとえば、レコメンダーシステム、マーケットバスケット分析などはすべて、ベイズの定理を使用した基本的なコンピューターサイエンスの研究から生まれたもので、これには30年以上かかりませんでした。
Mushy

4

アカデミックコンピューターサイエンティストは次の点で非常に優れています。

  1. アルゴリズムの分析
  2. 標準データ構造の知識。
  3. オートマトン理論

上記のすべては、ソフトウェア工学にとって有用なものです。実際には、ソフトウェアエンジニアリングチームに少なくとも1人のコンピュータサイエンティストがいることが不可欠です。

ただし、コンピューターサイエンスの教育方法とABET認定ルールは問題を悪化させます(問題と呼ぶことができる場合)。コンピュータサイエンティストは、次の主要なソフトウェアエンジニアリング分野についてあまり知識がありません。

  1. ソフトウェアのRAMフットプリントとソフトウェアのパフォーマンスに与える影響。
  2. ソフトウェアの保守工学。彼らは、ソフトウェアの仕事の80%がソフトウェアのメンテナンスに費やされているという事実を理解していません。これはソフトウェアコストの最大の要素です。
  3. ハードウェアの近くで作業する方法。これは、システム全体をハードウェアとソフトウェアの組み合わせとして表示し、システムを最適化して両方を最適化して最適な機能を実現する方法を確認する場合に必要です。
  4. 新しい、高速で信頼性の高いソフトウェアのテスト、実装、およびメンテナンス手順を発明します。
  5. ソフトウェアドキュメント、クライアントトレーニング、および関連ドキュメント。
  6. システムセキュリティエンジニアリング。

私は何度も続けることができますが、私は私の主張をしたと思います。

今日のソフトウェアエンジニアリングは、コンピュータサイエンスから借りた独自の分野ですが、今日のテクノロジーと人間の生活を推進しています。あなたは本当にそれに優れたエンジニアの頭脳が必要です。すべてのコンピュータサイエンティストが優れたソフトウェアエンジニアであるとは限りません。もちろん、逆も当てはまりません。


「ABET」とは何ですか?
gnat 2013

同意しません。ソフトウェア開発の知識を獲得することは、あなたがそうすることを理解しているため、それほど高くないものではありません。私はコンピュータサイエンスの修士号を取得しており、主要なソフトウェアエンジニアリング分野の知識を欠いていません。今日のほとんどのソフトウェアエンジニアは学位を取得しており、新しい知識を習得するのは簡単です。
Mushy 2013

2

私は実際に良いショッピングカートのウェブサイトを構築するために、あなたは絶対に難しいアルゴリズムを採用する必要があると主張します。

過去の購入に基づいてユーザーの行動を予測するとします。これには、効果的に行うよりも多くの時間がかかりa+b=cます。年齢、性別、地理的な場所など、さまざまな要因に基づいて購買習慣をどのようにしていますか?

私自身の仕事では、レンダリングやAIなどで複雑なアルゴリズムが日常的に使用されています。

あなたが特定の機能(すなわち考える場合要するに、ちょうどショッピングカート)、その後、あなたが悪いの実装についての最も可能性の高い思考です。グーグルまたはアマゾンの実装について考え始めると、複雑なアルゴリズムを知っているか、少なくとも熟知していると便利(または必須)になる場所がわかるようになります。


ええ、実用的な検索とソートのアルゴリズムはコンピューティングの一部です。しかし、コンピュータサイエンスの研究では、基本的な並べ替えアルゴリズムを興味深い問題とは呼びません。コンピュータービジョン、より実用的なアプリケーションを備えた遺伝的アルゴリズムなどのAIを見てはいますが、コンピューターサイエンスの研究には、ソフトウェアエンジニアリングから遠く離れているように見える他の側面があります。
berlinbrown2

@berlin:ソフトウェアエンジニアとしてNASAまたはNSAに就職した場合、あらゆる種類のcomp sci研究タイプアルゴリズムに直面することになると思います。「ソフトウェアエンジニアリング」はかなり漠然とした用語であり、雇用主の分野のコンテキストに応じてさまざまなことを意味する可能性があります。
Demian Brecht

2

問題解決ソフトウェアエンジニアは、コンピューターサイエンスの研究や、数学および統計の研究と非常に重なっています。

ショッピングカートのコードを統合しても、ウェブサイトの設計はソフトウェアエンジニアリングではありません。それはデザインです。

「コーディング」でさえ、必ずしもソフトウェアエンジニアリングである必要はありません。自分がエンジニアに近づいているとは考えないコーダーもたくさん知っています。コードは、文字列操作やExcel数式の記述と同じくらい簡単です。

明らかに、すべてのソフトウェアエンジニアリングが科学的研究と重複するわけではありませんが(仕事には他の多くの責任があります)、最適なアルゴリズムまたは問題へのアプローチを決定するために、多くの公開された論文を読みました。これらの問題は1年に1回だけ発生する可能性があります(残りの時間はUI検証などを書いています)が、それが私の作業環境の性質です。


1

コンピュータサイエンスの研究とソフトウェアエンジニアリングの問題の間にギャップがあると思いますか?

番号。

たとえば、ソフトウェアエンジニアは、「ファクタリングとグラフの同型」や、複雑なコンピュータサイエンスの問題について心配する必要がありますか。おそらく違います。

いいえ。彼らはこれが正しく行われることに依存するツールを使用します。

実際、Facebookでの友達同士の関係はすべて、巨大なグラフ理論の問題です。非常に複雑です。非常に大きい。非常に理論的です。

また、コンピュータサイエンスとアプリケーションを構築するエンジニアとの間に隔たりがある場合はどうでしょうか。

はい。一部の人々は、明らかに無資格のアプリケーションを構築します。有料の「専門家」によって構築された本当にお粗末なものを、他の何かをしていて、時間とともにもっと役立つはずだったものをたくさん見ました。

それは工学と科学が存在すべき方法ですか?

「Should」は無意味です。それ存在する方法です。

エンジニアは、何年にもわたる研究論文に潜り込み、特定の問題を解決しますか?

はい。しばしば。それが私がACMデジタルライブラリを購読している理由です。 http://portal.acm.org/ ささいな問題に取り組むには不可欠です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.