はじめてのプログラミング

プログラミングに興味はあるんだけど、どういうものかよく分からなかったり、これからプログラミングをはじめようかと考えているだけど、どうすればいいのか分からない人は少なくないと思います。様々なきっかけでプログラミングをはじめようとしている人がいて、はじめたいけどハードルが高いと感じて切り出せなかったり、以前に学習してみたけどすぐ挫折した人もいるかと思います。
プログラミングはそういった最初の「壁」を乗り越えれば、あとは勢いに乗ってドンドン習得できるものです。プログラミング全体に共通する基本的なことを理解すれば、これらの壁も乗り越えやすいと思います。その時点で、自分はプログラミングすることに適しているのかどうかも分かるかと思います。個人的な感想になりますが、ジグソーパズルをやったり、ナゾナゾを解くのが好きな人は比較的プログラミングの習得は早いように思います。
まずはプログラミングの全体像を感覚的に捉えて、プログラミングとはどういったものかを理解するところから始めてみましょう。(とにかく「プログラミング学習のコツ」から読みたい方はスキップして進んでください)

注目されているプログラミング学習

最近ではネット上やテレビ・雑誌などでもプログラミングについての話題が多く取り上げられるようになってきました。NHKでもプログラミングの番組が放映されるくらい注目されています。なぜ今プログラミングに注目が集まっているのでしょうか?

プログラミングの必要性

現代社会ではインターネットが水道・電気・ガスのような生活インフラと同様に生活に必要不可欠なインフラとなってます。そして、パソコン・スマホ・タブレットといった端末に、それぞれで動作するアプリはインターネットを活かして様々な機能やサービスを展開しています。これからはこういった端末以外にも家電全般・ロボット・車などの様々な「モノ」もインターネットを活用してきています。これはIoT(Internet of Things)といって、ニュースや各種情報サイトで話題となっています。このように変化する生活環境の中で必要不可欠なものとして提供されているモノやサービスは、全てプログラミングされて作られています。つまり、プログラミングは「モノ」づくりではとても重要な要素となっています。
一方で、文部科学省は小学校でのプログラミング教育の必修化を検討し、2020年度からの新学習指導要領に盛り込む方向だと発表しました。中学校ではすでに必修化していますが、これに新しい項目を追加検討していたり、高校では選択科目となっているのを今後、新学習指導要領で必修化することを検討しています。
複雑になった社会で仕事や生活で何か問題が起こったときの解決や、何かを始めるときに新しいアイデアを考えたり、何か事がある度にそれに対処するには、論理的な考え方が重要になってきます。プログラミングはこの論理的な考え方を育成・強化することにも適した要素と言えます。

プログラミングとは

簡単に言ってしまうとプログラムは「ハードウェア」や「ソフトウェア」を動かすための命令文書です。プログラミングは動かしたい「モノやコト」をそれぞれの手法とルールに従って書くことです。例えば、iPhoneやAndroidのアプリを動かしたかったら、XcodeやAndroid Studioという手法(ツール)を使って、SwiftやJavaといったプログラミング言語で命令文を書きます。Pepperを動かしたかったら、Choregraphe(コレグラフ)という手法(ツール)を使って、ボックスを繋いだりPythonを使って命令文を書きます。このように対象のハードウェアとソフトウェアごとにツールやプログラミング言語が違います。なぜこのようになったかというと、技術の進歩過程と環境の変化が背景にあり、壮大な話となるので今は現状を知るにとどめます。ちなみに、Javaはこういったプラットフォームの違いによるツールやプログラミング言語の選択を無くす目的もあり開発された言語です。現状では、対象のプラットフォーム専用に開発されたツールやプログラミング言語があったり、Javaのようなマルチプラットフォームに対応した言語を使いつつ、専用のツールでプログラミングできるようにしたりと、環境によって多種多様です。なので、やりたい目的からどのツールとプログラミング言語について学習すべきなのか決めることになります。

