私の今日の投稿は記事というよりも質問のようなものになることを警告しなければなりません。 この投稿の目標は、高品質で競争力のあるアプリケーションを作成したい人々の興奮に情熱を寄せる、同じ考えを持つ人々を見つけることです。 遠くから始めて、静かな水を注いで、ポストがハブからすぐに削除されないように見えるようにします。
私は長年、高品質のアプリケーションを作成することを夢見ていたのでした。 新しいプログラムを書き始めるたびに、これがこの種の最高のプログラムになると100%確信していました。 アプリケーションの開始は、インスピレーションを与え、楽しいものであり、大きな期待をもたらしました。 そのような日、私は頭の中で仕事に没頭し、世界のすべてを忘れていました。 毎日新しい機能が登場し、新しい成功したソリューションが適用され、すべてが同じペースで続けば、すべてが前例のない進歩と黄金の山を約束しました。 私はこの成長スケジュールを精神的に延長したかったのですが、彼を止めることはできないようでした。 それは私たち一人一人に起こったと思います。
時間が経つにつれて、プログラムは階ごとに高層ビルのように成長し、時にはカタコンベに変わり、何時間もさまよう必要があり、著者の計画全体を記憶に更新するか、ここで別の松葉杖を探しました。
プログラムのファイナライズ作業は次第に難しくなり、困難になりました。 それぞれの新しいグリッチは以前のものよりも陰湿であり、プログラムの開発の目標がエラーをなくすという目標に取って代わられました。 古い動作に何か問題があることを知って、新しい関数を書くことは困難です。 そのようなとき、あなたはソフトウェア開発がどれほど難しいかを理解します。 当初のすべての罪と誤算、建築の欠陥、挿入された松葉杖は繰り返し悪夢として私に戻ってきました。 これらは非常に不快なプログラムの欠陥であるという事実に加えて、この悪夢を取り除くために何時間も働かされました。 結局、選択肢がありました:悪夢から目覚めてプログラムを再び開始するか、2回目(3回目、4回目)にすべての落とし穴を予見できることを期待し、今回は有能なアーキテクチャを作り、概念に従ってすべてを分割し、複雑さをカプセル化し、繰り返しコードを別々の場所で取り出します。 または、その時点の状態でプログラムを保存し、最も目に見えるエラーをすべて取り除き、より良い時間、このプログラムの新しいインスピレーション、または新しいアイデアを待ちます。
このイベントのパターンは、スキルのレベルに関係なく、自分のためにプログラムを書いたか、他の人からの為替かどうかに関係なく、毎年、新しいプロジェクトごとに何度も繰り返されました。 最初に、新しい機能が簡単に表示されることに目が光り、次にハードワーク(快適に作業できます。難易度なしではどこにも移動できません)、次にマルチパートの悪夢と死にゆく苦痛、そして最後にプロジェクトの死です。 以前に存在していた形での死、および同じアプリケーションのゼロから作成された新しいものの誕生。
時間が経つにつれて、コードのどの部分が長期間存続できるか、そして何回か変更を試みた後に死ぬ部分が明らかになりました。 モニター画面にも人間の脳にも収まらない条件で満たされたコードのセクションを見るだけで十分であり、このコードが放棄されつつあることが明らかになります。 確かに機能します。 そして、それがうまく機能していれば、エラーがなく、パフォーマンスが問題を引き起こしていないのであれば、それを触らないことが最善です。 メソッド名がいくつかの異質な概念の混合物であると言っているクラスを見ることができ、それをもう一度使用したくないことが明らかになります。 彼は複雑さの限界に達し、建物は床や土台でさえ耐えられず、すべてが崩壊するほどの高さに成長しました。 私の脳は我慢できません。このオブジェクトの状態の組み合わせの全体を概説しようとすると、概念が複雑すぎて理解できません。 このようなクラスの異常な動作の原因を調査したとき、これはよくわかりました。 何かを変える必要がありました。
プログラムを書き直すと良い結果が得られましたが、多くの労力がかかりました。 私はいつもこのステップを決めることができませんでした。 ほとんどありません。 仕事の量に気付いて破れ、手が落ちました。 私はこの記憶の中に一人ではないことを知っています。 ユーザーは、このような関数を追加するのがいいと言いますが、これらの関数は既に追加しすぎているので、もう一度書き直す必要があります。 ユーザー(または顧客)は理解していません:別の単一の機能を追加するのは本当に難しいですか? 彼らは、すべてをやり直し、書き直し、アーキテクチャ上の間違いをなくし、すべてを最初からやり直す必要があることを理解していません。なぜなら、最後の10個の新しい機能を追加したとき、これらの機能のそれぞれが最後になるとすでに言っていたからです。
プログラムの複雑さを増すことは避けられず、避けられないほど、プロジェクトで働く人が増えます。 これは、プログラムに追いつくプログラミングの本当の呪いです。遅かれ早かれ、問題は時間の浪費です。 そして、成功するプロジェクトと凍結された工芸品の塊を区別するのは、まさにこの成長する雪玉コードに耐えるスキルです。
従来、プログラムには次の3つのフェーズがあります。
- グリーンフェーズまたは子供時代のプロジェクト。 コードはシンプルに見えますが、それほど多くはありません。手は無料で、プログラムしたいです。 :)
- イエローフェーズまたは就業日。 プロジェクトは大規模で、作業は困難ですが、かなり正当化されているようです。 新機能は慎重に追加されますが、定期的に追加されます。 多くの人はこのフェーズに永遠にとどまることを望んでいますが、そうではありません。 :|
- ブラウン相またはカタコンベ。 このプロジェクトには、理解できないものがたくさんあります。 同じことがいくつかの異なる方法で行われます。 個々の部分を書き換えることは、これが何に影響を与えるかが不明であるため、精神に欠けています。 失敗した決定が多すぎると、何も変更できず、関与する価値がありますか? 個々のセクションの変更には、プログラムのさまざまなセクションでの長期にわたるエラーの捕捉が必要です。 松葉杖が挿入されます。 消費された力の量は結果をはるかに超えています。 プログラムの開発は不可能です。 他の何かをしたいという願望があります。 :(
私には人生の例があります。 私は常にグリーンフェーズでプログラムしている会社を知っています。 この会社のプログラマーは満足し、楽観的で、困難を感じたことのない人々のようです。 彼らは海の膝の深さのようです。 素晴らしいですね。 問題は何ですか? 彼女の精通したリーダーは、開発プロセス中の定期的なフェーズ変更を長い間理解しており、複雑さの蓄積が感じられるたびにプロジェクトを販売しています。 彼はスタートアップを販売しています。 成長チャートが添付されています。 進捗レポートは素晴らしいです。 締め切りは魅惑的です。 見通しは印象的なようです。 素朴な投資家は、このプログラムは他の通常のビジネスと同様に、購入し、売り手と会計士の代わりに置き、利益を上げる製品であると考えています。 彼らは、遅れた行動の頭痛を買っていることをしばしば理解していません。それは、すべてが整っている限り、プログラマーが壁を登り始める1年後に捨てます。 ブラウン段階の問題はすべてバイヤーにあり、スタートアップを販売する会社はグリーンの魅力と楽観をすべて感じています。
解決策はもちろんオリジナルですが、明らかに唯一のものではありません。 結局のところ、成長のこれらの困難を克服できるマイクロソフト、アップル、オラクルがいます。 彼らはどうやってそれをしますか? グリーンゾーンを保持する方法は何ですか?
コメントに答えを書くことをお勧めします。 私も考えを述べます。
ご意見ありがとうございます。