web-dev-qa-db-ja.com

プログラミングの経験がない明るい人に、プログラミングの方法を教えるにはどうすればよいですか?

私のIT部門にはプログラミングの経験はありませんが、賢く有能な人を雇って、既存の.Netアプリケーションをサポートしているエントリレベルの開発者と言ってプログラミングを始めるように依頼されました。私は間違いなくこの人がそれを行うことができると信じていますが、私は彼をスピードアップさせる最も速い方法を探しています。アイデアはたくさんありますが、他の人の考えを知りたいと思っていました。これは彼の学習方法にも大きく依存することはわかっていますが、私は一般的に話しています。

では、質問:開発者以外の人が開発(この場合は.Net)を迅速に行うための最良の方法は何だと思いますか?

100

私は通常、プログラミングを学びたい人のために同じシーケンスを処方します。それは非常に理論的ですが、それは良い土台を築きます。フルタイムの学習には3〜4か月かかるはずですが、プログラミングは一晩で学ぶものではありません。

このシーケンスを通過できない場合は、プログラムを作成することができないので、今はあきらめることもできます。

  1. Charles Petzoldによるコード
  2. Cプログラミング言語、K&R
  3. コンピュータプログラムの構造と解釈、AbelsonおよびSussman。

私のルールは、必要に応じて、力ずくでこれら3冊の本を読み進めることです。あなたが持っているどんな質問でもしてください、しかしあなた自身でそれを理解するのに苦労した後にのみ。おめでとうございます。おめでとうございます。あなたはプログラマーです。Perlを15分で投げられるか、Javaおよびこれらの3冊の本でうまくいかないと、あきらめて家に帰れば、それを手に入れることはできません。

正直に言うと、CとSchemeを学ぶ必要はないと思います。これらは、将来の学習の基盤にすぎません。これらの2つのかなり単純な本は、どちらも表面上は非常に単純です(CとSchemeは非常に簡単な言語です)が、構文の混乱に時間を浪費することなく、プログラミングの本当の技術を非常に深く理解できるため、再配線を始めるのに最適です。あなたの脳は良いプログラマーです。

