「コンピューターサイエンス!=ソフトウェアエンジニアリング」は、プログラミングを不十分に教える口実ですか?


23

みんな聞いたことがあります。最終的に誰かが言う開発スキルの低いCS卒業生についての議論があるときは、

コンピュータサイエンスはソフトウェアエンジニアリングではありません。

問題は、プログラミングとソフトウェア開発 CSコースで教えられていることです。彼らは一般的に不十分に教えられています。それが教えられているなら、なぜ最初に正しく教えてみませんか?*

だから私は2つの質問に関する意見を見てみたい:

  1. CS!= SEの引数は、プログラミングスキルを適切に教えていないことの秘coまたは言い訳です。

  2. 質問1への回答に関係なく、あなたがそのような決定をする全能の立場にいた場合:CSコースでのプログラミングの適切な教育に力を入れますか?

*。教育を通じて得た事例証拠に基づいて、この分野のほとんどの学者は維持するコードを書く必要がなく、コードを維持していないという疑いがあり、その結果、知識/スキルがありませんそれを効果的に教えるために。


7
コメントを明確にします。私の考えでは、それらは異なります(CS!= SE)。したがって、CSとSEを他の2つのフィールドA、Bに置き換えた場合、A!= Bの場合、ボウリングレッスン!= Japanese Historyのようなものが得られます。そして、あなたは次のようになります:BL!= JHは、JHを適切に教えていない言い訳になりますか?これは今では不合理な質問であり、却下されるべきです。リンクされたリストでハッシュテーブルを使用する理由がわからないCS卒業生を見た場合、彼は不十分に教えられました。コードのリファクタリングが不十分なCS卒業生を見かけた場合、それは許される可能性があります。
ジェレマイアナン

2
@Jeremiag Nunn:アナロジーを使用するには:日本の歴史はボウリングと並行して教えられません。私は、すべての CSプログラムが実際にプログラミングを教えており、「CS!= SE」引数を使用して、それをうまく教えることを許さないと主張しています。
スティーブンエバーズ

2
別の考え:特定のCS卒業生のSEスキルの欠如は、学校や生徒のせいですか?各クラスでは、有能なものから恐ろしいものまでかなり幅広いスキルを身につけているでしょう。
アダムリア

2
@SnOrfusソフトウェアエンジニアリングは、ソフトウェアを構築する技術です。コンピューターサイエンスは、ソフトウェアの背後にある理論です。両方を知ることは理想的ですが、それらはまだ分離されています。@Jeremiahよりも優れた類推(IMO)は、楽器を作ることと演奏することです。
ダッシュトムバング

5
学者が保守可能なコードを書く必要がないという脚注がほぼ正確にポイントです。それはCSが気にすることではありません。
ダッシュトムバン

回答:


27

私はそれが馬鹿馬鹿しいとは思わないが、むしろ、コンピューターサイエンスソフトウェアエンジニアリングではなく、プログラミングではなく、形式化された計算の科学であるという主張だ。本質的に、それは数学です(実際、多くのCSプログラムは応用数学プログラムとして始まりました)。

問題は学問よりも産業にあると思います。業界では、履歴書にリストされているCS学位を見て、「この人はコンピューターに長けている」と考え、IT、プログラミング、ソフトウェア開発など、コンピューターに関連するあらゆることをするために彼を雇います。これらのことは、必ずしもCS卒業生の専門知識の領域にあるとは限りません。同様に、コンピューターの構築やビデオゲームのプレイを好む多くの人々は、そのようなことを期待してCSプログラムに参加し、失礼な驚きを覚えます。つまり、CSに入学する多くの学生は実際にはそこに所属しておらず、より対象を絞った学位プログラムのほうが良いでしょう。

第二に、典型的な学部カリキュラムでは、非常に幅広い科目であるCSを教える時間が非常に限られています。私の学部カリキュラムには、8つのCSコース(BAの場合)または12のCSコース(BSの場合)に加えて、必要なすべての数学コースがありました。CS 数学プログラミングソフトウェアエンジニアリングを教えるのにそれほど時間はかからないので、ある時点で何が重要で、学生が自分で何を拾うことができるかを決める必要があります。

