🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

アルゴリズム

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

Q&A

解決済

6回答

13449閲覧

ソースコードのお手本を見て勉強したいです。おすすめの学習法はありますか。

m.trsk

総合スコア7

C#

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

アルゴリズム

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

1グッド

1クリップ

投稿2019/10/24 08:39

こんにちは。

プログラミング初心者です。C#を独学しつつ、簡単なものを自己満足の範囲で作っています。

学習不足でまだまだ理解できてないことが多いというのもありますが、コードがうまくありません。
冗長というか、無駄が多く、「こういう仕組み(アルゴリズム?)で書いとけばよかった」と見直して思うことが多いです。

自力で考えてすっきりとした最短のコードを書けないので、お手本といいますか、
他の方のコードを見ながら引き出しを増やしたいと思っています。
イメージとしては英語学習でよく言われる「英作文は英借文」をプログラミングでもできたらといった感じです。

こういう学習方法が邪道でしたら他のおすすめの学習方法や、
そうでなければ、おすすめのソースコード集のような本など教えてください。

よろしくお願いします。

hyubyu-n1👍を押しています

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

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

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

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

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

guest

回答6

0

最短のコードを書きたいというところが少しひっかかります。
短さは必ずしも善ではありません。そこにこだわって読みにくくするのではなく、読みやすいコードを心掛ける方が良いと思います。

とにかく一流の人が書いたコードが読みたいというのであれば、.NET Framework のライブラリを読んでみるのも良いのではないでしょうか。

Reference Source .NET Framework 4.8

もともとは超一流企業のライブラリ作成者というエリート中のエリートが書いたものですし、今はオープンソースとして世界中のハッカーたちによって磨かれているものですから、参考になるところは多々あるのではないかと思います。

私のおすすめは System.Linq.Enumerable です。LINQ の中枢であり、様々な発見があります。

投稿2019/10/24 10:08

Zuishin

総合スコア28669

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

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

Zuishin

2019/10/24 10:23

アプリケーションソフトのソースと違い、普段使っているなじみのあるクラスのソースですから、仕様がわかっていて理解もしやすいという利点もあります。 また、他のクラスをたくさん使っているソースを読もうとすれば、その依存するクラスも読まなければいけませんが、Enumerable はそれほど他のクラスに依存していないので、前提として読まなければならない部分も少なく、あちこちジャンプして追いかけなくて済みます。
m.trsk

2019/10/25 01:55

公開されているということ自体知りませんでした…!著作権の関係でみんな見せないんだろうなと思い込んでいたもので…。 せっかく教えていただいたのですが、少し私には早かったようで、自分の血肉にできるほどに理解できるレベルになるには時間がかかりそうです。真似できそうなところから少しずつ真似していきます。 ありがとうございます!
Zuishin

2019/10/25 02:08 編集

そのレベルであれば、人のコードを見て真似するのはかえって良くありませんね。検索で見つかる「わかりやすい」コードは、初心者が口伝えしてきたものが多く、危険なコードであったり問題を抱えるコードであったり用語が間違っていたりする確率が高いので、ある程度技術力がついて取捨選択することができるようになるまでは参考にしない方が安全です。それよりもまずチュートリアルを終わらせましょう。 https://docs.microsoft.com/ja-jp/dotnet/csharp/tutorials/
m.trsk

2019/10/26 04:45

1冊かなり易しい本を読んだものの、実際に手を動かして応用となると抜け落ちている基礎の部分が多いと自分でも感じていたので、参考になりました。ありがとうございます!
guest

0

ベストアンサー

見やすいコード、ということだと

