2009-04-28 5 views
15

私の視点では、設計能力は の開発/コーディングスキルよりも難しくなります。どのようにソフトウェア設計スキルを向上させるには?

機能モジュールを設計するにはどのように対処する必要がありますか? プログラムアーキテクチャを正しく構築する方法は?

ところで、関連書籍はありますか?

答えて

21

答えは、ほとんどの普通のプログラマーがしばしばしないことです:他の人のコードを読んでそれから学び、その強みと弱みを分析し、面白いものをあなた自身のプログラミングのトリックバッグに組み込みます。 多くのが既に発明されており、コーディングスキルを強化し、時間を大幅に節約できます。

オープンソースプロジェクトには多くの高品質なコードがあります。

4

自分のデザインがどのように改善されるかを確認するには、試行錯誤が最適です。常により良いソリューションを探してください。どのような間違いを犯しましたか?どの部分が必要以上に柔軟性がないのですか?何が原因でデザイン意思決定をハックする必要がありましたか?

純粋に柔軟性と優雅さではなく、デザインの意味を考えてみましょう。これを再利用できるようにするためにあなたはトレードオフをしましたか? seperation of concernssingle responsibility principleに従っていますか? Open closed principle?これらが何で、その意味が分かりますか?

また、デザインパターンの形で専門家の仕事を研究します。

読むDesign Patterns Explained by Shalloway、しかしこれらは特効薬ソリューションではないことを覚えているとひとつまみの塩ですべてを取るHead first design patterns

をお読みください。あなた自身の創造性を使用し、PRAGMATICに滞在してください。

+0

私は試行錯誤がデザインを改善する最悪のテクニックだと言います。多くの場合、入力をしなくても思考を費やしてしまえば、後で多くの労力を節約でき、プロジェクト成功のためにはるかに優れたデザインを生み出すことができます。 – piotr

+2

私は同意しません。私はロブがあなたの過去の間違いから学ぶことを意味すると思います。私が私の記事で述べたように、私は経験はほとんどない、経験の少ない、本を拾い読みする、ソフトウェア設計についてのいくつかのことを読んだり、何か素晴らしいものを考え出すことはできないと思います。 。あなたは実際に自分が何をしているのか、何ができないのかを経験しなければならず、同じミスを二度繰り返さないようにしなければなりません。それは言うまでもなく、考えていることはあなたのデザインを助けるものではありませんが、それだけではありません。 – Razzie

+0

ええ、私はハックと希望のデザインを意味するわけではありません、私はあなたのデザインを実装し、あなたのオリジナルから何がうまくいっていなかったかを見ています。 Razzieが明らかにしたように、私は間違った経験から学ぶことを意味します。 –

9

私はすべてが経験になると思います。一連の要件を読み、それを良い、清潔で保守可能なソフトウェアデザインに変換できることは、プログラミング(imho)の中で最も難しいことの1つであり、書籍を読むだけではそれを学ぶことはできません。それは、試行錯誤、間違いから学んだこと、過去にあなたのために働いていたものが何かを学んだり、しなかったりすることです。

私にとっては、実際には時間をかけて、クラス図などのUMLで良いデザインを作成するのに役立ちます。それはしばしば、私が特定のデザインパターンなどを使用できる、ソフトウェアアプリケーション全体で再利用できるコンポーネントを特定するのに役立ちます。

ソフトウェアアーキテクチャーに関する非常に良い本であるSoftware Architecture in PracticeとGang of FourのDesign Patternsといういくつかの本をお勧めします。これは、使用するデザインパターンの参考になります。

2

私は経験と才能に代わるものはないとは信じていません。私はの指導の観点から推薦できるソフトウェア設計の本を読んだことはありません。かなり読んだにもかかわらずデザイン。何人かの人々はそれをうまく使いこなしており、経験を積むにつれてより良くなり、あるものはそうではなく、決して学ばないように見えます。悲しいが本当。

2

私は、コードを読んで、オープンソースプロジェクトのデザインを見ている私の意見では、デザインを学ぶ最良の方法です。

6

「試行錯誤」というより、「繰り返し」としましょう。

あなたが設計しているものであれば、完全な知識を持っていないことを知っているだけで、あなたが持っている情報であなたのベストショットをあげてください。あなたは間違いなく事を複雑にする予期せぬ問題に遭遇します。これは何が間違っていたのか、何が違うのかを自分自身に尋ねなければならないときです。その後、元に戻って、あなたの新しい理解を再設計/再実装します。繰り返す。いつもあなたのデザインを推測して、あなたの周りを見回してより良いソリューションを見つけてください。たとえば、「Firefoxはどのように実装されていますか?ああ、わかりますが、ポップアップウィンドウは使用しません。

あなたが間違いを犯して修正しようとしているという事実を受け入れることで、あなたは既にその先を進んでいます。

経験を積むにつれて、反復は長くなりますし、しばらくしては最初から正しいことを得るでしょう - 間違いなく、過去の間違いやその解決策を予見できるからです。

私が正しく覚えている限り、「Inside Steve's Brain」では、反復がAppleの開発にどのように内在するかについて話しました。

2

これまでのところほとんどの提案に同意していますが、それらはすべて有効です - コードを読む、書籍を読む、試してみてください stuff。

私は個人的にもチームメンバーでも、二重の攻撃を受けています: 1.居心地の悪いゾーン、つまり馴染みのないドメインや言語から松葉杖を取り除きます。 2.さらに重要なのは、すでに経験した人とペアリングすることです。

メンターがたくさん提供していますが、あなたはそこに行くことができますが、良いメンターがあなたを救うことができます痛みです。

0

確かに、経験は正しい答えです。しかし、それ以外にも、あなた自身の文脈でパターンを理解するためには、何かがあると思います。アプリケーションを構築するときには、あなたにとって実用的な意味での意思決定を下す必要があります。それは「ベストプラクティス」なのか、経験豊富なプログラマーがあなたに言ったからです。 あなたはを理解しています。それはあなた(または他のプログラマー)がコードを操作し、それをよりよく理解するのに役立ちます。私はデータベース設計のようなものでも同じことが分かる。直感的でメンテナンスの観点からは意味をなさないことをしてください。あなたが本当に思っていた(または様々な落とし穴から学んだ)なら、あなたは積極的に試みることなく、あるパターンのクラスや練習を自動的にやっていることがわかります。

もちろん、私は誰も真空中で働くことを勧めていません。彼らは積極的にデザインパターンを積極的に追求して統合していないことはもちろんです。私はちょうどあなた自身の文脈で(そして具体的、実用的な理由で)それらを理解することが、その事を最も不確かなものにするのを助けるものだと考えています。とにかくそれは私の経験でした。読書はいつも私にとっては勉強のような感じです。良い有益なものですが、スロープに入るのには小さなポテトがあります。あなたの意思決定を考え、それらを守ることができます。いつもより良い方法に開放してください。

関連する問題