その最後のポイントは重要です。私は、どの分野の学生でも、自分でアイデアを探求するだろうと思います。私はCSの学位を持っていますが、自分でソフトウェアを勉強して書いたので、まともな開発者として大学を卒業したと思います。大学はクラスだけではありません。また、貴重なガイダンスを提供しながら、学生に半自律的にスキルを開発する時間を与えることでもあります。

CS、数学など- -私は、教育理論を維持し、ちょうど重要なようであるないにより重要なのは、特定のジョブに関連するスキルを教えるよりも。だけではなく、方法と技術の背後にある理由を学生に教えると、彼の知識を適用するときにはるかに順応性のある人になります。たとえば、私は非常に悪意のある「Javaスクール」に行ってJavaで教えられましたが、プログラミング言語理論のコースもあり、多くの言語の背後にある理由を説明しました。その結果、私はその背景を持っていなかった場合よりもはるかに優れたソフトウェアを書くことを学びました。確かに、私の仕事ではHaskellでソフトウェアを書いていませんが、多くのプログラミング言語理論を知っていることで、次のような洞察を得ることができました。しているプログラマとしての私の仕事に適用されて。

また、業界は大学生に期待しすぎていると思います。業界は独自のコスト削減を望んでいるため、仕事のために新入社員をトレーニングする代わりに、大学が貿易/専門学校になることを期待しています。事実上、彼らは大学に彼らのために訓練をしてもらいたいのです。大学の卒業生は、大学の新鮮なすべてを知ることは期待できません。優れた開発者であるということは、経験に関することと知識に関することです(特にソフトウェア開発のような比較的若い分野)。


これはまさに私の考えですが、私の答えよりもずっとよく説明されています。
ジェレマイアナン

+1:ここで非常に良いことを1つだけ取り上げたいとは思いませんが、CSが応用数学として生まれたことを考えると、その応用の重要性を暗示しているのではありませんか?
スティーブンエバーズ

2
@SnOrfus:プログラミングが数学に適用される範囲で、はい。しかし、ちょうどコンピューターサイエンス!=ソフトウェアエンジニアリング、プログラミング!=ソフトウェアエンジニアリングのように。
mipadi

1
@David Thornley:まず、私と私が物理学を学んだことを知っているすべての人は、波を研究するときにオシロスコープを使用しました。それでも、アナロジーは成り立ちません。学生はすでに CS学位の一部としてプログラミングを教えられています。あなたは、私がそうであったように、不信心に出席した私たち全員でした。1つのコースの1回限りのセクションでもありませんでした。それは学期ごとに少なくとも 1-2クラスの不可欠な部分です。
スティーブンエバーズ

2
学校(大学、大学など)に魚を与えるだけでなく、魚を食べる方法を教えるべきだと説明するために+1
エミリアーノ

25

ここでの問題の一部は、4年では洗練されたソフトウェアエンジニアになるのに十分な時間ではないという事実です。学部生に数学やCSコースだけでなく、学ぶべき純粋なメカニズム(アルゴリズム、データ構造、言語構文)がたくさんあるという事実よりも多くのことを体験してもらいたいと考えると、緑のCSメジャーになることは期待できませんソフトウェアエンジニア。

私はCS!= SEであり、あなたがただ学校に行ってSEになることができるかどうかはわかりません(マスターであっても)


+!1:あなたの主張はわかりますが、それは単に「洗練された」ものではありません。多くには、非常に基本的なスキルが不足しています。
スティーブンエバーズ

私はそれがあなたが非常に基本的なスキルと考えるものに依存すると思います。たとえば、SQLは私の頭の中の基本的なスキルですが、CSの卒業生は実際にはかなり弱いことがわかっており、それは予想されることだと思います。あなたは、彼らが言語構文や基本的なモジュール化やOOP概念では弱いと言っているなら、それは大きな問題だと私は別の学校のうちの卒業生を探し始めるだろう
bigtang

私はプロとして14年間プログラミングを行ってきました。SQLを見て、基本的なクエリを作成することもできますが、これらの基本的なスキルでさえ、昨年になって初めて登場しました。SQLはCSではありません。SQLはデータベース理論の実装であり、CSです。
ダッシュトムバン

@ dash-tom-bang:命令型言語の制御フローステートメントを基本と考えますか?私は、大部分を知らない新卒CS卒業生がいることを確認できます。
スティーブンエバーズ

