私は初心者で、Javaを学び、ドキュメントを読んだ後、codingbat.comでいくつかの問題を解決しようとしています。いくつかは、ほんの数秒でかなり迅速に解決できましたが、問題自体は簡単です(例 http://codingbat.com/prob/p126212 )が、解決策を見つけるのに苦労することがあります。可能な限り最良の解決策を考えているため、そして、うまくいくかもしれないが、適切なアルゴリズムが見つからないために一部はエレガントではないものを自動的に破棄します。これは、私の経験不足によるものです(私はPHP for web約2か月間開発しているので、私は完全な初心者ではありません。1つのフレームワークでWebサイトを構築した場合でも)、または適切なアルゴリズムを考えることができないためです。
私は通常、解決策を見ません。単純な問題で1 1/5時間でも立ち往生することがありますが、そのうちのいくつかは最終的には解決できますが、一部は解決できないため、最終的には解決策を検討します。
私が解決できない問題を見つけた場合、これほど長く集中することは正常/良い/悪いですか?私は過剰反応するかもしれませんが、これは私にとってそれほど難しいでしょうか?学習や読解が多いにも関わらず、アルゴリズムを考えられないようなことはありませんか?
よろしくお願いします。
あなたが自分でコーディングしているの場合、実際に入るのはかなり簡単な状況です。最後に何も生成しないのときに何かをするための最善の方法に長い時間を費やすのは悪いことです。
しかし、決して立ち止まらず、反省するのも悪いことだと思います。あなたはほんの数ヶ月の開発者でほとんど初心者です。私があなたの質問を正しく読んだ場合の経験。この時点で、あなたは何かを書くことに焦点を当てているはずです。あなたが自分のために書いているなら。あなたが自分のために書いていないのなら、あなたはあなたの仕事が問題を抱えているかのように、あなたはより速くなることを学びます。
私のアドバイスは
機能しているが不適切に記述されているコードは、コードがない場合よりもはるかに便利です。
あなたに役立つかもしれない最後のコメント。コードへのインターフェースは、コード自体よりもはるかに重要です。
最後に、やがてあなたはスピードと自信を得るでしょう。何年も経って自分の仕事を振り返って「何を考えていたの?」その後、あなたは本当に十分に学習していません。
あなたの質問であなたが言ったことから、問題はあなたが問題を解決できないことではなく、うまくいく上品な解決策を考えることができないので、あなたはあきらめます。このアプローチの主な問題は、実際には何も学習していないことです。
より優れたアプローチは、それほどエレガントではないソリューションの1つを試すことです。それが機能しない場合は、それは世界の終わりではありません。プランBに進んでください。機能する場合は、今よりエレガントにすることができます。いずれにせよ、あなたは何かを学んだでしょう、そしてこのアプローチはあなたが生計のためのコードを書くならば、そしてあなたにもっと役立つでしょう。覚えておいてください。そこにないものを改善することはできません。
私は難しい問題を解くことは本当に好きではありません。それらは複雑で混乱しやすく、物事を簡単に混乱させることができます。だから私はそれらを小さな問題に分割し、それらの小さな問題を解決します。それはかなりうまくいきます。
時々休憩してください。すぐに解決策を検討していないのは良いことですが、順調で本当に行き詰っていれば先に進んでください。自分で解決策を見つけられなかった場合でも、学習します。
スキルを習得するには10年かかると聞きました(そのための情報源はありません。申し訳ありません)。ですから、最初は時間がかかるように思えても心配いりません。ちなみに、1.5時間は問題を解決するのに長い時間ではありません。プログラミングを続けると、数日から数週間かかる問題を見つけることができます。問題を運転し続けると、数か月が経つにつれ、ますます簡単になります。
「学習や読解が多いにも関わらず、アルゴリズムを考えられないようなことはありますか?」心配です、練習は完璧になります。基本的なデータ構造の数は限られており、それらを使用するアルゴリズムはどの実装でも同じです。学習したら、実際にはlearnを使用していくつかのアルゴリズムを適用すると、それらを覚えて他の問題で知識を使用できるようになります。時間の経過とともに、このナレッジベースは、問題がすべて切断されているのではなく、テーマのバリエーションであると思われるところまで蓄積されます。
ソフトウェア開発で最も重要なことは、機能するソフトウェアです。これは特に商業開発においてそうです。
多くの人々は、賢いことをしようとするのにあまりにも多くの時間を費やしたり、やるべきことは実用的なコードを作成することである場合に「エレガントな」ソリューションを考え出します。
あなたがすべきことは、問題をできるだけ早く解決することです。ソリューションが機能することを確認したら、必要に応じて、洗練された高速なものにするためのリファクタリングを行います。多くの場合、作業コードを目の前に配置すると、よりエレガントなソリューションが見やすくなります。