MISW.github.io

プログラミングを始めたあなたに送る、いつか使える知識・サイトリンク

はじめに

プログラミングを始めると、学ばなければいけないことは「プログラミング言語の知識」だけではないことに気付かされます。

例えばゲーム制作においては、共同作業を簡単に行うためのツールの知識が作業効率を上げるために必要不可欠と言えます。

そんな「プログラミング言語自体の知識」では無いけれども、「プログラミングの知識」として必要ないくつかの事柄を中心に紹介します。どんなときに使える知識かで分けてあるので、何か困ったときの参考としても使えると思います。
ツールなどについては、このサイトを参考にすれば入門できるよ!という情報も一緒に紹介していきます。

入門サイトなどをきちんと読み進めるのは体力が必要ですが、読んで実践できれば必ずあなたの役に立つ情報です。
特にGitなどは、知っているか知っていないかで大きな差が出てしまいます。
今の時代、オープンソースプロジェクトの多くはGitを使って管理されているため、インターネット上でソースコードを公開したり、他の人の書いたソースコードを使ったりする際に必要になることが多々あります。
あとこういった便利ツールは使いこなせるとドヤ顔ができます。

正直なところ、以下の内容についてはプログラミングを始めたばかりで読んでもよくわからない部分が多いと思います。
私も最初はよくわかりませんでした。
しかし、これらの知識が必要になるときはちゃんとあって、そして一度こういった入門サイトを読んで一通り扱えるようになった瞬間、プログラミング中世からプログラミング現代までジェネレーションがアドバンスするくらいの衝撃がありました。

もちろん、あなたの目的に対してここにあげたすべての内容が必要な知識である、ということはないでしょう。とは言え、今後の方針の参考となるかもしれませんので、まずは一通り言葉の意味を、なんとなくでも良いので知ってください。
あとは、これらの知識が必要になったときで良いので、ぜひ中身まで学んでみてください。

作りたいものに適したプログラミング言語がわからないとき

各言語の特徴

まずプログラミング言語を学ぶに当たり、どの言語を使えば何ができるか。言語ごとの違いは何かといったことが気になると思います。
これはとても重要なことで、言語やツールをうまく選ばないと、作るものによっては非常に難易度が高くなります。目的に適した言語を用いるようにしましょう。
また、プログラミング言語ごとに何ができるかを知っておけば、逆に何を作るかということの参考にできます。
[1]のMIS.WのWebページによくまとまっています。専門用語も多いので、わからない単語があったらGoogle検索で調べましょう。どれも重要な単語です。

リンク

[1]「どのプログラミング言語を使ったらいいのか」 【新歓ブログリレー2016 11日目】 | MIS.W
http://misw.jp/archives/460

プログラミングを便利にしたいとき

ライブラリ

ライブラリとは、汎用性の高いプログラムをまとめ、誰でも使えるようにしたもののことです。
一から自分でソースコードを書かなくても、ライブラリを用いることでプログラミングが簡単になります。
便利なライブラリを有効に用いることで作業効率が格段に上がりますので、何か複雑なことをやりたいときはそれに適したライブラリを探すのが良いでしょう。

技術者向けの知的なゲームがしたいとき

競技プログラミング

競技プログラミングは、出題された問題に対してプログラミング言語の知識や様々なアルゴリズムを駆使してプログラムで解答する競技です。
大会では制限時間内に解いて正解数を他の人と競うものが多く、また基本的にプログラムの実行時間やメモリの使用量に制限があるので、素早くプログラムを作る能力や、適したアルゴリズムを思いつく柔軟な発想力、メモリ使用量や実行時間を減らすのに必要な知識力などが問われます。
スキルアップのためだけではなく、プログラミングをする目的の一つとして見据えても良いでしょう。
[1]によくまとまっているので参考にしてください。強くなれます。

リンク

[1]強くなるためのプログラミング -様々なプログラミングコンテストとそのはじめ方- - ぴよぴよ.py
http://cocodrips.hateblo.jp/entry/2015/10/11/114212

参考書籍(おすすめ順)

CTF

CTFはCapture The Flagの略で、コンピュータの知識を多岐にわたって駆使し、Flagと呼ばれるデータを巡って戦うゲームです。
CTF自体が高度な知識を必要とするため、初心者向けの情報は少ないというのが所見です。
Wikipedia[1]が結構よくまとまっているので参考にしてください。
[2]や[3]などの常時開催型のCTFはいつでも参加できるので、興味があれば挑んでください。 また、MIS.W内には、CTF班というものも存在します。班員がお互いに知識を持ち寄り、CTFの大会にむけて切磋琢磨しています。CTFに興味のある人は入ってみてはいかがでしょうか。

参考程度にですが、CTFで身につく力や必要な知識は以下の通りです(出典:[4])。

CTFで身につく力

出題範囲

リンク

[1]キャプチャー・ザ・フラッグ - Wikipedia
https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%83%BC%E3%83%BB%E3%82%B6%E3%83%BB%E3%83%95%E3%83%A9%E3%83%83%E3%82%B0
[2]ksnctf
http://ksnctf.sweetduet.info/
[3]akictf
http://ctf.katsudon.org/
[4]CTF超入門 (for 第12回セキュリティさくら)
https://www.slideshare.net/kikuchan98/ctf-45624362