特定の言語でのフロー制御の実装は、「コンピューターサイエンスの基礎」に含まれるとは考えません。ただし、フロー制御を概念として理解していない人は CSを学んでいません。
ダッシュトムバング

10

実際、CSはSEではありません。そして、人々はそれを認めている間でさえ、常に2つを混同しているようです。コンピュータサイエンスは、実際には、計算科学やコンピューティングの科学のような名前に変更する必要があります。実際、コンピューターサイエンスはコンピューターとはほとんど関係がありません。グラフ理論、アルゴリズム分析、データ構造などです。

人々は、新しいCS卒業生が実際にITT卒業生であると仮定したいと考えています。彼らは職業の訓練を受けた人を望んでいます。コンピュータサイエンスは科学であり、プログラミングは芸術です。これらは同じではありません。

これは、なぜ新しい物理学の卒業生が優れた自動車エンジニアではないのかを尋ねるようなものです。馬鹿げています。


2
プログラミングは工芸であり、芸術ではありません。
ダッシュトムバング

6
プログラミングは、クラフト、エンジニアリングアートです。
マチェイピエチョトカ

2
名前を変更しません。コンピューターサイエンスとは何ですか?コンピューターのサイエンスですか?言い換えれば、計算機の研究は、計算の研究を意味します。
マイケルK

1
あなたと同じように人々が混乱したので、名前を変更すべきです。Edsger W. Dijastraを知っていますか?彼はかつて、「コンピューター科学はコンピューターに関するものではなく、天文学は望遠鏡に関するものだ」と言っていました。:)
ブーイング

1
アートは美しさを生み出します。クラフトはユーティリティを作成します。アートはその美のために作成されます。クラフトは、そのユーティリティのために作成されます。アートは役に立つかもしれません。クラフトは美しいかもしれません。ソフトウェアエンジニアリングはユーティリティを作成します。したがって、ソフトウェアエンジニアリングは技術です。
systemovich

8
  1. 少なくとも米国では、教育は全体として利益になりました。学校は、入学者数を増やすために、カリキュラムを全面的に下げています。大学にはこれまでにないほど多くの人々がいます。適切なテクニックを学ぶことは、簡単に教えることができるものではないので、そうではありません。
  2. 個人的に私は通常よりもSEに重点を置きますが、プログラムとしてのCSは産業に参入しようとしている人々にはあまり適切ではないと考えています。より多くの機関が実用的なSEプログラムを提供すべきだと思います。

#1の+1。私は学校に行ったときにこれに気づいた。営利目的の学校であり、生徒の多くはそこにいる資格がないと感じました。さらに、学校はコースごとにしかお金をもらえず、生徒が不合格になったため、生徒はもうお金を受け取れなくなったため、教師は生徒を追い越すために道を外れました。言語を選択してHello Worldプログラムを書くことさえできないと思う程度の学位を持った卒業生が少なくとも1人いました!
レイチェル

あなたは、米国の教育システムや利益の役割に触れているので、ここでは必須のミルトン・フリードマン合唱団です:youtube.com/watch?v=W3Seg0JE1PM
ジョブ

7

CS!= SEの引数は、プログラミングスキルを適切に教えていないことの秘coまたは言い訳です。

いいえ。CSはSEではありません。それは事実であり、言い訳ではありません。

質問1への回答に関係なく、あなたがそのような決定をする全能の立場にいた場合:CSコースでのプログラミングの適切な教育に力を入れますか?

いいえ。天文学者に望遠鏡の構築の詳細を強制するようなものです。または、プログラマーにコンピューター構築の詳細を学習させる。関連するものですが、一人の人がすべてを知る必要はありません。


6

はい、これは私にとって警戒のようなものであり、学問分野としてのCSの未熟さの兆候のように聞こえます。

アメリカ化学会認定BSプログラムでは、理論(講義クラス)と実践(ラボクラス)の両方の特定の能力を実証するために、特定のコースに合格する必要があります。現在のところ、私が知る限り、CSにはそのようなものはありません。

私の大学院の教授の一人は非常に象牙の塔の理論家でした。

私が工業用塗料の化学者として働いていたとき、彼らは私が学士号を持っており、研究室では無能であるという概念に頭を笑っていたでしょう。もちろん、私が研究室でやっていることの詳細は学校の研究室のクラスとは異なりましたが、原則は同じでした-ビーカーとマグネティックスターラーではなく、ペイントミキサーと缶を使用しました。

