1

私は、システム分析と設計に関する 1 学期の大学のコースを教えています。トピックには、設計パターン、UML、OOP、ソフトウェア開発ライフサイクル、およびさまざまな方法論 (アジャイル/スクラム/BDUF/ウォーターフォールなど) の歴史、利点と欠点が含まれます。

コースに参加する学生はプログラミングに触れる必要がありますが、実際には、1 つまたは 2 つの現代言語に堪能な人から、FizzBu​​zz テストにかろうじて合格できる人まで、あらゆる人を見てきました。

私の質問は 2 つあります。学生がこれらのトピックに触れる前に、どのくらいのプログラミング経験が必要だと思いますか (または、コーディングを学ぶ前に学習する必要があると思いますか)、次に、どのような方法が公平で適切だと思いますか?クラスの開始時に事前テストを行いますが、彼らのバックグラウンドには一貫した言語やプラットフォームがないことを知っていますか?

4

9 に答える 9

4

生徒が経験したことのない問題の解決策を生徒に教えることはできません。生徒にこの資料を使って何かをさせ たい場合は、これらすべてのアイデアが解決しようとしている問題を理解できるように、十分なプログラミング経験が必要です。

なぜこの教材を教えているのか、学期の終わりまでに生徒たちにどのように変化してもらいたいのかを自問してください。ホワイトボードで概念を説明できるようにすることだけが必要な場合は、プログラミング経験の量はそれほど重要ではありません。しかし、本当の目標はあなた次第です。クラスの目標を注意深く明確にすればするほど、目標を達成する可能性が高くなります。 何を達成したいですか?

于 2008-12-20T03:58:28.063 に答える
4

生徒は、学んでいる内容を実践できるときに最もよく学ぶと思います。そのためには、コーディングを伴うプロジェクト (またはミニプロジェクト) を含むコースが最適だと思います。通常、これは上級レベルの学部生と大学院生に教えられると思います。この時までに、学生はプログラミングのクラス、離散数学、および基本的なデータ構造のコースを受講しているはずです。技術的な前提条件ではありませんが (プログラミング クラスを除く)、これらの他のクラスを要求できれば、適切なバックグラウンドを持つ学生を獲得できる可能性が高くなります。

事前テストとして、コースの早い段階で設計パターン/OOP を説明するための簡単なプログラミング プロジェクトを用意することをお勧めします。おそらく、クラスの早い段階で割り当てに誘惑されるかもしれないよりも、これらのプロジェクトに対して私はより厳格になるでしょう。プログラミング スキルがコースに必要であることを前もって確認し、そのように採点してください。採点を通じて、その要件が深刻であることを人々に知らせてください。

これは厳しいように聞こえるかもしれませんが、必要なコーディングについていくことができないために、プロジェクト パートナーに頼ってコースを修了する学生が多すぎるのを見てきました。経験を通じて知識を吸収する機会がなかったので、コースから実際に多くを得たとは思いません。

于 2008-12-20T02:46:06.820 に答える
1

私も同じ立場にいましたが、学生はかなりのプログラミング経験を持ち、数学的な知識も必要であると確信しています少なくとも優れた本格的なプログラミング コース、データ構造コース、およびコンピューター編成またはシステム プログラミング コースが必要です。

于 2008-12-20T03:23:07.650 に答える
1

それは、コースの目標/目的、対象者、および結果に依存すると思います.

一見すると、そのようなコースから多くを得るためにプログラミングのバックグラウンドは必要ありません。結局のところ、方法論とテクニックは実際にはコミュニケーションに関するものであり、プログラミングに特化したものではありません。実際、適切に設計を行えば、アジャイル手法を使用した場合でも、不要なプログラミングを大幅に削減できます (そのため、最初に頻繁にクライアントと通信するように指示されます)。

さらに、適切に対象を絞れば、このコースは他の多くのプログラム、学部、および認定のクロスオーバーになる可能性があります。さまざまなビジネスの学位、管理コースなど。マーケティングがこれを望んでいることだけに焦点を当てるのではなく、そのようなコースを受講し、適切なクライアントコミュニケーションの必要性を実際に理解している「管理」の誰かがいたらいいと思いませんか。通常の短すぎる締め切りと合わせて 1 週間?

So I encourage you to think beyond "programmers" as the target audience for such a course. Think of this as a COMMUNICATION course first, and go from there.

Best wishes.

Cheers,

-Richard

于 2008-12-20T05:28:53.403 に答える
1

私は正式なコンピューター サイエンスの教育を受けていないので、その観点から話すことはできませんが、デザイン パターンなどの概念を理解するにはかなりのプログラミング経験が必要だと感じています。

趣味のプログラミングの段階からプログラミングを真剣に考えるようになった経験から、適切な設計によって保守性の高いコードが作成されることがわかりました。BASICのsのスパゲッティコードから、デザインパターンやMVC手法の活用を経験しGOTO、良いデザインに基づくコーディングを真剣に考えるようになりました。

ある程度の経験がないと、学生は「あ、デザインパターンとかあるからいいな」としか思えず、納得いかない。

tvanfossonによる2 回目の投稿でもありますが、プロジェクトをコースの不可欠な部分にすることは、オブジェクト指向プログラミングと設計パターンを利用して、適切に設計され、保守しやすく、再利用可能なコードを作成する方法を実際に示すことができると感じています。

于 2008-12-20T04:03:18.020 に答える
0

