web-dev-qa-db-ja.com

私の問題解決アプローチを紙に書くのですか?

私はコンピュータサイエンスの新入生で、Pythonで実際のプロジェクトをいくつか始めたところです。教授がクラスで提案したペンと紙の方法を使用すると、非常に効率的であることがわかりました。しかし、問題を書き留めることができず、アルゴリズムを紙に書き出すことができない場合、私は本当に遅いです。研究室の間、私はいつも宿題を宿舎に戻さなければならないようです。そこに着いてそれを書き出すと、クラス全体を5分程度で解決する問題が解決します。

多分それは、私の前にラボを解いている人を見るのがストレスになるからだ。または、多分それはペンと紙の方法です。

私はフォーラムを閲覧していて、紙にプログラムを書かなければならないなら、あなたはプログラマーであるべきではないと誰かが書いた。実際のコードを入力する前に、プログラムが何をしているかを確認し、それをたどることができるので、私は本当に心配です。私は何か間違ったことをしていますか?

編集:不明確で申し訳ありませんが、私が紙に書くと言ったとき、私は実際のコードではなく、問題解決のアプローチ(例を書く、値を持つテーブルを作成するなど)を意味しました。紙を使って自分のアイデアを引き出します。

54
ComicStix

最初に紙の上でアルゴリズムを作成することに問題はありません。日常のコーディングではそれほどではありませんが、より複雑なアルゴリズムの場合、プロのプログラマーは、特にグラフィック形式でより明確になる場合は、常に紙やホワイトボードでそれらを解決します。学生にとって、everyプログラムは複雑です。

ただし、コンピュータでアルゴリズムをよりよく設計したい場合は、実践できるテクニックがいくつかあります。コードを書くことから始めるのではなく、紙に書くのと同じことをコメントとして書いて、実際のコードまたはより詳細なコメントに1つずつ展開します。

たとえば、リンクリストの途中から要素を削除する場合は、次のようなものから始めます。

// find the element
// point the previous element to the next element
//    How do I get a pointer to the previous element?
//        doubly-linked list?
//        another find?
//        keep track during the first find?
// delete the element

次に、// find the elementより多くの疑似コードを持つ関数を使用し、完全なソリューションが得られるまで続けます。コードは直線的に書かれる必要があるとは思わないでください。

70
Karl Bielefeldt

頑張れ! thinkingおよびdesigningソリューションと呼んでいる場合、コードをブラストするよりもプロセスがはるかに高速になることは理にかなっています。

人々はtheirのやり方の方が良いと考えたい(そして騒々しい人は私たちに伝えたい)。しかし、すべての人の能力とスキルの組み合わせは異なります。だからあなたのために働くことをしてください。練習を重ねるにつれて、頭の中でより多くの設計作業を行うことに切り替え、より大きな問題には紙を使用するでしょう。

気をつけなければならないことの1つは、試験の受験形態です。それらは紙の上にあるのでしょうか、それともコンピュータベースでしょうか?それらが紙ベースの場合、あなたの方法はあなたに利点を与えます。コンピュータベースの場合は、それでも問題ありません。紙にデザインを行ってから、コードを記述します。何がうまくいくか!

15
andy256

私は実際のコードを紙に書き留めませんが、重要なことについては、ほとんどの場合、ホワイトボードまたはノートブックから始めます。私は通常スケッチします:

  • アルゴリズム/プロセス/制御フロー
  • データ構造
  • 関係
  • コンポーネント(この問題を解決する方法)

通常は、スケッチ、疑似コード、英語の組み合わせです。

これを行うと、コーディングを開始するときに視覚化しやすくなります。私も欠陥を見つけますbefore(絶え間ないスクロールとウィンドウホッピングの代わりに)私の前にすべてを見ることができるので、コードを開始します。それだけでなく、それが書き出されたら、他のタスクに取り組んでいるときに、心の奥に物事を形成させることができます。また、非線形の方法で作業することもできます。思いついたときにアイデアを紙に書き、必要なところに到達したらそのアイデアに戻ります。

