問題解決のアプローチを紙に書いていますか?[閉まっている]


54

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

たぶん、私が目の前で人々が研究室を解いているのを見るのがストレスになるからでしょう。または多分それはペンと紙の方法です。

私はフォーラムを閲覧していましたが、誰かがプログラムを紙に書かなければならないなら、プログラマーになってはいけないと書いています。実際にコードを入力する前に、プログラムが何をしているのかを確認し、それを自分のやり方で追跡できるようになったときのほうがずっと良いので、本当に心配です。私は何か間違っていますか?

編集:不明瞭で申し訳ありませんが、紙に書いたとき、問題解決のアプローチ(例の作成、値を含むテーブルの作成など)は実際のコードではありませんでした。紙を使ってアイデアを出しているだけです。


28
私は最初に紙の問題を熟考することで何も悪いことを見ることができません。
ジュリアンゲルトー


34
その人は間違っています。ほとんどの場合、UMLや擬似コードブロックのような略記法を使用しますが、使用する方法はすべて頭のように機能する必要があり、明らかに紙が必要です=)
パトリックヒューズ

10
あなたにとっての課題は、実際にラボにいる間に紙の上で物事を解決することを学ぶことです。エンジニアと科学者は、このために(そしてペーパートレイルとして)習慣的に紙のノートブックを使用します。私は自分のキャリアをコードの記述に費やし、常に紙のノートブックを使用しているエンジニアです。
モー

4
@ ott--私と同僚は全員、ノートブック付きのペンを使用しています。少なくとも私にとっては、大学で学んだ良いトリックです-消去できないことは、私がそれをより深く考えさせてくれるので、追加のページに広げる必要はありません。さらに、すべてを1ページに保持したいという誘惑と消去機能により、必要なものを誤って消去するのは非常に簡単になります。間違ったアプローチは消すことはできず、消すことしかできないので、あなたが試したこととうまくいかないことについて思い出させることができます。紙は安いので、自分で難しくしないでください。
イズカタ

回答:


70

最初に紙の上でアルゴリズムを実行しても問題はありません。毎日のコーディングではなく、より複雑なアルゴリズムの場合、プロのプログラマーは、特にグラフィック形式でより明確になっている場合は、常に紙やホワイトボードで作業します。学生にとって、すべてのプログラムは複雑です。

ただし、コンピューターでのアルゴリズムの設計を改善したい場合は、実践できるテクニックがいくつかあります。コードを書き出すことから始めて、コメントとして紙に書くのと同じことを書き、それを実際のコードまたはより詳細なコメントに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、より多くの擬似コードを持つ関数に置き換え、完全な解決策が見つかるまで続けます。コードを直線的に記述する必要があるとは思わないでください。


カールの良いアドバイス。
andy256

2
私は上記の方法とラバーダックの問題解決(私の場合はSuSEのプラッシュです)を組み合わせて、ほとんどの複雑な作業を行います。また、たくさんのものを書くためのホワイトボードの豪華さもあります。
デコ

+1。質問を書いてから答えを書くことが、私がよく物事を解決する方法です。計画の落とし穴や落とし穴を探すことを強いられます。
アンディハント

1
多くのソフトウェア開発主導型ビジネスは、いたるところに書き込み可能な表面を持っています。彼らは通常、図、擬似コード、メモ、作品でいっぱいです。私はものを走り書きすることを非常に強く好みます。コードをリファクタリングしている場合、実際にコードを印刷して注釈を付けることができれば気に入っています。読み通してメモをとるよりもずっといい感じがします。
トウィリム2013年

1
この手法には実際には名前があります:擬似コードプログラミングプロセス
-roufamatic

15

頑張れ!ソリューションを考え設計していることを呼び出す、コードを吹き飛ばすよりもプロセスがはるかに高速になります。

人々は自分のやり方がより良いと思うのを好む(そして騒々しい人は私たちに言うのが好きだ)。しかし、全員の能力とスキルの組み合わせは異なります。だからあなたのために働くものを行います。練習を重ねるにつれて、頭の中でより多くの設計作業を行うようになり、大きな問題には紙を使用することになります。

注目すべきことの1つは、試験の形式です。それらは紙の上にありますか、それともコンピューターベースですか?それらが紙ベースの場合、あなたの方法はあなたに利点を与えます。コンピューターベースの場合は、それでも問題ありません。紙の上でデザインを行い、コードを記述します。最適なものは何でも!


1
長期的にはより短い時間でソリューションを考え、設計することを保証できます。多くの場合、大学では、自分自身を含めて2時間の攻撃が開始され、解決策が壊れていることがわかりました。問題の設計と作業に時間をかけると、簡単な解決策を見つけるのに役立ちます。この理由から、ホワイトボード、ノートブック、「相談」を用意しています。
ジェイミーテイラー

