質問: 直接プログラムの質問ではないのですが、是非プログラマーの方々の 意見を聞いてみたいと思ったため、ここで質問をさせていただきます。 検索して確認はしたのですが過去に似たような質問があった場合はすみません。 **聞いてみたい事はタイトルの通り、「プログラムを組む前の準備」についてです。** --- 以下、思い立った経緯なので読み飛ばしていただいても構いません。 プログラムのプの字も知らない初心者から、 有志の方が作られた既存のプログラムのオプション等を弄ってみる、を経て 1つの処理ごとに調べながらなんとか1からプログラムを組み立てる くらいまでにはなんとかレベルアップ出来てきたと思います。 (まだまだ初心者のままではありますが...) ただ、単純なプログラムならそこまで問題は出ないのですが、 複数の処理を組み合わせる必要が出てくると、 同じ処理を何回も書いたり、ifがどんどん入れ子になってしまったり、 完成した後で「○○のパターンがある事を考えていなかった」など 行き当たりばったりでプログラムを組んでしまっているなと感じます。 単純に勉強&経験不足で作る前に完成イメージが出来ていない、 もっとたくさん組んだらマシになるだろう。と思っていたのですが、 昔学校でプログラムを組む授業の時(※完全触り程度のものです)、 プログラムを組む前にフローチャートを書いたことを思い出し、目から鱗が落ちました。 思えば、初心者向けのプログラムの本や記事では、最初の方にフローチャートを見せながら 概念等を説明しているものが多いように感じます。 ベテランになれば脳内で想像できるようになるのかな...?と思いながらも、 まだまだ初心者なので効率良く出来るよう、 これからはプログラムの前にイメージをしっかり落とし込みたいと思っています。 --- そこで最初の質問なのですが、みなさんはプログラムを組む前に どのように考えたり、準備(それこそフローチャートなど)をしているのでしょうか? その人々によってやりやすい形は違うと思うので、 正解を求めているというよりは、色んな方のパターンを知ってみたいという気持ちです。 恥ずかしながらプログラムよりも前に勉強しなければいけない基礎中の基礎だと思いますが、 ざっくりでも全然かまわないので、もしよければ教えていただけないでしょうか。 長くなってしまい申し訳ございませんが、どうぞよろしくお願いいたします。 --- 【2019.2.18 追記】 皆様の教え全て勉強になることばかりでとても迷ったのですが、 他の方からも高評価を多くされていたtacsheavenさんをBAとさせていただきます。 質問時点で思っていた以上に沢山の事を教えていただき、 いっぺんに頭に入れようとしてちょっと混乱している最中ではありますが、 1つ1つ自分の中に落とし込み、成長できるよう努力していきます。 沢山ご回答いただき、本当にありがとうございました! また、過去にも似たような記事があったとご指摘をいただいておりまして、 リンクを貼ってよいのか分からなかったので直接リンクは貼りませんが、 この記事内で教えていただいた単語を絡めて検索すると同じような質問がありました! (最初の検索の仕方が下手くそでした...) もし私と同じ悩みを持ってクリップしてくれた方がいらっしゃれば、 ぜひそちらも参考にしてみてください。
回答: 例えば○○祭、というものだと、進行表としての「プログラム」がありますね。(あるいは幼稚園のお遊戯会なんかでもありますね)。 つまりプログラムとは、もともと**行うべき事を順番に記述した物**なのです。 逆に言うと、**何を行うのかを書き記す**ことができれば、プログラムができるのです。 そのためには、大きな作業の塊を、より小さな作業の集まりに分解する作業が出てきます。 そのための道具として、古くはフローチャートが考えられ、いくつかの改善を経て UML のシーケンス図などに受け継がれていますが、基本的には **やることを箇条書きで順に記す** ことができれば、あとは言語に落とし込むことができます。 大きな作業を小さな作業の集まりに分解するのは、それだけ聞くと難しいことをしているように思います。 ですが、日常生活を考えてみてください。例えば「朝、会社に行く」という一つの作業は、実際には * 起床する * 身だしなみを整える * 朝食を取る * 戸締まりをする * 電車に乗る といった、いくつかの作業になります(そしてこの作業は、並行できる部分もあれば順番にこなさねばならないこともあるし、処理しないこともありますね。起床しないで電車に乗るとかできませんし、場合によっては朝食を取らないかも知れません)。 さらにこのいくつかの作業も、例えば「身だしなみを整える」は、 * 服を着替える * 顔を洗う * 髪を整える * 歯を磨く のように、さらに細かくすることができます。(さらに言えば、「歯を磨く」も、歯ブラシを取り、歯磨き粉を付け、歯を磨く......とさらに細分化ができます) プログラムの設計も、基本的にはこれと同じです。意識して手順を構築する必要があるだけです。