サイトアイコン かみ砕きゴールデンマスク 我が道を往く

プログラミング超基本 かみ砕き

初めてプログラミングをする人にとって、何を勉強すれば良いのか? 最初で躓いてしまうこともあるのでは?  自己学習的に始める方には何から始めて、どの言語を勉強すれば良いのか。ポイントを押さえつつ、かみ砕いてプログラミングの超基本を紹介いたします。

物事の仕組みを考えてみよう

初めての方を想定して書かせていただきます。ある程度の知識をお持ちの方は読み飛ばしても結構です。
プログラミングを話すとき、一番気になるのは卵と鶏の話になりそうことです。これをお伝えするには、事前にこっちを伝えてないと。でもこっちはこれを知らないと説明し辛いとか。なので、本当に初めての方にお話しするのに何から話せばよいのかをじっくりと考えました。そこで身近で皆さんが知っているあるいは使っているものを題材として紹介いたします。

自動改札機の仕組み

車しか使わないとか言わないでください。その場合はETCにでも頭のなかで置き替えてください。ちょっと切符は横に置いといて、ICカードで自動改札機を通るときの動きを確認しましょう。

  1. ICカードをカード受信箇所にかざす。
  2. 問題が無ければ扉が開く、問題がある場合は音声が流れる。

人の感覚としては、こんな感じで理解していますよね。自動改札機の立場で考えたらどうでしょう?

  1. カード受信部分にカードがかざされるまで待機
  2. カードが使用できない種類ならば9へ。
  3. 使用できるカードならば定期か確認。定期じゃない場合は6へ。
  4. 定期ならば乗車範囲と有効期限を確認。
  5. 乗車範囲と有効期限に問題なければ8へ
  6. 残高があるか確認
  7. 残高が不足しているならば9へ
  8. 扉が閉じていたら扉を開いて終了
  9. 扉が開いていたら閉じる
  10. 音声で案内して終了

厳密にはセンサーで制御する部分など、もっと複雑ではありますが、 ざっとこんな感じでしょうか。

人が直感的に理解していることを機械はひとつずつ”はい”と”いいえ”で進んでいくことになります。そこがプログラミングの煩わしいところではありますが、逆に精度が高く同じことを繰り返しても返ってくる回答は同じです。回答が正しいか否かはちょっと横に置いといてください。

まずは流れを考えよう

プログラムは「始まり」があって「終わり」があります。ここだけは最初に明確にしておくことが大切です。 自動改札機で言えば、始まりは「カード受信部分にカードがかざされるまで待機」です。上の箇条書きでは終わりが2つあります。「扉が閉じていたら扉を開いて終了」か「音声で案内して終了」となります。
そして「始まり」から「終わり」までの状況を想像しながら上記のようにラフに箇条書きをしてみましょう。

組み立ててみる

箇条書きが終わったら、それを組み立ていくことになります。必ずしも箇条書きに何もかもリストアップしなければならないということではありません。むしろ、組み立てていくときに”矛盾”や”忘れ物”が結構な確率で出てきます。組み立ているときだけでなく、コーディング(プログラムを記述すること)のときでも矛盾や忘れ物に気付くことがありますので、そんなに神経質にならなくても大丈夫です。では、組み立ててみましょう。図式化するのがわかりやすいのでお勧めです。

自動改札機の流れ図

という形になります。箇条書きより少し複雑になりました。でも、これがプログラミングの世界なのです。流れに沿って作業が進み、途中で判定して道を選び、終点まで到着する。ざっとこんなものです。慣れてきたら組み立てながらコーディングしてしまうことの方が多いかもしれません。正直、この図式を書くことに時間を費やすならば手を動かしてコーディングした方が手っ取り早いからです。
この図のことをフローチャートとかアルゴリズムと呼んでいます。実際にはそれぞれを厳密に言えば意味合いが違いますが、「フローチャート書いて!」と「アルゴリズム(図)書いて!」は同じです。ここまでできれば、次は腕力に任せてコーディングしていくことになります。
あるあるですけど、フローチャートで簡単に表記しているものが実は複雑でさらに詳細なフローチャートが必要になることがあります。例えば上記のフローチャートで「カードがかざされるまで待機」と簡単に書いてありますが、待機するのもいつまで待機すれば良いのかとか、かざされたという事象はどうやって取得するのか等、さらに一段落とし込んだフローチャートが必要です。

■次はフィジカルトレーニングです。

作図が終わったらコーディングということになります。でもどの言語を使うかも決めませんでしたね。 それよりも前にお勧めしたいことがあります。プログラミングをするなら、これは必須と言ってよいでしょう。

タッチタイピング

