- ベストアンサー
プログラミングにおける思考ってどのようなものでしょうか?
プログラミングを学んでいるものです。 目標のプログラムを作成に至るまでの手順がまるで理解できません。 仮にプログラムが完成したとしても、マグレでしかなく何故そのような プログラムになったのか説明が出来ないのです。 現在、プログラミングをしているのですが、全く思い浮かびません。 ひどい時には、24時間以上かけても始めでつまずいたままです。 これではただの時間の無駄で、その度に我儘にも自分の労力の無意味さと能力にショックを受けます。 暗記と違い時間をかけても得るものが何もないのは理系?関係では良くあることでしょうが、このまま不毛な真似をするのは駄目だと思いました。 プログラミング文法を知っているかではなく、プログラムの組み立てについて、どのような思考で行えばよいのでしょうか? ご意見お願いします。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
#9の方の意見に似ていますが、以下の順序で考えます。 (1)全体を「初期処理」、「中核処理」、「終了処理」の三個に分ける。 基準は「初期処理」=最初に1回だけやる。「中核処理」=本体で、 ブラックボックスになる。「終了処理」=最後に1回だけやる。 (2)各ブロックについても具体的なプログラムイメージが掴めない時は 同様に三分割し、問題を先送りにする。これをプログラムがイメージ できるまで繰り返す。 (3)結果として、「初期処理」や、「終了処理」が不要な場合もある。 (4)常にトップダウンで考える。局所的に細かい部品(イメージは 掴み易い)から組み上げる思考は排除する。 (5)プログラムイメージは上から下へ流れる方向で考える。 絶対に上に戻る、あるいは下の方への飛び越しは排除する。 (6)必ず、(プログラム言語ではなく)文章で表現する。その後で プログラム言語に「翻訳」する。 特に(6)は大事です。現場の叩き上げで、プログラム作成能力は抜群 なのに(6)がダメという人がいます。若いうちは良いのですが、 やがて、扱いの難しい人材になってしまいます。(6)ができれば 言語に関係しなくなり、実プログラムを他人に任せることも可能に なります。 こういうことを繰り返して1年半くらいすると、自然に身に付くので、 息をするぐらい普通にできるようになります。 ただ、どうしようもなく「センスが無い」という場合もあるので、 1年半やってみて、「普通」にできないようなら、考え直した方が 良いでしょう。
その他の回答 (9)
- rivoisu
- ベストアンサー率36% (97/264)
基本は「分割統治」 大きな問題は小さな問題の集合。 小さな問題に分けて考える。 しかしどう分割するかというところに経験が必要なのかもしれません。 人のプログラムを読むことも重要なことだと思います。 いいプログラムを読むこともまずいプログラムを読むこともそれなりに勉強になります。
お礼
回答ありがとうございます。 応用は基礎の集まりといった感じで考えると解りやすいかも。 まずいプログラムというのは自分のそれしか見たことが無いため 何とも言えませんが。
- avanzato
- ベストアンサー率54% (52/95)
こんにちは。 私は独学の後専門課程を修了しました。 独学は小学校から高校までN88BASICをひたすらやって参考書が無かったので他の人の作ったプログラムソースを見て流れを掴み、分からない構文は実際に動かして意味を知りました。 専門課程修了後SEに就職し毎日プログラミングに追われましたがやはりそんな中でも作り方がわからない事は多々ありました。 それから10数年経ちますが今でも分からない事はいっぱいあり壁にぶつかった時はインターネットで検索し問題を解決します。 これを繰り返しているとLvは上がりますしちょっと前まで出来なかったようなものは簡単に作れるようになります。 今はひたすらプログラムを作ることが必要だと思います。 あと、参考書の内容を全て覚える必要はありません。 今作るプログラムに必要なことを徐々に覚えていくと私は良いと思います。 また、私がプログラミングのときに最初に考えることは「まず、何をどうしたいか?」を明確にすることです。 参考までに、、、そして頑張ってください^^
お礼
回答ありがとうございます。 自分はVBAですが、根本的な部分は似ているようだ。
- chochobizo
- ベストアンサー率42% (30/70)
私もプログラミングを独学しました。 確かに参考書程度では、文法は理解できてもテクニックは上達しません。 テクニックは、ひたすらプログラムを作ることです。 No.4さんの言われてるように、人間が手作業した場合の手順を把握することは大事だと思います。 その上で、いきなり完成形を目指すのではなく、作業の部分部分をテストプログラムとして作成してみてください。 最終的にそれを一つにまとめるよう作成していけば、一つのプログラムが出来ると思います。 これを繰り返すことで、部分的なプログラムを作成せずに作っていけるようになります。 部分的な事でわからない場合は、ネットでも結構テクニックが見つかりやすいと思いますよ。
お礼
回答ありがとうございます。 経験が大事そう、日々の積み重ねが無いと進みにくいのか。
- koko_u_u
- ベストアンサー率18% (216/1139)
大体わかったような気がします。 Windows でランチャプログラムが作りたい。 =>でも俺の持ってる C言語入門なる参考書にはランチャの作り方など載ってなくて、printf のオンパレードだ。 といった感じですかね。 結論としては、言語の文法だけでは知識量が圧倒的に足りなくて、 ライブラリの使い方やプラットフォーム毎に依存した部分をさらに勉強するしかありません。
お礼
回答ありがとうございます、こんな時間まですいません。 本当にプログラミングは大変だ・・・
- koko_u_u
- ベストアンサー率18% (216/1139)
>あるプログラムを作ると指定されている この「指定」がどんなものかが分からんのですわ。 仕事の話だとして、あなたの役割がコーディングだとするなら、詳細設計書という形で指示があるのが普通です。 詳細設計書があって、文法がわかっているなら、「24時間もの間まったく作業が進まない」という状況はちょっと想像がつきません。 外部要件だけ決まっていて、どのように実装すればいいのか分からない。という状況ならいくらでもあります。 そういう場合は、様々な実装方法を勉強してもらうしかありません。
補足
失礼、学んでいるだとちょっとややこしいみたいですね。 「勉強しているもの」です。 詳細設計書なるものはありません。ただ、ヒントとしてプログラムを作成するための必要な文法は説明されています。 今の状況としては公式を知っている、じゃあ問題解けるかと聞かれたらNOといった感じです。 わからないから適当に公式使ってたら出来たなんて、プログラム作った内に入るワケがありません。何かプログラミングって全部応用問題って感じがするのですわ。基礎という概念が全く存在してなくて、いきなり応用問題解けと言われても、どういう風に考えて解けばいいのか理解できない。
- ちあき(@Chiaki-F)
- ベストアンサー率49% (576/1153)
人間は、最初からひらめいて出来る人なんて早々いません 勉強だって先生から教えていただくし、教科書等を見て覚えたりします プログラムだって同じですよ 他の人が作ったプログラムを雑誌やネットで手に入れたら その横にどんな動作・処理をしているか全部書いていくんです 書き込んだら、何度も見て流れを考えていけばいいですよ それを何度もしていくとプログラムの組み立て方が頭に入ってきます プログラムは言語ですから、作文と同じで起承転結をしっかりと話の流れを考える 人間が手作業でする場合を考え、手順を作文にしたらコンピューターの言語に変換していく作業です
お礼
なるほど。 >>人間が手作業でする場合を考え、手順を作文にしたらコンピューター の言語に変換していく わかりやすいイメージです。 試してみよう、返答ありがとうございます。
- koko_u_u
- ベストアンサー率18% (216/1139)
どこで躓いているかがよく分かりません。 詳細設計書があって、コーディングできません。という話? 概要設計書だけあって、それを詳細の設計にブレイクダウンできません。という話? 要件がまったく決まっていないので、プログラミングできません。という話?
補足
あるプログラムを作ると指定されている ↓ プログラムの文法は予め説明されている ↓ どうやってプログラムを作るのか? ←此処で止まります 大抵当てずっぽうになってしまい、まともにプログラムを作れた試しがありません
基本的なロジックの考え方さえ判れば、言語はどれだろうが、大抵は文法書があればプログラムは組めます。 一般的にはフローチャートの方が有名ですが、PADの方が簡単かもしれません。 プログラムを組む前に、フローチャートなりPADなりで、やりたい事を整理してからプログラムに起こしましょう。 [参考]フローチャートの作成 http://homepage1.nifty.com/Iruka/nifty/cgi/mailcheckCGI/page2.html [参考]PADについて http://www2.ee.knct.ac.jp/el/E2/L210/algorism/pad1.html
お礼
回答ありがとうございます。 フローチャート、参考にしてみます。
- cyan15
- ベストアンサー率50% (3/6)
どのような分野でのプログラムをされているのかわかりませんが、とりあえずご意見。 こう、毎日の生活のなかで、「あ、こんなのがあったら便利なのになぁ」とかって思いませんか? あの感覚ですよ。 無理に「役に立つ製品を作るんだ!」ってくそ真面目に考えても、なかなか浮かばないものなのは、当たり前です。 それに下手なプレッシャーまで感じていては、そもそも柔軟な思考が必要な分野なのに、ますます開発ができなくなってしまいますよ。 ようは発明家のようなものなのです。 誰得なアプリケーションであったとしても全然いいんじゃないでしょうか。それが意外な点で着目されて開発が急展開するなんてよくあることです。まずは「こんなのなんの役に立つんだよ」とか思って自虐的になる前に何でもいいから作ってみてください。プログラムの練習にもなりますし、決して無駄にはならないはずです。 ほんとに難しい分野ですよね、ご健闘をお祈りします。
お礼
柔軟な思考、やっぱりそれ大事ですか。 あと練習は結構大変そうですが、頑張ってみます!
お礼
回答ありがとうございます。