目的に対応したツールとプログラミング言語

上記の理由により、目的からどのツールとプログラミング言語について学習するのかが決まります。厳密にはプログラミング言語は非常に多くの種類があります。以下は例として、主な目的別のツールとプログラミング言語です。

Webサイト/Webアプリケーション作成

ツール

各種CMS(WordPressなど)、エディター、オーサリングツール、Webアプリ作成フレームワーク

プログラミング言語

HTML, CSS, PHP, JavaScript, Java,  Ruby, Python

機械学習、深層学習などAI関連

ツール

ライブラリ(Keras, TensorFrow, OpenCVなど)、エディター、IDE(Jupyter Notebookなど)

プログラミング言語

Python

Androidアプリ、ロボホン

ツール

Android Studio

プログラミング言語

Java, Kotlin, (C++)

iPhone/Macアプリ

ツール

Xcode

プログラミング言語

Swift, Objective-C

Windowsアプリ(クライアント・サーバー)

ツール

Visual Studio

プログラミング言語

Windows C/C++, C#

Linuxアプリ(クライアント・サーバー・組み込み(embedded))やスクリプト処理

ツール

エディター、コンパイラ、デバッガ、統合開発環境(IDE)

プログラミング言語

C, C++, Java, Python, Perlなど

Pepper

ツール

Choregraphe、エディター

プログラミング言語

Python, HTML, CSS, JavaScript

ゲーム

ツール

Unity

プログラミング言語

C#, JavaScript

教育向け

ツール

Webサイトのサービス

モバイルアプリ

プログラミング言語

ビジュアルプログラミング
*表示されているブロックを組み合わせて、絵を動かしたり、表示を切り替えたりなどできます。それを使って迷路を解いたり、アニメを作ったりするサイトもあります。

ご覧の通り全ての目的に記載されているプログラミング言語は複数あります。これは、複数の言語を使ってプログラミングしなければならないわけではなく、複数の言語が使えるということです。個々の機能や性能などの状況に応じて使用する言語を選びます。例えば、AndroidアプリはAndroid StudioとJavaを習得するだけでアプリ作成はできます。Webサイト作成はHTMLとCSSを習得すれば最低限のWebページは作成できますが、CMSを使ってブログ運営や、もっと動きのあるサイトにしたければ、PHPやJavaScriptなども習得する必要があります。こういった情報を基に学習するツールとプログラミング言語を決めます。まだ目的がはっきりしてない場合は、多くの環境で登場する言語をまず学習することも1つの決め方です。
目的がモノを作ることではなく子供たちなどに教えるなど教育向けの場合は、具体的にプログラミング言語を学習するのではなく、プログラミングの考え方を理解するためにビジュアルプログラミングを使って学習します。ビジュアルプログラミングも以下に記述する「プログラミング言語の共通点」と合致して考え方は同じです。その中でも特に条件文を使って動作させることで、論理的な考え方を学ぶことが出来るようになっています。

プログラミング学習のコツ

こうやって見ると何だか複雑に見えるんですが、まとめて一気に習得しようとすると必ず挫折します。まずは目的にあったツールや言語から1つ習得し、その次にもう1つ、さらにもう1つと少しづつ増やしていきます。1つの言語を習得するときもその言語の書き方や機能を基礎的なことから1つづつ習得していくのが挫折しないコツと言えます。経験を増やしていくことで、習得もだんだん速くなったり、振り返って理解が深まります。

将来はIT関連の仕事を目指していて、技術的なことも理解しておきたい場合は早い段階からプログラミング学習することはとても有効なことだと思います。だからといって遅いからできないということではありません。個人によって習得する速さも違うだろうし、学習する意欲があればいつから始めても遅いことは決してありません。(以前のニュースで80歳になってからプログラミングを学習してAndroidアプリを公開した方の報道もありました)

