18

ここでのアイデアは、大学を卒業してすぐに優れたプログラマーを獲得することです。

アルゴリズムは、自分で簡単に習得できるものではなく、ソフトウェアの効率と正確性をより深いレベルで見ることができると思います。

また、実際のプログラミングを教えることも役立つと思いますが、プログラミングについて学んだことのほとんどは職場で学んだので、プログラミング コースのブロックの一部 (すべてではない) をもっと有効に活用できたと思います。

これらの結果は、私が通っていた学校の CS 部門に書きたいと思っている手紙の一部になります。

4

17 に答える 17

25

私はまだ、ソフトウェア エンジニアが職場で働く準備をするのに十分な適切な CompSci コースを見つけていません。次のようなものを見つけた場合 [CompSci と呼べるかどうかは疑問ですが、まったく別の獣である Real-World Software Design に似ています]。

コンピューター サイエンスは、現実世界に影響を与える、より理論的な主題ですが、学術的な観点からはより有用です。たとえば、アルゴリズムの設計は、ソフトウェア エンジニアにとっては非常に役立ちますが、消費者にとっては直接的に役立つわけではありません。たとえば、クイックソート アルゴリズムの構築方法や、リンクされたリストのトラバーサルを理解することは、実際にはそれほど重要ではありません。今日のソフトウェア エンジニアリング環境で役立ちます。もちろん、理論を理解することは、仕事に適したツールを選択するのに役立ちます。誤解しないでください。開発者として、私たちの多くは開発ツールを発展させるためにコンピューター サイエンスの世界の成果に依存しています。彼らにとって意味のあるソフトウェアと、学術的な知性はバラバラになるでしょう。なぜなら、この 2 つは完全に異なる言語を話すからです。