同じアプローチをCSに適用する場合、CS / SEカリキュラムの実用的なソフトウェア開発スキルとして何を教えるかについての詳細は、学校ごとに、そして時間とともに変化する可能性があります。しかし、それはちょうどそれが誰かがフィールドに学位を取得し、書き込み、デバッグ、および維持で有能であることができなかったことを許容だと私にはクレイジーに聞こえるいくつかのコードのようなものを。(もちろん、それは多くのCSプログラムで実際に物事がどのように行われるかですが、それでもまだクレイジーです。)


クレイジーではなく、流行です。同僚が書いたコードの約90%は、ピサの斜塔と同じくらい保守可能です。
マルセルバルデスオロスコ

5

私は4年は彼らが成長するための良い基盤を提供するのに十分な時間であることに同意します。しかし、実際に役立つのは、業界の人々がカリキュラムの開発に参加し、教室で教えることさえできるようになったことです。昨年、私は地元の大学のソフトウェア開発クラスのインダストリーフェローでした。それは私にとって非常に目を見張るような経験でした。教授と私は一緒にコースの内容に取り組み、開発プロセス、業界のベストプラクティス、および以前に行っていた「現実の」状況に関するより多くの情報を掲載しました。私たちが発見したのは、ほとんどのインストラクターが広く使用され保守されているコードを開発していないため、業界から誰かを連れて来て、それを行うのに必要なスキルを特定して教えるのに役立ちました。


私はそのような何かを試してみたいです。
ChaosPandion

地元の大学に連絡して、そのような大学があるかどうかを確認してください。貴方今は何処ですか?
ベスホワイトゼル

3
  1. はい、それは100%copoutです、彼らは私たちのキャリアを通して役に立つ長期的なスキルを教えるべきです。アカデミアまたは業界に入ることを意図しているかどうかにかかわらず、それが自分だけのものであっても、維持できる方法でプログラムできる必要があります。

  2. はい。ただし、適切なコースでのみ強調されます。個人的に、あなたがアルゴリズムをどのように実装しようとしたかをよりよく理解するためにあなたと話をしなければならない場合、あなたの成績を記録します。

純粋なCS研究を行ったとしても、おそらくあなたのアイデアを実証するコードを作成する必要があります。適切なプログラミングスキルは、ある時点で役に立ちます。大学で始めてみませんか。


長期的なスキルはCSです。「Java」は長期的なスキルではなく、.NET、SQL、Pascal、またはCOBOLでもありません。「長期」とは、「レガシーシステムを維持するために誰かが必要なときに、仕事に満足していること」を意味します。
ダッシュトムバン

基本スキル(CS)が必要であることに同意しますが、記述されているプログラミング言語に関係なく、保守可能で読みやすいコードを記述することを意味します。
ジャストジョン

1
私見CSは、より複雑な問題、ここの周りの多くの人々にアプローチするために必要であり、コードを書くためにCSの学位を必要としませんが、マトリックス10x10百万のデータを処理し、それを操作する必要がある場合、私はどのように理解できないSEは、CS学位を取得しなくても処理できます。
ブーイング

3

私たちの問題は、私たちが認めるよりもはるかに医師に近いということだと思います...私たちは、4年制の学位が学生にソフトウェアを書く準備をさせるべきだという考えを持っています。近くさえありません。

私たちの職業は、他の学問分野と比較して、その初期段階にあります。たぶん、質問は次のようになります。CSをどのように改善して、その学位で卒業した学生が実社会のソフトウェア開発チームの生産的なメンバーになるのに、より短い期間で適しているでしょうか。

たぶん、私たちはもっと薬のようになるべきです。4年間の基本作業(CS学位)およびその後の滞在-経験豊富なソフトウェアエンジニアの監督の下でのクラフトの実践。多分それは私たちがすでに持っているものかもしれませんが、それは形式的ではありません...つまり、居住者のように、私たちは最初の仕事で職場で最も貴重なスキルを学びます。

規律として、これをもっと形式化する必要があるだけかもしれません。


または、マスタークラフツマン/見習いプログラム
オースティンサロネン

1
MDプログラムは科学プログラムではありません。あなたは科学を研究したい、あなたは生物学を取ります。ただし、医学的な問題がある場合は、生物学者に相談することはありません。
デビッドソーンリー