それから、必ずプログラムを動かして動作結果を見ながら学習しましょう。参考書やWebサイトの記事だけを読んで習得するのはとても難しいです。その都度、動作結果を見ることで小さな達成感もあり、そうした経験は身になっていることが多いです。少しづつ動作結果を見ることで、期待通りの動作をしない場合でも、原因が見つけやすく慣れてくると問題解決のコツも掴んできます。「プログラムを動作させながら学習する方法」はこのページの終盤に掲載しています。

さらに、全てのプログラミング言語やそれを取り巻く環境の共通点を理解してから学習するとどの言語を学習しても習得しやすくなります。自然と頭に入ってくるようになってきます。

そして実際の開発の経験としてあるのは、プログラムをフルスクラッチから(何もないとこから)書き上げることはめったにありません。古いコードを修正して使ったり、利用できるサンプルから修正して使ったりすることがほとんどです。そして、そういった既にあるコードを解析することでプログラミング力は効率よく向上します。「先人に習え」というのはプログラミングの世界でもあり、そこを基点として新しいものを考えていくということも1つのコツと言えるでしょう。

あるテレビ番組で「学ぶ」の語源を解説してました。「学ぶ」は元々「真似ぶ(まなぶ)」と書かれていて、真似をすることから習得するという意味を持っていたそうです。

プログラミング言語の共通点

プログラミング言語は現在では様々な種類の言語がありますが、C言語が誕生してから基本的な考え方は他の言語でも継続されています。C言語が誕生する前は、アセンブラという記述方法で、プロセッサに直接命令する機械語からより人間が理解できる記述方法として開発されましたが、簡単にいうとその機械語をコード化して命令文としていました。C言語が誕生してから、記述方法の水準がより高くなり、人間が文章を連想できるような記述方法になりました。それ以降新しく誕生するメジャーな言語はほぼC言語と同じように、人間が文章を連想できるような記述方法になっています。この部分についてはどの言語も考え方が共通しているので、把握しておくことでスムーズに学習するコツとなります。では、どういった共通点があるのでしょうか。キーワードは以下です。

・変数、演算子、条件文、繰り返し文、関数

この5つについては、記述方法が各言語で多少異なりますが考え方は共通しています。これを理解しておくことで言語が違っても処理している内容をおおよそ理解でき、スムーズに学習できます。

変数

変数はプログラム中で処理したい値・データを格納する「器」のことです。「器」を使うことで、数値の計算結果や文字列の編集結果などを一時的に保存することができます。名前を付けた器にデータを入れて管理することで、たくさんのデータの種類や目的を分かりやすくすることができます。変数に値を代入するときは「=」記号を使います。変数を使うことでプログラム内の他の処理にその値を渡したり、処理した結果の値を格納して他の処理で利用することなどできます。言語によって大きく違う点は、変数を使う際に宣言が必要なものとそうでないものがあります。
例えば、xという変数を使うときに

int x;
x = 10;

var x;
x = "Hello World";

などのようにxに値を代入する前に変数を宣言します。一方で、宣言が必要ない言語もあります。そういった言語の例として、xという変数を使う場合は

$x = "Hello World";

と変数であることを表す符号をつけて使用します。

用例
int i;
i = 1; // iに1を格納
int a = i +3; // aの結果は4です
$j = "Hello"; // jにHelloという文字列を格納
$b = $j + "World"; // bの結果はHello Worldです

上に記述されている「//」はコメントを意味しています。コメントはプログラム内にプログラム以外の説明などを記述します。コメントにするとプログラムと認識されません。主に以下の2つの方法で記述します。
// 1行コメント: //以降はコメントと認識されますが、1行だけコメントとなります。
/* ~ */ 部分コメント: /*から*/の間がコメント部分となります。複数行になっても、/*と*/で括ればコメントとなります。
言語によっては記述方法が異なるものもありますが、どの言語もコメントは記述できます。

演算子