ソフトウェア エンジニアにとってもっと有益なコースには、私が頭のてっぺんから思いつく次のコンポーネントをできるだけ多く (場合によってはそれ以上) 含めることです。

  • プログラミング言語- 基本的なプログラム フロー、パラダイム、構文など。これはたいていかなりよく教えられているので、あまりこれに固執しません。いくつかの完全に異なるクラスのプログラミング言語を教えてもらえると助かりますが、たとえば、私は C、Pascal、VB 3 を学びました(正確なバージョンは覚えていません)。プログラマーが少なくとも 1 つの関数型言語、1 つの命令型言語、1 つの宣言型言語を学べば、はるかに役立つでしょう。
  • デバッグ- nTier アプリケーション [多く/ほとんどの現実世界のアプリケーション] を作成する場合、必要に応じてプロトコル レベルに至るまで、どこで問題が発生しているかを把握できると便利です。これには、WireShark などの分析ツールが役立ちます。
  • 通信デバイス- XML、XQuery、XPath、XSL、XSD [これらは広く使用されているようです]。
  • リレーショナル データベースの設計- これはすでに十分に教えられています。
  • リレーショナル データベースのパフォーマンス チューニング- テーブルを設計するだけでは十分ではなく、特定のフィールドにインデックスを付けるのが適切な場合とそうでない場合を知ることも重要であり、多くのコースではカバーされていないようです.
  • データの正規化これも、多くの場合、適切に教えられているようです。ほとんどの学生は、教えられた理論を吐き出して現実の世界に出てくるように見えますが、「あなたは常にボイス-コッド正規形を使用しなければならない」など、それらの理論の意味を実際に考えることはありません。現実の世界では、ルールを破る非常に正当な理由がある場合があります。
  • クエリの最適化- 基本的なクエリを記述することは、卒業生の快適ゾーンの外側の限界にあるように思われることがよくあります。最適化を教える必要があります。また、学生がアプリケーションのパフォーマンスの問題をデバッグできるように、クエリ プロファイラーなどのツールを教えるべきです。
  • ストアド プロシージャ/トリガー- ストアド プロシージャまたはトリガーを記述したり、効果的に使用したりできる学生にまだ出会ったことがありません。選択/結合/ネストされた選択は、クエリの設計に関して教えられることの限界のようです。
  • 基本的なアルゴリズム- これは私の経験では十分に教えられていますが、多くの学生は、「これこれのアルゴリズムを使用して、この問題を解決してください」と言われずに、どのアルゴリズムがどの状況に適用されるかを決定する方法を知らないようです。あなたが「この問題を解決してください」と言うことができれば、それは役に立ちます。彼らは、オーケー、この状況で役立つアルゴリズムの艦隊を持っています。x、y、または z のためにこれが最適です。ここでは、ソリューションを提供するために適用する方法を示します。
  • 再帰- 再帰を教えることができるアプローチをまだ見つけていません。いつの日か、最も基本的なプログラマーでさえもこれを理解できるような、優れた比喩を見つけることができるでしょう。
  • 抽象化- これは、OOP の中心的な原則の 1 つであるにもかかわらず、多くのコースで見過ごされているようです。
  • コードのリファクタリング- リファクタリングを行うタイミングと、リファクタリングを行わないタイミングを知ることは、ほぼ同じくらい重要です。
  • コードの再利用- 多くのコースが切り貼りサルを吐き出しているようです - これはコードの再利用が意味するものではありません!
  • ソース管理- 私は 3 番目または 4 番目のプログラミングの仕事までソース管理について学びませんでした。コースの一環としてソース管理を学んだソフトウェア エンジニアを一人も知りません。
  • バックアップと復元- これを教えるコースは聞いたことがありません。何人の初心者プログラマーが、バックアップすることを考えていなかったためにすべての作業を失ったでしょうか? 過去に持っていたことは知っていますが、最近ではありません。バックアップについて無知だったわけではありませんが、「私には決して起こらない」ということわざがあります。それあなたに起こり、あなたが失ったばかりのものすべてをデモしなければならない直前になることを保証します!
  • ファイル システムのメンテナンス- いくつかのコースではこれについて簡単に触れていますが、多くのコースではそうではありません。
  • 質の高い設計仕様書の作成- これは常にコースワークの概要として提供されているように見えますが、学生が自分でこれを設計するように求められることはめったにありません。作業範囲を記述し、ドキュメント テンプレートを理解することは、ほとんどのソフトウェア コースの範囲をはるかに超えているようです。
  • ユーザー ドキュメンテーション- ユーザーはあなたのように考えていません。「一目瞭然」または「馬鹿でも使えるほど簡単」なソフトウェアをユーザーに渡せば、あなたの顔は爆発します。「今日のプログラミングは、ソフトウェア エンジニアがより大きく、より優れたばかげたプログラムを作成しようと努力し、宇宙がより大きく、より優れたばか者を生み出そうとする競争です。これまでのところ、宇宙は勝利しています」という有名な言葉があります。8 歳児が従うことができるユーザー ドキュメントを作成します。それを作成するのは面倒に思えるかもしれませんが、一度作成すると、いつまでも自分自身に感謝することになります。
  • テクニカル ドキュメンテーション- つまり、学生がサンドキャッスル、nDoc、またはその他のドキュメンテーション ツールを使用できると便利です。
  • テスト計画- テストを可能にするテストとソフトウェアの設計。nUnit などは、ソフトウェア開発コースで教えるのに最適なツールです。実際、テストフレームワークを教えることは、何も教えないよりも良いでしょう...そうであるように思われます。
  • FAT/SAT/UAT テスト- サニティ チェック、工場受け入れテスト、ユーザー受け入れテストなど、現実世界でのさまざまなテスト シナリオを理解しておくと役立ちます。ソフトウェアのサインオフは、開発と同じくらい重要です。クライアントが得ていると思っていたものを提供しなければ、あなたのソリューションが技術面でどれほど素晴らしいものであっても、報酬を得ることはできません。
  • ソフトウェア アーキテクチャ- 実際の n 層アプリケーションのさまざまなコンポーネント、それらを使用する利点と欠点を理解します。
  • ユーザーとの交流- これは実際にはコンピューター サイエンスではないかもしれませんが、自分とは波長が合わないことが多く、自分と同じように考えていない人と話す方法を学ぶことです。これはコミュニケーションにも関係しますが、実際には開発者が必要としているものです。知っておく必要があります。
  • 常識- Ding, Ding, Ding, Ding - これをまったく知らないプログラマーはたくさんいます。コースは、自分で考えることができることを証明するように設計されています。多くの卒業生が、理由や意味を考えずに、教えられたルールを盲目的に適用するだけでよいと考えて、現実の世界に来る理由がわかりません. 前に言ったことを繰り返します。現実の世界では、ルールを破るのに十分な理由が見つかることがあります。私たちはそれらをやみくもに追いかけたり、やみくもに壊したりしません。ソフトウェア開発は芸術であり、すべての芸術と同様に、ルールを破ることができるときとできないとき、そして同様に重要なことに、ルールを破るべきときとすべきでないときを知る必要があります。卒業生として、あなたはルールを学び、それを証明しました。
  • 聞く- 開発者が、実際にユーザーの話を聞いて実際のニーズを理解するのではなく、「顧客が何を望んでいるかを知っていると思った」ために書かれたコードを何度も目にすることに驚かれることでしょう。
  • 理解- 聞くことと密接に関係しています。
  • コミュニケーションスキル
  • 技術的に無能な人、つまりユーザーベースの大部分と話す
  • プロジェクト調停- 小切手を書いている人にあなたのアイデアを販売する
  • 優先順位付け- どの機能が他の機能よりも重要であるかを決定する方法。
  • 予算編成- 時間の見積もり
  • 時間管理- 周りの人があなたの時間を邪魔し、締め切りを気にしないときに、時間通りに物事を終わらせる方法. 明日の終わりまでにまだ始めていないコースの仕事を持っているときに、すべての友達がパブに行ってパイントまたは10を望んでいるときと同じように.
  • スコープ クリープ- いいえ、それは仕様/予算に含まれていません。

