プログラミングを始めようとされている方へ

2024年4月24日更新
もし貴方がプログラミング未経験でこれから始めようとしているなら、
今回のテーマは是非最後まで読まれる事をお薦めします。
プログラミングに関する誤解が少しでも解消される事を願って…。

尚、このテーマで書かれている内容は私の個人的な意見であり、
私はその道に習熟している訳でも無いのでこれが正しいとか、
全ての人に当てはまると言うつもりはありません。
[ 01 プログラミングでも動機は重要 ]
貴方は何故プログラミングを始めたいと思ったのでしょうか。
この問い掛けに対する回答は人それぞれだと思います。
「作ってみたいプログラムが有るから」と答えた方は幸運です。
実際に動くプログラムを作れるようになる為の努力は容易な事ではなく、
具体的な目標が無いと長い間モチベーションを維持できないからです。
[ 02 プログラミングと聞いて思い浮かべるもの ]
貴方はプログラミングと聞いたら何を思い浮かべますか?
あの英語と数学が入り混じったようなソースコードでしょうか?
確かにあれもプログラミングの一部には違いありませんが、
実際にはプログラミングの中盤で行うコーディングという作業です。
[ 03 プログラミング言語は言語なのか? ]
一般的にプログラムはプログラミング言語で書かれます。
言語と言われていますがそれでCPUと会話はできません。
CPUを頭脳に持つあの武骨なマシンは「0」と「1」しか理解できません。
実用的なAIの出現でこれからは様変わりして行くでしょうが、
従来のマシンは人の言葉を理解する事はできません。

また、反対に人もマシン語を理解できないので、
仲立ちをするプログラミング言語の登場となります。
[ 04 効率よりも長く続けられる学習方法をチョイス ]
一歩譲ってプログラミング言語の事を言語のひとつだとします。
マシンを思い通りに動かす為には言語を習得する事になります。
関連書籍の多くがそうであるように単語や構文を覚える事を繰り返して、
標準的な内容を網羅的に学習する方法が一般的です。

しかし、此処で思い返してみましょう。
何年も掛けて義務教育で英語を習いましたが、
それで英会話ができるようになった人は何パーセント居るでしょうか。
その様な体系的な学習をしなくても幼児が自然と言葉を覚えるように、
難しい事は分からなくてもプログラムが書けるようになりたくはないですか。

完全に習得して教える立場になりたいなら体系的な学習をお薦めしますが、
実際に動くプログラムを作りたいだけなら幼児の学習法がお薦めです。
[ 05 プログラミングはパソコンが無いと進まない? ]
「プログラミングはパソコンで行うもの」は正解であり不正解でもあります。
最終的にパソコンで動かすものでありパソコン上で作るという意味では正解です。
しかし、パソコンを離れたら全くプログラミンができないかと言うと、
決してそのような事はなく行き詰っていた箇所が散歩中に解決した事も有ります。

反対に上手く行かないまま続けていると嵌ってしまう事も良く有ります。
バグが発生した時に目の前のソースコードをひたすら追うのではなく、
頭の中だけで考え直す事も時には解決に繋がります。
[ 06 英語が苦手なのでプログラミングに挫折したは言訳 ]
時々、「英語が苦手なのでプログラミングに挫折した」と言うのを見掛けます。
これはプログラミング言語と呼ばれている事の弊害ではないでしょうか。
確かにソースコードは数式交じりの英語で書かれているように見えます。
だからと言ってそれを日本語に翻訳する事がプログラミングでは無い筈です。
そう言う言訳で逃げない為にもプロデルで始める事をお薦めします。
プロデルは日本語でソースコードが書けるのでその様な言い訳は通用しません。
[ 07 プログラミングをマスターすればプログラムは作れる? ]
将来、貴方がプログラミングをマスターしたからと言って、
それでプログラムを開発できるとは限りません。
貴方の技量が卓越しているなら職業プログラマにはなれるかも知れません。
しかし、貴方自身のオリジナルなプログラムを開発できるとは限らないのです。

プログラミングの習得はテクニックを習得したに過ぎません。
職業プログラマはプログラムの設計書に則ってプログラムを書きます。
その設計書の事を要件定義と言います。
顧客の要望を聴き取って要件定義を書き、
必要であれば更に詳細な要件定義を書く事も有ります。
それが顧客の要望と合致したならそれこそがプログラムの本質だと思います。