変数に格納されている値を計算したり、期待通りの値かどうかを評価したり、または文字列を連結したり、関数の結果を評価するときに使われます。ここでは特によく使われる演算子を取り上げました。これだけ理解しておけばほとんどのプログラムでスムーズに学習することができます。各種の演算を行うときの記号はどの言語もほぼ同じです。

加減算

“+”, “-“

乗算

“*”

除算

“/”

インクリメント

“++”

デクリメント

“–“

剰余算

“%”

等号

“==”

不等号

“!=”

比較

“>=”, “<=”, “>”, “<“

論理積

“&&”

論理和

“||”

否定

“!”

用例と説明

【加減算、乗算、除算】
足し算”+”、引き算”-“、掛け算”*”、割り算”/”を行うときの演算子です。

a = 4 + 3; // aの結果は7です。
b = "Hello" + "World"; // bの結果はHello Worldです。

【剰余算】
割り算したときの余りを求める演算子”%”です。

a = 7 % 3; // aの結果は1(ture)です。
b = i % 3; // この例は、bの結果が0の場合はiは3で割り切れる値なので、iは3の倍数であることがわかります。

【インクリメント、デクリメント】
変数の値を1増加”++”したり、1減算”–“する演算子です。変数の前に記述するのと後に記述するので意味が変わります。

a = ++i; // aの結果はiを1増加した値です。
a = (i += 1);と同じです。
a = i++; // aの結果はiと同じです。aにiを代入したあとでiを1増加します。
a = i; i = i + 1;と同じです。

【等号、不等号、比較】
値を比較するときの演算子です。同じかどうか比較する場合は”==”、同じではないことを比較する場合は”!=”、大きさを比較する場合は”>=”, “<=”, “>”, “<“を使います。条件文とともに使います。

if (x == y) // xとyが等しければ実行します。
if (x != y) // xとyが等しくなければ実行します。

比較の判定は「真偽値」で行います。つまり「x == y」が成立するときは「真(true)」、そうでなければ「偽(false)」という値となります。これはどのプログラミング言語でも必ず登場するので知っておきましょう。関数の戻り値として型定義されていることも多く、プログラミング言語によっては「boolean型」として明確に型定義をします。例えば、isActive(引数)といった関数があるとして、この関数では(引数)で渡されたものが有効かどうか?を判定する処理を行い、戻り値として真(true)か偽(false)を返します。関数ではこうやって利用されることが多いです。

等号と不等号はプログラミング言語によって、”===”や”!==”という記述方法を提供しているものもあります。これは、より厳密に等号や不等号を比較する場合に使用する演算子です。
例えば、PHPやJavaScriptだとif (a == 1)とif (a == ‘1’)はどちらも同じ判定となります。ですが、if (a === 1)とif (a === ‘1’)は判定が異なります。if (a === 1)の場合はaが数値の1ならば実行します。if (a === ‘1’)はaが文字列の’1’ならば実行します。

if (x >= y) // xがy以上であれば実行します。
if (x < y) { // xがyより小さいときに"Hello World"を表示します。
  printf("Hello World\n");
}

【論理積、論理和、否定】
これは条件をより簡潔に表現するのに使う演算子です。なので条件文とともに使われます。「〜かつ〜」であることを判定する場合は論理積” && “、「〜もしくは〜」であることを判定する場合は論理和”||”、「〜でない」ことを判定する場合は否定”!”を使います。

if ((x == 7) && (y == 3)) // xが7で、かつyが3であるときに実行します。
if ((x != 5) || (y == 10)) // xが5でないか、もしくはyが10のときに実行します。
if (!func()) // func処理の結果がfalse(偽)の場合に実行します。

