プログラマー-デザイナー(コードの品質を向上させる方法)

数年間ソフトウェア開発に携わってきた私は、最近、開発した製品の品質に影響を与えるものについてよく考え始めました。 新しいプラクティス(XP /アジャイル/スクラムの同じコンポーネント)の導入は、開発を組織化することだけでなく、開発者の個人的な資質が常にトップであることを非常に素早く示しました。 ソフトウェア品質のすべての側面に真っ向から取り組むことはしませんが、そのうちの1つだけを考えます。それはコード品質です。



典型的なプラクティスは、外部コンポーネントによって製品を評価することですが、オープンソースソリューションを作成するとき、既存のビジネスロジックを変更するとき、プログラマーにとっては、ソースコードが最終製品であり、彼が作業する必要があります。



この記事の目的は、優れたコードの品質をリストすることだけではありません。これはあまりにも頻繁に行われ、それほど興味深いことではありません。 ここで、見つけたものを簡単にリストします。 次に、いくつかのアナロジーを見てみましょう。



ほとんどの開発者が最初に呼ぶもの(理由はわかりません:-)は、コードのコメントです(ヒント:中間点-多かれ少なかれないはずです)。 次に、コーディングスタイルのコンプライアンスと一般的な理解度、コードのシンプルさについて話します。 製品のユーザーとして—オープンソースソリューション—変更する必要がある機能を探す場所を知る必要があります。 これには、オブジェクトの構造(レイアウト)に対する有能な思考も含まれます。 誰もが現在OOPを使用しているので、それを理解して感じる必要があります。 分解と呼ばれる人はほとんどいません-基本的に、意識的なTDDドライバー(テスト駆動開発)。これはテストの基礎です。



次に、グラフィックデザインの例について、品質の概念を検討します。 研究所に来てから、「ウェブデザイン」に関する特別コースを見ました。 技術コースを受講する必要がまだあったので、私はサインアップすることを決めて、そこに行き始めました。 「ウェブデザイン」の概念についてはほとんど知りませんでしたが、HTMLをまったく伝えないことに気付いたときは非常に驚きました。 その代わりに、彼らは色(最初のレッスン)、遠近法(画像の基礎)、ロゴ、会社の色、スタイル、タイポグラフィについて話し始めました。 次にレイアウト、必要性/十分性についての議論がありました...私たちの主な作業ツールはIDE(コード記述環境)ではないだろうと言われたとき... それから私たちはたくさんのサイトをシャベルで掘り、それらの間違いを見ました。



いいえ、私はプロのデザイナーになりませんでした。 Photoshopで何かを描くことはめったにありません(「魂のため」でない限り)。 しかし、これだけでなく、デザインに関する多数の記事を読んだり閲覧したり、描画の基本、インターフェースの使いやすさについて、私はコードの優れたデザイナーになることができました。



よく見てみましょう:通常、グラフィックデザインのクラフト(または、必要に応じてアート)の基礎と見なされるものは何ですか? WebデザインとUIについて説明します。



ユーザーのシンプルさと透明性。 パッシブ要素とコントロールの利便性(現在、トレンディなのは大きなフォントと入力フィールドの方向です)。 有能な分解とレイアウト:機能または意味によって関連する要素を1つのブロックにグループ化。 グループ内の合理的な、ユーザーが認識する要素の数(37signalsの記事「 Webデザインでのパターンの使用の概要 」を参照してください)。 親しみやすさ:必要に応じてヒントを示しますが、同時に情報の過負荷がありません。 目に受け入れられる色の組み合わせ。 必然的に-正確さと思慮深いささいなこと(ピクセルごと、割り当てられたフィールドから離れることなく、プロポーションを維持する、タイポグラフィ)。



このリストは決して完全なものではありませんが、コード設計について話し合ったときに、上記と同じものをリストしたことをすでに見ていますか?



