プログラミングに限らず、ほとんど全ての技術は、役に立つレベルに達しないうちに諦めると全く使うことができません。
プログラミングについては、独学で学ぶと、やっては諦め、やっては諦めの繰り返しになり、使える段階までいつまで経っても使える段階へ到達できません。
なぜ、私たちは、プログラミングを習得できないのか?
個人で使えるパソコンが登場してから、プログラミング言語が登場してから、多くの月日が流れてもプログラミングは、習得しにくい技能の1つです。様々な理由を取ってつけることができますが、独学者に限っては、以下の理由が主たる原因になっていると思います。
- 適切な学習教材がない。あるいは、探せない。
- 自分がパソコンを使用する状況で役に立たない。
- わからないときに、それを解決する手段を見つけることができない。
「プログラマー」と「プログラミングができる技術者」
プログラミングを学ぶために、いろいろな書籍や、インターネット上の情報を調べてい行くと、誰しも、妙な違和感というか、疎外感を感じた経験がると思います。
その原因の一つは、「プログラマー」と「プログラミングができる技術者」との立場の違いです。
専業プログラマーとして、プログラミングに向き合うか、自分の専門に加えてプログラミングに向き合うかという立場や目的の違いからくる疎外感です。
どんな目的であれ、どんな立場であれ、プログラミングができると、自分の能力の範囲が広がるので、自分のできる範囲で、自分のペースで学び続けることが大切です。
一番容易に学べるプログラミング言語は、Excel VBA?
いろいろな意見があると思いますが、私の考える、現時点で一番学びやすいプログラミング言語の1つは、Excel VBAです。
この考えを裏付けるように、関連書籍も、他のどのプログラミング言語よりもたくさん出版されています。
Excelは、表計算ソフトです。マス目の中に、データを格納し、そのマス目(セル)の中のデータの関係を指定し、計算を行うことができます。その操作を自動化する際に使用する仕組みをマクロと呼び、Excelでは、VBAが使われています。
Excel VBAが学びやすいのは、私は、主に、3つの要因があると考えています。
- データを変数の代わりに、セルに格納することで、データの変化を可視化できるとともに、変数の概念を理解しやすい。
- Excelを手作業で行う作業をマクロで自動化できるので、プログラミングを行う労力に対して、作業軽減というメリットが得られる。
- ユーザーインターフェイスに、Excelが利用できるため、実際にプログラミングする部分は少なくても、Excelの機能と組み合わせることで、少ない作業で、Excelの機能を拡張できる。
C#でプログラミングを学ぶメリット
Excel VBAを使えるひとが、または、プログラミング言語に全く触れたことがない状態から、新たにC#を学ぶメリット、あるいは、全くプログラミングのない状態からC#を学ぶメリットは何でしょうか?
Microsoft Officeなどのアプリケーションを駆動する目的でなければ、C#は、VBAと比較し、処理速度が早くなる場合が多く、C#の言語の特徴として、Visual Basicよりもコードの文字数が少なくなるので、C#を学ぶメリットがあります。
※VBAの代わりに、C#でマクロを記述することもできるようです。
私は、主に、3つの利点があると考えています。
- 情報が入手しやすいプログラミング言語の1つ。
- パソコンで操作可能な機器で、使用するためのライブラリが用意されていることが多い。
- グラフィカルUIの実装が比較的簡単。
計測機器などUSBケーブルでパソコンと繋いで、パソコンから操作できる機器では、C#向けのAPIのほうが、VBAよりも用意されていることが多いです。最も、VBAであれば、用意されていなくても、サポートに問い合わせれば、機器を操作するためのサンプルプログラムを提供してくれることが多いです。
個人が、自分で利用するために作成する、Windows OS上で動くプログラムを開発する場合、C#を選択することが、もっとも簡単な方法ではないかと考えています。
個人プログラマーは、職業プログラマーと学習ルートが異なる
プログラミングを独学で学び、作成したプログラムを自分で使用する個人プログラマーは、職業プログラマーとは、適した学習ルートが異なると私は考えています。
その違いは、グラフィカル・ユーザーインターフェイスの位置づけです。
職業プログラマーでは、1つのアプリケーションを手分けして作成するため、グラフィカル・ユーザーインターフェイスを作成する人は限られています。
一方、個人プログラマーでは、グラフィカル・ユーザーインターフェイスがなければ、アプリケーションが完成しないため、かなり初期の段階から、グラフィカル・ユーザーインターフェイスを作成する技能が必要です。
ほとんどの日本語で読むことができるプログラミングの学習書では、コンソール・アプリケーションをターゲットとしてプログラミングを紹介しています。そのため、コンソール・アプリケーションの開発とは別に、グラフィカル・ユーザーインターフェイスを実装する方法をどうにかして習得しなければ、個人プログラマーの場合、アプリケーションが完成しません。
C#には、複数の開発プラットフォームが存在する
C#では、動作環境やUIの実装方法などの違いに応じて、複数の開発プラットフォームが存在します。
Windows VistaからWindows 10に至る間に、特に、スマートフォンやタブレット端末の対応で、多くの開発プラットフォームが登場し、そのいくつかは、既にサポートが 終了しています。そのため、新たに、C#を習得する際は、サポートが終了した開発プラットフォームを避けることが大切です。
情報を集める際は、どのプラットフォームの情報かを意識し、自分の使っているプラットフォームの情報を集めるように注意する必要があります。
以下は、C#の開発プラットフォームの一例です。
- コンソールアプリケーション
- フォームアプリケーション
- WPFアプリケーション
- .Net Core
- Asp.Net
- Asp.Net.Core
- Xamarin
- Unity C#
- UWP
実際に習得を始める前に、サポートや開発が終了していないかどうか確認しておくことが必要です。
既存のアプリケーションの保守、改修にかかわらない限り、サポートや開発が終了しているソリューションには、興味を持たないことが大切です。
フォームアプリケーションは、今から学ぶ価値があるのか?
C#のプログラミングに関する書籍など、日本語の多くの学習資料では、グラフィカルUIには、Formアプリケーションが利用されています。
フォームアプリケーションは、ラピット・プログラミングと呼ばれるスタイルの開発環境です。Windowsで使われるそれぞれのウィンドウのデザインをコードで記述する必要があった頃、デザイナーと呼ばれるUIデザインツールでUIを作成し、そのUIとイベントを結びつけることで、アプリケーションの開発速度を向上させるソリューションです。
Formアプリケーションは、ディスプレイの解像度の選択肢が少ないときに登場したソリューションであるため、ディスプレイの大きさや解像度の変化に対応するには、それぞれのディスプレイに合わせたデザインのUIを用意しないと、一部が表示されない、文字が小さくて読みづらいなどの問題が生じる可能性が高いです。(解決手段の1つとして、UIをブラウザアプリで提供する方法がありますが、ブラウザの種類やバージョンの違いによるトラブルが発生するなど、それはそれで大変なようです)
その中身は、Win32APIのラッパーです。
現在、既に、更新は行われていません。
問題の1つは、グラフィックカードによる、グラフィックアセラレーションの対象にならないことです。もう1つの問題は、グラフィカルUIは、WPFから登場したxamlと呼ばれるxml系の言語で記述される方法が使われていることです。
WPFだけでなく、UWPやASP.Netでもこのxaml系のUIが利用されていることから、Microsoftの開発環境のグラフィカルUIの主流は、xaml系のUIに移行したと判断できます。Formアプリケーションのスタイルに戻る可能性は、低いと思われます。
そこから考えると、逃げどころがないため、Formアプリケーションは、既存のアプリケーションの保守、改修にかかわらない限り、新たに学ぶ価値が低いと思われます。 xaml系のUIを導入している他の開発プラットフォームを選択したほうが良いと思われます。
プログラムの基本は、コンソールアプリケーション
コンソールアプリケーションは、コンソールに、プログラムの結果を数字や文字列を表示します。
コンソールアプリケーションは、プログラムの本質であり、アプリケーションを構成する複数の小さなプログラムのなかの1つを表しています。
そのため、コンソールプログラムで、プログラミングを学ぶのは、正しいのですが、退屈です。さらに、作成したプログラムは、Windows OS上で、グラフィカル・ユーザーインターフェイスだけでパソコンを使用している限り、ほぼ、間違いなく実用性はありません。
そして、何か具体的な作りたいアプリケーションを思い描いていると、そこには、延々にたどり着かないような気持ちになってきます。
しかし、現時点では、コンソールプログラムで、プログラミングを学ぶ以外の道はないと考えて良いと思います。
コンソールアプリケーションを実際に活用するには、バッチファイルやシェルと呼ばれる仕組みを理解する必要があります。しかし、コンソールプログラムを使ってプログラミングを学習する書籍などの教材では、バッチファイルやシェルについての言及はありません。バッチファイルやシェルについても合わせて学ぶことが、コンソールアプリケーションのプログラミングを学ぶための興味を持続させるための秘訣です。
バッチファイルやシェルは、複数のコンソールアプリケーションをまとめて、順番に実行するための仕組みです。つまり、既存のコンソールアプリケーションを活用することで、足らない部分だけを自分でプログラミングするだけ複雑な操作を行うことができるようになります。
WPFアプリケーションで、xaml UIを理解する
WPFの登場以降、C#の開発プラットフォームのグラフィカルUIでは、xamlと呼ばれるxml表記で、UIを表現する方法が使われていることが多いです。
プログラム上で、変化しないUIは、xamlで表記し、プログラム上で変化させるUIは、C#コードで構築します。
xaml UIを使用する方法についての情報は、どこにあるか明確ではなく、一番見つけやすいのが、一番最初に登場したWPFに関する情報です。日本語の情報だけでは、不十分なため、英語の情報にも挑戦する必要があります。
基本的に、開発環境の開発チームのメンバーによって書かれた情報が系統立てられており、それ以外の情報は、ダイジェスト的な、一部のトピックの紹介の体裁になっている事が多いです。
データを格納する部分、データを処理する部分、UIを表示する部分、データの変化に応じてUIを格納する部分に明確に切り分けたプログラムを開発する方向に向かっているのは、C#の開発プラットフォームが乱立し、短期間で、サポートが終了する状況から、C#の開発プラットフォーム間での移植作業が増えたことが要因の1つと思われます。
PC上で、動作するデスクトップ・アプリケーションを作成する際の有力な選択肢です。