これは非常に良いアイデアです。ソフトウェアエンジニアリングも経験の問題であるという事実を形式化することです。同じことが弁護士と医師にも当てはまります
エミリアーノ

しかし、デビッドについては何を話しているのでしょうか?私たちのうち何人がCSの学位を取得して卒業し、実際に「コンピューターサイエンス」を行うためにキャリアを過ごしていますか 私たちのほとんどが本当にやっていることは、世界に出て、ソフトウェア開発の技術を実践することです。それはMDと同じです:彼らは薬を「練習」します。アプリケーション構築を練習します。
クリスホームズ

@クリスホームズ:私はCSciの学位があなたを最新のホットな言語を使って仕事に就く準備ができているプログラマーに変えることになっているという考えに本当にイライラしています。おそらく、実際のCSciよりもはるかに多くの、そのような学位または証明書のための余地があります。ソフトウェア開発はここでの医学の実践に似ていると思いますが、あなたは医学部から生物学的または心理学部からMDを取得するのではなく、取得します。非常に尊敬される学位ですが、博士号ではありません。
デビッドソーンリー

3

私はCSの学位を取得しており、プログラムの1年間はプログラミングはなく、理論のみでした。プログラミングの学位を取得するのではなく、コンピューターサイエンスの学位を取得すると言われました。プログラマになりたい場合は、コミュニティカレッジに行ってください。

アルゴリズム、設計パターン、および空間言語を使用せずに問題を解決するための多くの理論について学びました。プログラミング言語は行き来しますが、下線の理論は変わりません。

だから、あなたの最初の質問に、いいえ私はCS!= SEがcopoutであるとは思わない。それは事実です。

あなたの2番目の質問に、いや、私はそうは思わない。プログラミングをどのように教えるのですか?ループ、if、メソッド、クラス、およびOOPを超えて、「適切なプログラミング」とは何か、どのようにそこにあるプログラミング言語に関連させるのでしょうか?コードの作成経験が必要です。これは、4年の学位では準備できません。

しかし、私がやることの1つは、現実世界の開発に関するクラスを提供することです。ソース管理、チケット/バグ追跡、コードトレース、およびすべてのジャズは、彼らが新しい仕事で直面することになる卒業生になるための準備をすぐに開始するための良いスタートになります。

私たちが新しい卒業生を雇うとき、彼らはおそらく賞を受賞したコードを書くつもりはないことを理解することは私たちにあると思います。彼らは指導と指示が必要です。


++-優れた点。CSのカリキュラムがこの「現実の世界」に関するクラスを1つか2つ提供してくれたらいいと思います。私の大学で(1993年に)話しましたが、どこにも行きませんでした。
ダッシュトムバング

プログラミングのみの理論のない年を構成するクラスの能力をどのように発揮すると期待されましたか?純粋に筆記試験ですか?
Carson63000

@ Carson630000-課題を書いたり、状態図を書いたり、問題にアプローチして解決する方法や、さまざまなCSの概念をどのように適用するかを示すエッセイを書くこともあります。特定のプログラミング言語ではなく、理論を理解する必要がありました。
ティアナ

2

大学にとって、理論的知識と実践的スキルのバランスをとることが重要です。さまざまなコースに参加しながら、両方を学びました。最初の数年間は、数学とアルゴリズム/データ構造がたくさんありました。続いて選択したのは、コンピューターサイエンス(たとえば、高度な文字列マッチングアルゴリズムを使用してコースに参加できる芸術的なパス)の学習を続けるか、ソフトウェアエンジニアリングに集中するかのいずれかでした。この間も、しっかりとしたプログラミングのバックグラウンドを取得する必要がありました。