true(真)とfalse(偽)は真偽値といって、ここでは処理結果が”1″ならばtrue(真)、”0″ならばfalse(偽)と理解しておくといいでしょう。上記の例の場合だと、「func処理結果が”0″ならば実行する」ということになります。「func処理結果が”1″である」ことを評価するには、if (func())と記述します。つまり、否定”!”は真偽値を反転させて評価します。
論理積、論理和、否定はベン図を見ると理解し易いかも知れません。以下のベン図でそれぞれ赤い部分がAND、OR、NOTを表しています。

【AND(論理積)】aであり、かつbであること

AND(論理積)

【OR(論理和)】aもしくはbであること

OR(論理和)

【NOT(否定)】aではないこと

NOT(否定)

条件文

何らかの処理を実行する前に「条件分岐」を行うために記述する命令文です。記述はif文やswitch文を使います。書き方は以下のようになります。

・if文は条件に合っていれば処理を行います。一般的には条件を評価すると言います。評価結果がtrue(真)のときは処理を行い、false(偽)のときは処理しません。

if ( 条件 ) {
  処理
}

・switch文は評価対象がcaseに書かれた評価値に合っていればその処理を行います。defaultはどの評価値にも合っていない場合にその処理を行います。

switch (評価対象) {
  case: 評価値1
    処理1
    break;
  case: 評価値2
    処理2
    break;
  default:
    処理3
}

すでに上記の否定”!”で説明しましたが、条件の評価は真偽値(true, false)で行います。つまり、条件通りであればtrue(真)となり、そうでなければfalse(偽)となります。論理積、論理和、否定と条件文はセットで把握するといいでしょう。

用例
xが7で、かつyが3であるときに"Hello World"を表示します。
if ((x == 7) && (y == 3)) {
  printf("Hello World\n");
}

以下のように記述しても同じ処理となります。

if (x == 7) {
  if (y == 3) {
    printf("Hello World\n");
  }
}

ですが、こういった入れ子構造は、行数が増え条件が増えると複雑になり読みにくくなるので注意が必要です。
そして、複数の条件文を書くときはelse文を使います。else文は「〜以外のとき」実行します。
以下はdstが’up’のときは”Hello”を表示、そうでなくdstが’down’のときは”World”を表示、それ以外のときは”Hello World”を表示します。

if (dst == 'up') {
  printf("Hello\n");
} else if (dst == 'down') {
  printf("World\n");
} else {
  printf("Hello World\n");
}

case文は同じ条件分岐がif文で書けますが、if文の条件が増えたり、条件の記述が長いなどで見にくい場合にcase文で記述すると見やすくなる場合があります。

switch (dst) {
  case 'up':
    printf("Hello\n");
    break;
  case 'down':
    printf("World\n");
    break;
  default:
    printf("Hello World\n");
}

簡単な条件文であれば、「三項演算子」を使ってより簡潔に記述することができます。
書式:条件 ? 評価がtrueの場合の処理 : 評価がfalseの場合の処理;
用例:x = (i % 2) ? “奇数” : “偶数”;
(i % 2)の処理結果として、iを2で割ったときに余りがあるとtrue(真)”1″、割り切れるとfalse(偽)”0″を返却します。なので、 trueの場合は”奇数”、falseの場合は”偶数”をxに代入します。

繰返し文

なんらかの処理を繰り返し実行させたいときに記述する命令文です。記述はfor文やwhile文を使います。書き方は以下のようになります。

・for文は条件を評価するために使う変数の宣言と初期化し、繰り返しの条件と変数の更新を式に記述します。

for ( 初期化 ; 繰り返しの条件 ; カウンタ変数の更新) {
  繰り返し処理
}

初期化でカウンタ変数を初期化する式または変数の宣言をします。繰り返し処理の前に継続条件を評価し、trueの場合は継続して繰り返し処理を実行します。その後カウンタ変数の更新を実行し、条件評価に戻ります。継続条件の評価がtrueを返す限り、繰り返し処理が実行されます。

・while文は条件の評価がtrueの間は繰り返し処理を実行します。

