プロのソフトウェア開発チームは、重要なプロジェクトの複雑な設計にどのように対処しますか?
まず、私はこの質問が多少長く漠然としていることを理解しており、お詫び申し上げます。これはおそらく、「理解した」人にとっては短い名前の基本的な問題ですが、私はこの点について欠けていると思うので、問題を説明する際はご容赦ください。 私は11歳の頃から、この方法でプログラミングを行ってきました。これは、私が最初から自分にすべてを教えていたことを意味します。私は技術教育を受けましたが、厳密にはコンピュータサイエンスではありませんでした(私はフォトニックエンジニアリングの学位を取得して卒業しています)。もちろんプログラミングコースもありましたが、これは私にとっては基本的なもので、新しいことはあまり学びませんでした。私はその喜びのために自分自身を教育し続けており、プログラミングのキャリアを追求することを常に知っていましたが、その当時の私のプロジェクトはすべて非常に小規模でした。私はそれらを私の心に留め、維持するのに問題はありませんでした。 現在、私はチームでリードしていますが、企業環境ではありません-私は大学でエンジニアリングアプリケーション用の科学ソフトウェア(C ++)を開発しています。突然、プロジェクトは(比較的)大きくなり、ほとんどの場合、私はそれを心に抱くことができなくなりました。主に次の2つのことに多くの時間と労力を費やしています。 しばらく作業していなかったコードのセクションに戻る必要がある場合、それがどのように機能したかを思い出すことが困難です。私は、関連するクラスのヘッダーファイルを確認し、途中でソースファイルに配置したコメントを読むのに多くの時間を費やしています。私が垣間見ることができ、より簡単に画像を取り戻すことができる何らかの「回路図」があるといいのですが。 変更を導入するとき、私がやろうとしていることが他の場所で何かを壊してしまうことの中間点に気付くことがあります(さらに悪いことに、それは実行時にのみ驚きとして現れます)。私は元に戻して別の方法で始めましたが、他のコンポーネントへの影響を無視したことがわかりました。何かが行われる方法、他のコンポーネントに影響を与える方法、変更を実装する前に詳細に計画する方法を確認できる「アーキテクチャダイアグラム」があったらいいのにと思います。 私が一緒に仕事をする人のほとんどは私と同じようなストーリーを持っています-強力な技術的志向と時には素晴らしいスキルですが、彼らの仕事を整理する方法がありません。しかし、彼らのプロジェクトは通常私のプロジェクトよりもはるかに小さいので、彼らはどういうわけか対処します。とにかく、それが私にとって何を意味するかというと、私は一人でいるので、良い実践を学ぶ人がいないということです。 ITの管理に関する大学院のコースを受講しましたが、ITの管理は非常に満足できるものであると感じましたが、主に非プログラマーを対象としており、プロジェクト管理の方法論、予算/スケジュールの見積もり、エンタープライズアーキテクチャなどについて説明しており、ソフトウェアの設計や計画などは担当していません。それは大丈夫です、私もそのことを学ぼうとしています。もちろん、いくつかのツール(UMLなど)とソフトウェア開発プロセスのタイプ(カスケード、反復、アジャイル...)が導入されましたが、明らかにそれほど詳細ではなく、何を選択して使用するかを決めるのに苦労しました(とどの程度)。 私はSOのソフトウェア設計について多くの質問と回答を読んでいます-これまたはその特定のツールまたは方法論を使用してそれを行うことについては多くあります。UMLのドキュメントが私の問題を解決すると確信している場合-私はそれをピックアップし、それを使い始める。しかし、それを誓う人もいれば、役に立たないと言う人もいます。抽象化のより高いレベルでの答えを探しています-私が抱えている2つの問題を解決する方法はありますか。おそらく1つの特定のツールに縛られることなく、それを実行できるようにするには何を学ばなければなりませんか?これらは時々流行から脱却し、プロジェクトの種類によって適用性が異なると思います。 読んでくれてありがとう、私はもっと簡潔に言うことができませんでした(ソフトウェア設計の経験と語彙が不足しています)。