🤖

誰でも絶対にプログラムが書けるようになる方法

2022/11/18に公開

対象者

プログラムを勉強した事が無い人
何度か勉強したが挫折した人
学校で習ったが理解出来なかった人

そうだ、すべての未経験者と挫折者に向けてだ!!

まず初めに伝えておく。この方法なら、多少やる気さえあれば誰でもプログラムが書けるようになる
本当に誰でもだ。
ただし一つだけ言い訳をしておく。プログラマとして飯が食えるかは別問題だ。他のレッスンが必要だ

騙されたと思ってこのメソッドを行ってほしい。
何日も繰り返す事で絶対にプログラムの本質がわかり、簡単なプログラムなら書けるようになる 何のための練習かは考えるな!
スポーツだってそうだろう?
ランニングや柔軟体操、筋トレ、フォーム練習に疑問を持ってはいけない

絶対に、プログラムを今後書く時に役立つものばかりだ。

初心者がつまづく原因

まず初心者が勉強を始める時に行う事は、言語を決める事だろう
どの言語を学習するか決めて、その言語の文法を覚える
そして、簡単なアプリを作り、デザインパターンを覚え、フレームワークを覚え・・・
初心者が嫌になるのも理解できる

例えば最初にC言語を勉強して、メモリやポインタという言葉で理解できずに挫折
Javaを勉強してオブジェクト指向が理解できず挫折・・・
挫折の例は数えたらきりがない
理由は単純に、覚える事や考える事が多く難しいからだ!!

まず初めに行うべき事は、プログラム脳を作る事だ!
それなのに、最初に言語から勉強するのは挫折して当然だ
つまり、プログラムの最初のステップは言語ではなく、アルゴリズムだ

プログラムの基本

プログラムの考え方の心臓部はたった3つの要素だけである
順次、分岐、反復
まずはそれぞれをみていこう
どれも簡単で3つしかないので、これを覚えるだけなら出来るだろ?
言語は何でもいいが、今回は例としてJavaScriptベースで説明する

順次

プログラムは上から順に実行される。必ず上から順だ。

console.log(1);
console.log(2);
console.log(3);
console.log(4);
console.log(5);

これは上から順に実行され、1から5まで順に出力される
順番が変わる事もなければ、飛ばされる事もないし2度出力される事もない
上から順に実行される。非常に単純なルールだ

分岐

条件により処理を変える
例えば日常生活だと、玉子Lパックが250円以下ならそれを買うがそれより多いと買わない
のような事
たとえば ただし玉子Mパックが230円以下ならそれを買う
と、条件を入れ子にする事も出来る
大抵の言語では if文を使い、条件に一致しない場合はelseを実行する

if(price <= 250){
  console.log("買います");
} elser {
  console.log("いりません");
}

反復

条件を満たす間は処理を繰り返し、満たさなくなったら終了する
大抵の言語ではwhile分とfor文等が用意されている
例えば、玉子の在庫がある間は売る。無くなったら閉店

while(stock>0){
  console.log("いらっしゃいませ");
}
console.log("閉店です");

シンタックスシュガー(文法糖衣)

覚える必要はないけど、可愛い用語なので紹介する
むしろ、挫折した人はこういう話題の方が好きでしょ?

プログラムは上記の、順次、分岐、反復 だけで書けると書いたが
実際にはもっと多くの文法やキーワードが存在する
何故か??
それは、キーワードを増やした方がもっと見やすい、メンテナンスしやすくなるからだ
そういった、同じ意味でも別の構文を用意する事を、シンタックスシュガー という
薬を砂糖で固めて糖衣錠にした方が飲みやすくなるように、読みやすいコードにする
といった意味らしい

例えばプログラムは、ifとgotoがあれば書けるし、そういう時代も過去にあったらしい
上記でいうと、反復(while)も実際はifとgotoで置き換える事も可能だ
ただ、whileがある方が読みやすいのでwhileが存在する
if文のelseも同じく。これもifとgotoで表現できるが、シンタックスシュガーだ
while以外の反復構文、forもシンタックスシュガーだし、breakやcontinueもそうだ

プログラムは基本的にはifとgotoだけで書けるのに、便利だからどんどんキーワードが増えている
つまり、この基本だけを抑えれば、他は全て別表現だ!

実際のトレーニング

座学は上記で終わりだ。本番はここから。
まとめると、プログラムは、順次、分岐、反復の3要素だけで、それを抑える事が重要

スポーツだって音楽だって、結局最後は、正しい動きを反復練習をして体に覚えさせる
それにより、本番でも自然に正しい動きが出来るようになる
プログラムも同じだ。正しい習慣(イデオム)を身につける事が重要になる

具体的には、基本的なプログラムを写経してもらう

例えば、10回Helloを表示するコードは、JavaScriptでは下記になる

for (let i = 0; i < 10; i++) {
  console.log("Hello");
}

とにかく上記のコードを、1文字も変えずに、正確に何度も書いて体に覚えこませてほしい
1文字も変えないというのが重要だ!!
例えば上記をwhile文でも書けるが、違う、そうじゃない。 for文でなければならない
letをvarにも出来るが、それでは駄目だし、変数もi以外はダメだ
当然条件も i=0; i<10でなければならない。 i=1; i<=10でもダメだ
10回ループって言われたら上記のコードが自然に1文字間違えずに出る事が重要
コードを統一する必要性は、経験を積めば積むほどわかってくる。
若いうちは個性を出そうとして、結果個性と無秩序を勘違いしがちだ

コラム。変数の i って???

その昔FORTRANという言語が登場した時の事
FORTRANは理工学部でよく使われる言語で、今も使われる偉大な言語ですが
I~Nで始まる変数名を整数型にするというルールがあり
その時にループカウンタとして i,j,kがよく使われており、その名残りです
実際のプロジェクトでは、意味のない変数名を嫌う事が多いですが
ループカウンタのi,j,kは許可されている事も多いです

ideoms

よく使われるイデオムを自分でまとめようとしていたが、素晴らしいサイトがあったので丸投げw
https://www.programming-idioms.org/
上記サイトには300以上のイデオムが記されている
300は数が多いので、そのうち厳選をします。。。
例えばメニューからJavaScriptを選ぶと
https://www.programming-idioms.org/cheatsheet/JS
JavaScriptだけのリストが出たり、使い方も便利

例えば先ほど紹介した、10回ループのイデオムは2番の
2 Print Hello 10 times に書かれている
基本的には上から順に、必須なイデオムになっているので
順に体に覚えこませていけばいいと思う

最後に

イデオムを覚えたら、プログラムを書く技術は身に付いたも同然だ
ただ、これでプログラマとして仕事が出来るかと言えばそうではない
だが、プログラム的な思考は身に付いたはずなので
あとは言語を覚えて、要求からプログラムに落とし込む事が出来れば
立派なプログラマになれるはずだ

健闘を祈る

Discussion