そして、コースでこれらすべてをなんとか習得できとしても、まともな能力を持つソフトウェア開発コンサルタント会社での 3 ~ 4 か月のインターンシップで、コース全体よりも多くのことを学べると思います学士号を取得してから最初の 6 か月で、3 年間のコース全体よりも多くのことを学びました。確かに、そのコースで学んだことの多くがなければ、私は顔を真っ白にしていたでしょうが、はるかに有用なコンテンツに置き換えることができた、不必要に教えられたことがたくさんありました.

于 2009-05-21T21:20:19.540 に答える
17

実際の会社でソフトウェアを書いて夏を過ごすクラスです。

真剣に、CS クラスは優れたプログラマーを育成するためのものではありません。彼らは、副作用としてソフトウェアを書くこともできるコンピューター科学者を生み出すことを意図しています.

于 2009-05-21T21:21:21.210 に答える
4

コンピューター サイエンス != プログラミング。

より優れたプログラマーを探している場合は、2 年制の大学プログラムで特にそのことに焦点を当てた教育を受けている人を探してください。

于 2009-05-21T21:11:10.217 に答える
4
  • ビジネス101
  • オフィス政治 200
  • 現実の世界で学術的なものは何もありません

実際には、プログラミングの仕事に足を踏み入れると、初日から上級開発者になることは期待されていません。コーディングの基礎を学ぶには確かに長い道のりが必要ですが、増加傾向にあると、かなりの数のコンピューター サイエンスの学生が現実の世界で苦労しているのを目にします。彼らは初日に自分が何に取り組もうとしているのかを本当に理解していないからです。彼らは、他のビジネス関係者と誰とコミュニケーションを取るべきかを知りません。

于 2009-05-21T21:13:05.203 に答える
4

最も重要で関連性のあるものは、CS コースではありません。よくコミュニケーションを取る必要があります。より良い聞き手/読み手、そしてより良い書き手/話し手になるためには、どんなコースを受講しても構いません。

于 2009-05-21T21:28:19.667 に答える
4

プロジェクトを構築することで得られる知識に勝るものはありません。リレーショナル データベースのコースを受講している場合は、ライブラリ システム プロジェクトを構築します。アセンブリ言語を受講している場合は、32/64 ビット アセンブリを使用した PC ツールなどを構築します。 .