while (条件) {
  繰り返し処理
}
用例
以下のfor文は0から数えて、10回処理を実行します。
for (int x = 0; x < 10; x++) {
  printf("xは%dです。\n", x);
}
この場合は以下のように表示します。
xは0です。
xは1です。
・・・
xは8です。
xは9です。
同じ処理をwhile文で記述すると以下のようになります。
int x = 0;
while (x < 10) {
  printf("xは%dです。\n", x);
  x++;
}

関数

プログラムの中心となる処理をメインルーチンと言います。それに対して関数をサブルーチンと言います。プログラムはメインルーチンで処理を実行中に、必要に応じてサブルーチン(関数)を呼び出します。これにより、プログラム全体の構造が簡潔に整理されます。例えば、メインルーチンで同じ処理を何度か実行する必要があるときは、その処理を関数にすると何度も同じ処理を記述する必要がなくなります。


関数は呼び出すときに、引数に値を渡すこともできます。関数内で渡された値を処理して、何らかの値を返すことが関数の基本的な処理の流れになります。もちろん引数も無く、何も値を返さない関数も記述できます。それは関数で処理したい内容に応じて臨機応変に作成します。

各プログラミング言語で基本的な機能は関数として提供されています。例えば、C言語でコンソールに文字列を表示する「printf()」は関数(サブルーチン)です。これら関数の集まりを「ライブラリ」といいます。

用例
以下の例は引数で渡された値が偶数であればtrue、奇数であればfalseを返す関数です。for文で実行する処理がメインルーチンになります。以下はJavaScriptを使ってブラウザの画面に表示する例です。
for (var i = 1; i < 11; i++) {
  if (isEven(i)) {
    document.body.innerHTML += i + "は偶数です<br>";
  } else {
    document.body.innerHTML += i + "は奇数です<br>";
  }
} function isEven(value) {
  if (value % 2) {
    return false;
  } else {
    return true;
  }
}
この場合は以下のように表示します。 
1は奇数です
2は偶数です
・・・
9は奇数です
10は偶数です
この関数から文字列を返すように書き換えると以下のようになります。
for (var i = 1; i < 11; i++) {
  document.body.innerHTML += isEven(i);
} function isEven(value) {
  if (value % 2) {
    return value + "は奇数です<br>";
  } else {
    return value + "は偶数です<br>";
  }
}
動作結果は同じです。メインルーチンの処理がより短くなりましたね。
※これらのサンプルコードを以下で紹介しているCodePenなどで実行してみてください。

プログラミング言語の基本的な考え方を理解する

これらの変数、演算子、条件文、繰返し文、関数を理解しておくことで、どの言語を学習する場合でもスムーズに進めることができるでしょう。プログラミング言語ごとに多少の記述方法は違っても、どの言語も基本的な考え方は同じです。非常に乱暴な言い方になるかもしれませんが、プログラミングは「器に値を入れて、それを計算し、条件に合っていれば処理をする。場合によっては繰り返し実行する。」もので、やりたいことに合わせてそれらを少しづつアレンジしながら組み立てる作業です。「処理」をする部分がやりたいことになります。画面に何か表示したり、動かしたり、写真を撮ったり、などなど。

感覚的にプログラミングに慣れる

プログラミングに感覚的に触れて慣れてから具体的な学習をはじめるのも1つの方法です。以下のページでブロックを使ってプログラミングしてみてください。
ブロックを使ってプログラミングに慣れる
また、各種サービスサイトでビジュアルプログラミングを使って迷路を解いたり、絵を書いたりして慣れるのもいいかと思います。

・Googleが提供するビジュアルプログラムのフレームワークであるBlocklyを使ったサンプル
Google Blocklyサンプル 

・教育向けにビジュアルプログラミングでゲームやアニメを作れるサイト
Scratch 

