私は大学を卒業して1年になります。実際の問題を解決できることを本当に楽しみにしています。特に、少々の研究と多くの思考を必要とする重要なもの。
しかし同時に、それは私の最大の恐怖でもあります。どんなに頑張っても、解決できない問題に直面しているのです。また、差し迫った期限に間に合うようにコードを提供するプレッシャーがあるため、uniの安全な遊び場からコードを見ると、少し恐ろしいように見えます(コースまたは試験をやり直す必要がある場合に発生する可能性のある最悪の事態です)。
それで、より長い期間業界にいる人たちにとって、あなたができない問題を解決するように言われたらどうなりますか?それは起こりましたか?もしそうなら、何が起こりましたか?彼らはただそれを落として「まあ、私たちは何か他のものでやれると思います」と言ったのですか?結果はありましたか?あなたは懲戒されましたか、それとも解雇されましたか?
まず第一に、あなたの恐怖は非常に健康で、正常です。これは、ソフトウェア業界で約15年経った私の考えです。
これはあなた自身に尋ねるいくつかの質問です:
1)まず、問題を確実に理解してください。愚かな質問はありません。クライアント/ボスが何を求めているのか、何が必要なのかを理解していますか?
2)これが起こります。 「明日までに橋を架けてください」。問題が制約の範囲内で解決できないという事実を知っていることを確認してください。クライアント/ボスは時間/予算に柔軟に対応でき、これらを変更して時間/予算を増やすことができます。
3)問題が理解可能であり、制約が妥当な範囲内にあり、問題を解決できるテクノロジーがあるが、十分に理解していない場合...それがStackOverflow
であり、インターネットの目的です。最初に必ず調査を行ってください。定量化できる回答がある明確な質問をするようにしてください。同僚に聞いてください。設計セッションを行います。
4)これは回答番号2のバリアントです。クライアント/上司が不可能を要求しているようにseemsです。いくつかの研究を行います。理由が正確にわかり、明確にできる場合を除いて、問題が解決できないとは決して言わないでください。
5)[〜#〜] roi [〜#〜]は投資収益率を表します。これは時間への投資を指します。あなたの時間!。問題を調査して解決するのにかかる時間を保証するのに十分なほど重要な問題です。これについてクライアント/上司と話し合う
6)それは本当の問題ですか。多くの場合、クライアントは自分が何を望んでいるかを理解していますが、必ずしも何が必要かを理解しているわけではありません。クライアント/ボスが実際に必要とするものを理解し、これについて彼らと話し合うようにしてください。
これらのガイドラインがお役に立てば幸いです。
一見解決できない問題に悩まされている場合に覚えておくべき2つのこと:
行き詰まっていることをできるだけ早く他の人に知らせましょう。手遅れになる前に見積もりを調整するのに役立ちます。
問題を解決する方法の1つが機能しない場合は、時間を無駄にする前に削除してください。助けを求めるか、別のアプローチを試してください。自分を一生懸命賢く証明することではなく、物事を成し遂げることです。
StackOverflow ;)に移動します
しかし、冗談はさておき、未知のものを恐れないでください。あなたのキャリア全体は未知に直面します、なぜならあなたがすでにそれを解決していれば、次回は問題にならないからです。
私は簡単な答えで行かなければならないでしょう:私は助けを求めます。他の人が何かの解決策を見つけようとして立ち往生しているときに助けを求めるのと同じように。
編集:同僚に問題を説明するだけで、またはStackOverflowのようなサイトに質問を投稿し始めたときでも、解決策を見つけることがよくあることを述べておきます。
さまざまな角度から見る
私はこれに何度も遭遇しました、通常何が起こるかです:
- あなたは問題を抱えています。最初は、どのようにそれを解決するかという考えが頭にあります。
- 実際にソリューションを実装することになると、それは機能しないことがわかります(おそらく、実際の問題のモデルが弱いため)。
- 問題を解決するために苦労した後、それはより多くの研究や他の人に尋ねることになります。それはどれもうまくいきません、純粋な欲求不満です!
最後に、したくないことを選択します->
"The Dirty Hack"
動作しますが、汚れていると感じます...
それはあなたができない理由に依存します...
論理的に不可能:要件を書いた人と話し合ってください。誤解があるかもしれません。 例:ある時点では、アプリケーションはすべてのプラットフォーム(Windows/Linux/Mac)でネイティブのルックアンドフィールでなければならない、そして別の場所では、プログラムはすべてのプラットフォームでまったく同じに見える必要があると述べています
技術的に不可能:作業しているツールを再評価します。おそらく適切ではありません。同僚やプロジェクトマネージャーと問題について話し合います。 例:ガベージコレクションが不確定な時間実行を停止できる環境でのハードリアルタイム要件
不十分なパフォーマンス:多分あなたは間違ったアルゴリズムを使用しているかもしれません、あるいは多分問題は難しすぎて(例えばNPハード)、要件はそれを考慮に入れていません。使用しているアルゴリズムを再評価してください。もっと速い方法があるかもしれません。同僚やプロジェクトマネージャーと問題について話し合います。完全な結果ではなく、十分なヒューリスティックに切り替えることを検討してください。 例:数十または数百のノードを使用したパスの最適化
あなたはそれを行う方法がわからないだけです。仲間に尋ね、stackoverflowに尋ね、インターネットを検索してください。使用しているツール/ライブラリのサポートに連絡してください。プロジェクトマネージャーと話し合ってください。
それは機能するはずですが、機能しません。理由はわかりません。プログラムをリファクタリングして、よりテストしやすくします。競合状態を考慮してください。それらはしばしば見つけにくいバグの理由です。同僚に助けを求めてください、4つの目は2つ以上を見てください。使用しているツール/ライブラリの既知のバグについてインターネットを確認してください。
通常、私はそれを修正するために私よりも賢い人を雇います。彼はそうし、彼は私の上司です。ばかげている。先に進みます。
他の人がプロのやり方でそれに対処する方法をうまく指摘すると思います。欲求不満、恐怖のような個人的な感情にどう対処するかを述べたいと思います。
結論としては、問題をタイムリーに解決しなくても、FINEになります。人生は続く。
時々、スケジュールがプッシュされます。プロジェクトは成功するか失敗するかのどちらかです。あなたは解雇され、それから素晴らしい仕事をするかもしれません。あなたは決して知りません。
誤解しないでください。問題をそこに置いても問題ないという意味ではありません。私たちにできることは、最善を尽くしてそれを手放すことだけです。
時々、私は欲求不満、問題を解決しないことを恐れることは、平均的な開発者としての私の人生だと思います。
問題を解決できなかったとは思いませんが、問題の解決をあきらめたケースもあります。バグを修正したり、どうすればいいのかわからない機能を実装したりするために何時間も費やした後、チームのメンバー、チームリーダー、またはマネージャーに「私はこれで立ち往生しています。私にしてほしいの?」彼らが私がどこにいるか知っているように。彼らは、「それを守ってください、あなたはそれを得ると思います」、「それほど重要ではない何かに移る」、または他のいくつかのことを言って、それから私は何をすべきかわかります。
自分で解決できなかったバグや、完了しなかった機能がいくつかあります。私は何かを成し遂げることを試みることができますが、すべてが合理的な時間で解決する私の力の範囲内にあるわけではありません。これの重要なポイントは、上司があなたがどこにいるかを知ることができるようにコミュニケーションをとることです。
とは言っても、かなり特別な状況に遭遇したことが何度かありました。
トロントのカナダの大規模な銀行で働いているとき、私は、仕事を与えられたときにどうすればいいかわからなかったあらゆる種類のことをするように求められました。たとえば、起動時に「Esc」キーと「Enter」キーが入れ替わり、正しいキーシーケンスでラップトップを再び使用できるラップトップを保護するために、この方法をテストするように依頼されました。 「この作品はどうでしょうか。ユーザーに問題がないかどうかはどうすればわかりますか?」ハードウェアやそれを実行するための他のリソースを持っていなかった他のタスクがありました。同時に、トラブルを防ぐために将来の雇用状況について注意すべきことがたくさんあるので、かなり教育的でした。支払いがいつ支払われるかを確認する方法、時間を追跡する方法、その他のコミュニケーションの問題は、私が本当に忘れていない詳細な説明がここに示されました。
カルガリーのアプリケーションサービスプロバイダーで働いていたときに、サービスとして販売した内部アプリケーション内に別のWebサイトのコピーを作成しようとするこのプロジェクトが与えられました。ここでの重要な点は、最初に行うべきことについてのタイムラインや提案が与えられておらず、ただ一般的な研究であり、1か月後には、鎮痛剤に対する悪い反応があったのと同じようにデモを求められました。その反応は、私が突然仕事を辞めた1週間続き、翌週、翌日に解雇されたときの最後のわらぎのようなMicrosoftイベントに行きました。ここで注意すべき点は、上司が私の地域に近づくたびに「今何が問題なのだろう」と思ったときに、上司との関係がかなり貧弱だったことです。何度も何度も誰かへの反応として持っていることはむしろ健康なものではない傾向がありました。
他の人が言ったように、コミュニケーションは重要です-あなたが行き詰まっているときに上司、チームメンバー、クライアントなどに人々に知らせる(影響を受ける人に知らせる)。
かつて鋭い同僚が、成功には次の2つのことにルーツがあることを教えてくれました。
良い関係を持つことは、良いコミュニケーションと期待を前もって設定することの機能だと思います。
私はポリアの原則に従います:
「解決できない問題がある場合は、解決できない簡単な問題があります。それを見つけてください。」
ジョージポリア
原則の美しさは、ある時点で十分に小さい問題があり、うまくいけば、うまくいけばbootstrap元の問題の解決策この原則はまだ失敗していません。
問題を解決するための私のシーケンス(次のspetはすべて、前のspetが機能しなかった場合にのみ実行されます):
厄介な問題は、手順5〜6で解決されます。
本当に本当に悪い問題は、通常、しばらく時間が必要です(ステップ7は、ほとんどの「問題があるようです」という問題の解決策です)。そして、私はそれを意味します-その日の残りの時間のために別のタスクに切り替えて、朝一番に問題を解決してみてください。それは不思議です。
その後、ステップ8が始まります。
" seek help "の答えは間違いなく正しいです。あなたが特定の問題に遭遇した最初の人である可能性はほとんどありません。
しかし、実験として、助けがなければどうなるでしょうか。自分で問題を解決しなければならない場合はどうなりますか?最も重要な問題解決能力は、識別およびチャレンジ独自の仮定。問題に関する仮定を1つずつ列挙し、それぞれを順番に排除できる場合、最終的に誤った仮定に出くわし、結果としてソリューションの新しい可能性が開かれます。
(ちなみに、これは就職の面接で得た問題に対する回答が見つからない場合の最良の方法でもあります。口頭で仮定をリストアップし、どれが間違っているかを判断してから、問題に再度取り組みます。ほぼすべての「トリックの質問」は、自然であるが誤った仮定に基づいています)。
助けを求めることは本当に最良の答えですが、役に立つかもしれないことがもう少しあります。
それで、より長い期間業界にいる人たちにとって、あなたができない問題を解決するように言われたらどうなりますか?それは起こりましたか?もしそうなら、何が起こりましたか?彼らはただそれを落として「まあ、私たちは何か他のものでやれると思います」と言ったのですか?結果はありましたか?あなたは懲戒されましたか、それとも解雇されましたか?
はい、それは私に起こりました、そしていいえ、私はそれのために懲戒処分または解雇されたことはありません...
業界では、時間内に予算内で問題を解決するかどうかがすべてであり、適切なマネージャーはそれが常に可能であるとは限らないことを理解しています。
マネージャーは「Xを実行してほしいのですが、何が必要だと思いますか」と言います。そして、あなたは多くの答えを与えることができます。良いものは次のとおりです。
続行するかどうか、またどのように続行するかを決定するのはマネージャーの仕事です。彼らが続行することを選択した場合、あなたの見積もりを満たすか、障害があるかどうかマネージャーに知らせるのはあなたの仕事です。あなたがそれをしている限り、合理的な会社ではマイナスの影響はありません。
もちろん、あなたの仕事を終わらせるための時間やリソースを与えない不合理な会社もあります。私はそれらのいくつかで働いていました、そして誰もが会社の制約内で解決することができない問題を手渡されました。そのうちの1人は8か月以内にプログラミングスタッフの約98%を解雇しましたが、それは確かに結果でしたが、それは私には直接向けられていませんでした。
あなたが困惑することになるさまざまなタイプの問題がたくさんあり、それらの多くはそれらを処理するための異なる方法を持っています。
問題の1つのタイプは、奇妙なサウンドAPIなど、これまでに見たことのないものを実装することです。この場合、真剣にSOに質問します。
もう1つは非常に大きな問題です。このタイプの問題には、繰り返し取り組むことができます。 「Humongousを実装する」と言われます。あなたはそれを見て、あなたが理解できる限り多くのステップを書きます。次に、複雑なステップを小さなステップに分解します。小さなステップについて考えるように強いられると、それらはより明確になります。技術的な問題が発生した場合は、テストの実装を試し、必要に応じてこちらに問い合わせてください。
より厄介な問題の1つは、指定が不十分な要求です。彼らは単に「x」を実行することを望んでおり、それがどのように行われるべきかを教えてくれません。これらの良いアプローチは、インターフェース(通常はGUI)のプロトタイプを作成し、誰かにそれを試してもらうことです。
次に、満たすことができない時間的制約があります。多くの場合、これには期待値の変更と機能プロトタイプの提供が含まれます。
あなたは一般的に、何らかの方法で物事を自分の道を見つけるでしょう。それは恐ろしいことですが、いったんそれに入ると、ほとんどの場合、常に何らかの方法を見つけることができます。
あなたの最善の策は、ラップトップの外側に「Do n't Panic」という単語をペイントすることです。そして、あなたのタオルを忘れないでください。
私の経験は、新卒者が深いところに投げ込まれないということです。代わりに、経験豊富な開発者も含むチームの一員になるでしょう。
私のアドバイスは、それらを利用することです。問題への対処方法がわからない場合、またはソリューションが正しい方向に進んでいるかどうかを知りたい場合は、問題について話し合ってください。そして、どこかに行き詰まっていると感じた場合は、経験豊富なスタッフの1人をつかんで問題を説明し、助けを求めてください。
ほとんどの場合、問題を説明するだけで解決策が明らかになり、解決策を説明すると、同様に問題が明らかになる場合があります。
多くの場合、これは問題を適切かつ正確に定義していないために発生します。おそらく、実際の問題そのものではなく、先入観のあるソリューションを解決しようとしているのでしょう。
問題は観察することだけであり、想像することではありません。
「私の血まみれの車が始動しない」が問題です。 「バッテリーが消耗しています。」車の始動問題に対する先入観のある解決策です。バッテリーをテストしても、それが問題の唯一の原因であることは証明されません。実際にバッテリーを充電または交換して車を正常に始動させない限り、バッテリーが問題の原因であるという証拠はありません。
簡素化し、簡素化を維持します。細かく分割してください。それらを解決できない場合は、それらを粉砕します。気分が良くなります。次に、さまざまな小さなパーツに分解します。それらの各部分は、観察可能な現象でなければなりません。
このようなことは聞いたことがありません。まず、まったく解決できない問題が発生することはありません。問題は難しい場合があり、解決するのに時間がかかる場合があります。問題が発生した場合は、これが私が必要とする時間だと言わなければなりません。調査の結果、この問題を本当に解決できないと思われる場合は、フラグを立てて、この問題にさらに時間がかかるか、解決するのが本当に難しいことをマネージャーに伝える必要があります。それはすべてスケジュールについてです。あなたが何かを約束し、提供することができない場合、それは問題です。しかし、あなたが自分のステータスと懸念を伝え続ける場合、それを管理するのはマネージャーの責任です。彼はあなたを助けることができる適切な人にリダイレクトするか、スケジュールを調整する必要があります。
ここにいくつかの素晴らしいアドバイスがあります!私の2セント相当です。大きな問題に圧倒されないでください。問題を解決するための刺激的で挑戦的な部分は、一連の管理可能でより重要な理解が可能なサブ問題に分解され、それが何度も何度も分解されることを忘れないでください副問題。優れたプログラマーは通常、コードを作成している間(関数、メソッド、サブルーチンなどを使用してコードのセクションの全体的な複雑さを軽減するのに役立つ)に分単位でこれを行い、この方法論は通常、あらゆる大きな問題に適用されます(仕事中だけでなく)生活の中での顔。
特定の問題が何であるかによって異なります。ただし、応答は次のいずれかになります。
3番目の問題は、問題から離れて、数週間または数か月後に再検討する必要がある場合があります。それはしばしば助けになります。
私の経験では、少なくとも時間の制約上、解決できない問題が時々あります。ですから、できるだけ早く助けを求めてください何らかの解決の努力があなたに失敗した後。
経験則を覚えておいてください:上司があなたを雇った理由を常に見てください。最良の作業結果を得るためにできると思うことは何でもしてください。それは、初期の失敗レポートになることもあります(遅いレポートよりはるかに優れています)。
つまり、解決策が見つかると思われる場合は、自由に試してみてください。ただし、リスクと時間コストについて上司に見積もりを与えてください。それは今彼らの問題です。
経験豊富な人々でも1億ドルのプロジェクトが失敗する可能性がある場合は、学生であるため、失敗する心配はありません。私は作業するのに問題があり、それが行き詰まったものである場合、それを解決するために行ったすべての試みを記録する必要があることに気付きました。
それは役立ちます: