web-dev-qa-db-ja.com

パーソナルプログラミングプロジェクトを分解して計画するにはどうすればよいですか?

プログラミングの仕事を始めたばかりで、「コーディングの仕方」の知識を「プログラミングの仕方」で教えられているものに適用しています(違います!)。この一環として、新しいプロジェクトを開始する前に、クライアントから要件を取得する方法を学びました。だが...

曖昧な個人プロジェクトでこれをどのように行うのですか?

私は曖昧なことを言っています。何かをプログラミングしている途中で見つけることが多いので、自分のプログラムでできることを拡張したり、結果を変えたいと思っています。結局、コードに巻き込まれ、再起動する必要があります。これはイライラさせられ、不快なものになる可能性があります。逆に、固定されたタスクと固定された要件が与えられた場合、掘り下げてそれを実行する方がはるかに簡単です。

職場で「今日/今週はプログラム1にXYZを追加する必要がある」と言われるかもしれませんが、それは簡単です。自宅で(おもしろいですが)たとえば、任意のリストを作成するプログラムを作りたいと思います。これは非常に一般的なタスクです。どうやってそれから始めますか?何かをする必要はありませんが何かしたいのですが。

それでは、個人的なプログラミングプロジェクトをどのように計画しますか?

関連: プロジェクトの開発を始める前に何を計画しますか?

7
Pureferret

あなたの目的が学ぶことであるならば、あなたがしていることに何の問題もありません。多くの開発者は、興味深いものすべてを完成させたときに、一連の半分作成されたアプリケーションを背後に残しています。

ただし、何かを書いてそれを完成させたい場合は、解決したい問題を選び、それを解決するために必要な最小限のことを行ってください。既存のライブラリとコード例を使用して、一緒にハックします。何かうまくいったら、戻ってそれをクリーンアップして展開します。

[編集]

あなたがインスピレーションを探しているなら、始める場所がたくさんあります。 Microsoftには coding 4 fun サイトがあります。 github.comやcodeplex.comなどのサイトには、修正、改善、自動テスト、およびドキュメントを必要とする何千ものオープンソースアプリケーションがあります。他の人のコードを読むことも、新しいテクニックやライブラリを学ぶのに役立ちます。

7
akton

役割の拡大おめでとうございます。要件の抽出と要件の管理は、開発者にとって2つの優​​れたスキルです。これらの役割は、開発組織外の製品マネージャーによって完全に制御される場合があり、結果は非常に制限される場合があります。

拡張とメンテナンスを容易にするソフトウェアを設計することは、私たちが行うすべてのことに大きな影響を与えます。 "システムをモジュールに分解する際に使用される基準について" 、D.L. Parnasはプロジェクトを2回実装しました。1回は機能分解、もう1回はデータ指向分解です。次に、いくつかの新機能を追加し、コードへの影響に関するメトリックを取得しました。主な留意点は、2つの方法には、変更可能性、独立した開発、および包括性について非常に異なる特性があるということです。

A-7EアビオニクスシステムのケーススタディとしてParnasによって公開されたその後の作業と、カプセル化、情報の非表示、および基本的にプロトオブジェクト指向の設計の使用は、オブジェクト指向プログラミング言語とその後の分析と設計に非常に影響を与えました。また、Bass、Clements、およびKazmanによる本 "Software Architecture in Practice" にも記載されています。

あなたは、あなたの個人的なプロジェクトの範囲を拡大するとき、あなたのコードが絡まると述べました。軌道に乗せるために、以下を使用することを検討してください。

  • コードがクラスとして実装されているオブジェクト指向を使用していますか?このアプローチは、コードの保守性と再利用性を促進するという点で強力です。
  • クラスの大きさはどれくらいですか?多くのことを行う大きなクラスは、しばしば維持する必要があります。各クラスで1つのことをうまく実行できる場合(懸念の分離と呼ばれる手法)、通常は実装とテストが簡単です。
  • 単体テストまたはテスト駆動開発(TDD)を使用していますか?コードが機能することを確認するテストを作成すると、反復または増分ごとに、コードが引き続き機能することを確認できます。
  • Gitまたは他のソース管理ツールを使用していますか?ツールを使用して、変更とテスト(通常は1日以内を対象とする)の各サイクルの終わりに変更をロックインすると、ユーザー(およびチームの他のメンバー)にセーフティネットを提供できます。コードリビジョンを保存しておくと、変更を取り消すことができますが、さらに重要なのは、機能したときと機能しなくなったときの間の変更点を列挙するのに役立ちます。通常、これらの変更の1つを再度変更して、作業状態に戻すことができます。
  • 反復/増分アプローチを使用していますか?これらのアプローチについては、アジャイル開発について幅広く書いている このページはAlistair Cockburnによる から読むことができます。 ウィキペディアにも素敵な説明があります

お役に立てれば。あなたの質問は、Stack Exchangeに関するさまざまな役立つ回答を引き出します。

6
DeveloperDon

私はアクトンに同意します。

実用的な製品を作成しようとしている場合。それを定義し、設計してから、コーディングします。

Jeff Attwoodが KISS and YAGNI についてブログに書いています。

テスト駆動開発 を調べて、プロジェクトを破棄したり、ゼロから再起動したりしないようにします。アプリがすべてのテストに合格した場合は、コードの不要な部分をリファクタリングできます。赤、緑、リファクタリング。

3
Jesse Black