ソフトウェア工学を選んだのは、抽象的な問題にあまり興味がなかったからです。しかし、純粋なコンピューターサイエンスが好きな人でさえ、次のことをしなければなりませんでした。

  • ユーザー空間に小さなファイルシステムをプログラムし、linuxカーネルモジュールを作成し、カーネル自体を変更し、純粋なオブジェクト指向ゲームを記述しますSmallTalk
  • 独自の通信プロトコルを作成してから、教師が選択したプロトコルを実装します(以前は共同作業していませんでしたが、2人の学生のプログラムが簡単に通信できるのは本当にクールでした)。
  • でより大きなプロジェクトを作成する Java4人のチームで、
  • 機能的なプログラミングプロジェクトを構築し、
  • C並列プログラミングのためにいくつかの堅実なプログラムを作成します(アイデアは抽象的でしたが、適切な出力を提供しないためにポイントを失う、プログラムが失敗したとき、良いunixのように、レビューはかなり厳しかったです)program
  • Webフレームワークを使用してWebポータルを作成します(選択しました djangoこのフレームワークを気に入ったので、このフレームワーク)。
  • を使用してかなり大きなプログラムを作成しますLAMP(私はまだ悪夢を持っていますがphppostgresql代わりに使用し、MySQLこれを知って非常に満足していますDBMS、今ます)、
  • 誰かが選んだ場合、彼は修士論文のためのプログラムを書くことができます-私はpythonを使用して10k行のデスクトッププログラムを書きましたPyQt

他のプロジェクトがあったのかもしれませんが、私は今それらを忘れていました。

私のポイントは、それはすべて学校に依存しているということです。私Javaは、メイン言語である純粋なソフトウェアエンジニアリングアプローチが非常に嫌いです。私は一度そのような学校に通い、並列プログラミングのためのプログラムを書かなければならなかった友人を助けなければなりませんでした。私は、彼はしかし、そのため、基本的には彼のためにそれを書かなければならなかったsizeof(some_string)では、C文字列の長さを与えます。

正直に言うと、私は数学が嫌いで、痛みを感じていました。抽象タスクの準備をしなければならなかったとき、それはアルゴリズム/データ構造試験で提供されるでしょう。しかし、それは私に一定の強みを与えます:私は非常に抽象的な方法で考えることができます。武道を学び、警備を怠るようなものです(少なくとも、あなたがいるはずの場所では)。コーチは、あなたが手を忘れたとき、あなたが忘れてしまった、またはあなたがそれらを維持するために疲れているので、頭をinり続けます。しかし、しばらくすると、それらを維持するだけです。そして、あなたを顔に当てることは本当に難しくなります。抽象的なアルゴリズムの問​​題でも同じです。アルゴリズム紹介の内容を理解してください。実際に仕事で驚くことはほとんどありません。


良いプログラムのようですね。いくつかの理論。たくさんの練習。
マイクダンラベイ

1

答えはイエスだと思います(ある意味)。

問題は、短時間のプログラミングで子供たちに教えることは不可能だということです。彼らは、プログラマーの論理を考え、どのようにプログラマーの問題を(より小さなスケールで)解決するかを学ぶべきです。

私は学校のプログラムを改訂すべきだと確信しています。私は非常に小さな「第三世界」の国であり、幸いなことに、これを実現するための努力がなされています。OLPCプログラムを実装した最初の国です。http://laptop.org/en/


1

私自身の経験から(私は現時点では学生です)、はい、それは言い訳です。誰もがCSをコンピューターのすべての基礎を教える科学と呼び、SEはプログラミングを明示的に教えるCSの特別な分野と呼ばれます。CSのBSを持っているImoは、優れた最適化されたコードの作成方法を知っている必要があります(プログラミングが専門分野ではない場合でも)。そうです、もし私がそのような決定をする全能の地位を持っていたら、学生に良いプログラミングスキルを習得するように強制するでしょう。


私の学位は「コンピューターサイエンスとソフトウェアエンジニアリング」と呼ばれ、両方の長所、すなわち有能なプログラマーを提供し、大学院や研究に進むのに十分な理論を知っていることを目指しています。それは良いアプローチだったと思います。
マイケルK

1

目標は、世界が必要としている優れたソフトウェアエンジニア(プログラマー)を教育することであると仮定すると、教えられるべきだと思うことを言って答えても大丈夫ですか?

まず、これは重要です。現在、知識の伝達は非常に非効率的です。プログラマー候補者がクラスにいるとき、彼らの心は開かれ、彼らは教えられたものを吸収します。同時に、教授(私は1人でした)は、難解な課題に取り組むことができる学生で大学院のパイプラインを埋めることにあまりにも頻繁に興味を持っています。学生が現実世界の問題に対して準備されていないという異議が提起されたとき、私は教授が彼らの仕事ではないと主張するのを見ました。それが現実の仕事です。