作る対象が明確に在りその実現方法を考える事こそがプログラミングであり、
画面に向かってひたすらソースコードを書き続ける行為はコーディングであって、
その部分は近い将来AIに取って代わられるでしょう。
AIが追い付いていない豊かな発想力こそがプログラムの本質であると思います。
[ 08 プログラムは手順書 ]
プログラムとは手順書の事です。
頭脳であるCPUが有りそれを直接駆動する為の基本的な命令群が有り、
それを動かすOSにはその命令群を効率良く活用する為の命令群が有ります。
そのオペレーティングシステムの命令群をより使い易くして、
人に分かり易くしてくれるのがプログラミング言語と呼ばれるものです。
そのプログラミング言語に用意された命令群を活用して書いた手順書が、
一般的に目にする事になるプログラムという手順書です。
段階を追ってより具体的に人に分かり易い命令群となっています。

プログラムを作る行為は作りたいプログラムを、
プログラミング言語に用意された命令群に合わせて細分化して置き換え、
再度それを緻密に組み上げ直したものと言えます。
人が用意した手順書をCPUが理解可能なように翻訳する作業と言えます。
多くのプログラミング言語が存在していますが、
CPU寄りなものから人寄りなものまで様々です。
プロデルはより人寄りなプログラミング言語としてお薦めします。
[ 09 プログラミングの実際 ]
便宜上プログラム作成者をプロ・アマ問わずプログラマと呼ぶ事にします。
プロのプログラマ志望なら何を遣るべきかは分かるでしょうし、
既にその道に進んでいる事でしょう。
此処へ来てこれを読んでいるという事は、
少なくても今はプロ志望では無いという事だと思います。

プロならば会社の意向や顧客の要望があるので、
作成するプログラムの概要は決まっています。
アマチュアの場合はその様なものは無いので、
何を作るかは貴方次第という事になります。
さぁ、何を作りましょう…。ここが一番重要です。

作りたいプログラムが決まったらそのソフトに最低限必要な、
最も重要な機能を実現させる為に使えそうな処理を検討します。
最初は大まかな内容で調べて行き徐々に最適な処理を探します。
処理とは機能でありメソッドと呼ばれているものの事です。
使えそうなメソッドが見付かったら簡単なプログラムを書いて、
その部分だけの動作確認を行います。
この様なテストプログラムは殆どの場合一行から数行ですので、
先ずはこれが作れるようになるまでの習得が必要です。
ここ迄がプログラミングの序盤です。

中核部分のテストが終了したならユーザインタフェースを追加して、
使い易く汎用性が有るプログラムにして行きます。
この段階ではユーザインタフェースとエラー処理の追加で、
プログラムは何倍にも膨れ上がります。
ユーザインタフェースの出来次第で使い勝手が決まります。
センスと経験がものを言う重要な作業です。
これらの作業がプログラミングの中盤です。

コーディングが終わったプログラムを総合的にテストします。
些細な事でも発見したらその都度直してテストを行います。
このようにして完成度を上げて行き納得が行ったら完成です。
もし完成したプログラムに汎用性が有り公開するつもりなら、
マニュアルなどのドキュメントを書いたり、
必要であればヘルプファイルを作成します。
これがプログラミングの終盤です。
[ 10 おわりに ]
私は過去に職場に有った「VB6」を触った経験が有ります。
ほんの数カ月間でしたがインストールも問題く無くできましたし、
インストールしたその日に簡単なプログラムを作る事ができました。
その事に気を良くして数年後に「VB.NET」や「C#」等を購入して、
個人的にプログラミングを始めようとして挫折しています。

今はどうなっているかは知りませんが、
当時は日本語版であってもインストール時に表示されるメッセージは英語で、
専門用語のエラーに対処できずインストールを完了できなかったので、
実際に開発環境を拝んだ事が有りません。
「VB6」の後継だと思っていた「VB.NET」は、
インストールすら完了できない手強い別物になっていました。

また、ネットで気になるサンプルコードを発見した場合、
コマンドラインコンパイルで試してみる事は有りますが、
殆どの場合エラーが出てコンパイルできません。
ヘッダやライブラリ等が省略されているからのようですが、
何を遣るにしても基礎的な知識を要求されます。
始める際の基礎知識や常識が多いと敷居が高く感じてしまいます。

今、プロデルを好んで使っているのはこの敷居が低いからかも知れません。
インストールしないで使えるエディションが用意されている事も、
プロデルを選択した重要な要素です。
プロとは違いアマチュアの場合は基本的に一人です。
プロ志望で会社に入ったのなら回りに訊ける人が居るでしょうが、
アマチュアの場合はその様な恵まれた環境は望むべくも有りません。
インストール位何の問題も無く完了しないと話になりません。
私にとって「プロデル」は「VB6」以来の統合開発環境です。