あたりを読む、もありでしょうが……うーん、迂闊に初心者に勧めてよいものか(汗
※ある程度コードが読める人でないとかえって混乱させそうですし

余談:
The Art of Computer Programming には手を付けてはいけません(w あれは書いてあることは大変素晴らしいのですが、読むのにものすごく労力を取られますから(w
※大学で高度な専門授業受けるようなものですから……

投稿2019/10/24 09:13

編集2019/10/24 09:18
tacsheaven

総合スコア13703

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

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

hermit19901127

2019/10/24 12:26

リーダブルコードの書籍は、自分も進めようと思った次第です…。 「すっきりとした最短のコード」が書きたいとお見受けしました…。 リーダブルコードを読めば、無駄な処理や意味不明な変数名の記述などを避ける基礎知識が得られるはずです…。 あとは、気になるプログラムを記述している人がいたら、その人のGitHubアカウント等を見つけて、公開しているソースを見るのが良いのではないかと存じます…。 あと、自分がプログラムを記述してて「ああああ!この記述似たような記述が多すぎてめんどくせぇ!!!!」って思った時点で、ラクな記述が無いかなるべく検索する癖をつけるのもよろしいかと…
m.trsk

2019/10/25 01:26

そうなんです。無駄な処理や、変に書いたせいで行数も多いし、見返して「読みづらいコードってこんなのなんだろうなぁ」と我ながらがっくりということが多いんです。しかも大体が1か月後くらいに見返すと、簡単な関数1個作るだけでマシになったりするという…。 自分がどの程度コードが読めるのかという力試しの意味でも、おすすめされた2冊を早速本屋に買いに行こうと思います。 The Art of Computer Programmingは読めるレベルになったら読みたい本リストに入れます笑
fana

2019/10/25 01:47 編集

「過去の自分のコードがゴミに見える」というのは,その頃と比べて成長している証ですから,喜ぶべきことであり,がっくりする必要はないです. (後で見て「なにこれゴミ?」とならないならば,そのコードを書いた時点から進歩がないということで,むしろ危機感を覚える.)
tacsheaven

2019/10/25 01:49

ばりばりの現役でも、見返すと読みづらいコードが、なんてのは日常茶飯事です。 最近は IDE でリファクタリングとかしやすくなりましたが。 あと、最短のコードは必ずしも読みやすいコードではないです。わかりやすくするために敢えて冗長にする場合もあります。
guest

0

「こういう仕組み(アルゴリズム?)で書いとけばよかった」と

これが思えるだけでも十分です。
過去の自分のソースを読んで「こう書けばよかった」をやっていけばいいんですよ。リファクタリングというやつです。

いきなり他人の意図のわからないコードを読んでも宇宙コードとして混乱するだけなので、自身を少しずつリファクタリングしていくのが最も確実で効率的です。

投稿2019/10/24 08:42

m.ts10806

総合スコア80875

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

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

m.trsk

2019/10/24 08:54

早速の返信ありがとうございます。 確かにトライして内省して自己研鑽、というのが王道ですよね。 理解があやふやでアルゴリズムも冴えないまま手を動かしていることに焦っていて、ズルというか近道をしたくなったのかもしれません。 言われて気づきました。ありがとうございます。 現在独学が五里霧中状態でどんな情報でもありがたいので、もうしばらく回答を募集しておきます。
m.ts10806

2019/10/24 09:00

王道はないのでひとつひとつ、小さな階段を作ってのぼっていくと良いです。そうすればいつか必ず拓けます。
guest

0

※回答番外編としてお読みください。

質の高いプログラムソースコードを読んで、そのコードが意図するものは何(what)か、何故(why)そうなり、どう(how)実装したのかの理由を考え続けることはまったくの正道だと思うのですが、反対に、「これは悪い」と言われる既知のコードを読み、なぜ悪いのか、自分がそうなっていないかを考えるのも、直近で効く薬になると思います。「アンチパターン」と言うやつです。

質問者さんはプログラミング言語としてC#をメインにお使いということで、直接はあたらないのですが、「Cプログラミング診断室」と言う書籍があります。初版が平成5年(1993年!)とかなり昔のものとなりますが、著者様のホームページがあって、
Cプログラミング診断室
ここではなんと、ホームページ上で内容を無償で公開されています。内容は辛口かつC言語ですが、言わんとすることは他言語使いのプログラマー諸氏にも伝わると思うので、ベテランから初心者プログラマーへのコードレビューとして読んでみると面白い(胸が苦しい)かもしれません。

それと、その手のアンチパターンとしてはやはり書籍の、
新装版アンチパターン~ソフトウェア危篤患者の救出 SBクリエイティブ
がコンパクトで読みやすく、個人的に面白かったです。製品としてダメな成長をするパターンがいくつか紹介されています。内容は設計手法寄りですが、実業務に携わっていると「あるある」なことが良く分かります。

ただ、残念ながらどうも絶版のようで、現時点では古本や図書館の蔵書をあたるしかないようです。
amazon - アンチパターン―ソフトウェア危篤患者の救出

自分で挙げておいてなんですが、読み物として面白いレベルのものであるので、今の質問者さんがあえて苦労して手に入れ、読むほどではないかもしれません。

投稿2019/10/25 00:19

編集2019/10/25 01:00
dodox86

総合スコア9254

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

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

0

まだ、閉じていないみたいなので、、、

英語学習でよく言われる「英作文は英借文」をプログラミングで

プログラムでは、無理みたいです。なんせ、変化が速すぎです。
コンピュータの最初の頃は、Fortran/Cobol だったか? 次が、C言語?
まあ、多少の異論はあっても、たった50年ほどの時間です。英語は(まあ、日本語でも) そんなに大きな変化は無いでしょう。変な言い回し、と思ってもとりあえず、意思は通じるものです。
また、プログラミングと言っても、ここで話題になる事の多いゲーム系、Web系、そして、組み込み(ここだと、RasPi?) あまり、話題にはならないみたいですが、経理とかの業務系。それらは結構、違います。大学で言ったら、文学部と、理学部とか、果たして専門的な言葉は通じるのでしょうか? ってところです。
(日本では大抵、日本語での講義ですね)

まずは、その辺を絞られる事を勧めます。

あと、古き良き時代は、Unixのソースを読め、なんて言われた事もあります。
仕事で縁あって見た事がありますが、簡単に手を出せるものではありませんでした。当時の多様な機種に対応するため、 条件コンパイルの山。

何をしたいかを明確にして、地道にやるしかないのでは? と思います。
あと、ここの質問にあるコードを読んでみるのも良いかもです。良い悪いは別にして、自分と異なる視点で書かれたコードばかりで、色々と参考になります。
(長いコードも少ないし、、)

投稿2019/10/25 14:41

pepperleaf

総合スコア6385

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

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

0

他の方のコードを見ながら引き出しを増やしたい

何をするコードなのかという内容がわかるコードを他の人に書かせればよい,ということになりますね.
方法は…

  • プログラミングができる知人が存在するような状況なら

何かお題を出して勝負するみたいな遊びをするだとか,一緒に何かを作る等が考えられますが… (実現難度が高すぎて回答になりませんね.)

  • 「特定の問題をどう解けばよいのか?」という話に落とし込んで,こういう場所で質問する,という手も有り得るかもしれません.
  • 仕事なら隣の人間の書いたソースを(あえて読みたければ)読み放題なのですが.

投稿2019/10/24 09:07

fana

総合スコア11985

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

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

m.trsk

2019/10/25 01:07

現在学生で学部も文系、周りに仲間がいないという状態で完全に自己完結するしかない独学状態です。 プログラミング入門の他学部公開講座は受けたのですが、基礎の基礎といった感じで… >「特定の問題をどう解けばよいのか?」という話に落とし込んで,こういう場所で質問する,という手も有り得るかもしれません. なるほどです。自己添削の後にここでダメ出ししてもらうというのは、たくさんの先達からアドバイスがもらえるのでためになりますね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問