mt___sugi
@mt___sugi (やまめ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

システム設計について

Discussion

Closed

プログラミング初学者です。

自分のアイデアをプログラムで表現する時って、皆さんはどんな思考をしているんですか?

「これを作りたい!」ってなった時にそのコードの全体像がパッと思い浮かぶんですか?

自分はシステムを設計する際、「この構成要素を実現するためには、どうすればいいんだろう…?」みたいになっています。

1

「これを作りたい!」ってなった時にそのコードの全体像がパッと思い浮かぶんですか?

場合によるかもしれませんが、
「似たようなシステムを過去に作成した」といったようにベースがある状況、
「限りなく小規模のシステムである」といったように特殊な状況、
ではなく1からシステムを作成するとなれば(恐らく)余程の熟練者でない限り
そのような状態にはならないかと思います。

また、パッと仮に思いついたとしても、
絶対に設計書は作成するでしょう。

流れをどう書こうか迷いながら調べていたら
とても参考になる記事が出てきたので紹介します。

こちらの記事は「仕事で使う」レベルの
ガチガチの流れを詳細に説明してくださっています。

「自分用にとりあえず何か作ってみたい」場合は各章の成果物レベルを下げて

  1. 要件定義を「何を何のために作りたいのかくらい」のレベルで考えてみる
  2. 基本設計書を紙でもMS Officeでもなんでもいいから作ってみる
  3. 詳細設計書を自分の今持っている知識の範囲で作ってみる

といった感じで、具体的にプログラミングに移る前に
「頭の中で想像している画面や機能」をとにかくアウトプットします。

「何を作りたい」>「それにはどんな画面があるのか」>「どのような機能が必要か」
のように一つ一つの粒度が低くなるようにします。

「この構成要素を実現するためには、どうすればいいんだろう…?」

このような時でもまずはコードなどの技術レベルの事を考えるよりも
「何が必要なのか」イメージするために上記の設計書類を作成し、整理します。

設計書ができたらやっと「じゃあ、どう実現するか」という段階になります。
(仕事の場合は要件定義の時点で技術選定やらなにやらあったりしますが、
今回はあくまで「自分用」という前提で話します)

「今まで学んだ言語や技術で実現する方法があるか調べる」、
「無い、またはより実現に向いている技術があれば更に調べる」
といった形で調べることを繰り返して、
徐々にイメージから具体的な方法を模索していきます。

例えば、最初に「ログイン画面」があるとするなら
「(言語名) ログイン 実装方法」などで調べる、といったような感じです。

ある程度、実装の目処がついたら
実際に設計書を基にコーディングしていきます。

その際に、コーディングの方法などで
不明なことがあればより具体的に都度調べながら進めます。
(使用しているプログラミング言語のドキュメントを読むなど)

全体的に雑多な感じの意見になってしまいましたが、
何か少しでも役に立ててもらえたら幸いです。

2Like

規模にもよりますが、システム単位でコードの全体像がパッと思い浮かぶことは無いですね。
部分的にはイメージできたりしても全体はぼんやりとしたイメージとか、あるいはまったく思いつかないこともあります。

ではどうするかというと、悩んでいても仕方がないので手を動かします。

まずは課題を細分化したり抽象化したりして簡単なレベルに落とし込みます。
そしてコードが書ける状況なら、試しにコードを書いていろいろ実験します。

コードが書けなければ文書やイメージとしてアウトプットしてみます。
これは設計書というようなしっかりしたものではなく、チラシの裏にフローチャートやTODOリストを書くようなイメージです。

アウトプットが難しいならインプットします。
すべてをゼロから生み出すようなことはまず無いので、関連がありそうな情報を収集していきます。そしてアウトプットします。

例えて言うなら正解のないジグソーパズルのような感じですね。はまるピースを探してひとつひとつ埋めて完成を目指す地道な作業です。

ざっくり言語化してみましたが参考になれば幸いです。

2Like

私の場合は、基本アジャイルです。
まずは画面や基本的な機能を実装してみて
動かしてみて
新たなアイディアや要不要を
使いながら試して、膨らましてゆきます。
そうして、試行錯誤を重ねながら完成させてゆきます。
その中で、無駄になったところもありますが
経験値としては蓄積されてゆくので
経験が多くなってゆくと、そおいう無駄も少なってゆきます。

1Like

中学生の答えなんて、求めていないと思いますが...

私の場合は何か「こんなもん作りたいな〜」と思うときって、だいたい電車に乗っている時とか、ボケーっとしている時なんです。
なので、そのアイデアが失われないうちに、appleのリマインダーなんかを使って必要な機能を書き出していきます。その時に、「改行文字ごとに配列を作成して、ここでfor文をぶん回して...」なんて大体の流れを考えるんです。
それが終わったら、家とか、落ち着ける場所でそれぞれ上から順に、わからないところはドキュメントなんかを読みながらコードを組み立てていくような感じです。

あくまで、個人開発の気軽なものですが...

1Like

皆さんのご意見、とても勉強になりました!
自分の持てる知識を総動員するというよりかは、細分化し、都度調べながら時間をかけて作っていく感じなんですね!

教えてくださった皆様、ありがとうございます!

0Like

Your answer might help someone💌