6

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

  • アルゴリズム/プロセス/制御フロー
  • データ構造
  • 関係
  • コンポーネント(この問題をどうやって分解するか)

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

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

紙に何かを託すことは、記憶保持のための大きな助けです。Field Notesブランドのノートブックのキャッチフレーズは次のとおりです。

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

紙の上に物事を書き留めるためのより集中的なアプローチをとった後、しばらくして携帯電話のToDoアプリに入力しても、電子メモを作成するよりもはるかに頭の中で考えが固まっていることがわかります。IOW、紙/ホワイトボードでのコーディングを計画することで、アイデアが頭に残ります。

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


5

最初に紙の上でコードを作成すること(擬似またはその他)に本質的に問題があるとは思いません。ホワイトボードに書き出すことと実際に違いはありません。多くの人が問題に取り組む方法を議論するときに行います。

非CSクラスのエッセイの最初のドラフトを最初に紙に書いてから入力しますか?実際、私は大学生の頃、その数年前にやっていましたが、新入生の1年後、後続のドラフトを書くのがずっと簡単になり、同じアイデアが当てはまるので、すべてのドラフトを画面に書くことを余儀なくされましたコードを書くことに。

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


3

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

言語に慣れていない場合は、コード自体に多くの時間を費やすことになります。良いソリューションを見つけるのに十分ではありません。その点で、紙、ホワイトボード、または天井から始めることが役立つ場合は、すべての意味でそれを行います。

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


2

あなたはインタビューをエースします!彼らはあなたが紙やホワイトボードにコードを書くようにします。私は正反対です。中括弧を書いたり、ペンで切り貼りしたりするのはとても退屈です!

お父さんはCOBOLをプログラミングするときにたくさんの紙を使いました。私はそれがあなたの思考スタイルだと思います。


0

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


0

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

他の人が示唆しているように、あなたに合った方法を実行してください。私が書いた最初のJavaプログラムは主に紙に書かれていたのを覚えています。それから2時間かけてタイプアップし、200を超えるコンパイラエラーを見たときに15分泣きました。他にもありましたが、コンパイラは最初の200だけを表示しました!しかし、私が指摘しているのは、コードを紙に書くことで、プログラムが行う必要のある基本的なアルゴリズムと機能を考えることができたということです。コンパイラは、私のプログラムが実行されない理由を指摘しました。問題の90%は配列の範囲外の例外でした。

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

あなたの質問を読んで私はあなたの問題のいくつかが焦点によるものであるかもしれないのだろうか。静かな環境でペンと紙を使用すると、集中するのに役立ちます。

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


1
これは質問にどう答えますか?
gnat

OPは、「誰かがあなたのプログラムを紙に書き留めなければならないなら、あなたはプログラマーであってはならない」と書いたので、ペンと紙を使用してもいいかどうか尋ねています。また、彼は大学にいるのでまだ学んでいると述べています。私の意図は、彼がやっていることに何も問題がないことを示すことであり、紙とペンを使ってプログラムすることも学びました。
ダニエルホリンレイク

-1

私のコードは、メモ帳でメモやアプローチを走り書きし、本をチェックし、ウェブをチェックし、それについて考えると、はるかに整理されます。私も視覚的な人間なので、データ構造を使って絵を描くことは非常に役立ちます。すべての行を書き留めるわけではありませんが、「重要な」フラグメントまたは主要な機能と考えるものを落書きします。大規模なプロジェクトでは、Visioを起動します。もっと効率的であるか、時間ごとに支払われない限り、誰かがキーボードにジャンプすることを支持する理由はわかりません。


-1

あなたのために働くことをしてください。私は紙にコードを書きません。私は紙に擬似コードを書いてフローチャートを描きますが、完全なコードを書くのは時間の無駄のようです。


-2

技術的なスキルを学ぶ最初の日も同じ問題に直面しています。

しかし、このタイプのプラクティスは100%の成功をもたらすべきではありません。紙にコードを書いている場合、バグ修正の機会がなく、紙の作業中にエラーと例外を解決するチャンスがあるからです。

そのため、ペーパーワークでは問題を解決するためのナビゲーションは提供されません。また、システムの練習により、タイプスピードをボーナスとして得ることができます。

私もペーパーワークをしていますが、機能を実装する前に大まかな見積もりを行った後、システムで実装を開始します。

システムの練習により多くの時間を費やすようにしてください。これにより、100%の信頼と結果が得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.