ソースコードに関するコメントについては、グラフィックデザインの類推は、さまざまな種類のヒント、情報テキストなどです。レイアウトと分解はあちこちで必要です。 ビジュアルデザインで重複する要素を削除したいという願望(リンクの「削除」、「編集」列が悪い)は、繰り返しコードを何らかのメソッドまたは関数に結合したいという願望と一致しています。 設計レイアウトの精度は、コードの精度とまったく同じである必要があります(「ああ、ここで変数のオーバーフローを考慮するのを忘れていました...」)。 などなど。 これらは、類似性の存在を示す表面からのほんの数例です。



私がコードユーザビリティと呼ぶコードの基本的な設計品質のセット。 あなたのコードは他の人によって使用(読み取り、編集、再利用)されます。 仕事を楽しくする方法は? そのようなコードを見たことがありますか? 私は。 しかし、非常にまれです。



設計原則の知識は、コーディングだけでなく適用されます。 どんなに一生懸命努力しても、プログラマーがまったく、まったく持っていないことは誰にとっても秘密ではありません。 プログラマーがインターフェイスを設計することもあります。 事前に計画されているわけではありません。開発は多くの場合、最初にエンジンが記述されるように編成されているため、最も優秀なデザイナーであっても何も変更しません。 そのような奇跡の例としては、ジュムラのDrupalの管理パネルがあります(これらのシステムに敬意を払います)。 ブログのコントロールパネルでは、LiveInternetは「プログラマーが作成」とは書いていません。



デザインを視覚的なデザインとコードデザインのみに限定しないでください。 工業デザイン(私がこれを理解している限り)、記事デザイン(およびいくつかの側面から:テキストデザイン、レイアウト、個別-見出しデザイン)などの分析は、デザインの同じコンポーネントがすべてに存在することを示しましたこれらの領域。 機能 特性ユーザビリティ (使いやすさ)、 広告特性 (販売に役立つ)の3つのグループの設計特性(もちろん、非常に強く重複しています)が区別されました。 これらの各ブロックで、2〜7の基本的な品質が識別されました。 ここでは分類を行いません-これは別の記事であり、別の分析と結論があります-これは問題ではありませんでした。



実施されたアナロジー、つまり設計のエンドツーエンドのビジョンからどのような結論を引き出すことができますか? これの重要性は2つの面でわかります。



最初は親愛なる同僚、開発者です! 片側にならないでください! 脳の1つの半球だけを開発しません。 描き、作曲し、調和を感じてみてください。 美しさを考えてください。 まあ、まあ、「楽器を演奏する」、「プログラムだけでなく、詩も書く」を省略しました-それは私に少しをもたらしました。 しかし、覚えておいてください、より調和のとれた開発から誰もまだ失っていません。



誰かに理解できないスローガンを投げるだけでなく、もう少し実用的な話をすると、開発者向けのユーザビリティワークショップを開催するというアイデアがあります。 そのような慣行がすでにロシアのどこかにあったのかどうかだけでなく、非常に興味深い。 知っているなら、私に書いてください。



2番目の結論はより科学的です。 異なる領域/方向間で設計の類似性を実行することで、興味深いパターンを確認し、馴染みのあるパターンを異なる視点から見ることができます。 いくつかの例が上にありました。 もう1つの興味深い研究は、OOPに基づいてコードを設計する原則と視覚的インターフェースを設計する原則を比較することに専念しています。 (月下では何も新しいことはありません。LarryKonstantinは、1993年にオブジェクトインターフェイスの欠点についてすでに書いたのを覚えています。オブジェクトコードの欠点だけでなく、類推から問題を解決する方法も導き出せます。)



この記事の多くが舞台裏に残っていることを理解しています。 おそらく、私が明確に伝えることができなかったいくつかの考え。 確かに、多くの書かれた例は記事から除外しなければなりませんでした。 しかし、すべてを適合させることは不可能なので、今のところ、おそらくこれで十分でしょう。 そして、後で別のものを追加しようとします。




All Articles