・小学生に人気のマインクラフトのキャラクターを操作する、Microsoftが提供するビジュアルプログラミングのサイト
MSマインクラフト 
これらは実際にプログラミング教育の現場で使われることがあるので、教育向けにプログラミングの学習を検討している人には、学習の手がかりとなることでしょう。

プログラムを動作させながら学習する方法

動作結果を見ながら学習することは、プログラミング学習の重要なコツです。動作させながら学習するためには、動作できる環境を用意する必要があります。ほとんどはMacやWindowsパソコンに環境を用意することができますが、動作環境をパソコンに用意しなくてもプログラムを動作させることのできるWebサイトがあります。これらのWebサイトは無料で利用することができ、多くの主要なプログラミング言語に対応しています。Webサイトは幾つかあるのですが、ここでは主なものを2つ紹介します。

CodePen
CodePenは主にHTML, CSS, JavaScriptが使用できます。それ以外はMarkdownやSCSSなどのメタ言語やCoffeeScriptなどのスクリプトが使えます。英語サイトですが、画面は見やすく使いやすいです。

codingground
ほぼ全ての主要言語が使用できます。英語サイトです。こちらも画面が大きく見やすいです。スマホなどのデバイスごとの表示を切り替えることができます。

プログラミング言語はコンパイルが必要なものとそうでないものがあります。C/C++, C#, Java, Objective-Cなどはコンパイルが必要な言語です。JavaScript, PHP, Pythonなどはコンパイルは必要ありません。コンパイルとは、ここではプログラムが実行できるようにするための手続きと理解しておいてください。つまりこの手続が必要な言語とそうでないものがあるのです。上記のcodinggroundサイトはこの手続もサイト上でできるので、JavaやC言語が動作できるのです。
また、AndroidアプリやiPhoneアプリのように統合開発環境(IDE)が提供されている場合、IDEにプログラムを作成・編集するためのエディターから動作確認をするためのコンパイル、エミュレーターなどの実行環境まですべて含まれています。このIDEはAndroidアプリやiPhoneアプリ以外のJava, C/C++, Python, PHP開発用にオープンソースで「Eclipse」というものがあります。これは多くの企業で開発ツールとして利用されているもので、少しプログラミングに慣れるとEclipseをインストールして利用するのもいいかと思います。もちろんIDEを使わず、最低限コンパイルと実行できる環境をインストールすることもできます。
ロボットについて、例えばPepperはプログラミングはパソコンで行い、一部の機能はIDEに含まれているエミュレーターで動作確認できますが、基本的にはロボットがないと動作確認をすることができません。

プログラムを作成・編集するためのエディターを用意しておこう

どのプログラミング言語を学習するにもプログラムを作成・編集するエディターが必要です。統合開発環境が提供されているものはエディターも含まれていますが、いろいろなシチュエーションでエディターは使用されるのでインストールしておいていいかと思います。エディターはほとんど無料で使用できます。はじめはどれを使えばいいのかよくわからないと思いますが、以下の代表的なエディターのどれかを利用すればいいかと思います。

Atom
2015年に登場したGitHubから提供されている無料のエディターです。GitHubとの親和性も高く機能が豊富です。

Brackets
2014年に登場したAdobe Systemsから提供されている無料のエディターです。こちらも多数の言語に対応して機能も豊富です。Adobeからはウェブ制作用として提供されています。

Sublime Text3
古くからある人気のエディターです。厳密には有料なのですが、無料のお試しとして使っても制限なく使えるので多くの人は無料のまま使っているかと思います。

最後に

長くなりましたが、これでプログラミングを学習するための準備は整いました。最初に少し触れましたが、プログラミングはパズルを組んだり、謎を解いたりするのととても似ていると思います。物事を論理的に考えて問題解決する能力の向上にも役立ちます。何よりも「モノ」づくりを楽しめます。これをきっかけにさらにプログラミングを学習していってください。気がつけばどんどんレベルが上がって行き、そんな達成感がとても楽しく感じるようになってきます。がんばってください!