何かを紙にコミットすることは、記憶保持の大きな助けになります。 ノートのブランドノートブランド のキャッチフレーズは次のとおりです。

後で思い出すために書き留めるのではなく、今覚えておくために書き留めます。

紙に書き留めることにより焦点を絞ったアプローチをとった後、少し後でスマートフォンのToDoアプリにエントリを作成しても、電子的なメモを作成するよりも頭の中で考えが固まっていることがわかりました。 IOW、紙/ホワイトボードでのコーディングを計画することで、アイデアが頭に残ります。

また、私が書いた内容を文書化するときに便利なリファレンスとしても役立ちます。

6
alroc

最初に紙にコード(疑似またはそれ以外)を作成することに本質的に問題があるとは思いません。それは、多くの人が問題への対処方法を話し合うときに行うホワイトボードへの書き込みとまったく同じです。

非CSクラスのエッセイの最初のドラフトを紙に書いてからタイプアウトしますか?実際、私は大学生の頃にそのようなことをしていましたが、新入生の後で、自分ですべてのドラフトを画面に書くように強制しました。コードを書くことに。

Wordのようなテキストエディターでアルゴリズムを入力することをお勧めします。それをすればするほど、紙やペンに頼る必要がなくなります。また、タイピングのスキルが少し不足していて、それが実際にフラストレーションの原因である場合は、タイピングのコースを受講してください。それはあなたの将来のキャリアのためにあなたができる最高のことでしょう。

5
Derek

問題の解決と、ソリューションを実装するコードの記述は、2つの異なるアクティビティです。

言語に慣れていない場合、コード自体に多くの時間を費やすことになりますが、適切な解決策を見つけるのに十分ではありません。紙、ホワイトボード、または天井から始めることがその点であなたを助けるなら、それはどうしてもそうすることです。

(個人的に、私は自分のコンピューターから降りて、心の中で解決策を構築しようとして、輪になって歩き回っています)

3
ptyx

あなたはインタビューをエースします!彼らはあなたが紙またはホワイトボードにコードを書くようにします。私は正反対です。ブレースを書いたり、ペンでカットアンドペーストしたりするのは、SO面倒です!

父親はCOBOLのプログラミングに多くの紙を使いました。それはあなたの考え方だと思います。

2
Chloe

あなたが何をしているのも問題ありません、私は紙とペンを使ってプログラムすることも学びました。

他の人があなたのために働くことをすることを提案したように。私が書いた最初のJavaプログラムは主に紙の上でしたが、200時間以上のコンパイラエラーが表示されたとき、2時間かけて入力し、15分で泣きました。それ以上ありましたが、コンパイラは最初の200を表示!私が強調している点は、紙にコードを書くことで、プログラムが実行する必要のあることの基本的なアルゴリズムと機能について考えることができたということです。コンパイラーがプログラムが実行しない理由を指摘しましたt run。問題の90%は、配列の範囲外の例外でした。

より多くの経験と自信を得ると、ペンと紙の使用を減らすことができます。 forループなどの基本的な概念の使用方法はすでにご存じでしょう。他のプログラムに例があり、再利用できます。コンパイラとIDE=を使用して、プログラムの作成中に明らかなバグを見つけます。今のところ、そのような経験はありません。

あなたの質問を読んであなたの問題のいくつかが集中によるのではないかと思います。静かな環境でペンと紙を使用すると、集中力が高まります。

あなたはまだ大学にいて、まだ学んでいます。結局のところ、あなたがしているのはあなたのために働くものです。紙とペンを使用することで、自分の考えを整理し、明確かつ冷静に考える場合は、プログラミングを行っています。

0

以前は、プログラミングの基礎という名前の2学期クラスがありました。学期半ばの試験と最後の試験は両方とも紙で行われた。コンパイルエラーが発生した場合、重大なポイントが失われます。大きなコンパイルエラーが発生した場合は、失敗しました。ただし、コードを確認してバグのある行を比較的短時間で見つけることができるようになったと感じています。

0
András Hummer