はじめに
目的
2021年を通して「C++超入門」と題した、初歩的なゲームを題材にしてC++を学ぶシリーズを作成してきました。2021年12月時点ではまったく完成しておらず、中途半端な状態となっています。それなのになぜ新しいシリーズを始めようとしているのかというと、やや行き詰まっているからです。別にもう書くことがないとか、コードが書けないとかではないとかではないです。それよりも、一つの記事に時間がかかりすぎるため、新しい記事を書くのが億劫になってきています。最初の記事「Hello World」を書いたのが2020年12月6日で、およそ1年前で、たった27の記事しか書けておらず、このペースで行くと完結するのがいつになるのか検討がつきません。原因はプログラミングと文章を書くことの技量が不足していることです。
この状況を打破するために、初心に戻って新しいシリーズを始めることにしました。最大の目的は自分自身のためで、プログラミングと文章の技量を向上させて、「C++超入門」に反映させて完成させ、その後に予定している本格的なゲームプログラミングのシリーズに繋げることです。
以下にこの「初めてのプログラミング」というシリーズの方針を記しておきます。
対象とする人、想定する読者
タイトル通り初めてプログラミングをする人を想定しています。Hello Worldくらいなら書いたことがあるというくらいの人も範囲内です。
PCを使ってプログラミングをするので、ちょっとした操作ができることが望ましいです。例えば、ダブルクリックって何?とかアルファベットの大文字ってどうやって入力するの?というくらいにPCに不慣れだとちょっとカバーしきれないかもしれません。
一方で、コマンドラインの操作はすべて解説していくつもりなので、触ったことなくても大丈夫です。
使用するプログラミング言語
C++とLuaをメインに使います。個人的な考えとして、最低2種類の言語を知っていた方がいいと思っています。一つはがっちりとしたもので、もう一つはあっさりとしたものの方がいいと思ってます。C++はヘビー級で、Luaはフライ級くらいのイメージで、両極端な言語です。
Luaは極めてシンプルな言語で覚えるべきことが少ないです。最近流行りのPythonと比べても少ないです。プログラミングの入門にも適していると思うのですが、なぜかそういう類の書籍などはありません。ここで実験的にLuaによるプログラミングの入門のようなものを書いてみようと思ったしだいです。
C++は極めて複雑な言語で覚えるべきことが多いです。最近流行りのPythonと比べても多いです。プログラミングの入門にも適していないと思うのですが、なぜかそういう類の書籍がたくさんあります。…というのは冗談で、最終的にはゲームプログラミングに行き着きたいので、ゲームプログラミングで広く使われているから、というのが理由です。しかし、複雑な言語であるというのは冗談ではなく、本当です。プログラミングの入門に適しているかどうかも怪しいです。それを補うためにLuaを使うわけです。
日本語でおk
C++超入門ではやりすぎなくらい英語の文書へのリンクを張っていました。「初めてのプログラミング」というタイトルを尊重して、英語のドキュメントは極力避けるようにします。しかし、コードはどうしても英語がベースになります。そこはコメントで補うようにします。
質より量
可能なら1日1つくらいを目標として、ハイペースで投稿していきます。時間をおけばよいものができるというわけでもないし、一度間が空いてしまうと復帰するのにエネルギーを必要とします。そして放置状態になってしまいます。そうならないように、思いついたことをどんどん書いていきます。
ランダムトピック
プログラミング言語の入門書にあるような、順を追って言語の機能を解説していくようなスタイルは採用しません。例題を通してその問題を解く過程で必要になるたびに新しい機能を解説していくスタイルを取ります。
また、繰返し同じことを解説するのを避けるようにはしません。一度見ただけで定着するとは思えないし、ランダムにトピックが出現するため、どこに何が書いてあったかあとで見直すのも手間だからです。必要と思ったら何度でも同じことを書いていきます。
グラフィックスは扱わない
たくさんプログラムを作っていくことになります。それらはすべてコンソールアプリケーション、それかライブラリです。ゲームを作ることは考えられますが、それもコンソールで動作するものとします。
ここでのコンソールとは何かと言うと文字だけでできた画面のことです。グラフィックスを避ける理由は、ややこしくなるのを避けるためです。初歩的なプログラミングの問題にのみ集中するためです。グラフィックスを扱うためには、簡単な問題でさえその出力のために労力を割かなければならなくなってしまいます。平たく言うと、画面に「はい」と「いいえ」のボタンを表示するよりも、「よいですか? (y/n)」というテキストを表示させる方が簡単だということです。ボタンを扱う方法を学ぶのはもっと後になってからでも遅くはないです。
UNIX
プログラミング環境は差し当ってVirtualBoxやQEMUなどで仮想マシンのFreeBSDを使う予定をしています。FreeBSDを選択したのは、公式に仮想マシン用のイメージが配布されているためインストールの手間が省けるからです。
なぜ一番ユーザーが多いだろうと思われるWindowsをターゲットとしないか疑問に思われるかもしれません。一番の理由は手元にWindowsの環境がないからです。と言うのは言い訳で、本心はUNIX環境でのプログラミングを学ぶことに自分自身関心があること、それにUNIX環境の方が楽しそうだからです。
UNIX系OSならなんでもいいというなら、macOSもLinuxもそうです。なぜFreeBSDなのかは先に述べた通り、Windowsユーザーも含めて、簡単に仮想マシンの環境が用意できて、書き手と読み手の環境を揃えることができるからです。
迷ったら食ってみる
たくさん失敗します。たくさんのエラーやバグに遭遇します。誤ちを恐れずに色々試します。