参考書籍(おすすめ順)

共同作業を便利にしたいとき

Git

Gitは、「バージョン管理」を行うためのツールです。同時に、他の人とプロジェクトをオンラインで共有するためにも用います。
バージョン管理とは、簡単に言えばバックアップのことです。
作業に一段落がつくごとにいちいちフォルダをコピーしなくても、Gitを使えばポチポチ(もしくはカタカタ)っとするだけで簡単にバックアップができます。
ソースコードを書いていて「あの時までファイルを全部戻したい!」「よくわからないエラーが出て動かないから、動くところまで戻したい!」というシーンで活躍します。

他の人とソースコードを簡単に共有できるという点で、多くのMIS.Wゲーム制作企画が採用をしています。
企業などでも、できるエンジニアチームなんかは間違いなく使っているでしょう。
具体的な使い方などは、[1]のサイトを参考にしてください。

入門編を全部読んで試してみれば、ある程度ゲーム制作でも通用するレベルになれるでしょう。
ただし、「リモートリポジトリをBacklog上に作成する」の項では、BacklogではなくGitHubを使って学ぶか、MIS.Wのサーバーで運用しているGitLabを用いて学ぶのがより実践的かと思います。GitHubを使う場合、TortoiseGitを使うなら[2]、SourceTreeを使うなら[3]のサイトを参考にしてください。

リンク

[1]サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ
http://www.backlog.jp/git-guide/
[2]Windowsにgitをインストールしてgithubにpushするまで | karakaram-blog
http://www.karakaram.com/git-install#install-tortoisegit
[3]SourceTreeでGitHubを利用してみる - yk5656 diary
http://d.hatena.ne.jp/yk5656/20140519/1402207871

GitHub/GitLab

GitHubは、クラウド上でGitのリモートリポジトリを提供してくれるサービスです。ソースコードの管理・共有に用います。
GitLabは自分で立てたサーバー上でGitHubと同じようにリモートリポジトリを管理するためのツールです。
リモートリポジトリの説明はGitの項目の[1]を参照してください。

GitとGitHubはよく混同されがちですが、この2つは別物です。
GitHubについては、[1]を読めば大体わかるかと思います。

リンク

[1]いまさら聞けないGitとGitHubの違いって何? | in-Pocket インポケット
https://www.i3design.jp/in-pocket/3111

プログラミングで何かわからないことがあったとき

Google 検索

まずはググってください。すべてはそれからです。
Google検索を使いこなせないと後々苦労しますので、できれば自力で検索して情報を得ることに慣れてください。
検索する際のコツですが、エラーが出た場合はエラーの文章をコピペして検索すると良いです。
とは言え、エラーの英文を読めば何が原因かはわかるようになっていることが多いので、まずはエラー文を読みましょう。

リンク

[1]Google
https://www.google.com

Stack Overflow

海外のプログラミングに関するQ&Aサイトです。
非常に多岐にわたる情報があり、自分で質問をしなくても、ここを参考にするだけでなんとかなる場合が多々あります。
英語なので結構読むのが大変ですが、避けずに挑めばきっと幸せになれます。私は英語という理由で避けて、問題解決の手段を見逃して不幸になりました。
最近日本語版[2]が出ましたが、英語版ほどはまだ充実していないのでこれからに期待です。

リンク

[1]Stack Overflow
https://ja.stackoverflow.com/
[2]スタック・オーバーフロー
http://stackoverflow.com/

Qiita

誰でも手軽に投稿できる、日本のプログラマ向けの技術情報共有サイトです。
玄人から初心者まで記事を作成しているので、たまに正確性に欠ける内容がありますが、ある程度の情報を集めることは可能です。

リンク

[1]Qiita - プログラマの技術情報共有サービス
https://qiita.com/

teratail

日本のプログラミングに関するQ&Aサイトです。
筆者は詳しくないのですが、紹介程度に載せておきます。

リンク

[1]teratail【テラテイル】|思考するエンジニアのためのQAプラットフォーム
https://teratail.com/

Yahoo!知恵袋

言わずと知れた老舗Q&Aサイトです。
きちんとした情報を提供してくれる人は少なくないのですが、それ以上に誤った情報や脆弱性を考慮していない情報が散見されて良質な情報を取捨選択することが大変なので、あまり参考にはしない方が良いかもしれません。

リンク

[1]Yahoo!知恵袋 - みんなの知恵共有サービス
http://chiebukuro.yahoo.co.jp/

おわりに

これ以外にもまだまだいろいろなことを知る必要があるでしょう。
プログラミングは本記事で取り上げた様々なことを含めて、決して簡単なものではないです。
しかし、一つ一つ丁寧に積み上げていけば、いつの間にかできるようになっているものでもあります。
ぜひ諦めずに、プログラミングを楽しんでください。

あなたの貢献を求めています

本資料は皆様の協力でより良い資料となる可能性を秘めています。
気軽に様々な情報を書き加え、修正していってください。

また、本資料の内容で不正確な部分や気になる点などありましたら、お気軽にご指摘ください。

文責 G2(github@0V)