web-dev-qa-db-ja.com

すぐに解決できない問題に直面したときはどうしますか?

私は初心者で、Javaを学び、ドキュメントを読んだ後、codingbat.comでいくつかの問題を解決しようとしています。いくつかは、ほんの数秒でかなり迅速に解決できましたが、問題自体は簡単です(例 http://codingbat.com/prob/p126212 )が、解決策を見つけるのに苦労することがあります。可能な限り最良の解決策を考えているため、そして、うまくいくかもしれないが、適切なアルゴリズムが見つからないために一部はエレガントではないものを自動的に破棄します。これは、私の経験不足によるものです(私はPHP for web約2か月間開発しているので、私は完全な初心者ではありません。1つのフレームワークでWebサイトを構築した場合でも)、または適切なアルゴリズムを考えることができないためです。

私は通常、解決策を見ません。単純な問題で1 1/5時間でも立ち往生することがありますが、そのうちのいくつかは最終的には解決できますが、一部は解決できないため、最終的には解決策を検討します。

私が解決できない問題を見つけた場合、これほど長く集中することは正常/良い/悪いですか?私は過剰反応するかもしれませんが、これは私にとってそれほど難しいでしょうか?学習や読解が多いにも関わらず、アルゴリズムを考えられないようなことはありませんか?

よろしくお願いします。

5
Mash

あなたが自分でコーディングしているの場合、実際に入るのはかなり簡単な状況です。最後に何も生成しないのときに何かをするための最善の方法に長い時間を費やすのは悪いことです。

しかし、決して立ち止まらず、反省するのも悪いことだと思います。あなたはほんの数ヶ月の開発者でほとんど初心者です。私があなたの質問を正しく読んだ場合の経験。この時点で、あなたは何かを書くことに焦点を当てているはずです。あなたが自分のために書いているなら。あなたが自分のために書いていないのなら、あなたはあなたの仕事が問題を抱えているかのように、あなたはより速くなることを学びます。

私のアドバイスは

  1. コードを書く。この段階では、悪いコード/良いコードは問題ではありません。必要なときに何かを打ち消すことができることを知る必要があるだけです。
  2. 自分で設定deadlines。彼らと一緒に合理的であるようにしてくださいが、締め切りがないかもしれないほどゆるくないようにしてください。
  3. 次の場合を除き、機能するコードをより適切に記述されるように変更しないでください。
    1. パフォーマンスの問題修正する必要があります。
    2. あなたは十分な時間を持っており、あなたの新しい方法はひどくはるかに優れていると感じています。
    3. 別の方法で実装しようとすると、何か新しいことを学べると感じます。
  4. commentsなどの細部に注意してください。コメントするときに、独自のコードを使用して問題と解決策に心を留めるのに役立ちます。試してみてください。解決策から離れ、問題に焦点を当てるすることができます。
  5. 可能であれば、他の人に作業内容を確認してもらいます。
  6. これを趣味として行う場合お楽しみください。問題についての心配があなたの楽しみから遠ざかっているなら、それはあなたが何か間違ったことをしていることを意味します。
  7. 同じ問題で何をするかを人々に尋ねます。これはそのための最良のサイトかもしれません。

機能しているが不適切に記述されているコードは、コードがない場合よりもはるかに便利です。

あなたに役立つかもしれない最後のコメント。コードへのインターフェースは、コード自体よりもはるかに重要です。

最後に、やがてあなたはスピードと自信を得るでしょう。何年も経って自分の仕事を振り返って「何を考えていたの?」その後、あなたは本当に十分に学習していません。

8
Wes

あなたの質問であなたが言ったことから、問題はあなたが問題を解決できないことではなく、うまくいく上品な解決策を考えることができないので、あなたはあきらめます。このアプローチの主な問題は、実際には何も学習していないことです。

より優れたアプローチは、それほどエレガントではないソリューションの1つを試すことです。それが機能しない場合は、それは世界の終わりではありません。プランBに進んでください。機能する場合は、今よりエレガントにすることができます。いずれにせよ、あなたは何かを学んだでしょう、そしてこのアプローチはあなたが生計のためのコードを書くならば、そしてあなたにもっと役立つでしょう。覚えておいてください。そこにないものを改善することはできません。

9
Larry Coleman

私は難しい問題を解くことは本当に好きではありません。それらは複雑で混乱しやすく、物事を簡単に混乱させることができます。だから私はそれらを小さな問題に分割し、それらの小さな問題を解決します。それはかなりうまくいきます。

7
whatsisname

時々休憩してください。すぐに解決策を検討していないのは良いことですが、順調で本当に行き詰っていれば先に進んでください。自分で解決策を見つけられなかった場合でも、学習します。

スキルを習得するには10年かかると聞きました(そのための情報源はありません。申し訳ありません)。ですから、最初は時間がかかるように思えても心配いりません。ちなみに、1.5時間は問題を解決するのに長い時間ではありません。プログラミングを続けると、数日から数週間かかる問題を見つけることができます。問題を運転し続けると、数か月が経つにつれ、ますます簡単になります。

「学習や読解が多いにも関わらず、アルゴリズムを考えられないようなことはありますか?」心配です、練習は完璧になります。基本的なデータ構造の数は限られており、それらを使用するアルゴリズムはどの実装でも同じです。学習したら、実際にはlearnを使用していくつかのアルゴリズムを適用すると、それらを覚えて他の問題で知識を使用できるようになります。時間の経過とともに、このナレッジベースは、問題がすべて切断されているのではなく、テーマのバリエーションであると思われるところまで蓄積されます。

4
Michael K

ソフトウェア開発で最も重要なことは、機能するソフトウェアです。これは特に商業開発においてそうです。

多くの人々は、賢いことをしようとするのにあまりにも多くの時間を費やしたり、やるべきことは実用的なコードを作成することである場合に「エレガントな」ソリューションを考え出します。

あなたがすべきことは、問題をできるだけ早く解決することです。ソリューションが機能することを確認したら、必要に応じて、洗練された高速なものにするためのリファクタリングを行います。多くの場合、作業コードを目の前に配置すると、よりエレガントなソリューションが見やすくなります。

3
Henry