コースを受講して高いGPAを取得するだけではなく、「プログラミング」を行うことによってのみ、より良いプログラマーになることができます.

于 2009-05-21T21:14:54.810 に答える
2

これは、データベース システムとソフトウェア エンジニアリング プロジェクト コースを結びつけるものだと思います。どちらのコースも私の学校では学士号を取得するために必須ではありませんが、学部生は受講できます。ほとんどのプログラマーにとって、アルゴリズムよりもデータベースに関する知識の方がおそらく必要です。プロジェクトチームで作業することは、コースプロジェクトであっても、チームのダイナミクスとチーム環境での作業方法を理解するのに役立ちます.

一方で、データ構造、アルゴリズム、オペレーティング システムなどの基本的なコンピューター サイエンスのトピックを十分に理解することは、プログラマーとして成長するための準備に不可欠であると固く信じています。

于 2009-05-21T21:13:45.687 に答える
1

私が受講したコースを最大限に活用したのは、データ構造とアルゴリズムだと思います。知識は技術の進歩とは無関係であり、あらゆる種類のプログラマーが使用する基本的なツールを提供します。

于 2009-05-21T22:16:33.843 に答える
1

データベース設計

関数型プログラミング

オブジェクト指向プログラミング

x ドリブン デザイン

于 2009-05-21T21:11:54.927 に答える
1

ある種のコミュニティサービスプロジェクトとして何かを構築するために必要なクラス。これには、ソフトウェア エンジニアリングの戦略全体を使用して学習する必要がありました。

とはいえ、教師が、物事をできるだけ難しくすることを目標とするクラスにいくつかのスクリューボールを配置することを決定しない限り、このようなコースは非常に不足しています...

于 2009-05-21T23:59:19.253 に答える
1

私の見解 (英語の IT ディレクターとして) は、オフィスでの 1 日は学校での 1 週間の価値があるため、経験を積む方法を見つけることができれば、それだけの価値があると考えています。

それ以外は、自分の能力に自信を持ち、自分の強みを発揮し、知らないことは何でもグーグルで検索する準備をしてください!

通常の IT の群衆から目立ちたい場合は、適切にコミュニケーションできることを確認してください。多くの「トップ」卒業生がそれを実現できないのは驚くべきことです。

于 2009-05-21T21:27:52.380 に答える
1

学部時代のデータ構造とアルゴリズムのコースは、職場で大いに役立っています。

于 2009-10-18T21:11:59.447 に答える
1

それはすべて、何をプログラムしたいのか、どのような問題に関心があるのか​​によって異なります。

明らかに一般的なコンボ

  • 離散数学(あなたの論理、グラフ理論、いくつかの数論と再帰)

  • アルゴリズム設計(さまざまな問題解決モデル、設計パラダイムの学習、コンピューター リソースの考え方)

  • ソフトウェア エンジニアリング(ソフトウェア プロジェクトの管理、既存のコンポーネントの操作、ペアまたはグループでの操作、バージョン管理、パターンなど )

  • プログラミング集中コース (私はこのコースを受講しました) は、問題へのアプローチに関する一般的な考え方、コードを 1 行書く前に自分の考えをまとめること、さまざまなプログラミング パラダイムに触れることを教えてくれます。

    ほとんどのプログラミングの課題に備えることができます。

その後は、どのドメインで作業したいかによって異なります。アドバイザー、大学の先輩、教授に尋ねて、あなたの目標と興味について話してください。彼らはここにいる誰よりもあなたにアドバイスします。

ただし、批判的思考を無視しないで、授業を書いてください。自分のアイデアを発表し、人前で話す準備ができるクラスを受講してください。

于 2009-05-21T21:38:11.283 に答える
1

大学を出たばかりの優秀なプログラマー?学校が結束、結合、適切なプログラミング プラクティス、バージョン管理、構成管理、最新の開発モデルなどの概念を教え始めるまで、私はそうは思いません。私がよく目にするのは、自己学習者が自分で正しいことを学びたいと思っているか、運が良ければ、良いことを説き実践する組織に雇われていることです。

于 2009-05-21T21:39:56.867 に答える