昔は呼び名が違っていましたが、ざっくり説明するとキーボードを見ずに画面を見ながらタイピングすることです。慣れると、ものすごーく効率が上がります。今は無料のタイピングソフトもあるようですが、どれが良いのかわかりません。そこは、自分で調べてくださいな。
オラがタッチタイピングの練習をしたころは、そんな便利なものはありません。ひたすら画面を睨みながら「打つべし!」で習得しました。

一本指打法

一本足打法は王貞治さんです。それに模倣して一本指(両手だと2本)でタイプする人を一本指打法と呼ばれます。社会人になったばかりのとき隣の席の先輩が一本指打法でした。オラは一本指でもままならなかってですけど。当時はパソコンを自宅にあるという人は稀で、ほとんどの人が社会に出てから初めて触るという代物です。大学が英文科とかだとタイプライターの授業がありますが、キーピッチなどが違うので代用できるスキルはアルファベットの配置くらいでしょうか。この記事を書きながら思い出したのですが、タイピニストって職が昔あったような気がします。タイプライターで原稿を打つ人とか速記のように打ち込む人だったかと。今、ネットで検索したら情報が何も出てきません。でもタイピニストってすごいですよね。紙に直接文字を打ち込んでいくのですから失敗したらやり直しです。今なら「バックスペース」とか「デリート」で後からいくらでも調整が効くので楽ですね。

練習するときのキーボードに注意

大前提として、とても特殊なキーボードで練習しないでください。「私はプログラミングの職人です」という気概をお持ちなら、いつもマイキーボードを持ち歩いてください(笑)。余談ですけど、データ入力のためにパンチャーさんを派遣で呼んだら「このキーボード打ち辛いので変えてください」と言われました。それならマイキーボード持参で来なさいな。おっと、大分ズレた。 練習するときに次の2点はとても重要です。

  1. キーピッチ
  2. キー配列

まずキーピッチ。キーピッチは隣り合ったキーの中心から中心までの距離を指します。デスクトップPCは、どのPCでもほぼ同じなので気にすることはありません。気にしなければならないのはノートPCですね。ノートPCの中でも持ち運びを重視してモバイルノートしか持っていない方は、デスクトップ用のキーボードと比べてキーピッチが狭いので、デスクトップ用のキーボードを打つときにキーに指が届いていないことがあります。ノートPCでも、できることならばデスクトップに近いキーピッチのキーボードを装備しているもので練習してください。 次にキー配列です。これもノートPCの時に注意してください。英数と記号ではデスクトップとノートPCでは大きな違いが無いものの、それ以外の良く使うキー、例えば「ESC」「半角/全角」「Backspace」達です。ノートPCのなかには、それらのキーをデスクトップ用キーボードとは異なる位置に配置することがあります。たぶん、デザインとかスペースの都合なのでしょう。慣れかもしれませんが一番辛かったのは、Enterキーの上にDeleteがあってその上にBackspaceを配置しているノートPCのキーボードがありました。文章の途中からバックスペースで消そうとキーを押してもカーソルが動かない数秒してからDeleteキーを押していることに気付きました。他にはESCの横に半角/全角キーがあって日本語入力モードに移るとき出るときに苦労します。あと右側にあるShiftとかCtrlキーが極端に小さい(文字キーと同じ)ものもあります。そんなに違わなくても多少小さい傾向なのでオラはShiftとCtrlは必ず左小指で操作するようにしています。

どうして必須なの?

キーボードで打ち込んだ文字が正しく入力されているかを確認する場所ってディスプレイですよね。上記のような一本指打法だとキーボードを見ながら打ち込んでいる人がほとんどです。句読点あたりでキーボードからディスプレイに目を移して確認作業をしています。動画で撮影して早送りしたらヘッドバンキング状態では?首が痛くなります。それに誤入力があった箇所が文の頭の方だと修正するのも大変ですね。それよりもディスプレイを見ながらキーボードを打っていけば、誤入力も直ぐに気付きます。効率性を重視するならばタッチタイピングが今のところ一番です。

■次は言語選びについてです。

仕事とか学校で言語が決められているならば別ですが、自発的に勉強するにあたってはどれを選択すれば良いかとなると決め辛いですよね。オラの場合はN88Basicが最初でした。初心者にはこれしかなかった。時代を感じますね。C言語もありましたけど、C言語は偉人が扱うものだと感じていました。でもCで処理せざるを得ないことが起きて、やらざるを得なかったのですけど。Cを勉強するきっかけは「改行コードをデータとして扱いたい」というのが理由です。Basicだとそれができない(と思っている)ので。最初は用途に分けて言語を選んでいたのですが、そのうちある方向に偏っていきました。それは知らず知らずのうちにC系言語を利用するようになったのです。C系の良さは先ほど説明したように、テキストファイルを読み込んだ時に改行コードであるCRやLFもデータとして扱えるからです。ただ、ピュアなCはメモリの管理、確保や解放を常に気を付けていなくてはならず、ついうっかりメモリリークをさせてしまいます。人間は万能でないので仕方ないかもしれませんが、いざ完成して本番稼働したときにメモリリークが出て来るとやっかいなものです。このメモリ管理を行ってくれている言語でCっぽい代表的なものはJAVAやC#となります。Windows系ではC#が一番だと感じています。 先に白状しますが、オラはWindowsが中心で他のOS、Macやオープン系はたまにしか触りません。ですのでWindowsに偏ってしまいますがご容赦ください。
言語選びはあくまでオラの個人的な意見ですけどご参考までに。

