Skeyllのブログ

インディーデベロッパー

【ゲーム開発】プログラミングを無料で独学する方法とそのコツ【主にC#】

 プログラミングをネットを利用して無料で学ぶ方法を紹介する。人によって学びやすい方法が異なると思うので教育機関や本、有料オンライン講座を利用しない第三の学習方法として参考にして欲しい。

 

私の情報

 プログラミング歴は一年強。HTMLとCSSガラケースマホで5年強(『おーぷんあぷり(一日のpv5千)』や『チェンクロ情報局(2万)』など。今はない)、統計学のためにRとVBAをそれぞれ半年やっていたことがある。しかし、同時期にAndroidアプリを作ろうとしてEclipseでhelloworldを出せずに挫折しており、今回はじめたときも何一つわからなかったため全くの初学者と大差ないように思う。

 現在使用している言語はC#、Rust、JavaScriptなど。Unityというゲーム制作ソフトでプログラミングをはじめて、3ヶ月ほど入門書(3000円強)やチュートリアルサイトを眺めてはコピペを繰り返していた。実情としてほとんど理解ができず、入門書にいたっては付属のサンプルファイルをそのまま利用することも多く、あまり意味はなかった。それから2週間かけてC#の基礎を学び、そのつど学習しながら5か月かけて1つアプリを作成。現在は2作目を制作中。

★昔のホームページ(20個ぐらい作ってたうちでデータが残っていたもの。)
auガラケー向けのアプリサイト(なぜかauガラケー以外のアクセスを禁止していた)
f:id:Skeyll:20200501200408p:plain
MHP2G攻略サイト(途中で投げた気がする)
f:id:Skeyll:20200501200420p:plain
昔よくあったウェブサイトを登録するランキングサイト
f:id:Skeyll:20200501200427j:plain

プログラミング言語を選ぶ

 どの言語も大して変わらないので自分が制作したいものに合わせて言語を選ぶのがいい。言語による違いは方言のようなもので、二つ目を学習する時は感覚的に理解することができる。

 選ぶ方法としてはホームページを作りたいのならPHPJavaScript、ゲームならC#C++InstagramYoutubeのようなWebサービスならGO言語など、「〇〇(作りたいもの) プログラミング言語」で検索すれば学習に向いている言語が見えてくる。これは各言語が特定のものしか作れないというわけではない。その言語を使って特定のものを開発する道具(フレームワークやライブラリ)が存在するため、それを利用するために学習すべき言語が違うにすぎない。もし、自分で全てやるのだという場合は好きなものを選ぶのがいい。

 個人差があるかもしれないが、必要は発明の母というように必要が差し迫っていないと学習は進まない。特に一人でやる場合は学習意欲の維持が非常に難しいため、単にプログラミングを覚えたいという目的でプログラミングをはじめてもその他のあらゆる学習と同じようにうまくいかない場合が多いだろう。そのため、入門する言語を選ぶというよりは、学習のためのあまり大規模すぎないことでプログラミングで実現したいことを探す方が大切かもしれない。

 言語が決まったら「プログラミング言語 環境構築 VSCode」で検索してプログラミングを始める準備をしよう。VSCode(Visual  Studio Code)というのはマイクロソフトが開発しているソースコードエディタで、プログラミングに特化したメモ帳アプリのようなものである。無料なうえに簡単に使用でき、軽くて拡張性も高いので、特にこだわりがなければおすすめだ。

 

五つの学習ステップ

 私がC#でプログラミングを始めたため、参考例として示しているものはC#のものが多い。しかし、どの言語であっても基本的な考え方は同じだと予想できるので、適宜類似したサイトを探してほしい。

 

