masato93426
@masato93426

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

プログラミングの勉強はたくさん書けって言うけど何書けばいいの?

内容

プログラミングの勉強したければたくさんコードを書け、と言われますが具体的に何書けば良いのという質問です。
サンプル拾ってきても書いている気がしないですし、0から書こうにもどこから書けばいいか分からない、というかそもそも何書けば良いの?とループしてしまいます。
サンプル拾ってきて、追加してみたいものを自分で手を加えればいいのでしょうか?

何作れば良いか教えてくださると助かります。教えたいただきましたものは本記事にリストアップしておこうと思います。

言語はC#を想定しています。

ご意見を頂いたもの

プロダクト

  • アラーム&タイマー機能
  • 電卓
  • 神経衰弱
  • マインスイーパ
  • しりとり
  • ハングマン
  • OSS

書物

  • [改訂版]ゴールからはじめるC#

Qiita内の記事

外部サイト

ご意見ありがとうございます。作成したいと思います。

2

7Answer

プログラミングの勉強したければたくさんコードを書け、と言われますが具体的に何書けば良いの

TL; DR

「音楽の勉強をしたければ曲を書け」と言われているのと似ている気がしました。C#だけに。

音楽で言うセッションに参加するようなイメージで、C# 系の OSS のライブラリに PR していくのはどうでしょう。

TS; DR

既存のコードを写経するのは、楽器なら既存の曲を練習するようなものかもしれません。

そして、音楽でいうコード進行、スケール、モードの勉強や練習は、プログラムで言えばアルゴリズムに相当するのかもしれません。特定のプログラミング言語という楽器を使いこなすための練習といった感じでしょうか。

しかし、音楽同様に、それだけでは作ることはできません。

「いや、『書け』と言われても」みたいな。

作画や楽曲作りで「真似ぶ」という言い方をすることがあります。つまり好きな絵柄や楽曲を、パクるのではなく、そこから学ぶという造語です。

プログラムも「これを作ってみたい」と思うものがあれば、パラシュート式のボトム・アップ、つまり、最終形からどうやって実装していくのか想像し、調べて作っていくことになると思います。

問題は、「これ」というものが特にない場合ですよね。

私は、横着をするために苦労する性癖があるので、仕事で「これ合理化できないかな」と業務用ツールを作って言語を覚えてきました。

しかし、今ではこれは間違いだったと思っています。

結局、寂しいだけで終わってしまうことが多かったからです。「改善が必要」と感じたということは、そもそも「そう言うことに、みんな無頓着である」もしくは「みんなは改善の必要がないと感じている」という環境であることが多く、単純な自己・他己の認識のズレだったのです。

そういう中でツールを作っても楽しくない。かといって、普段あまりゲームもやらないので、「オラ、ワクワクすっぞ」と言ったものがあるわけでもなく。

そこで「1回のライブは 10 回の練習以上に得るものがある」という音楽の経験から、ジャム・セッションに飛び込むつもりで「OSS に PR してみよう」と思ったものの、フォークソングしか弾けない自分のレベルの低さに恥ずかしさを感じたのでした。

しかし、誰に聞いても「アウトプットしないと上達はしない」と言われるので、黒歴史にもなりかねないフォークソング級の曲を SoundCloud に公開するような覚悟で、OSS で自分も GitHub で公開するようにしてみました。

10 発に1発くらい「1人でも『助かった』と思ってくれたら良いや」程度の気持ちで OSS 界隈にアウトプットするようになり、今では「フォークの何が悪い!」と開き直り、 GitHub で Fork しまくっています。

仕事のことを念頭に置いてアウトプットするより、ずっと精神衛生的に楽です。

2Like

Comments

  1. @masato93426

    Questioner

    仕事で使うようなツールを自作するとなると、仕事がどこまでも付いてきてしまうのでプライベートも休まらなくなってしまいますよね。
    今回のテーマである「何を作成すれば良いか」という点は、合っていてもやりがいはあまり良いものとは思えなさそうですね。

    OSSにPRと聞くと大層なものをイメージしてしまいますが、自分でイメージしたものを作成するのはとても気分がいいですもんね。イメージ通りに自作できた時はとても気分の良いものでした。

    ご意見ありがとうございます!!
  2. > 「やりがいはあまり良いものとは思えなさそう」

    ほんと。それ(やりがい)の有無に尽きますよね。

    「筋肉は裏切らない」と、結果をコミットしたり素振りや写経をする重要性もわかるし、練習試合ばりに「Codewars」や「AtCoder」でガチンコで死合うのもわかるんですが。。。

    _( :⁍ 」 )_

    なまじ「イメージ通りに自作できた」ことが過去にあったものだから、その時の快感が忘れられないのかもしれません。難しいです。お互い、何か見つかるといいですね!

こんばんは。やっと半年の初心者のものです。

