学校でソフトウェア開発コミュニティをブートストラップするにはどうすればよいですか?


14

私は南フロリダ大学の学生で、コンピューターサイエンスプログラムの教育環境に不満を感じています。今、私は「プログラム設計」を取っています。プログラムを読みやすく保守しやすくするために、ソースコードを関数とモジュールに整理する方法を学ぶ必要があります。代わりに、Cの配列と再帰について学習しています。次の学期では、C ++で教えられる「オブジェクト指向設計」を採用する必要があります(shudder)。

2年前、私はプログラミングに夢中になり、それ以来、できる限り多くのことを学んでいます。別のC ++クラスを受講する見込みがあるため、ほとんど涙が出ます。そのため、同様に野心的な学生に会い、新しい言語を学び、ソフトウェア開発のトピックについて話し合い、他の学生の開発者と協力するために、プログラミングクラブを立ち上げると思いました。

しかし、私のソフトウェア開発経験を共有している他の学生はいないかもしれないことに気づき始めています。それは動機の欠如ではなく、機会の欠如によるものです。私は他のプログラミングクラス(「プログラミング言語」)を1つだけ知っており、実際のソフトウェア開発のクラスはありません。それ以外の人は、CとC ++で簡単なスクリプトを書いた経験しかありません。

他の学生向けソフトウェア開発者と協力したい場合は、自分でトレーニングする必要があることに気付きました。現在、私はクラブをソフトウェア開発のブートキャンプにし、最新のツールと言語を使用してソフトウェアを開発する方法をメンバーに教えることを計画しています。明らかに、非公式のソフトウェア開発コースを開始することは、多くの可能なアプローチを伴う途方もないタスクです。読者への私の質問は

攻撃の計画は何ですか?

したほうがいい

  • クラブの仕事と宿題のバランスをとろうとして自分でクラブに講義しますか?
  • CSの教員に、メンバーに関係のない専門知識の範囲内でトピックを教えるよう依頼してください。
  • 私のワークロードを共有できる同情的で経験豊富な開発者を学校内外で見つけようとしていますか?
  • ビデオ講義(MIT OpenCourseWareGoogle Tech Talksなど)を表示しますか?
  • 実践的なプログラミングワークショップを開催しますか?
  • 宿題を割り当てますか?
  • 他に何か?

3
OOPがC ++で教えられるのをぞっとするのはなぜですか?高レベルの言語を扱うことに不快感を覚えていますか?もしそうなら、どのようにOOPを学ぶと期待していますか?
カム

4
@Evan:率直に言って、C ++が低レベル言語だと思うなら、C ++コースが最適です。あなたは多くを学びます。C ++は初心者に低レベルの機能を提供するため、最初は低レベルに見えるかもしれませんが、使用する必要はありません。実際、ほとんどの場合、STLとそのすべての高レベルOOP機能を使用します。
カム

10
C ++は、たとえばJava、Ruby、Javascript、C#などと比較して低レベルです。他の多くの言語と比較して高レベルです。無意味な議論のようです。
フィッシュトースター

2
@fishtoaster:c ++はjavaやc#に比べて低レベルだとは言いません。少なくともそれらの言語と同じくらい高レベルです(他の言語についてはあまり知りません)。低レベルであるという利点が追加されているため、両方の利点を最大限に活用できます。
n1ckp