それから、学生が現実世界でプログラマーになるとき、彼らは彼らの新しい同僚から学びたいと思いますか?私の経験ではありません。むしろ、彼らは学校で得た福音を広めたいと思っています。私は学生であり、若い開業医として、世の中の古い仲間たちの間で新しいアイデアを育てるのがどれほど難しいかを考えていたのを覚えています。私は古いファディバディですから、新しいプログラマーに理論と実践の違いに目を向けることがどれほど難しいかわかります。

私は機械工学とその後の電気工学の工学の学生でした。その基本的な部分は、a)数学的基礎、およびb)実際的な問題解決でした。ソフトウェアエンジニアリングは、プログラミングだけでなく、そのようなものでなければなりません。

ソフトウェアエンジニアリング(プログラミング)は、実用的な知識(基本的なオートマトン理論と情報理論)になるのに十分なコンピューターサイエンスで教える必要があると思います。これらを深く掘り下げる必要はありません。基本的なプログラミングスキルを教えた後、自明ではない規模の共同プロジェクトが必要です。これらの重要な部分は、最新の宗教や「次の大きなもの」、あるいは万能なものだけでなく、賛否両論の分析を伴う、特定の問題の代替ソリューションの提案と検討であるべきです。最後に、産業界と学界との間に協力とパートナーシップがあり、アイデアと改善が双方向に伝達され、品質管理が大幅に向上するはずです。


0

できること、すること。教えられないもの。

私の大学では、教師の知識ベースがひどく不足しています。データベース設計でPHDを保持しながら、教師がXMLで半構造化テーブルを表現する方法を理解するのに苦労しているのを見てきました。アセンブリの先生が、コピーして貼り付けたコードスニペットであるときに、私のコードが何をしているのかを尋ねてきました。私のソフトウェア設計の先生は、アジャイル手法はウォーターフォール手法と同じで、より高速で、反復開発プロセスモデルが持ち、3回しか反復できないと言っているのを見たことがあります。私の先生の一人は、elseifの発言が何かさえ知りませんでした。

彼らが「対処」したり、言い訳をしたりすることはないと思いますが、彼らは彼らの経験を最大限に生かしていると信じています。

ここに投稿している他の人たちには、4年は熟練したプログラマーになるのに十分ではないが、私の教師が経験したことも、彼らに経験を積むのに十分ではないことに同意します。Ender's Shadowによく似ています。Beanは、最後のガイドルールである戦争が実際に必要なものを本当に表示するには短すぎたため、戦闘学校の教師が使用するメトリックが不足していることに気付きます。言い換えれば、教師は最善を尽くしていましたが、優れた司令官(この場合は優れたプログラマー)を作るために本当に必要なことを知るための経験がありませんでした。


3
あなたの例の多くは、明らかにあなたの先生があなた自身の利益のために物事を単純化しようとしている場合にすぎないと思います。Those that can, do; those that cannot, teach.私もこれにまったく同意しません。学問と産業のキャリアはまったく異なるライフスタイルにつながります。世界の研究の多くは学者によるものです。そして、元の質問にあなたが答えた方法は見当たりません。
誰も

2
XMLがデータベース設計と関係があるのは、パフォーマンスにあまり関心がない場合に、データベースのバッキングストアとしてXMLを使用できるという事実に加えて、何ですか?一部の教師はポイントを逃すことはできないとは言いません(そのポイントまでのカリキュラムが「風のようなコメント」を教えたときに「過度のコメント」のために削除されたポイントについてインストラクターと議論したことを覚えています)。誰かがJavaを学びたい場合、CSカリキュラムを通過するよりも安価な方法があります。
ダッシュトムバング

1
また、一部の大学は他の大学よりも悪いという事実があり、あなたの大学は特に悪いCS部門を持っているかもしれません。伝統的に、学位を取得したCSの人々は産業界で学問よりもはるかに多くのお金を稼ぐことができたので、学界の人々は実際にそこに行きたい人と現実の世界で仕事をすることができなかった人でした。両方を見てきましたが、比率は大学によって異なると思われます。
デビッドソーンリー

@ dash-tom-bang、XMLは、半構造化データベースのほぼ完璧な例です。en.wikipedia.org/wiki/Semi-structured_model
Malfist

1
このように使用されるXMLは、まだデータベース理論の実装です。それ自体が理論ではありません。
ダッシュトムバング

0

