私はコンピュータ工学の学生です。どうすれば大きなプロジェクトに対応できるか考えてきました。より効率的かつ効果的な方法で目標を達成するための最初のステップは何ですか?
プロジェクトを思いついたとき、どのように作業を始めればよいかわかりません。多くの場合、私はそれを無視します。しかし、もうプロジェクトのアイデアを無視したくありません。
さて、皆さんにお願いします。誰でも彼/彼女の経験を共有できますか?アイデアがすべてある場合、プロジェクトをどのように開始すればよいですか?
コーディングを忘れて、ちょっと開発環境をセットアップします。大きなプロジェクトに乗り出す場合、最初に行う必要があるのは、プロジェクトのpurposeおよびscopeのハンドルを取得することです。
私がお勧めするのは、ワープロを開いて、「プロジェクト目標」文書を書き出すことです。アイデアの概要、および作成するソフトウェアの一般的な目的を説明してください。次に、プロジェクトの機能目標をリストアップします。私はそれを仕様化することを意味するのではなく、完成した製品がサポートする必要があるさまざまな機能を説明します。したがって、学校を運営するソフトウェアを作成している場合は、「教師の管理」を機能の一部としてリストし、その機能に含まれる内容(連絡先情報の追跡、クラスのスケジュールなど)を説明します。
それから最も難しい部分:それはあなたがすぐに行う必要があるものではなく、あなたが進むにつれてです。追加したい機能をリストすることと同じくらい重要なのは、目標ドキュメントで説明した機能をレビューし、プログラムの最初のバージョンで実行できる機能なしに注意することです。これは、スコープを管理するための鍵です。
人々がより大きなプロジェクトで失敗する主な理由の1つは、いつ作業をやめるべきかわからないことです。彼らはそれが「完成」したとは感じていません。なぜなら、アイデアは増え続け、決してリリースされないからです。最終的に彼らは興味を失い、あなたはさらにもう半分の傑作を完成させました。したがって、目標の基本的な部分を達成するために本当に重要な機能を適切に処理する必要があります。それが最初のターゲットです。
これが、今私が重要なプロジェクトをすべて始める方法です。それは私が集中力を維持するのに役立ち、開発中に範囲と目的が「進化」するのを防ぐのに役立ちます。
Linus 最高だと思う
大規模なプロジェクトに着手してはいけません。あなたは小さな些細なプロジェクトから始めます、そしてそれが大きくなることを決して期待すべきではありません。もしそうなら、あなたは単に過剰設計し、一般的にそれがその段階である可能性よりも重要であると一般的に思うでしょう。またはさらに悪いことに、想像するほどの規模の作品に恐怖を感じるかもしれません。だから小さなものから始めて、詳細について考えてください。全体像や豪華なデザインについては考えないでください。それがかなり差し迫ったニーズを解決しない場合は、ほぼ間違いなく過剰に設計されています。そして、人々が飛び込んであなたを助けることを期待しないでください。それはこれらのものが機能する方法ではありません。最初に中途半端に役立つものを入手する必要があります。そうすると、他の人が「ねえ、それはほとんど私にとってはうまくいく」と言うでしょう、そして彼らはプロジェクトに参加します。 -ライナス・トーバルズ
より効率的かつ効果的な方法で目標を達成するための最初のステップは何ですか?
あなたは以前にプロジェクトを行ったことがあり、バージョンやソース管理を教えていない大学にいると思います。一部のプロジェクトを表示したい場合は、 Github (Gitを使用)、 Bitbucket (使用Mercurial)、 Google Code (Mercurial、Git、Subversionを使用)、 CodePlex (MercurialおよびSubversion/TFS)、SourceForge(多くの)、など、彼らのコードベースを見てください。彼らが共通して持っているのは、ソース管理ソフトウェアを使用していることです。
それらの使用方法については多くの情報があります。これは標準的な業界の慣例であるため、使用方法を学ぶことをお勧めします。ここにあなたを始めるためのいくつかの視覚的なガイドがあります:
あるプロジェクトが思い浮かんだとき、どうしたらいいかわかりません。多くの場合、私はそれを無視します。
自由な時間にできることはたくさんあります。 Start small:プロジェクトを最初から作成し、ソースコードリポジトリに配置します。小さなプロジェクトに何かを追加したいときはいつでも、ソースコードリポジトリへの変更をコミットします。そのうちに大きくなり、元に戻したい場合は、バージョン管理システムで行った変更をいつでも元に戻すかロールバックできます。
「白紙」症候群に見舞われることは完全に正常です。
あなたは素晴らしいプロジェクトを念頭に置いていますが、それは素晴らしく見えますが、何かをしようとして机に座っていると、突然ブロックして何もできなくなります。次に、ソリティアを開いて新しいレコードを作成します。
実際にプロジェクトに関連することを始める必要があるので、プロジェクトが生まれたように感じます。
すぐにコードを記述したくない場合があります。まず、プロジェクトで実際に実行する必要があることを記述するか、またはプロジェクトに実行させたいと思うことができます。ペンと紙を取り、書き始めます。詳細から、または全体像から始めることができます。両方を試して、何が最適かを確認してください。
プロジェクトの機能、さまざまな部分、それらの部分がそれらの間でどのように通信するかを定義してみることができます。私はポストイットに満足しています。彼らは楽しいし、進行するにつれてそれらを変えることができます。彼らにあなたの心と考えに従ってもらいましょう。
または、いくつかの関数またはクラスのプロトタイプを開始できます。あなたはこれに好きな言語を使うことができます。たとえ存在せず、あなたが発明した言語であっても。
しばらくすると、何か作業ができるようになり、プロジェクトはあなたの心だけではなくなります。あなたは実際に何かをしました。
実際に開発プロセスを開始するのに慣れてきたら、慎重な計画、文書化、プロトタイピング、必要なすべてのテクノロジーとソフトウェアの収集などを行うときです。
しかし、実際に開始するまで開始しないでくださいfeelそれは適切なタイミングです!
大規模なプロジェクトは、多数の小さなプロジェクトまたは断片から形成されます。連絡先を管理するアプリケーションなど、1つの大きなアイデアまたはプロジェクト要件がある場合があります。
それを分解します。自問してみてください'これを行うために必要な小さなピースは何ですか?'
小さなパーツを定義したら、繰り返します。一部のパーツをさらに分解する必要がある場合があります。アイデアは、小さなピースのそれぞれに最も扱いやすい目標を定義することです。設計と開発(Agile-TDDなど)で規律のある原則を使用する方法を学び、より小さくて管理しやすい目標を達成します。
あなたは大きなアイデアを持っていますが、あなたが自分の仕事を達成するためにどうやって行くのか分からない。あなたがやろうとしていることの概要を作成します。実行する手順、必要なもの、使用する言語などを書き留めます。すべてが整理されていることを確認してください。そうしないと、プロジェクトは完全な問題になります。
これについては先ほど触れましたが、とても重要です。時間が計画されている場合は、プロジェクトが終了する予定の終了日と、プロジェクトのステップにかかる時間を知ることができます。これもまた組織であり、あなたを動かし続けます。
あなたが大きなプロジェクトを始めるつもりなら、あなたはいくつかの助けを必要とするでしょう。コード編成と優れたバージョン管理システムの場合、 Git は、すべてのコードを単一のリポジトリに保持するため、優れています。 Gitの詳細については、私が提供したリンクを参照してください。
また、自分がやろうとしていることを実行するのに役立つ言語を使用していることを確認する必要もあります。開始する前に、プロジェクトを作成できることを確認してください。何も新しいことを学ばないと言っているわけではありませんが、始める前に学んでください。
大きなプロジェクトは通常、単独で行われるわけではありません。始める前に、仲間の学生、プログラムを行うことができるコミュニティの人々、およびあなたが助けることができると思う誰にでも連絡してください。恐れずに質問してください。
他の人がプロジェクトを開始するのを待って、周りをうろついてはいけません。それから、「私はそのアイデアがありました!」と言います。それは永遠にあなたを悩ませます...
多分それは決まり文句でいっぱいですが...私は提出します。
大きなプロジェクトを処理できるようにするには、主に1つのものが必要です。それは経験です。経験はあなたにあなたが必要とするすべてを与えます:
したがって、次の2つのことができます。
お役に立てば幸いです。
目的なしに何かをする理由はありません。作成するコードの必要性を示すユーザーストーリーが必要です。これらのユーザーストーリーは、次の形式でフレーム化する必要があります。
[X]として
私はYが欲しい]
そのように[Z]
これは単純すぎるように思えるかもしれませんが、ユーザーを定義するだけでなく、必要性と最終結果を1つの文で指定するためのフレームワークを提供します。あなたはこれらの多くを持っているでしょう。時間が経つにつれて、あなたはより多くを思い付くでしょう。いくつかを入手したら、コードの開発を開始できます。あなたがより多くのアイデアを持っているとき、または他のものを理解するとき。戻って、ユーザーストーリーを書き、忘れないようにします。それが出発点として最適です。
Behavior Driven Development はこのアプローチを使用しており、リンクのサイトには、この形式を使用してユーザーのストーリーを表現するいくつかの例があります。
これは、アイデアからコードに移行するための最も迅速で最も整理された方法になると思います。
私の「大きなプロジェクト」の定義は「主な問題が参加者の調整とそれらの間のコミュニケーションであるプロジェクト」です(中規模のプロジェクトは管理が技術的な問題と同じくらい難しいとき、小さなプロジェクトは技術的な問題があるときです)管理プロジェクトよりも重要です。長期的な1人のプロジェクトは大きなプロジェクトになる可能性があることに注意してください-将来の自己との調整とコミュニケーションは、他の誰かと同じことをすることとそれほど変わりません)。
大きなプロジェクトを処理できる(「主導的な役割を持つ」)ための最初のステップは、主な役割を持たずにいくつかの大きなプロジェクトに参加することです。 2番目のステップは、経験のある人から指導を受けながら、主導的な役割レベルに到達することです。
別のアプローチは、プロジェクトのサイズを徐々に増やし、経験から学ぶことです...
エンジニアがすぐにコードを書き始められるようにするには、いくつかのアイデアが熟しています。これらのプロジェクトは大規模な場合と小規模な場合がありますが、共通するのは、明確に定義された問題を解決することです。私はこのようなプロジェクトを数えきれないほど始めました。それは、適切なドキュメントを前もって作成し、ソースコード管理、通信、およびコラボレーションに関するベストプラクティスに従うことに関する規律を構築することの問題にすぎません。
私が持っているすべてがアイデアの芽である大きなプロジェクトは、私の経験でもう少し準備をします。私が最初に行うことは、私の考えについて他の人と話し始めて、私が解決している問題に対する私の理解を誰かが共有しているかどうかを確認し、問題を解決するための私の計画的アプローチを検証することです。だから、ビールを飲むために友人を1人か2人連れて行くか、チートスの寮の部屋に招待しましょう。しかし、このプロセスを楽しんでください。このプロセスを通じて、解決している問題をよりよく理解し、問題を解決するためにもたらすことができる他の素晴らしいアイデアを見つけ、他の人に自分のアイデアを販売する練習をし、さらにはあなたがそれを解決するのを助ける人々のチーム。
大きなものを小さなものに分割します。
「世界平和の実現」に取り組むことはできません。代わりに、大量破壊兵器の禁止に取り組み、民主主義を奨励し、開発援助を提供し、文化的および科学的交流を奨励します。
これらの答えの多くが触れないものは、具体的なことを成し遂げ、それを成し遂げることを自分に強いることです。
時々、「思考の土地」で立ち往生し、残っているのはタイプするのに退屈な作業だと感じますが、実際には一口サイズのプロジェクトのチャンクから始めて、実装は面白くてやりがいがあります。
私も含めて、このような人がたくさんいることを知っています。実際に行かなければ、何も成し遂げられないので、プロジェクトを始めることを考えることはできません。すぐに実装できるものを選び、そこに到達すると、フローが始まります。
黄色の付箋と魔法のマーカーのスタックをつかんで、大きなホワイトボードがある部屋に座って、ブレインストーミングをしました。
メインメニュー、レポート、データベース、認証など、頭に浮かんだ簡単なフレーズを書き始めるだけです。これらをホワイトボードに貼り付けて、メインメニューがどのように表示されるかなど、他のアイデアを検討します。 :
ファイルを開く、ファイルを保存、ファイルを名前を付けて保存、印刷などを行い、メインメニューのホワイトボードに貼り付けます。
アイデアが頭に浮かんできたら、それらを書き留めてください...ボードに貼り付けます。ボードを見ると、より多くのアイデアが浮上し、パターンが浮かび上がります。ある時点で、あなたが開発しようとしているものの感触をつかむようになります。
黄色の付箋は非常に速く、かなり素早く移動できます。
物事がまとまり始めたら、これらの考えをグループに分けます。その後、単一のグループレベルでブレインストーミングできます。 20分前に状況が変わる前に、ホワイトボードがどのように見えるかを確認したい場合に備えて、ホワイトボードの写真を撮ります。
結局、あなたはやらなければならないものの主要なチャンクについてかなり良い考えを持つでしょう。これらのチャンクごとに単一のフォルダーを取得し、アイデアが出てきたときにそれらにアイデアを投げ続けることができます。
コードの労力は通常、プロジェクト予算の約20%(+ -10%)です。コードを正しく取得することに焦点を当てても意味がありません。80%の努力で対処しなかったため、完璧なコード管理を取得しても、20の作業しか完了していません。
プロジェクトにユーザーがいない場合はどうなりますか?それが完璧であるが、アイデアに関する特許の「Acme Patent Trolls」ファイルの1週間後に公開され、それが次のFacebookであると判明した場合はどうなりますか?
次の標準的なプロジェクトライフサイクルの問題を見てください。要件、設計、コード、テスト、統合、展開、欠陥の追跡と修正、要件の変更管理(拡張要求)。リリース計画、リソースの割り当て(1日の予定時間数、および実際にプロジェクトで行う予定)、法務(Freedonの運営)など.
上記のすべてが整っていれば、非常に悪いコードでも成功します。上記のいずれも設定されていない場合、最適なコードは失敗します。
私は賭けをする人ではありませんが、あなたの最初の「大きな」プロジェクトは、あなたが想像できないさまざまな方法で失敗します。心配しないで、先に進んで失敗し、そこから学び、次のことをしてください。始まらないのは本当の犯罪でしょう。初めて成功する場合は、プログラミングではなく、ビジネス管理の確かなキャリアがあります。
だからあなたの質問に答えるために、ソフトウェアツールを片付け、あなたの「事業計画」ツールを引き出してください。あなたがそれをしている理由を考え出してください。 (あなたはあなた自身の顧客になることができますが、とにかく練習をしてください)。これを「ビジネスプラン」に書き留め、彼らから構築します。
あなたがしなければならない最初のことは、座ってその考えを書面で説明することです。それまではプロジェクトにはなりません。それでも、アイデアのような一時的なものから、プロジェクトのような具体的なものへと移行するための努力が必要です。
ここまで進んだら、プロジェクトに変換する方法を検討し、論理的な方法で実装できる個別のステップにそれをどのように分解できるかを特定できます。
次に、これらのステップを実装するためのタイムラインを概説します。特定の間隔で進行状況を再確認して、そのプロセスをある程度制御できるようにします-そもそも考えたことのない思いついたアイデアを最初から用意してミックスに追加するのではありません。
最初のフィニッシュラインを特定し、それを目指します。これを厳守しないと、プロジェクトは追加のアイデアの重みの下に沈む可能性が高くなり、永遠に存続しているように思われるため、プロジェクトを完了することを思いとどまる可能性があります。
あなたは学生なので、私はあなたが学生大であり、プロ大ではないことを意味すると仮定します。後者には、ビジネスおよびコラボレーションに関する追加の考慮事項が必要です。先週新しいプロジェクトを始めたばかりなので、そのプロセスは新鮮です。
私が最初にやることは既存のソリューションとライブラリを研究するです。可能な限り、車輪を再発明したくありません。この調査は、プロジェクトの言語を選択する際の大きな要因でもあります。一部の言語では、特定のタスクに適した既存のコードがあります。
次に行うことはフォルダーを作成してソース管理下に置くです。これは、最近のgit init .
と同じくらい簡単です。
次に、私は"hello world"を機能させるを実行します。これにより、開発環境が適切に設定されていることがわかります。
次に、I サードパーティのライブラリが機能する場合は「hello world」を取得これは、私がライブラリにリンクして正しく使用していることを示すために最低限必要なものです。たとえば、データベースライブラリの場合は、単純なクエリを接続して実行します。 GUIツールキットの場合は、ウィンドウを表示しています。
次に私はビルドスクリプトとテストフレームワークをセットアップしますです。これはantやmakefileなどであり、プロジェクトがまだ小さい場合は設定がはるかに簡単です。
次にI データ構造を作成する。 「モデル」レイヤーとも呼ばれます。これは、プログラムがその仕事をするために覚えておく必要があるすべてのものを格納する部分です。私は紙の上で多くのデザインを行い、スタブを追加するだけです。通常、デザインのこの部分が最も簡単です。たとえば、チェスプログラムでは、ゲームグリッド、プレーヤー、駒、シーケンスの動きなどを格納するオブジェクトが必要になります。
この時点で、私にはプログラムのかなり良い基盤があり、通常、その特定のプロジェクトの次のステップがどうなるかはかなり明白です。次に、一度に1つの小さなステップを実行します。コードは途中である程度機能します。
あなたが持っているすべてが「ビッグアイデア」である場合、あなたは多くの他のもの(他の答えで非常によく説明されている)、特にこれら2を必要とします:timeとmotivation =。
個人的なプロジェクトで一人で作業する場合の最大の問題は、通常、毎週それに費やす時間があまりないため、あまり進捗が見られず、やる気がすぐに失われ始めることです。
すでに述べたように、少しずつ、それが鍵となります。
しかし、これだけではありません。あなたは小さくてやりがいのあるステップを踏む!つまり、あなたに最大の価値をもたらし、あなたの大きなアイデアの主要な概念を実証するステップです。
たとえば、新しいsuper todo listソフトウェアを使用していて、ユーザーの操作が優れているの場合。本当に必要になるまで、ストレージとデータベースに関するものから始めないでください。革新的なユーザーインターフェースから始めましょう。これは楽しくて価値があります。それはあなたを誇りにし、あなたのやる気を維持し、あなたのアイデアが本当に良いかどうかをすぐにチェックできるようにします。
ここでのすべての答えはすばらしいですが、正直なところ、バージョン管理、表示、フローチャート、マークアップの量は関係ありません。重要なのは、機能的なアプリケーション、機能的なアプリケーションがあることです。考え出された問題を解決するものとして定義され、他のすべてのものはほとんど無関係です。
コーディングを開始し、機能フェーズにコード化し、いくつかのテストを実行し、デバッグし、起動し、新しい機能を必要に応じて繰り返し実行します。これは、無駄のないスタートアップの方法であり、これは俊敏な管理方法です。無駄を減らすための開発(または誰かが定義したように:半分完成した傑作)。
プロジェクトが完了するまで最後のステップを繰り返します。 年かかることを受け入れ、前進し続ける