web-dev-qa-db-ja.com

実践による学習(および試行錯誤によるプログラミング)

機能するコードを生成し、コードベースをクリーンに保ちながら、新しいプラットフォーム/ツールキットをどのように学びますか?

基盤となるプラットフォームとツールキットで何ができるかを知っているとき、私は通常これを行います:

  1. 新しいブランチを作成します(私の場合はGITを使用)
  2. いくつかの単体テストを作成します(JUnitなどを使用)
  3. テストに合格するまでコードを書く

ここまでは順調ですね。問題は、ツールキットがまったく新しいため、ツールキットで何ができるかわからないことがよくあるということです。私はコンサルタントとして働いているので、希望の言語/プラットフォーム/ツールキットを持てません。私は、お客様が目前のタスクに使用するものすべてに対応する必要があります。

ほとんどの場合、ほとんど知らない大きなツールキットを(急いで)対処しなければならないため、「実践して学ぶ」(実際には「試行錯誤」によるプログラミング)ことを余儀なくされ、これが不安になります。

学習プロセスのある時点で、通常私はすでに持っていることに注意してください:

  1. 5つ星の本を1冊以上読む
  2. 1つ以上のWebチュートリアルを実行した(一度に1行ずつ作業コードを記述する)
  3. IDE(現時点ではIntelliJIDEA。Eclipse、Netbeansなども使用しています。)を使用して、いくつかの小さな実験プロジェクトを作成しました。)

すべての努力にもかかわらず、この時点では通常、使用しなければならないプラットフォーム/ツールキットの大まかな理解しかできません。私はまだすべての詳細を把握することはできません。つまり、いくつかのデータ準備といくつかの重要なアルゴリズムを含むすべての新しい機能は、実装が面倒であり、多くの試行錯誤を必要とします。

残念ながら、試行錯誤による作業は安全でも簡単でもありません。実際、これは私を最も不安にさせるフェーズです。新しいツールキットを試し、作業中のコードを生成し、コードベースをクリーンに保ちます。

通常、この段階ではEclipseスクラップブックを使用できません。これは、記述しなければならないコードが、この小さなツールではすでに大きすぎて複雑であるためです。同じように、新しいコードを適切に試す必要があるため、独立した小さなプロジェクトを実験に使用できなくなりました。コードを適切に記述し、GITを利用して安全な救済を行うことができます。この種の絡み合った、半熟したコードは急速に管理が非常に難しくなるので、これは私を不安にさせます。

開発プロセスのこの段階にどのように直面しますか?

コードベースを混乱させることなく、どうやって学習するのですか?

ヒントとコツ、ベストプラクティスなど。

5
AlexBottoni

私は最善の解決策は、そのようにして学習しないことです。

すぐに問題を解決しようとするのではなく、理解できないことを切り分けて、まずそれを理解します。

ささいな例を考えてみましょう。NETフレームワークでNullableがどのように機能するかはわかりません。それを使用してコードを記述しようとするのではなく、サンプルアプリケーションを作成して、それをいじってみてください。

例えば:

public static void Main(string[] args)
{
    var test = new int?();
    Console.WriteLine("new int? - {0}", test);
    test = 0;
    Console.WriteLine("0 - {0}", test);
    test = 1;
    Console.WriteLine("1 - {0}", test);
    test = null;
    Console.WriteLine("null - {0}", test);

    Console.WriteLine("test == null - {0}", test == null);
    Console.WriteLine("test.HasValue - {0}", test.HasValue);
    Console.WriteLine("test.GetValueOrDefault() - {0}", test.GetValueOrDefault());
    Console.WriteLine("test.GetValueOrDefault(2) - {0}", test.GetValueOrDefault(2));
}

あなたが見つけた例を投げて、何が起こるかを見てください。これにより、ツールを使用して複雑なコードベースを実行しなくても、慣れ親しんだ探索の単体テストスタイルを実行できます。

これは既存のコードベースで動作する場合があることに注意してください。ただし、実行環境に関する想定には注意してください。 DLLを呼び出すDLL ====を呼び出すと、EXEからIIS環境で実行されると、奇妙なエラーが発生する可能性があります。

1
Guvante

いくつかの本やドキュメントを読んだとすると、そこから先に進む唯一の方法は練習することです。あなたがコンサルタントであるときに、すでに必要なプロジェクトがあるので幸運です。

一般的に、あなたの現在のアプローチは正しいと思います。

君は

a)背景と理論を学ぶ。

b)TDDのテストを作成します。

c)作業を開始します。

追加したいのは

d)すでに行っていることを行うためのより良い方法を学習/発見したときにリファクタリングします。

上記は常に新しいフレームワークへの正しいアプローチです。 [〜#〜] everything [〜#〜]を理解してからコーディングを開始するまで、本やドキュメントを読むことはできません。人間の心はそのように機能せず、たとえそれが機能したとしても、おそらく最適ではないでしょう。

1
MrFox

ええと、私は決してプロではありませんが、プロセスが進むにつれて学び、必要に応じて新しい機能を学び、実装しますが、私は時間の余裕があり、学生である。

私の知る限り、あなたはすべての変更に追いつくのにかなり良い仕事をしています。

初心者として私が与えることができる唯一のヒントは、それを消耗品のビットに分解し、必要な機能をツールキット/プラットフォームの基本と並べて学習することです。コード。

1
grasshopper

私はあなたに使い捨てプロジェクトを作成するツールに慣れるために提案するつもりでしたが、あなたはすでにそれをカバーしています。本、チュートリアル、およびサンプルプロジェクトで示される以上のツールが常に存在します。すべてのニュアンスは経験だけで出てきます。ただし、ツールを十分に理解していないと感じた場合は、これらの3つのステップにもっと時間を費やすだけです。

あなたの計画は私にはしっかりしているようです。

私は領事として働いています

ああ。まあ、その場合、FAKE ITです。うまくいくと思われる粗雑な方法で一緒に平手打ちできるものをすべて提供し、契約上の義務を果たしたことについて顧客に請求しますそして去る。それが最もきれいではない場合、それは他の誰かの問題です。または、将来の雇用のための種をまきます。したがって、請負業者の人生です。何かについて特定のドメインに関する知識がある場合は、それらを実際に支払っているので、便利なドキュメント、ツール、またはサンプルコードでそれをフォークしてください。しかし、週末にコードモンキーが必要なだけで、知っているツールの使用を許可されていない場合、これは期待どおりの結果になります。申し訳ありませんが、それが断片的な作業の結果です。その余分な労力を費やすと、別のコンサルタントがあなたを圧倒します。あなたのクライアントが質のために雇っていたなら、彼らは実際に誰かを雇ったでしょう。

誤解しないでください。SQLのスーパーマンや、悩まされているバグを追放するためのgnuグルが必要な場合、コンサルタントは神からの助言者になることができます。しかし、ツールを学ばなければならないコンサルタントを雇う?うわぁ。

0
Philip