私が先輩に言われたのは同じようにコードをかけ!みたいなことですが、一つ意識するのであれば「作ると決めたもののゴール」を目指して手を動かしてみて とのことでした。
例えば、アラーム&タイマー機能。例えば電卓機能。最終的には「機能として動くもの」を、作りたいものを作るためには、なにがどう必要かを考える必要があると言っていました。
まずはゴールの設定(なんでもいいので作りたいものの設定)をしてみてはいかがでしょうか。

お互い頑張りましょうね...

0Like

Comments

  1. @masato93426

    Questioner

    おはようございます。
    ゴールの設定ですか、今までしてたようでしていなかったですね・・・
    電卓は割と聞きましたが、アラーム&タイマー機能は初めて聞きました!作ってみようと思います!
  2. 是非是非!

    ちなみにですが、目標が定まらなさそうでしたらこんな書籍もあります。
    自分はこの書籍の言語から別言語に変換しながら作ってみましたがとても理解しやすく、やりやすかったです!

    https://gihyo.jp/book/2019/978-4-297-10901-1
  3. @masato93426

    Questioner

    おお!この書籍いいですね!早速買いました!!
    ありがとうございます!

具体的に何書けば良いの

私があちこちで言ってるのは、「簡単なゲームを作れ」です。

たとえば、神経衰弱とか、マインスイーパーとか、しりとりとか、ハングマンとか。

重要なのは、機能は必要最小限でいいのでとにかく「完成までもっていくこと」ですね。

やってみると分かりますが、簡単なゲームといってもとりあえず「遊べる」レベルまでもっていこうとすると、条件分岐だのループだの配列の活用だの一通りの基本的なコーディングが満遍なく必要になります。

また、題材がゲームだと、できたものを周囲に見せて遊んでもらって忌憚なき批評をもらうということが比較的簡単です。

やっているうちに欲が出てきて必要最小限では飽き足らず、「独自ルールを実装してみよう」とか考え始めるに至ったら、いよいよプログラミング勉強の入り口に至ったというべきでしょう。

逆にそこまできても特に感動も意欲もわかないようであれば、基本的にプログラミングに向いてないのかもしれません。

0Like

Comments

  1. @masato93426

    Questioner

    簡単なゲームですか・・・ゲームとなると敷居が高いと思っていましたが、基本的な事の学習も含めて作成してみようかなと思いました。

    やはりやりきることが重要なんですね、なんとなくで初めて目標設定をしないままやっていた自分がいました。まずは作成しきることに重きを置いてその後追加で実装していきたいと思います!
    ありがとうございました!

なにも思いつかない&勉強がしたいのなら、Codewarsなんていかがでしょう?
簡単なお題(引数、戻り値など)が出てきて、それをプログラムで書いていくサイトです。言語も選べますし、同じお題に対する別の人のコードも見られます。
https://www.codewars.com/

0Like

Comments

  1. @masato93426

    Questioner

    Paizaと似たようなものでしょうか・・・?
    他の方のコードを見られるのは良いですね!!ありがとうございます!!

なんか作れって言われても、初心者には何も作れないですよ。

2.「なんか作ってみるとイイよ」を真に受けるな! - 「ググれ」って言われてググるな!【初学者べからず集 その1】

先に、上流工程を軽く学ぶことをオススメします。
入り口はこの辺り

要件定義~システム設計ができる人材になれる記事

軽く学習出来たら、一部の OSS では設計資料が公開されているものもあるので、それらを活用して、ガンガン手を動かすと良いです。

0Like

Comments

  1. @masato93426

    Questioner

    作れと言ってもある程度分かっている方向けの話のようですね・・・
    完成品を想定してもそこへ至る道が分からなければ、つまり要件定義や設計などの上流工程が出来なければ、作れませんもんね。

    教えていただいた記事を読ませていただきます!!ありがとうございます!!

C#と聞いて、思わず投稿。

オススメは以下、AtCoderかゲーム作りのどちらかです。

AtCoder

別の方がCodewarsを上げていますが、それと似たようなサービスです。
こちらは日本語なので、とっつきやすいと思います。

例えば直近8/22に開催された会のB問題を例にすると、こんなコードを書かされます(わかりやすいように、ちょっと意訳しています。実際には引数&返り値ではなく標準入出力など差異がありますが、イメージは伝わるかと)。
https://atcoder.jp/contests/abc176/tasks/abc176_b

private string MultipleNine(String input)
{
    bool result = false;

    // inputは整数の文字列表現。inputが9の倍数であればresultをtrueにせよ
    // ただし、inputの最大値は10の200000乗なので、intどころかlongにも入らないので注意
    // ヒント: 整数 N が 9 の倍数であることと、N を十進法で表したときの各桁の数の和が 9 の倍数であることは同値です。

    //ここにプログラムを書く

    return result ? "Yes" : "No";
}

