はじめに
こんにちは、@_ask35_です。
会社経営をしながら、人と違う視点で物事を見ることが好きです。
今回講師業で培った素材、日常で感じられるプログラミングに関する教材に対しての想いを整理していくうちに問題点、課題に気づきました。
プログラマーが作ったプログラミング教材は正直わかりづらいです。
よく理解できる人/出来る人が説明/講師として向いているか?
答えは8割Noだと感じています。なぜなら、理解力の高い人は1を聞いて10を知ることが出来ますが、理解に時間がかかる方もいるのも事実です。
ここで誤認してほしくないのが、プログラミングに関しての理解力、理解度の向上の曲線が人によって違うだけといったことです。
生活をしていく中で、理解力は高いのに、プログラミングに関してはなぜか理解力が低いといったことはよくあります。得意不得意があるのと同じなだけです。
そこで今回比較的初学者や小中学生でも取り組みやすい内容としてこのシリーズを作る決意をしました。
Pythonをベースに概念について学ぶ
今回はPythonの概念、並びにプログラミングの概念をできるだけわかりやすく、日常に例えながらお伝えできればと考えております。
まずは変数・関数数値・文字列・代入などのコンセプトをわかりやすく伝えていければと考えております。
早速始めていきましょう。
変数
ホームセンターに売っているプラスチック箱
ホームセンターに売っているプラスチック箱には何を入れても、何用の箱かも自分で決められます。このホームセンターに売っているプラスチック箱こそが変数です。
自分が入れたいものを入れられますし、その箱にラベルを貼ってあげれば思い出の品を入れる箱にも出来るし、請求書の箱にもできます。
プログラミングでの変数は自分で名前(請求書・思い出の品)といったような名前もつけられますし、請求書を入れることも、思い出の品を入れることもできます。
もし請求書の箱が不要になったら、プラスチックの箱の外側は使いまわして、請求書の箱に領収書を入れることもできます。
関数
プログラムを自分で作ったら、名前をつけたくなるのが人間の癖。
例えば、自分がなにかを発明したら、その発明品に名前をつけたくなるのと同じです。
レントゲンはレントゲン博士が発明したため、レントゲンといった名前がつきました。
そのようにプログラムにも名前をつけることができます。
# 関数@Pythonの場合
def my_func(a, b):
c = a + b
return c
print(my_func(1, 2))
# 結果は3が出ます
もし私がプログラムを作ったら、KAGEZARU関数といったようなオリジナルの関数名をつけることもできます。
print()関数
Pythonにも事前に用意された関数があります、とよく書物に書いてありますが、このprint()関数もそのうちの1つです。print()関数は変数の中身や、数値を出力したり、文字列を主力させる時によく使われます。
このprint()関数もPythonの生みの親グイド・ヴァン・ロッサムさんが作った関数なのです。
みんながあると便利だろうとグイド・ヴァン・ロッサムさんが考えた末に生み出したプログラムなのです。
# print()関数@Python
unknown_box = '秘密の箱'
print(unknown_box)
# 秘密の箱、と表示されます
数値
プログラムは数字の計算や、処理を繰り返し行うために数字を使って、何回そのプログラムを繰り返すのか?何時にプログラムを実行するのか?といったようなことを数字を使ってプログラムを書いてコンピューターに指示します。
プログラムの世界では数字、ではなく数値といった表現をします。
数値、と出てきたからとローマ数字が含まれるといったようなことはありません。
単純に0〜9の10つの数値を使ったものになります。
# 数値@Pythonの場合
integer = 123
integers = 4567
文字列
数値と同様に、日本語、英語、フランス語、ドイツ語、スペイン語といったように人間が扱う言語もプログラムの中で使うシーンが出てきます。
例えば、名前を入力してもらったり、住所を入力してもらったりといったように、どうしても国に依存する言語を使う場面が出てきます。
そういった場合にプログラムに認識させるために、文字列といった定義の仕方でプログラムに認識してもらいます。
# 文字列@Pythonの場合
string = '文字列'
strings = "文字列"
文字列のインデックスとスライス
文章は文字の繋がりですよね?わかりやすく表現すると、文章は単語の結晶です。
私はエンジニアです。
上記の文章だと『私』と『エンジニア』といった単語を繋げています。
このように文章を分解することを人間は目視で出来ますが、プログラムにお願いする場合は何番目の文字を?どこからどこまで?といったように指定して上げる必要があります。
例えば上記の
私はエンジニアです。
の『私』を指定したい場合は文字列のインデックスを指定してあげる必要があります。インデックス指定といった表現もします。
# Pythonの場合のインデックス指定方法
word = '私はエンジニアです。'
word[0]
# 結果は『私』が出てきます。
プログラムの場合頭のものを指定したい場合数値の1ではなく0を入力します。なので、今回『私』といった文章の頭にある文字を指定したいので、0を入力します。
ここで問題です。『私はエンジニアです。』の左から2番目の『は』を指定したい場合は・・・?
# Pythonの場合のインデックス指定方法
# は、を指定してあげます。
word = '私はエンジニアです。'
word[1]
# 結果は『は』が出てきます。
そうです。このように1を指定すると頭の次の2番目の言葉を指定できます。
大丈夫です、私も最初は意味わかりませんでした。プログラミングは慣れが必要なので、ちょっとずつ慣れていきましょう。
次にスライスといった方法を学びます。
文字列のスライス、スライスはチーズをスライスするのスライスと同じ意味合いです。チーズも食べる分だけスライスして残りは置いておきます。
スライスは今回の、『私はエンジニアです。』のエンジニアを抜き取りたい場合などに使用します。実際にどうやるかを見てみてから説明します。
# Pythonの場合のスライス活用法
word = '私はエンジニアです。'
sliced = word[2:7]
print(sliced)
# 『エンジニア』が表示されます。
今回インデックス指定の応用と捉えていただいて構いません。
まず、頭のインデックス指定を行います。
今回の場合頭が『エ』なので、『2』を指定します。
次にどこからどこまでの部分を指定します。
先頭から数えて7番目なので6を指定します。と思いきや今回見ての通り7が指定されています。
最後のどこまでの部分は実数で指定してあげる必要があります。
そして、どこからどこまでの『から』の部分はPythonの場合だと『:』コロンで指定してあげます。もう一度プログラムを見ると読めるようになっていると思います。
# Pythonの場合のスライス活用法
word = '私はエンジニアです。'
sliced = word[2:7]
print(sliced)
# 『エンジニア』が表示されます。
文字列のメソッド
そもそもメソッドとはなになのか?
メソッドは関数・・・ではなく、
オブジェクト指向における『操作』を定義したもののこと
とよく説明されますが、こんなオブジェクト指向とかいきなり頭が痛くなります。そこで簡単に書き換えると以下のようになります。
『操作』を定義したもののこと
『操作』とは人間言うところの、寝る・食べる・遊ぶ
例えば、ハリーポッターの杖ありますよね。
杖が文字列だとすると、呪文がメソッドです。
ハリーが持っている杖だから出来ること、と私が持っている杖で出来ることには差があります。私はせいぜい『突く』といったメソッド(操作)しか出来ません。
逆にハリーが持っている杖だったら『明かりを灯す』といったメソッドがあります。このように文字列といった杖専用のメソッドが存在します。
# Pythonでの文字列のメソッド
# startswith - 始まりの単語を確認するメソッド
word = 'My name is Kagezaru'
checker = word.startswith('My')
print(checker)
# Trueと出ます。Trueは正しいといった認識で今は大丈夫です。
checker = word.startswith('Their')
print(checker)
# Falseと出ます。Falseは誤りといった認識で今は大丈夫です。
メソッドといった言葉は今後頻繁に出てきます。
私も最初はメソッドといった言葉を認識するのに苦労しました。
徐々に慣れていきましょう。
文字列の代入
ここで出てくるのが変数、ホームセンターに売っているプラスチックの箱ですね。
この箱の中に文字列を入れたいとします。この箱の中に何かしらのものを入れることを代入と表現します。
プログラムの世界では変数にもの(データ)を代入するとき、型を指定してあげる必要があります。
プラスチック箱にこれからどんなものが入るのかを事前に教えてあげるのです。
賃貸で表現すると、審査ですね。これからこの物件にこんな人が入ってきます、といった事前情報を大家さん(変数)にお伝えするのと同じです。
ただ、変数にデータを代入する時と賃貸を契約する時の違いは、事前に断られるということがないことです。変数の場合は代入された後にエラーといった形で拒否、もしくは報告が上がってきます。
同様に数値の代入の際にもきちんと型を指定してあげる必要があります。
まとめ
プログラミングの概念を学習するを念頭に置いてプログラムの単語や考え方を少し感じられたら幸いです。
次回、プログラミングの概念を学習するのデータ構造編に行きたいと思います。