IDEとは何か、アルゴリズムとは何か、複雑さを測定する基本的な方法とは何かなど、現代のプログラミングのさまざまな基本的な考え方を紹介するコースの前に行うことができる基本的なコンピュータープログラミングコースがあるかもしれません。学生に与えられる2つの選択肢は次のとおりです。コースが言語に対して提案するものを使用するか、TAや他の人が解決策が受け入れられるかどうかを判断するのに十分知っているこのリストから自分のものを選びます。考慮すべき問題の1つは、Logo、Lisp、Modula-3、Fortranなどのさまざまなエキゾチックな言語で問題がないかどうかです。さまざまなツールの使用方法を理解するという考えは、学界以外では使用できない特定のプログラミング言語を使用するよりも焦点になります。

いくつかの点で、そのようなコースの最終試験は、そのようなコースをスキップできるかどうかを判断する方法として機能します。主なアイデアは、特定の領域内にいくつかの基本を固定することです。これは、小学校の10進数のアラビア記数法で、数十、数百などの値を加算、減算、乗算、除算して配置する方法とは異なります。数学の入門書としてこれらのいずれかを学んだのとは対照的に、数学の基礎です。これらはすべて可能な出発点です。

  1. 正弦、割線、接線などの関数を定義する16進数ベースを使用した三角法、およびそれらすべての逆関数とその逆関数、およびそのような関数のグラフ。

  2. パス、幅優先探索、深さ優先探索、および最小重みスパニングツリーで構成されるグラフ理論。

  3. 複素数システムまたは実数のNxN行列のようないくつかの高次元空間での導関数、積分、偏微分方程式。

  4. 確率と統計理論には、算術平均、幾何平均、中央値、最頻値、最小二乗法、十分な代数を使用した線形回帰など、すべてが理にかなっています。

  5. 順列、組み合わせ、列挙、漸近線などの有限数学。

  6. モジュラー算術および浮動小数点数システム。

  7. さまざまな形状を分類する方法として、角度のタイプと平行な辺を調べるさまざまな形状のジオメトリ。また、ここには、さまざまな形状の周囲長、面積、表面積、および体積の式があります。

  8. 合計の大文字のシグマと製品の円周率とともに、クラスにもたらす特別なものとしての限界と無限のアイデアを持つシーケンスとシリーズ。

  9. AND、OR、XOR、NOTなどのさまざまな論理ゲートを真理値表の形式で含むブール代数。

  10. 行列と線形変換のみを使用する線形代数。

  11. ボードゲームの手がかりに似た論理的な問題。

  12. さまざまな定理の証明を含み、次のような省略形でいっぱいの構文を使用する純粋数学:<=>は、=>が存在するための後方E、存在するための後方Eの後に存在し、一意であるという感嘆符が続く場合に限ります。 「Forall」または「Foreach」修飾子としての逆さまのA、「したがって」と「以来」の1つの配置の3つのドット、および十分条件と比較した必要条件のアイデア、および帰納法による証明。

  13. グループ、リング、フィールドなどの代数の概念。ここには、逆、結合、可換演算の概念もあります。

1人が30人の生徒の教室を持っていて、そのうち10人が北米の基礎教育を受けており、他の20人がそれぞれ数学の上記の12の部分の1つを学びましたが、必ずしも他の部分を学んだとは限りません。「グラフ」のような用語は、複数のブランチが非常に異なる意味を持つ用語を使用する場合である可能性があります。たとえば、(x、y)平面の関数のグラフと、グラフまたはネットのような頂点とエッジのセットさまざまな3D形状を構築する方法の2D表現?それは私が信じているのと同じような状況でしょう。

于 2008-12-24T06:25:58.357 に答える
0

2年ほど前の学生時代。この種のトピックは、最後のコースでよりよく理解されました。このすべてのトピックを把握するには、学生は少なくとも 3 つのプログラミング コース (構造プログラミング、OOP 1、OOP 2) を持っている必要があると思います。学生にゼロからプロジェクトを開始するように促してください (要件の収集 - リリース) 練習 - 練習 - 練習に勝るものはありません

于 2008-12-20T03:01:33.137 に答える
0

Coobird と Tvan は、プログラミングに多くの時間が必要であるという点で完全に正しいです。学習環境では、(コードを実行する以外に) 即時のフィードバックと、さまざまな状況に対処することが重要であることを付け加えておきます。

自分のドッグフードを食べて、要点を伝えるために自分の混乱を片付けることを余儀なくされるようなものはありません.

于 2008-12-20T05:16:13.613 に答える
0

私は長い間プログラマーをしてきましたが、最初に適切なシステム分析を学んでおけばよかったと思っています。

システムを適切に分析し、ソリューションを設計することは、適切なソリューションを作成するための基本的なステップです。システム分析手法は、構築するための基盤を提供します。設計図です。適切な計画なしにアプリを構築するにはどうすればよいでしょうか? それはできますが、通常は混乱します。私がプログラミングコースを持っていたら、これは私が教えることです:

1.システムの分析と設計。
2.MS Projectを利用したプロジェクト企画(PMI研究所)これらのスキルを習得した後は、プロフェッショナルな方法でプログラミングの仕事を引き受けることができます。
3.設計を作成するためのプログラミング ソリューション (VB.NET、C#、C++、ASP.NET JAVA など)。

プロのプログラマーになりたいなら、これらは必要な基本的なスキルです。残念ながら、私が働いていた場所でこれらの項目が施行されているのを見たことがありません. 良い計画は常に役に立ちます。

于 2010-12-22T00:23:29.277 に答える