1.プログラミングとは何か?

 プログラミングを理解するためにはプログラミングに関する知識のネットワークを構築する必要がある。外国語と同じようなもので、そのものに関する知識が少なければ正しく理解できない。語形や語順の変化というものは他との比較で評価されるのであり、プログラミングにおいても雑多な知識が理解の助けとなる。

 まずはドットインストールやProgateを利用して一月ぐらいかけて概観を学ぶ。これらを見ても理解できることは多くないかもしれないが、完全ににわかるまでやる必要はない。他とのつながりで見えてくることも多いため、途中で立ち止まるよりは期間を開けて二回やるのがいい。

 あまりに何一つ理解できない場合は「プログラミング ハードウェア 勉強」、「プログラミング 用語 英語」、「オブジェクト指向 関数言語」など学習する上で見つけたプログラミングに関係のありそうな言葉で検索して直接関係のないIT周りの知識を増やすのがいいかもしれない。これらはプログラミングをやるならばいつかは必ず学ぶことになる上に、理解するかどうかではなく知識的な部分が多い。そのため無駄になることはなく、手軽に知識を増強することができる。



言語の学習

一週間で身につくC#言語の基本

時々文章の欠落や誤字があるが短くてプログラミングの概要を知るのに良い。C、C ++、Javaに加えてSQLもある。



