質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

708閲覧

プログラムの作り方や考え方について

kaiserdoragon

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

1グッド

1クリップ

投稿2020/03/03 08:23

お世話になっております。

C#を用いて簡単なデスクトップアプリケーションを書籍を見ながら写経しているのですが、言語がわからないというよりもコードの設計や組み立て方が理解が出来ていないという実感があります。

例えば書籍を見ながら下記のコードにてタイマーのアプリを作成したのですが

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace Timer 12{ 13 public partial class FormTimer : Form 14 { 15 int endTime;//終了時間 16 int nowTime;//経過時間 17 18 public FormTimer() 19 { 20 InitializeComponent(); 21 } 22 23 private void buttonStart_Click(object sender, EventArgs e) 24 { 25 26 if(!int.TryParse(textsetTime.Text,out endTime)) 27 { 28 endTime = 1; 29 } 30 31 nowTime = 0; 32 timerControl.Start(); 33 34 } 35 36 private void timerControl_Tick(object sender, EventArgs e) 37 { 38 int remainingTime; 39 nowTime++; 40 41 remainingTime = endTime - nowTime; 42 textRemainingTime.Text = remainingTime.ToString(); 43 44 if (endTime == nowTime) 45 { 46 47 timerControl.Stop(); 48 49 MessageBox.Show("時間になりました"); 50 } 51 else 52 { 53 // 54 } 55 } 56 } 57} 58

デスクトップアプリケーションなので、見た目についてテキストボックスやラベル、ボタンなどの配置はできるのですが、そこからコードを書いていこうと考えるとどこから何を始めればいいのかわからなくて悩んでいます。

もしプログラムを書く上でこういう方法で努力するのが良い、こういう分野を勉強すればいいなどあれば教えてください。

一度先輩のエンジニアさんからこの質問をした時は「データ構造とアルゴリズム」の知識が必要だと言われて簡単に勉強したのですが、あまり活かさせていないと感じるので再度勉強したほうが良いでしょうか??

よろしくお願いします。

hoshi-takanori👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/03/03 10:20 編集

答えじゃなくて申し訳ないのですが、こういう質問こそ良い質問だと思います。頑張ってください。
guest

回答3

0

ベストアンサー

一度先輩のエンジニアさんからこの質問をした時は「データ構造とアルゴリズム」の知識が必要だと言われて簡単に勉強したのですが

先輩エンジニアに聞ける環境にあるのなら赤の他人に頼るのは悪手と思います。
現場によって求められるスキルやレベルは違うので、まずは今の現場に求められるものを身に付けましょう。

それにアルゴリズムやロジックというのは「なにをつくるか」「なぜつくるか」がかたまっている段階で出てくる手段です。
全てのことには意味があり、繋がっています。

「コントロールを配置してどうするか」を考えるのは逆の行為です。「何を達成するためにこのボタンをここに置くのか」が先です。

本当の学習段階なのであれば、まだ単目的達成のためのサンプルコードで遊ぶ時期だと思います。
ボタンひとつにどのようなイベントを発生させられるのか調べ、実践し、時にエラーと格闘し、基礎を身に付けていきましょう。
アルゴリズム云々はその後からでも遅くありません。

投稿2020/03/03 08:51

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/03/03 10:16

(m.ts10806さんの回答に異存がある訳ではありません) 質問者さんがもし、この質問と同じ内容で先輩エンジニアに悩みを相談したときの回答が「データ構造とアルゴリズムの知識が必要」だったしたら、はて、そうだろうか、とは思いました。「データ構造とアルゴリズム」の勉強はむしろ後で効いてきそうなことなので、やって得はあっても損はないでしょうけれども。
m.ts10806

2020/03/03 10:52

半端にやってグチャグチャになるくらいならフェーズわけたほうが着実に身に付くかなとは思います。先輩のアドバイスを無視しろと言いたいわけではなく、アルゴリズム以前の状態に見受けられたための回答になっています。 まああとは本人次第。
Zuishin

2020/03/03 11:22

先輩の意図が今ひとつ掴めませんが、私が気になったのはそこよりも、本を丸写ししたのを「作った」と言っていることです。 私にとって作るのと写すのは完全に違う行動なんですが、それを同じものとみなしている懸念がありますね。 もしかすると先輩の言ったのは本当はソートや探索のソースを写せということじゃなく、写すばかりじゃなく自分で論理を読み解いてみろ、タイマーのアルゴリズムを追い、フォームのデータ構造を理解しろ、ということじゃなかったのかと思います。
dodox86

2020/03/03 11:31

なるほど、確かにそうですね。先輩エンジニアの意図がどうも分からず、その点で不審があった故のコメントでしたが、私も一面だけをみたものだったかもしれません。主体性を持って学ぶ必要があるという点では、完全に同意いたします。
m.ts10806

2020/03/03 12:52

>もしかすると先輩の言ったのは本当はソートや探索のソースを写せということじゃなく、写すばかりじゃなく自分で論理を読み解いてみろ、タイマーのアルゴリズムを追い、フォームのデータ構造を理解しろ、ということじゃなかったのかと思います。 私もそう思います。 「応用がきかないことへの懸念」とかですね。
guest

0

質問者さんのレベルが読めないので、適当にあてずっぽうで書きますが、、、

もしかすると必要だったのは「プログラミングパラダイム」に関する知識だったのかもしれません。

最低限、オブジェクト指向とイベントドリブンに関する常識的な知識がないと、そのGUIプログラムは書けないと思うので、そう判断しました。

投稿2020/03/03 10:36

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「データ構造とアルゴリズム」の知識が必要だと言われて簡単に勉強したのですが、あまり活かさせていないと感じる

提示されている「タイマーのアプリ」では,単純すぎて,データ構造とかアルゴリズムを考える部分がありませんし,

コードの設計や組み立て方

を考える余地も少なすぎるのではないでしょうか.

なので,もうちょっと複雑な,

  • どういう形でデータを持てば良いのだろうか?
  • データはプログラムの中でどこが保持すれば良いだろうか?
  • どのように処理すれば良い(結果が妥当,無駄な処理が無い,無意味に大量のメモリを使ったりしない,処理が早い,etc)だろうか?
  • 各処理をどこに書けばよいだろうか?

みたいな悩み(?)が生じるような題材に取り組んでみればよいのでは?と思います.

投稿2020/03/03 09:34

fana

総合スコア11656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問