近道をとって、今すぐ学びたいことを正確に学習する試み(C#やASP.NETから始めるなど)は失敗します。

125
Joel Spolsky

開発者ではない人をすぐに理解するための最良の方法は、(刺激する

成功するためには、プログラミングについて(プラットフォームに関係なく)候補者は情熱的でないとしても、少なくとも好奇心が強くなければなりません

理想的な候補者の場合はジョエルに同意しますが、あまりにも多くの理論を弱い心に詰め込まないように注意します。彼らが刺激を受け、好奇心が強く、願わくば情熱的であるならば、彼らは魔法を見た後に理論を理解したいと思うでしょう。

私は@karudzoに完全に同意します-自己達成と建設的なレビューは非常に刺激的です。

30
jkoreska

私は彼をスピードアップさせる最も速い方法を探しています。

最も簡単な方法は、彼にかかる時間を与えることです、それは簡単に1年になる可能性がありますまたは2つ。

確かに、単純な言語(.NETのことなら、C#)を教えるのは簡単に思えますが、言語を学ぶことはプログラミングを学ぶことではありません。

彼がプログラミングしたことがない場合、少なくとも1つの言語の構文とライブラリの他に、配列、リンクリスト、学んだ言語のコンパイルモデル、モジュール化、リソース管理、パラダイム、パターン、Big-について学ぶ必要があります。 O表記...-エンチラーダ全体。それはすごいことですが、私たちのほとんどはこれらの基本を学ぶためだけに数年かかり、実際のプロのプログラマーになるためにはさらに数年かかりました。

これの多くをカバーする資料があります(たとえば、C++言語を教えるのではなく、C++を使用してプログラミングを教える Stroustrupの最新の本 を教えてください)。それほど多くはなく、すべてをカバーするものはありません。ですから、その男はたくさんの本や記事を読んで喜んで学ぶ必要があります。

これを行う方法については、私はここに貼り付ける本格的なカリキュラムを持っていません。 (ごめんなさい。)
しかし、私がお勧めするのは、彼に1つのプログラミング言語を教えることから始めることです。そうすれば、彼は初期の進歩を早め、有望な結果を得るチャンスがあります。そのような言語を教えるための本はかなりたくさん出回っていますので、慣れ親しんだものを選んでください。本に多くの練習問題があり、彼が喜んでそれらを実行する場合、それらを手助けするために多くの時間を費やす準備をしてください。本に(m)がない場合は、自分の本をよく考え始めますが、彼のレベル/理解速度にそれらを適応させる準備をしてください。
最初の言語がCでもC++でもなかった場合、IMOは次のいずれかを学習する必要があります。 K&Rは、StroustrupのTCPLと同様に、または彼が(あなたの助けを借りて)急な学習曲線に対処できる場合はKoenig/Mooに適しています。私がこれをお勧めする理由は、Cまたは(IMOが望ましい)C++を知っていれば、C#、Java、ObjCなどのC派生物のいずれかを比較的簡単に選択できることです...

残りのために、彼に良い本と記事の絶え間ない流れを彼に提供してください。 1)あなたの会社の文化に適合しなければならない、2)あなたは彼にそういうことを学ぶように彼に言うのを快適に感じなければならないので、私がそれらのあまり多くを提案するのはあまり役に立たないと思います。

12
sbi

.NETでは起動しません。私はこの間違いを何度もしました。時間の関係で、能力のないプログラマーを作成するように雇用主に圧力をかけないでください。 .NETは高速な開発プラットフォームである可能性がありますが、開発者がプロ​​グラミングを学ぶ必要はありません。 C#だけでも、開発者が参照型やオブジェクトの有効期間に行き詰まり、メモリリークが非常に大きくなり(.NETで可能です)、デザインが貧弱になります。 CまたはC++(おそらくC++ではOOPの概念)を使用する必要があるため、おそらくC++で開始し、次のようなことを言うのがはるかに良いでしょう。すべてがオブジェクト指向であり、これらの厄介なポインタのすべてを処理する必要はありませんでした。 "ここにC#とJavaがあります。C++を習得している場合、それぞれが1〜2週間で両方を征服します。 。私はジョエルの連隊をお勧めします。それは私のCS 101教師が私に与えたリストであり、それが理由で数値分析を行ったとき私ははるかに優れていました。これにより、候補者がマスタードを切るかどうかをより早く知ることもできます。また、cとc ++を取得すると、c#とJavaが本の概要を読んだ後、自動的に理解します。理解するだけでなく、 cとc ++を知りませんでした。

7
Jonathan Henson

ペアプログラミング。独自のコード(任意のコード)を記述している間、彼らにあなたを隠してもらいます。数時間以内に、コードを入力してもらい、必要な場合でもキーストロークで何をすべきかを伝えます。彼らのいくつかの質問に答えてください。しかし、それほど遅くはないので、遅くなります。それらをすべて浸してください。また、タイプミスや、思ったより多くのバグを見つけてくれます。数日以内に、彼らは「ナビゲート」を開始して、以前に見たものと同様のタスクに入力するコードを教えてくれます。

開発者として私が知っていることの多くをこの方法で1か月以内に学び、他のいくつかの新しい開発者にこの方法を教えました。そのうちの1人は、数か月後にスタートアップの主任開発者として私を引き継ぐことができました。私たちが一緒に仕事を始めたとき、彼はコードを1行も書いたことがありませんでした。

6
trace

シンプルだが何か解決に役立つものを与える。少しずつ調べて、磨いてもらいましょう。彼らを刺激するのに役立つ小さな成果のようなものは何もありません(プログラミングに興味がない人が

6
jschorr

彼に良いアイデアを与えてください(ビジュアルスタジオ、エクスプレスはまだ良いです)。共通の構文の60%を彼に教えます(yield、linq、列挙型、属性などは除外し、クラス、仮想、オーバーライドを教えます)。デバッガー(特に呼び出しスタック)に時間を費やします。それから、彼が助けを必要とするときはいつでもグーグル「msdn functionanme」に彼に言って、それで彼はすぐに始められるはずです。

また、例外をキャッチして飲み込まないように彼に教えてください。彼はそれを再スローするか記録する必要があることを彼に伝えてください!

おまけ:jsonデータをシリアル化してファイルへの読み書きを簡単に行えるようにする方法を彼に教えます。 dbはやりすぎであり、学習するには多すぎます。カスタムファイル形式を彼に記述させたくないのですが、ファイルの行タイプごとに1つのエントリを渡して、文字列配列を許容できるものとして保存/ロードできます。

2
user2528

私は多くの人々が言語とそれらの言語のための本について話していることを知っています。違います。

プログラミングとは、分析的に考えることを学ぶことです。何よりもまず、人は問題が何であるかについて紙の上でアルゴを考え、思いつくことができるはずです。彼らが正しい思考技術を身につけられるように彼らを導く必要があります。

次は言語の基礎です。選択した言語から始めましょう。プログラムに問題を与えます。

この最初のカットが終わったら、CSの基礎とデザインパターンを実行するように依頼します。

次に、これらの新しい概念を使用して、以前の問題を再プログラミングしてもらいます。

1
Nomad

基本から始めましょう:変数、ループ、whileループ、forループ、配列、基本を教え、画面に出力し、いくつかの簡単な計算を行います。メソッドと基本的なOOPに移動します。ここでは、クラスの作成方法を説明し、方法だけでなく理由を示します。

言語は重要ではありませんが、あなたが知っているものを選んでください、そしてそれは非常に抽象的なものです(Java、python etc ...)そうすれば、彼はメモリ管理などについて心配する必要がなくなります。ポインタなど...再帰の基本、ハニオの塔、または再帰的にディレクトリを検索する方法を教えます。

Rubyプログラミング)の無料の優れたリソースは、プログラミングを学ぶことです。楽しく、簡単で、楽しいものにしてください。

1
Snow_Mac

彼にいくつかの課題を与え、問題を自分で解決するためのリソースを見つける方法を彼に学ばせます。

答えを見つけて自給自足できる方法を彼に教えることができれば、自然にうまくプログラミングする方法を学ぶでしょう。批判的思考と機知に富むことは、プログラマーにとって2つの重要なスキルです。

結局のところ、情熱/興味は間違いなく、彼らがそれを素早く習得する上でどれだけ成功するかにおける重要な要素になるでしょう。彼が「バグ」を持っていないか、キャッチしていない場合、それは遅く、かつ/または痛みを伴うプロセスである可能性があります。もし彼がそのバグを捕まえたら、彼は自分の人生の時間を持って、コーディングを遅くし、勤務時間外になるでしょう。

1
Andy Fleming