・ [https://prog-8.com/:title=Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]]

利用したことがないのでわからないが、おすすめされているのをよくみる。



ドットインストール

Unityの入門期間に利用したが初学者にはやや難関かもしれない。理解できずにコピペしていた記憶がある。



その他周辺知識

新人SEのための「プログラムが動く仕組み」(第1回) | 日経クロステック(xTECH)

ハードウェアに関する記事。ググって出てきたここの記事はよく見ていた。基本的に文書ばかりであまり混み入った話はしないため手軽に読める。飛ばし飛ばしであっても次何かの理解を助けるため有用。



コンピュータの基礎知識 | ++C++; // 未確認飛行 C

より詳しい解説。別方向からの解説も欲しい場合に(より難解なため3ヶ月目ぐらいでないとわからないかも)。ハードウェアの知識は一見無駄に見えるが、プログラミングそのもののイメージが掴みやすくなったり、プログラムを書く時に効率の良さを意識しやすくなる。



連載:C#入門 第8回 式と演算子 - @IT

ここもいくつか見た記憶がある。パソコンに向かって本格的に取り組む必要もないため、気まぐれに見るのもいいかもしれない。



オブジェクト指向と10年戦ってわかったこと - Qiita

初心者の頃はQiita(プログラミング情報を寄稿するサイト)やはてなブログで伸びている(星やいいねが多い)記事をよく見ていた。概念的なことへの理解はほとんどプログラムに役に立たないが、概念について語る場合プログラミングの概観にも当然として触れるため知識自体は増える。コードについて考えるのに疲れた時はたまに検索して眺めている。



「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

プログラミングの用語を専門用語をあまり使わずに解説しているサイト。初学者がつまずきそうな用語ならたいてい載っているため異なった視点からの説明が必要な場合に使える。



IT用語辞典 e-Words

プログラミングの用語をよりきっちりと解説しているサイト。わからない単語が出てきたらとりあえずネットで検索するとここか上記のサイトが出てくるのでなんとなくどういう意味なのかを理解するとより理解が進むかもしれない。



そのほかにも見ていたが、こうした周辺知識に関するメモは取っていなかったため参考文献に関するメモが残されていなかった。ここに書いたものは参考まで記憶していた一部でしかないが、気まぐれに検索して眺めてから学習に戻るとより一層理解が進むことが何度もあった。そのため周辺知識を増やすこと自体には一定の効果はあると思う。

★学んだことはOnenoteにメモしている。すべてを記憶できるわけではないので、実際にプログラミングしているときにメモを見返して書くことも多い。

f:id:Skeyll:20200501195905p:plain
 

②実際にプログラミングする

 チュートリアルをやったところで何かが作れるようになるわけではない。知識を定着させるには利用する必要がある。そのため実際に何かを作ってみるのがいい。注意点としては何かを作るには、初学者の想像している5倍の時間が必要だということだ。そのためはじめに作るものはあまり規模が大きくなく、一週間程度で作れると考えているものがいい。また、これは練習としてやると途中で投げる理由ができるため、確実に制作したいものの中で簡単に作れそうなものを選ぶのが良い。

 理解の進展が見えるのに3か月はかかる。これは英語だろうが、数学だろうが同じだ。人間は3か月継続しなければ実力の向上を実感することは難しい。もちろんはじめは上記の入門サイトやチュートリアルを見ながら必要な機能を作っていくのもよい。しかし、重要なのは実現したい機能を一つずつ張り付けるのでなく、なぜそれを使うのかという理解の中でプログラムを構築する必要がある。コピペがうまくなったところで結局はチュートリアルと同様のことをしているにすぎず、何かを考えて作り出す力はつかないからだ。

 何かを制作するときにすべきことはメモをとることだ。やるべきこと、やったことをメモしておくことで継続力は大きく変わる。人がプログラムの製作を断念する最も大きな理由は、何をすべきかがわからなくなることにあると思う。人は何かをやるか考えるよりも惰性的な作業の繰り返しを望む生き物だ。そのため、あらかじめ何かをやるべきかを思いついた時点でメモしておけば、作業を始めるさいに無駄なエネルギーを消費してからプログラミングに取り書かなくてすむ。

 たとえばホームページを作っていて新しく追加するものを思いついたならメモ帳にその内容を羅列しておく。それを実際にどのように実現すべきかが想定できるのならば、「画像を取り込む」、「画像を使ってボタンを作成する」などそれぞれ作業内容によってわけるのもいいと思う。これは必ずしも翌日にやる必要はなく、やるべきことが多ければ一月後に取り組むことかもしれない。しかし、メモしておくことで、次回作業に取り組む自分に課題を与えるだけでなく、致命的な作業のし忘れを防ぐことができる。

 やった内容のメモを取る意味は過去の変更内容を見返せることだ。作業内容を常に覚えているとも限らないため、記録として残しておくとバグが発生した際や変更意図がわからない場合役立つことがある。また、前日の作業力や、これまでの労力が目に見えることが単純なモチベーションへと繋がる。実際の作業現場ではQA票や工程管理表と呼ばれているそうだ。主Githubというソースコードの変更を記録するサービスもあるのでプログラミングに慣れてきたら利用するのもいいだろう。

★私はOnenoteLibreOfficeにメモを取っている。

 f:id:Skeyll:20200501200814p:plain f:id:Skeyll:20200501200826p:plain



プログラミング技術の参考として使えるもの

++C++; // 未確認飛行 C

日本語で公式ドキュメントのような解説と公式より豊富な例がある。



SE の雑記 | SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL(データベース)について学んでいる時によく眺めていた。



現代の JavaScript チュートリアル

プログラマとして信用できる人がおすすめしていた。



  あらゆる言語に共通しているが、知りたいことがはっきりとしている場合は利用しているフレームワークや言語+公式ドキュメント、公式リファレンスとつけて検索して公式の仕様を見た方が簡潔でわかりやすい場合が多い。異なる例、説明を探す場合や無作為的に知識を増やしたい場合にこうした第三者の情報を当たるのがいいだろう。

 初心者(が書いた)や覚書と書かれた記事は多くの場合、理解よりも混乱をもたらしたため途中からは開かないようにしていた。書いている本人も知識が曖昧であるためわかりにくいことが多い。また、ページ内に参考文献や他サイトへのリンクがないものに関しても、情報として価値が高くないことが多いためざっと眺めてリンクがなければそれ以上は見ない場合が多い。プログラミングは第一発信源でもない限り必ず参考にしたものが存在する。もし、記述内容をより詳しく知りたい場合やその根拠を知りたい場合参考が書かれていなければそれ以上知ることができないかもしれない。また講演や自分発の知識であったのだとしても、学習意欲があるのならば親切のためにその他の情報源を示すという学術上の慣例を踏襲するはずである。したがって、リンクのない情報は情報としての価値が低いということはあながち間違いではないと思う。

 

③問題を解決する

 プログラミングをしていると必ずエラーに遭遇する。慣れないうちは独力で解決するのが難しいため、ネットを利用して解決することになる。たいていエラーコードでそのまま検索すれば解決方法が見つかるが、簡単に見つからない場合は探し方を工夫するか、質問して解決することになる。私自身質問して解決したことがないので、実際にどうかはわからないがわかる他者に聞いた方がより早く、簡単に解決できるであろう。

 しかし、一見手間がかかりそうな検索だけで解決することにも利点は存在する。簡単に解決方法が見つからないということは、解決手段を自分で模索する必要があるということである。解決の過程で多くの情報を得るだけでなく、自分で策を尽くす必要もある。結果としてその模索がプログラミング能力の向上に繋がる。実際私もはじめての作品を作っているときに1週間同じ問題について悩むことが2回あったが明確な技術の成長を感じる契機でもあった。様々なことを試し、考えるため自分で引き出すことができる技術の幅が広がる。また自分で考えるため応用力も伸びる。時間と心に余裕があるのならば独力で解決してみるのもいいかも知れない。

 これはわからないことを解決する場合も同じだが、how to・the way・やり方などをつけたり、発生している問題(ページ 無限に更新されるなど)を単語レベルで表現して検索することが多い。GoogleだけでなくYouTubeで検索すると参考になる動画が検索上位に表示されることもある。日本語にはないが英語では解決方法が見つかることもあるため、その他の言語でも検索をかけてみるのもいいかも知れない。



プログラミングについて質問できるサイト

teratail【テラテイル】|ITエンジニア特化型Q&Aサイト

日本語でプログラミングについて質問できるサイト。いつも眺めるだけだが、高圧的な人も少なく、親切に教えてくれることが多い。どうしても解決できなければ聞いてみるのもいいかも知れない。



Stack Overflow - Where Developers Learn, Share, & Build Careers

英語で質問できるサイト。エラーコードで検索すると出てくることが多い。日本語で質問するより母数が多いためこちらの方が解答が早くつくかもしれない。



Discordredditにもプログラミング関連のコミュニティが存在するため、そちらを利用するのもいいかも知れない。

 

④とにかく実現する

 プログラミング初心者のうちは、とにかく目的を達成すべきだろう。私の場合半年間同じプロジェクトに触り、その後も更新するため全く知識が違う時期の自分の書いたコードを触ることが多々ある。後からより優れた書き方や効率的な方法がわかることがあるが、はじめからもっとも優れたプログラムを書くことを目指していては何一つ学習が進まない。ある程度プログラムがわかれば自然と効率化の問題に発展するわけで、はじめから完璧である必要はない。最適化が必要になれば変更すればよく、とにかく実現さえしてしまえばプログラミングへの理解は確実に進むのである。

 一度感覚を掴んでしまえばプログラミングとの距離は近くなる。この世のあらゆるものが段階を踏む必要があり、プログラミングに限っては最初から最も優れた人間と同じでなければならないということもないだろう。



良いコードを書く技術(まとめ) - Qiita

実現さえできれば良いわけではあるが、後から自分も見返して時には変更を加えることもある。そのためこうした書き方に関する知識も頭のどこかにあった方がいいかも知れない。なお、プログラム自体にメモ書きとしてコメント(//や<--ではじまる文章)を残すことがあるが英語で書くことをおすすめする。はじめは難しくとも、そのうち慣れて検索する際の英語力の向上やコードを公開した時により多くの人間から意見がもらえるようになる。



中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント - 分裂勘違い君劇場 by ふろむだ

この人の文章はメモによく残されている。もちろん好き勝手にやるのもいいかもしれないが、独りよがりであっては他者と仕事ができないため、プログラミング時に意識すべき一つの意見としてよく参考にしている。

 

⑤技術の穴を埋める

 プログラミングが少しずつわかってくると、自分の理解の範囲内だけで課題を解決するようになる。それ以外を知らないということもあるが、それが最も楽な方法だからだ。そうなってはもはやプログラミングの技術力向上は停滞しまう。より優れた方法や書き方があるのかもしれないのに、それを指摘してくれる人も存在しない。

 したがって、自分で定期的に新しい技術を学習する必要がある。学習するときに見かけた知識を派生的に学ぶこともあるが、私は尊敬するプログラマのブログや発言をそのきっかけにしたり、学習総合サイトから気になる単語を選んで学習している。プログラミングの技術は日々刷新されており、学習し終えるということはない。プログラミングをはじめるということは、人生をかけた趣味が一つできるということも意味している

 

あとがき

 この文章を書いたのはSNSで「プログラミング」と検索すると情報商材の広告ばかりが目につくことに端を発する。ネットの情報は多くが自由アクセスできる。ことプログラミングに関しては情報の多くが無料で公開されているものだと認識していた。もちろん全てではないが、基本的なことはほとんどの場合知ることができた。

 たった一年で全てが変わってしまった。情報を販売する潮流が生まれたのだ。もちろんそれが価値のあるものならばいいのだが、たいていは全くそうではない。「高卒」や「文系」ならいざ知らず、「小学生」までがプログラミングの入門方法を販売している。はたして彼らはプログラマなのだろうか。具体的な実績を公開しているものはおらず、GitHubソースコードをアップロードしてバージョン管理するためのサービス)のアカウントを公開しているものもいない。情報商材を購入した者の行き着く先は情報商材の販売であり、プログラミングスクールを卒業したと謳ってやることがプログラミングスクールの紹介だ。プログラミングを学習する目的は情報商材販売の渦に巻き込まれることなのだろうか。

 もちろん、情報の販売それ自体が悪だとは思わない。現に日本でも江戸時代から情報の非対称性を利用したビジネスは確認されている。しかし、そうしたビジネスが自由をイメージさせるプログラミングで行われていることには違和感を覚えた。あなたが十分に知識があるのならば自分で判断すればいい。私も初心者の頃には検索結果に戸惑わされて、多くの時間を費やした。しかし、今ではその錯誤にすら金銭が必要なのだ。

 私自身教育者でも熟練プログラマでもない。これはたんに学習する過程で気が付いた効率的な学習方法に過ぎない。プログラミングの学習には300~1000時間必要だという記述を数多く見たが、これを見てその時間が半分になるわけではない。他のあらゆるものも会得するには、そのぐらいの労力と時間が必要だと経験が教えてくれる。しかし、学習方法の模索に費やす必要がなくなれば、その分学習時間は確実に短くてすむはずだ。

 五つ学習段階として示したが、三つ目が終わる頃に三ヶ月〜半年が経ち技術サイトに書いてあることを自力で読む力はついているレベルに達していると思う。私の歩んだ道が正しいのかはわからないが、そのあと量をこなし、そうして学び続けることの大切さに気が付いたというのを残りの二つで示した。どの段階を脱プログラミング初心者というのかはわからないが、何かを作っているうちに突然道が開ける日が来るはずだ。

 私も最初は何一つプログラミングがわからなかった。自分はプログラミングではなく、将来はアイディアだけでやっていく、だがプログラミングを知っている方が適切なアイディアが出せるからと苦渋を三ヶ月舐めた。しかし、峠さえ超えれば悩んでいたことが嘘かのように取り組めるようになった。だから、プログラミングをはじめるのなら全く理解できなくとも三ヶ月は諦めずにプログラミングに取り組んでほしい。プログラミングが難解なのではなく、知識のネットワークがないためにわからないだけなのだ。この文章プログラミング習得の助けになれば幸いだ。

プライバシーポリシー  ©Skeyll 2019- All Rights Reserved.