// 例: MultipeNine("123456789") -> "Yes"を返す

Paizaのような学習サイトではなく、AtCoderはコンテストです。
上記のような問題が6個出されて(A〜Fまで。Fに行くほど難しい)、解いた問題の数と速度で点数を競います。
プログラミング初心者であればA〜Cまで解くことを目標にすれば良いかと。Dが解けたら大喜びしましょう!
EやFは難しすぎるので、自信がつくまでは無視でいいかと。

AtCoderのメリットは以下です

  • やることが明確
  • ほぼ毎週開催されるので、習慣化できる(ただし参加するのはBeginer Contestがオススメです。Grand ContestとかはAすら難しすぎて心が折れるかもしれないので)
  • 過去問もあるので、実際のコンテストに参加するのが恐ければ、過去問で好きなだけ練習できる
  • 参加するとスコアがつくので、スコア次第では就職や転職でアピールできます。英語でいうTOEICみたいな。
  • 無料でできる

デメリット

  • どちらかというとアルゴリズム力が求められ、アプリケーションの設計力や、いわゆる「綺麗なコード」を書く力はつきにくいです。
  • バケモノ級に強い人たちがたくさんいて、下手をすると圧倒されてしまう。コンテストとはいえ、上を狙ってもそう簡単には勝てないので、自分のスコアを上げていくことを目標にしたらいいと思います。

AtCoderについては、こういう記事も上げているので、よければ参考にしてください。
https://qiita.com/sekikatsu/items/93c41c6c937ed1dfcf23

ゲーム作り(Unity)

Unityを使えば、C#でゲームを作れます。
Web、デスクトップアプリ、スマホゲームなど、なんでも好きなプラットフォームを対象にできます。

メリット

  • 自分の作りたいものを形にできるので、楽しい
  • 他の人に作ったもので遊んでもらえるので、楽しい。Windowsユーザであれば、Android向けアプリを作ってGooglePlayに出してみるといいと思います。
  • UnityはVRにもよく使われているので、今後まだまだ発展していく技術領域だと思います。将来バーチャル空間であれこれするようなシステム作りたい!みたいな思いがあれば、手を出しておいて損はないかと。

デメリット

  • ゲーム(アプリ)のネタは自分で考えないといけない。作りたいものが思い浮かばないと長続きしないと思います。
  • 単にC#やプログラミングを学ぶこととは別に、Unityの勉強が必要です。少し難しいので意欲が必要ですが、その分スキルにはつながると思います。

長くなりましたが、少しでも参考になれば。
是非頑張ってください!

0Like

Comments

  1. @masato93426

    Questioner

    ご意見ありがとうございます!
    AtCoder良いですね!見せていただいたサンプルは解けなかったですが、考えさせられる点が多くて面白く思いました。
    一日数問を解く、と決めていけば続けていけそうですね。記事も読ませていただきます。

    Unityは一度触れてみましたが、IDEの使い方が分からず挫折してしまいました・・・
    またPCのストレージを圧迫してしまうので・・・
    やってみたいの一つではありますが、ゲーム作成のスキルは全く無くC#のスキルも高いとは言えないのでいずれは作れたら良いと思っています。

プログラミングの勉強したければたくさんコードを書け、と言われますが具体的に何書けば良いのという質問です。

下記が大前提です。

  • 今あなたが書けるコードを書くところから
  • 今あなたが覚えられるプログラミングの構文を覚えることから

その上で、あなたがプログラミングを始めたきっかけに沿うプログラムを作られれば良いのではないでしょうか。

あなたがプログラミングを始めたきっかけはなんですか?自問をしましょう。
それに付随して、作りたいプログラムが出てくるのではないのでしょうか。

その中から自分が書けるプログラム、後少しプログラミングの構文を覚えたら書けそうなプログラムを洗い出して、それを作れば良いです。

始めたきっかけが分からないので残念ながらこれ以上具体的には書けません。

サンプル拾ってきても書いている気がしないですし、0から書こうにもどこから書けばいいか分からない、というかそもそも何書けば良いの?とループしてしまいます。

書くコードはなんでも良いならpaizaのスキルチェックだったり、コードゴルフに挑戦してみたりしたらいかがでしょう。

いや、なんでも良いだと良くないですね。何となくプログラミングに触れているのでは楽しくないでしょうから、効率的には学習できないと思います。

やはり、きっかけから何か動機や目的を見つけて、それに沿ってプログラミングに触れていくのがベストです。

まず、そういう楽しいこと・やりたいことを見つけることから始めたらどうでしょうか。

0Like

Comments

  1. アラーム&タイマー機能、電卓、神経衰弱、マインスイーパ、しりとり、ハングマン、OSS

    と候補(?)がありますが、作りたいものはありましたか。

Your answer might help someone💌