使用しているパソコンのOSで選ぶ

Linuxなどオープン系だとJAVAしかないかと思います。MacOSだとSwiftだと思います。WindowsならばC#。Swiftはまだ新しい言語ですが、WindowsでのC#的な位置づけの気がします。JAVAやC#は今やマルチOS対応になってきました。メインの土俵OSはありますけど。これら代表的な言語も共通的なことがあります。コーディングがCっぽいんです。Swiftは行末のセミコロンは省略可能ですけど、波括弧でブロックを囲むとかCに通じるものがあります。C#はCと付いてるくらいですからC系で間違いないでね(笑)。

【 余談 】
オラは波括弧のことを中括弧と呼んでしまいます。そのように教育されたので。[ が大括弧、{ が中括弧 ( は普通に括弧です。欧米系では大括弧と中括弧が入れ替わっています。
最近の教育現場では{ を波括弧と呼んでいるそうです。

いろいろところで活躍したい

マニアックな言語を勉強しても使い道がないと無意味です。 その点ではJAVAが一番お勧め。理由は「世の中のITエンジニアで多く使用」だから。なぜそうなったのかはオープン系でガリガリと書くことができたからでしょう。JAVAを身に着けておけば全てのOSにおいて処理系のコーディングならば活用できます。アプリを作りたいということならば別です。それぞれのOSで主流となっている言語を使わざるを得ないです。「アプリも全てのOSで」ということならばC言語になりますが、OSに近い位置でプログラミングをすること以外ではお勧めはしません。

目的で選ぶ

目的で選ぶと別の条件に左右されます。例えばWebアプリを作りたいとしましょう。ざっくり説明するとWebアプリはWebサーバー上で動作しHTML形式でパソコンで表示されます。HTMLは標準化されているので大それた改変はできません。Webサーバーで動くとは、どのような意味でしょう。Webサーバーにもいろいろあります。代表的なところでオープン系のApacheやWindows系のIISがあります。Webアプリを作りたい=Webサーバーの種類で使用する言語が決まってくるということです。ApacheならばPHPとなります。このブログもPHPで動いています。IISならばVBも使用できますがオラはC#ですね。Webアプリはクライアント側も考慮しなければならなく、クライアント側での言語はJavaScriptの一点にしぼられます。今どきVBScriptを使用している方は聞いたことありません。
次、スマホアプリはどうでしょ。OSはAndroidとiOSしか今はないです。一番の悩みの種は両方のOSでアプリを展開したいというときです。それぞれ全く違う言語でガリガリと書いてしまうとバージョンアップする度に二度手間になります。そもそも開発時点で二度手間ですが。そこでなるべく双方で共通させる部分を持つことが望ましい、JavaScript+Htmlで基本的な部分を形成させAPIでサーバーに情報を飛ばして結果をスマホに返すということを考えてしまいます。もうお分かりかと思いますがサーバーにリクエストした時点でWebアプリと同じことなり、おのずと言語が決まってきます。

プログラミングにダイブ

実際に手を動かしてみることが重要だと思います。でも、その前にもう少しポイントを押さえておいてください。プログラミングに関する共通的なことをテーマごとにまとめました。こちらも読んでおいてください。

まとめ

迷っている方はざっくりと教えます。選ぶ言語はJAVAかC#。どちらから入っても、乗り換え時に抵抗感がさほどありません。最近はどちらの言語も全てのOSで利用できるようになっています。そして、この時代JavaScriptとHTMLは標準装備として身に着けておく必要があります。HTMLもCSSまで手を広げないとなりませんが仕方がありません。
でも、一番重要なのはフローチャートを書けるのか、アルゴリズムが書けるのかだと思っています。これができれば、後はコードに起こせば良いだけです。金銭に余力があるなら誰かに代打ちしてもらっても良いかもしれません。
最後はまったくの余談ですが、会話ではバイリンガルとかトリンガルとか言いますが、プログラマーで複数の言語を知っていても特別な呼び方はないですね。誰か言葉を作ってくれないかな。

モバイルバージョンを終了