1
@ n1ck:当然のことながらポインター(私はC#にそれらを持っていることは知っていますが、その使用はまれです)、手動メモリ管理、ラムダなし(C#が与える名前がわからない、Pythonはラムダを使用します)、ネイティブforeachなし、はるかに小さい標準ライブラリ、より頻繁なビット調整、さまざまなプラットフォームに必要な再コンパイルなど。これら2つよりも低いレベルのアセンブリである必要はありません。
マーチャ

回答:


20

率直に言って、あなたの態度全体が私に関係しています。あなたはグループを一緒にすることすらしておらず、すでにあなたはあなたが伝えたい知識を持っている唯一の人であり、グループが何をするかを決めるべきだと思っています。

最善の策は、初期グループをまとめ、グループとして、彼らがやりたいことをブレインストーミングすることです。あなたが個人的にやりたいことは、グループがやりたいこととは無関係です。最初の会議の前に他のグループメンバーの入力なしで何をすべきかを決定すると、あなたは私が自発的に働きたくない慢な馬鹿として出くわします。したがって、開始する前にグループを殺すことになります。


あなたは、絶対に正しい; 自分でクラブの定石マスタープランを策定し、実施する必要はありません。それでも、クラブの活動や会議のアイデアがクラブの他のメンバーと話し合う必要があります。
エヴァンクロスケ

5

クラブの全員が自発的に来ているので、面白くてやる気にさせる必要があります。そして、宿題がきっかけではありません。

誰にでも教えるのは難しいですが、最後に目標を設定して、手の届かない方法で教えてみませんか?基本的には、最初は皆さんと一緒になって、グループプロジェクトと言語を考え出します。プロジェクトは興味深いものであり、目に見える進歩を示すことができる必要がありますが、それほど難しくはありません。言語が決まったら、基本(構文、パッケージ/名前空間、クラス、静的/動的型付けなど)を教えます。次に、リソース(書籍、オンラインチュートリアル、オンラインドキュメント)、簡単な方法、プロジェクトの特定の部分を提供します。その後、各人が空​​き時間にプロジェクトに取り組み、必要に応じてドキュメントとあなたに相談します。

このプロセスの利点は何ですか?

  • 人々はあなたや他の誰かが毎回のミーティングについて無言で聞いて退屈しない
  • 人々は自己教える方法を学ぶ、非常に重要な実世界のスキル
  • あなたは知識の唯一のリソースではないので、あなたは自分自身を過度にコミットしていません
  • 言語を紹介するだけでよいので、教える前に言語全体を知る必要はありません。そして、彼らが何かについてあなたに尋ねる必要があるとき、あなたはすぐにそれを研究することができます。ただし、他のすべての人よりも少し先を行く必要があります。これは、5つのステップが何であるかを知る必要があるためです。
  • あなたは人々をやる気にさせる何かを作成しています

動作するかどうかを確認する唯一の方法は、試してみることです。


クラブの会員数を10人未満の学生に抑えることができれば、グループプロジェクトを行うことをお勧めします。それを過ぎると、チームは扱いにくくなり始めます。しかし、学生のクラブへの参加を禁じると大学のサポートを得ることができず、10人以上の学生がクラブへの参加に興味を持つことは確実です。私たちのハッキングクラブには、毎週の会議で常に30人以上の学生がいます。
エヴァンクロスケ

1
だから複数のプロジェクト?すべてのグループメンバーの共通の興味を見つけてください。最初に会議で個人的な興味を調査し、次にそれらのプロジェクトを中心に展開するプロジェクトを考え出そうとしますか?
クリス

4

専攻のコースフローチャートを見ると、コンピュータサイエンス専攻のさまざまなクラスで何が期待されるかを本当に誤解しています。

あなたが話しているクラスは、コーディングのさまざまな基本概念を学生に紹介する入門クラスです。「プログラミングコンセプト」のように見えますが、実際のコーディングなしで、コンピューターサイエンスのすべての基本的な分野の1週間の概要を含む職業の紹介です。そこから、それはだNORMAL Cでの入門コースを持つこと、およびC ++での別の入門コースですNORMALコンピュータサイエンスの主要なため。ある程度のコーディング経験があるとプログラムに参加するかもしれませんが、ほとんどの人はそうではありません。プログラムは教える必要があります再帰などの概念、クラスの記述方法、演算子のオーバーロード、テンプレートなどすべて(変数、forループ、ifステートメントなどの教示は言うまでもなく)、基本的に2つのクラスがあります。プログラミング言語でコーディングする方法を教えます。そして、彼らは通常、あなたの大学のクラスが行うような誤解を招くような名前を持っています。希望する組織のレベルを教えるクラスは、通常「ソフトウェアエンジニアリング」または「デザインパターン」と呼ばれます。前者は通常要件であり、後者は通常選択科目(おそらく大学院レベル)ですが、両方とも選択科目である場合があります。

コンピュータサイエンスのカリキュラムがソフトウェア組織に焦点を当てているかどうか、専攻を再編成すべきかどうか、およびコンピュータサイエンスとソフトウェアエンジニアリングが異なる専攻であるかどうかについて、学術および業界の議論がありますが、現在のところ、コンピュータサイエンスプログラムはNORMALです

(そして、そこにハングアップする-別の学期または2に、あなたがなりより多くのあなたはすでに自分自身を教えていない事柄を教えるクラスに挑戦を取得します。)


「普通」に満足していません。私は大学を卒業してソフトウェア開発の世界クラスの教育を受けたいと思っています。それを達成するために(一生懸命に)働きたいです。私はUSFではなくMITに移行するつもりだったので、理想的なCS教育としてMITのコンピューターサイエンスおよびエンジニアリングプログラムを使用しました。
エヴァンクロスケ

@Evan @Kenへえ。それから私の大学は私が普通でないと考えるでしょう。コンピューターアプリケーションの紹介(Wordの使い方)->コンピューターロジックとアルゴリズム(フローチャートとブールロジック。実際にはアルゴリズムはありません)-> C ++でのプログラミング(構文、OOP、基本)->詳細C ++でのプログラミング(アルゴリズム、再帰、ポインター)-> Javaでのプログラミング(基本的なC ++と同じこと)-> Cobolでのプログラミング(まだ
大した

1

プログラミング競技はどうですか?Perl Golf(またはPHP Golf)のようなものでさえ、可能な限り最小限のコードを使用して問題を解決するために人々(またはチーム)が働いていますか?言語や競技についてさらに学ぶための素晴らしい方法は、常に物事を面白くします。

もちろん、コンペティション以上のものを提供する必要がありますが、セットアップは非常に簡単で、常に楽しんでいます。


1

何らかの構造が必要なのはあなたです。あなたは自分自身と他の人に強制的に学習させたいだけでなく、単にソフトウェアに夢中になったり、お粗末なコースの選択に夢中になったりするのではありません。しかし、先生が行く方法であるので、これをあなたとのクラスとして扱うかどうかはわかりません。あなたはまだ専門家ではなく、あなたも何かを学ぶためにこれに参加しています。

ソフトウェアプロジェクトを中心にクラブを組織するのはどうですか?おもちゃの宿題プログラムではなく、実際に役立つと思うもの。(「わずかに役立つ」は依然として「役に立つ」とみなされることに注意してください。あなたは、スタートアップを見つけるのではなく、実践して学ぼうとしていることになります。)チームは、使用する言語、仕様、労働を分割する方法などを決定し、自分の時間に個別に作業します。その後、毎週のクラブ会議で、どのように対面するか、障害物がある場所、学んだことなどを話し合います。

私はまた、ゲスト講師を、あなたや他の誰かが共有する価値があると思っている教員、専門家、またはビデオに連れて行くというアイデアが本当に好きです。したがって、次のように夜間の会議を開催できます。

  1. それをよく知っている誰かからのいくつかのソフトウェアのトピックに関するゲスト講義。
  2. 講義に関するQ&A / gabセッション(できれば講師が参加しますが、ビデオを見るためだけに参加してください)。
  3. プロジェクトチームに分かれて、プロジェクトを行います。

それは夕方を取り、知識を高める良さに満ちています。うまくいけば。

とにかく、私はあなたにこのプロジェクトで幸運を祈ります。あなたが地面からそれを得るとき、私はあなたがここに戻って、それがどのように働いているかについて私たちに話すことを望みます。


1

グループプロジェクトは素晴らしいアイデアです。特に、プロジェクトが大学や同級生を助けることができるものである場合。

大学で学生向けのプロジェクトに取り組んでいたグループに参加しました。
最も人気のあるプロジェクトは、キャンパスの360度のバーチャルツアーでした。
必要な機器を購入し、キャンパス周辺で写真を撮り始めました。次に、ツアーを収容するWebサイトを構築し、ホスティングを把握し、大学のWebサイトで入学希望者向けに紹介しました。このプロジェクトは、プログラミングタスクだけでなく、非プログラマーにも興味を持たせました。

使用するだけでなく、キャンパス内の全員が使用したい新しいWebサイトまたはアプリケーションを特定してみてください。目標を念頭に置いているかどうかを学ぶ方が簡単で楽しいと思います。


私はこのアイデアが本当に好きです。私の新しいクラブが大学のITシステムに追加または改善できる方法はたくさんあります。好奇心から、どこに大学に行きましたか?
エヴァンクロスケ

ペンシルバニア州クラリオン大学。面接官が息子の大学の検索にツアーを使用したことを言及した面接にも行ったことがあります。とてもクールでした。
トッドバンバーガー

1

これが課外活動になる場合は、宿題をしないでください。それは単に足の不自由です。

学校でgithubグループを立ち上げ、ポスターやメールを送信するだけで、何かクールなことが得られるでしょう(最近の子供たちもFacebookやTwitterを使用していると思いますか?本当に一緒に興味を持っている5〜6人のグループができたら、プロジェクトを決めて、それで作業します。

興味がなければ、あなたが適度に熟練していれば、オープンソースプロジェクトに参加するのはとてつもなく簡単です。githubで興味のあるものをフォークするだけで、開発者と話し始めることができます。

前世代がそうでなかったという利点は、地理的に非常に異なっているのに、あなたのレベルの、そしてあなたの言語のプログラマーに接続することがまったく難しくないということです。そして、私はメールを送るだけではありません。Skype / iChat / Ventriloは音声会議を簡単にし、git / mercurial(および関連するプロジェクトページ)などのツールを使用すると、大西洋の反対側にいる場合でもグループとして簡単にコーディングできます。それがあなたがやりたいことなら、最近社会的にコーディングしない理由は本当にありません。

最後に、知っている/知りたい言語で人々を判断する習慣を作らないでください。これは、C ++がプログラミングの限界を表していると考える人々の群れの中で唯一のSmalltalkerである場合に陥りやすいトラップですが、多くの友人を獲得できず、特定のツールに対する偏見を与えます。同じプロジェクトで LISP、Perl、C 使用したことのあるスキルと経験が私の先を行くハッカーに出会いました。プロの開発者ヒープのトップにいる人々は、仕事をしている限り、ツールのレベルをあまり気にしません。


1

これはネットワーキングの機会のように聞こえますが、同じレベルの経験/トレーニングを持つプログラミングに興味のある学生がたくさんいると確信しています...あなたはそれらを見つけていないだけです...

タンパベイ地域のコードキャンプ(開発者関連の無料トレーニング)に参加しましたか、それともローカルプログラミングユーザーグループに参加しましたか?

これらのリソースは両方とも、ネットワーキングの機会を提供します。また、仲間の学生を訓練する必要があると感じる代わりに、友人を一緒に招待して、何がカバーされているかを話し合うことができます。

また、キャリアとしてプログラミングしている人々にアクセスし、「現実の世界」でどのような状況に陥る可能性があるかを知ることができます。

これらのローカルリソースを探索した後でも、独自のプレゼンテーションを行うことで知識を共有する機会があることに気付く場合がありますが、これは素晴らしいことです。学んだことをユーザーグループやコードキャンププレゼンテーションのスピーカーとして共有することは、学んだことについてフィードバックを得る良い方法であり、さらに学べるようになります。

私はタンパベイ地域で育ち、マイクロソフトが無料で主催する多くのイベントに参加しました。ローカルユーザーグループには、それらのイベントに参加する方法に関する情報も必要です。

まあ、これは長い巻き返しの返信でした...

タンパコードキャンプのウェブサイトによると、タンパでの次のコードキャンプは2010年11月13日です。

ローカルINETA /プログラミングユーザーグループへのリンクは次のとおりです。

http://www.tampadev.org/

(このグループは初めてで、1つのリンクしか含めることができませんでした。)


1

あなたのグループが貢献することに興味があるオープンソースプロジェクト(または複数)を見つけてみてはいかがですか?

あなたが直面する可能性のある最大の課題は、コードを書くのは楽しいが、すぐに痛みを伴う体験に変えることができるのは周囲の管理者などすべてだということです。既存のオープンソースプロジェクトを見つけることができる場合、少なくともサポートフレームワークの一部を用意する必要があります。

オープンソースはいくつかの良い習慣を身に付け、寄稿者の何人かと比べると耳が少し濡れますが、他の人よりも大きな利点があります-あなたはすべて同じ場所にいて、通常、オープンソースコミュニティでの作業の最大の痛みの1つである、チームメンバーとの会話を行います。

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