コンピューターサイエンティストとソフトウェアエンジニアは異なります。科学者は、クレイジーな実験を実行し、ソフトウェアエンジニアがより良いものにするために活用するアルゴリズムを考え出す人たちです。

化学者が製薬会社の実験を行っていると考えてください。彼らは化学物質を大量に生産する方法を気にしません。彼らは、マーケティング、パッケージング、流通、またはそれを発見した後に薬に何が起こるかについても気にしません。地獄、彼らは認証プロセスについても気にしません。彼らが気にするのは、被験者に与えたときに効果がある化学物質を見つけることです。会社はそれを超えてそれを移動する責任があります。

コンピューター科学者はそれらの化学者に似ています。彼らがすることは、コードで理論をテストすることだけです。彼らは、コードがどれだけ保守可能かを気にしません。彼らは理論を証明し、次の理論に進みます。他の誰かがそのアルゴリズムをパッケージ化し、大衆に役立つようにし、Kinectを使用したMP3またはコンピュータービジョンまたはiPhoneのストリーミングビデオを用意しています。したがって、CS!= SEは有効な引数です。

質問の2番目の部分をWRT。私が音楽理論の学位を提供した場合、作詞作曲などで必要なコースがあるかもしれませんが、楽器を勉強する必要はありません。希望する知識を探すのは学生次第です。コンピュータサイエンスはソフトウェアエンジニアリングではありません... SEを学びたい場合は、二重専攻を選択してください。


0

Edsger Wybe Dijkstraはオランダのコンピューター科学者でした。

彼は、プログラミング言語の開発への基本的な貢献に対して1972年チューリング賞を受賞しました。

「コンピューターの科学はコンピューターのことではなく、天文学がテレスコープのことだ。」

CSはSEとはまったく異なります。(CS!= SE)。

CSは、コンピューターサイエンスの知識を獲得した科学者です。

コンピュータサイエンスまたはコンピューティングサイエンス(CSと略されることもあります)は、情報と計算の理論的基盤、およびコンピューターシステムでの実装と応用のための実用的な手法の研究です。情報を変換します。

たとえば、コンピューターサイエンスには多くのサブフィールドがあります。

  • 理論計算機科学
  • 計算理論
  • アルゴリズムとデータ構造
  • コンピューターの要素とアーキテクチャ
  • マルチプロセッシング
  • 計算科学
  • 人工知能
  • ソフトウェアシステム

私たちの多くは、毎日の仕事や少なくとも少しでもこのスキルを必要としません。

ソフトウェアエンジニア(SE)は、設計、実装、および変更を専門とする専門家であるため、より高品質で、手頃な価格で、保守しやすく、ビルドが高速です。「ソフトウェアにエンジニアリングを適用することによるソフトウェアの分析、設計、評価、実装、テスト、保守、およびリエンジニアリングへの体系的なアプローチ」

CSの知識として、彼は本当に優れたプログラミング言語を知らなくても、実際の複雑な問題を管理する知識を持っていると考えています。ここで私見は、別のスレッドを開くことができます。ここで、DEGREEは開始点であり、終了目標ではありません。

SEの知識として、彼はこの本当に複雑な問題の発生を管理し、この分野に関するチームまたはプロジェクトの開発を管理する知識を持っていると考えています。

一緒に、SEの助けを借りて、応用科学のCSによって行われた科学の研究を行います。

CSがSEよりも良いというわけではありません。CS!= SEを意味します。

この種の質問は、コンピューター以外の人が、プログラマーとしてオペレーションシステムJ、MのプログラムX、Y、Zの問題を電話で修正できない理由を尋ねるときに自分に尋ねるのと同じ質問です。 N. ;)

実際、セキュリティ分野での10年間のUNIXシステム開発の後、コーディングうんざりしていました。この質問を読んだ後、私は要点を理解しました。

私の職場では、SEとCSの違いを誰も処理できません!それは本当に悪いことです。

CSが悪いプログラミングスキルの言い訳になりうると思うなら、それがCSでありSEであるという点を本当に見逃しています。

私はあなたがSEだと思います、例えば、すべての言語、すべてのパラダイム、すべてのコンピューター言語関連のものは、部分的な再帰関数のセットで数学的に表現できることを知っていますか?同じ再帰的部分関数の新しい抽象化を学習しますか?

楽しむ :)

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