詳細については、1人のプロジェクト(チームソース管理、ドキュメント、ビルドなど)の間に実施する必要があると人々が考えていること、および2人目が来るまで行う必要のないことを知ることに興味があります。プロジェクトに。
このシナリオを経験したことのある人なら誰でも、その洞察に感謝します。
私が学んだこと。 (私は別の順序を試しました。私は間違っていました。これは物事が関連するようになる順序です。)
すべてをソースコード管理に組み込みます。誰もがアクセスできるものを使用して開始今すぐ。例外なく。遅延なし。言い訳しない。
個人の「作業」環境または「開発」環境から完全に分離されたQA /テスト領域を作成します。少なくとも個別のユーザーID。理想的には、別個のVM上にあります。
完全に分離しています。現在の作業環境と重複する可能性はありません。
独自の作業環境で単体テスト以外のテストを停止します。 「自分自身」で行うコードと単体テスト。別のVMで行うその他すべてのテスト(統合、パフォーマンスなど)。自分でテストしないでください。必ず別のQAユーザーとしてテストしてください。理想的には、別個のVM上にあります。
「私のために働く」はあなたのチームメンバーに言わなければならない悪いことです。ひどい。あなたは彼らが間違っていることを理解する必要があります。一日に何度も。
すべてを書き留めることを計画します。プレーンテキストマークアップツール(RSTまたはMarkdownなど)を使用して、すべてのドキュメントがバージョンコントロールリポジトリのプレーンテキストになるようにします。ツールは、HTMLページ(つまり、RSTのDocutils)またはPDFを作成できます。独自のドキュメント形式(MS-Wordなど)を使用しないでください。一部のソースコード管理システムではうまく機能しない場合があります。
最初に書き留める必要があるのは次のとおりです。
実用的な開発環境を作成する方法。疑わしい場合は、仮想マシンを作成し、その仮想マシンですべての操作を実行します。手順reallyが機能し、ドキュメントがclearであることを確認してください。実際のコマンドラインで入力された実際の行は、わかりやすくしています。
単体テストスイートの実行方法。再び。指示が機能し、考える必要がないことを確認してください。 「これを入力:」「それを確認:」のようなもの。あなたのチームメンバーが愚かであるということではありません。それはあなたがそれをすべて書き留めない限り、あなたが仮定していることを覚えていないということです。
統合テストスイートの実行方法。
アーキテクチャや設計原則を説明するのに多くの時間を無駄にしないでください。最初に誰かを立ち上げて走らせる必要があります。後で説明できます。
次に文書化するのは、ユーザーストーリーです。そして、それらのストーリーをサポートするテストケース。そして、それらのユーザーストーリーをサポートするテストケースに必要なデータフィクスチャ。
これを共有します。ソースコード管理下にあります。
最終的には、他の4つのビューを文書化できます。
論理ビューは文書化するのに役立ちます。写真はここで受け入れられます。これは急速に進化する傾向があるため、レガシー情報の取得に時間を費やさないでください。チームメンバーと協力する方法を考え出します。
多くの場合、プロセスビューが役立ちます。これがどれほど重要かは、アプリケーション全体に依存します。
開発ビュー(モジュール、ライブラリ、フレームワークなど)は、非公式に記述されることがよくあります。写真が役立つかもしれませんが、誰かがドキュメントを拾い上げて、その表または裏を作成できるようにこれを完全に完成させることは悪名高いほど困難です。古くからある非常に公共のプロジェクトでさえ、単に無視されているライブラリのドキュメントがあります。 (Stack Overflowに関する多くの質問につながる。)
これは非公式であることを容認できることに加えて、急速に変化する傾向があります。
展開情報。サーバー。 IPアドレス。データベース資格情報。すべてのもの必須書き留めます。やがて。
コラボレーションを成功させ、生産性を高めるには何が必要ですか?
...または対人レベルの他の何か
私がこれまでに読んだことのある一般的に言及されている本をいくつかリストします実際に読んだので、読んでみる価値があると思います。 SO this または this の質問のように、それを正確に尋ねます。
これらの本は、チーム、組織、およびプログラミングプロジェクトに関して本当に読む価値があります。
これらはいずれも方法論Xの実装方法の実用的なガイドではありません(ソフトウェアの推定を除き、この本は適切な推定プロセスを選択するのに役立ちます)。もちろん、Code Completeのようなプログラミング自体に焦点を当てた本も非常に充実しています。
経験からお話ししますが、人それぞれ違いますのでご注意ください。これらは普遍的ではありません。
1つは、個人的に手放すことです。このプロジェクトは、18か月間住んでいたものです。当然、すべての変更を自分のようにする必要があります。同僚が間違えたり、学んだりするためのバッファを与える。それらが役立つように部屋を作成します。そして、それはすぐには起こらないかもしれないことを覚えておいてください。また、改善または作成に成功したと感じることができるコードの一部が、短期間に成功したように感じる場合、それは素晴らしいことです。忍耐と寛容は、ここでは良い見返り率を持っています。細かく管理しようとしないでください。批判したい場合は、「間違っている」と言って、メリットがあることを確認してください。それは「宗教的な」戦いではありません。
別の重要な問題は、あなたにぴったりの人を見つけることです。理想的には、自分より賢い人を見つける方が良いです。それは主観的で相対的ですが、人が持っていない知識やスキルを持っていると感じた場合は、それが最善です。相互にやりがいのあるコラボレーションになります。
それを行うには2つの方法があります-同僚が引きずられて、あなたは彼または彼女がやったことをやり直すことになります、またはあなたの2人のスキルは単に合計するのではなく、増加します、そしてあなたは本当に一緒に働くことに感謝します。
「クリーンで高速で再利用可能なコード」のトピックについて-インタビューで、小さなマイクロカーネル/サービスマネージャーやジョブエグゼキューターを作成するように依頼します。プラグイン可能なコンポーネントがどのように指定および構成されているかを確認します。終了する必要はありません、それは重要な考えです。そして、あなたはすぐにそれを行う方法をよく知っている人々がまともなお金を欲しがるようになるでしょう;-)頑張ってください!
私の見解:まず、内部プロジェクトのアーキテクチャを文書化することから始めてください。どの仮定が適切で、いつ/どこで一般的な慣行から逸れたか、およびその理由を説明するようにしてください。
ビルドの自動化:素晴らしいアイデアです。開発マシンの構成の自動化を追加できますか。ビルドするのが最も簡単です(より多くの/より速いテスト展開)。
別のアイデア(これは私を1度助けてくれました):新しい開発者に、コードベースのさまざまな領域で小規模なクリーンアップタスクを実行して、レイアウトツールなどに慣れるように依頼します。1つの良いアイデアは、後で混乱を招く可能性があるあいまいな領域(例:シェルスクリプトの2行にemmm pythonを使用し、プロジェクトがJavaに基づいている場合、これらの2行を=に書き換えるように依頼しますJava開発者#3が機能するために必要な知識が少なくなるように)
私は手作業を必要とするすべてを自動化することに焦点を当てているので、経験の浅い人によって台無しにされる可能性があります。上記の簡単なコメントに基づいて、以下が含まれます。
これらを実行できない場合は、これらのタスクを永遠に実行するために連鎖するか、(一部の)新しい人物が遅かれ早かれ何かを台無しにすることになります。
@dimitrisが指摘したように、他の重要なタスクはドキュメントです。 @Sロットはこれについてより多くの詳細を追加したので、繰り返すのではなく、+ 1するだけです:-)
これは、個人的な経験に一部基づいた考えです。
ドキュメントあなたのプロジェクト。設計仕様、図、マニュアル、コメントは、新入社員がすぐに慣れるのに役立ちます。複雑なシステムonlyを口頭で説明すると、遅くてイライラすることがあります。一人のプロジェクトでは、ドキュメントはしばしば無視されます。あなたのものは例外であることを確認してください。
最初に、APIレベル/コアレベルのコードに専念し、新しい従業員に「アプリケーションレイヤー」の作業またはバグ修正を提供します段階的に慣れますコードで。一般的に、は簡単で始まりますが、まだ意味のあるであり、したがってやりがいのあるタスク。
コミュニケーションは重要です。 新入社員の質問、コメント、アイデアに応答します。アイデアが良いと思われない理由を説明してください。新鮮な目は驚くほどよく改善の余地を見つけることができます。あなたの新しい従業員がまともなものである場合、彼はあなたのコードをピアレビューし、最終的にアーキテクチャの決定に参加することができます。 話し合い、アイデアを互いに跳ね返させます。これは、プロジェクトに同僚がいることの最大の利点の1つです。
責任を明確に定義する、新しいチームメンバーがどのようなタスクを実行するかがわかったら、 文書化の慣行とコーディング規則を確立して、物事をスムーズに保ちます。
リビジョンコントロールシステムを使用します。 論理ソースファイルレイアウトとビルド分野を維持します。
面接については、候補者のストレス耐性能力を試してみたいと思わない限り、私は人工的なコーディングテストやトリックの質問の大ファンではありません。このような状況では、最も賢い問題解決者でもロックアップできます。あなたが探している資質は、とりわけ:正直、専門的能力、技術的知識/洞察、熱意および相互互換性。 仕事の雰囲気は大きな意味を持ちます。気に入らないチームメイトを選ぶことはお勧めしません。質問を適切に配置し、非公式のディスカッションを行って候補者の良い写真を撮ります。幸運を!
テクノロジー
開発者として他の人を呼び込む場合、開始する前に起動して実行することをお勧めします。
これら3つが正常に動作している場合、新しいチームメンバーを招集するときに発生する一般的な問題の約75%を解消できます。これらのテクノロジーのポイントは、頭の中でのみ起こっていることの多くを取り、チームメンバーがそれと対話できる場所にそれを引き出すことです。
ソース管理により、両方が同じことを確実に処理します。課題追跡は、何をする必要があるかを追跡するのに役立ち、彼らが何に取り組んでいて何を達成しているかを簡単に知ることができます。継続的な統合とテストは、繰り返し可能なビルドプロセスがあり、新しい改善がコードの他の部分を壊していないことを確認するのに役立ちます。
Pragmatic Programmerはこれについてかなり良い本をいくつか持っています。ここに私がお勧めするいくつかを紹介します。使用しているプログラミング言語や使用したいバージョン管理に基づいて、他にも同様のタイトルがあります。
http://www.pragprog.com/titles/tpp/the-pragmatic-programmerhttp://www.pragprog.com/titles/tsgit/pragmatic-version-control- using-githttp://www.pragprog.com/titles/auto/pragmatic-project-automation
個人
多くの場合、直面する困難は、技術的な側面ではなく、手放すための学習にあります。他の誰かがプロジェクトの側面を制御できるようにするのは難しい場合があります。特に、自分ですべてを行い、すべての決定を行うことに慣れている場合は特にそうです。信頼できる基盤を築くことができるように、最初から新しい人に適度な自由度をもって働かせることができる領域を見つけることができれば、あなたは自分自身にいくらかの悲しみを救うでしょう。あなたが良い人を雇うなら、おそらくあなたが学ぶことの主なことは、彼らの個々の決定のすべてがあなたがしたであろうものと同じでなくても、他の人が良い仕事をすることを信頼する方法です。
新入社員には、問題を早期に発見できるように、安全対策を講じたまま問題を解決する自由を与えたいと考えています。
これらの点は私の意見では最も重要です:
そして最後に、バージョン管理システムを入手してください。 Subversionで十分です。ただし、ユーザー固有のEclipseファイル(またはその他)を追加しないでください。彼らはあなたに時間を浪費させます。 Stackoverflowに問題がある場合は、遠慮なく質問してください。