ソフトウェア開発者としての最初の仕事で、私のチームはアジャイル/スクラムを使用してプロジェクトのワークフローを管理しましたが、それはかなりうまくいきました。経験豊富なメンターが私を正しい方向に導いてくれました-私は彼らに大きな感謝の気持ちを抱いています。私はそこで数年間働いた後、数か月前に新しい機会に移りました。
現在の仕事に早送りします。私は大学の教授のもとで働いています。私は大学にいるので、ほとんどすべてのプログラマーは学生です(彼らは安価で豊富です!)私の上司には管理経験がありますが、ソフトウェア開発の経験はなく、ソフトウェアチームはいつも上司の頭にいるわけではありません。 。これらの条件は、いくつかのvery低品質のソフトウェアを作成するための完璧な環境を作り出しました。ソフトウェアプロジェクトは少々悪党であり、設計することを考えておらず、本当に恐ろしい慣行を採用しているようです。物事が良くなることを知っています。
開発プロセスを実装して、全員を軌道に乗せ、コードの品質を向上させ、より安定したソフトウェアを展開したいと考えています。どこから始めればいいのかわからない。
私はnotで、「Use Scrum」、「Set a kanban board」、または「Take look at agile!」などの回答を探しています。 (アイデアは高く評価されますが)。より具体的には、実装これの作業環境の開発プロセスを理解することを望んでいます。従業員は通常、次に進む1〜2年前に働き、一般的に経験が浅く、全員を含む毎日のスタンドアップミーティングをスケジュールすることはほぼ不可能です。
そのような職場で、品質、効率、コミュニケーションをどのように促進しますか?
更新:回答とコメントの一部を読んだ後、私はいくつかの追加の背景を提供すると思いました。
私はソフトウェア開発の技術の達人だとは思わないでしょうが、私はam目にしたときに悪いプログラミングを認識するのに十分な経験を積んでいます。開発者が1〜2分で作業した後、開発者が才能があるかどうかを判断できます。私は問題を解決する方法を見つける自分の能力に満足しています賢く、しかし、私が本当に経験のない領域は、他の開発者が関与するプロジェクト管理です(それが私がここにいる理由です)すばらしい人たち全員にアドバイスを求めます)。
私は、このオフィスに来るすべての学生が完全な暗闇のように聞こえるようにしました。ここで悪い卵がいくつかありましたが、私が会った学生の大部分は知的で、学びたい、そして仕事に情熱を持っています。いくつかはまだ始まったばかりで、彼らは自分が知らないことを知りません。そして、それは大丈夫です。私が最初にプログラミングを始めたとき、私は元気がありませんでした!
ミスをクリーンアップする場合は、事前にチェックする場合よりも時間がかかります。(おそらく)熟練していないか、良い習慣に気付いていない開発者を扱っている場合は、 (マスター)コードベースを、経験豊富な誰かがそのコードを見るまで変更します。
方法論の説明は必要なかったので、その部分をざっと見てみましょう。アジャイルタスクを使用して、独自に開発できるさまざまな機能をセットアップします。
機能ブランチの使用を開始して、全員が別のブランチで作業できるようにします。タスクが終了すると、開発者はコードをマスターブランチにマージできなくなります。 Gitを使用している場合でも、プルリクエストを起動できます。それ以外の場合は、完成したタスク(/ブランチ)を追跡する方法を使用してください。
次にレビュープロセスに進みます。質問が少し曖昧なのは、学生の判断よりも信頼できる経験豊富な開発者もいるのかどうかです。だから私はどちらかの方法で詳しく説明しましょう:
経験豊富な開発者がいる場合は、終了したタスクのコードを確認してタスクを実行してください。それが良ければ、マスターブランチにマージできます。そうでない場合、彼らは自分でリファクタリングするか、何を改善する必要があるかについて開発者にフィードバックを与えることができます。
経験豊富な開発者がいない場合は、常に問題が発生します。悪いコードから良いコードを見つける人がいない場合、コードの品質を維持することは不可能です。
あなたにできる最善のことは、開発者が他の開発者の前で彼らの実装を発表し説明する検討会議を開くことです。これはすべての問題を防ぐことを保証することはできませんが(たとえば、すべての開発者が優れた実践について同じ誤解を持っている場合)、それでも問題の大部分(たとえば、少なくとも1人の開発者が適切なアイデアを持っていてそれを明確にすることができる場合;または問題が発生した場合)は防ぎますお互いに異なる問題を理解している開発者から)
そのような職場では、品質、効率、コミュニケーションをどのようにして育てるのでしょうか。
人々が新しく、去る可能性が高いそのような環境で最大のことは、必須のコードレビューです。
彼らは何をすべきかについての知識を広めるのに役立ちます。最悪のコードがコードベースに侵入するのを防ぐのに役立ちます。それらは実装の一貫性を促進します。
それだけ多くの離職率と経験がないので、communicationは通常よりも重要です。
解決策というよりはアイデアですが、学生の開発者が行う可能性のあるプロジェクトと同様の機能や要素を含むコードベースの重要なセクションを1つ見つけて、それを非常によく整理してください。新しい開発者の大きな問題の1つは、コードベースの規範や規則を知らないため、他のコードを調べて独自のコードを設定する方法を理解することです。厄介なコードベースで働いている新しい開発者がたくさんいるということは、彼らが混乱を見て、それが許容できる、または物事を行うための最良の方法であると考えることを意味します。悪い慣行は、高回転の環境でも永続します。
少なくとも1つの元の適切に記述されたコードセクション(または1つのファイル)を用意することで、学生の開発者にそれをベストプラクティスの例として使用するように指示できます。それらに似たコードを書くことができるとワクワクすることを彼らに伝え、他のコードの多くは物事を行う正しい方法の良い例ではないかもしれないと言います。
コメントやその他のドキュメントを追加して、なぜ物事が特定の方法で行われるのかを説明することで、新しい開発者はより良いコードプラクティスでより迅速にスピードアップできるようになります。
継続的な統合-
これは、チームツール、スキル、プロセスを段階的かつ柔軟に実装するための実用的で概念的なフレームワークです。
CIは、コードの記述からデプロイメントまでのワークフローのアイデアです。これらのタスクは、概念的にも実際にも独立しています。
CIは特に自動化です。これは、画面上でコードが入力された時点から、品質と生産性に大きな影響を与えます。
フルタイムの変更エージェントであることが期待されます。リーダーになります。単なるマネージャーではなく、単に上級コーダーではありません。
戦略的になる
戦術的になる
品質への道
ユニットテスト
バージョン管理
コードレビュー
リファクタリング
環境をキャプチャする
プロセスについての言葉
アジャイル(およびそのスクラムなどのサブジャンル):忘れてください。 「あなたは機敏です、あなたは機敏ではありません。」 Agile Manifestoの元の署名者の1人であるDave Thomasの記事をご覧ください。
小規模で経験の浅いチームを考えると、Visual Studio Team Servicesのようなチーム統合ツールを見ると、私のスパイシーな感覚が消えます。私の経験はここで限られていますが、私は、ぎくしゃくした、余分で、厳格なプロセスの強制を感じています。私は多くの人がこれらのものを非常に効果的に使用していることを知っていますが、問題を探すソリューションを購入する可能性があることに注意してください。
ツールについての単語
私だけ。それらの「今すぐ最高のソフトウェアツール...」のクリックベイトハニーポットではありません。
ジェンキンス
CI統合ツール。 Webベースで広く使用されています。基本的に、Web GUIを使用して、コンパイル、単体テストの実行、バージョン管理の更新など、さまざまなタスクと実行順序をカスタム構成して自動化します。これは非常にA-La Carteなので、初期のCI環境に適しています。
バージョン管理
私はGitよりもMercurialを好みます。このブログ投稿が、私が最初にMercurialを選んだ理由です。 GitはMacGyver、MercurialはJames Bond
Subversionは良いです。 MercurialとGitには、Subversionよりも優れた異なるアーキテクチャがあります。
統合開発環境
誰もが異なるコーディングツールを使用している場合、ここに大きな脂肪の考慮事項があります。 プレーンテキストのようなものはありません
専門図書館に関する一言
インターネットは広く、浅く、まとまりがありません。
まだ使用していない場合は、ソース管理を使用することをお勧めします。これにより、各開発者がチェックインした内容を確認でき、バグが発生した場所を後退できます。
なんらかのテストスイートをセットアップします。これは、コミットする各機能のテストを作成するテスト駆動開発、またはアプリケーションを実行して結果をファイルに出力し、目的のファイルと比較できるようにする自動化された方法です。出力。これをすべてのコミット後に実行するか、少なくとも1晩に1回実行すると、リグレッションがすぐに見つかります。
最後に、2つのポリシーを実装します。1)すべてのビルドで警告をエラーに設定し、すべてのエラーをオンにする必要があります。2)すべてのコードは、コミットされる前にエラーまたは警告を生成せずに静的アナライザーを通過する必要があります。これをコミット前のアクションにすることもできます。これら2つのことにより、多くの一般的な方法でコードがすぐに恐ろしいものになるのを防ぎます。 (すべてをキャッチするわけではありませんが、たくさんキャッチします。)
これにより、生徒は「現実の世界」での仕事にどのように対応するかを準備し、ある程度の良い習慣を身につけることができます。
あなたが言うように会議をスケジュールすることは不可能であるため、別の方法論を使用してプロセスを管理することを提案します(これはスクラムにとって絶対に重要です!)。良いコンセプトを作るのにまだ悪いことは何もないので、誰もが何が起こっているのか(おそらくvertプロトタイプも使用しています)を知っており、ウォーターフォールモデルを使用しています。いずれにせよ、コミュニケーションは仕事の最大の部分です。