Pythonプログラミング言語を使用したベイジアン統計やデジタル信号処理などのトピックを説明する本をいくつか書いています。 書籍に加えて、読者はGitHubからコードをダウンロードできます。 このコードを使用するには、Pythonのいくつかの基本を知る必要があります。 つまり、読者はこの言語のインタープリターと必要なライブラリがインストールされているコンピューターを持っている必要があり、GitHubからコードをダウンロードする方法を知っている必要があり、ダウンロードしたコードを実行する方法も知っている必要があります。
このすべてを実行しようとすると、多くの読者は困難を経験し始めます。
いくつかは私にメールします。 彼らは、特殊なソフトウェアのインストール、リポジトリのクローン作成、環境変数の設定ではなく、Python、ベイジアン統計、またはデジタル信号処理のプログラミングを学びたいという欲求不満を共有しています。
私は彼らの気持ちに同情しています。 ある意味では、彼らの失望は正当化されます。 コードのダウンロードと実行はそれほど難しくないはずです。 時々彼らはPythonを責め、時には私を責めます。 そして、これは完全にふさわしいとは思いません。
問題に対する私の理解を説明し、いくつかの解決策(または少なくとも回避策)を提案しましょう。
基本的な問題は、コンピューターの使用とそのためのプログラムの作成との間の障壁が増大していることです。
Commodore 64を入手したとき(1982年のようです)、この障壁はありませんでした。 コンピューターの電源を入れると、開発環境が起動しました。 また、何かをするためには、別のプログラムを実行するだけでも、少なくとも1行のコードを入力する必要がありました。
それ以来、3つのことがユーザーからプログラマーへの道をより困難にしました。
- コンピューターは、デフォルトの開発環境での販売を停止しました。 今では、プログラミングの方法を学びたい人は誰でも、最初に開発環境を確立する必要がありました。 そして、これは見た目よりも大きな障壁です。 多くのユーザーはまったく何もインストールせず、その方法を知らず、このために必要な権限を持っていない可能性があります。 これで、プログラムのインストールが以前よりもはるかに簡単になりましたが、インストールエラーの可能性はなくなり、ユーザーに深刻な不便をもたらす可能性があります。 プログラミングの方法を学びたい人は、まずシステムの管理を勉強するべきではありません。
- ユーザーインターフェイスは、コマンドラインからグラフィカルインターフェイスに大きく移行しました。 後者は、原則として、使いやすいですが、システムで実際に何が起こっているかについての情報は表示しません。 ユーザーがこれらすべての詳細を知る必要がない場合、このような動作について心配する必要はありません。 しかし、問題は、グラフィカルインターフェイスが、プログラマが知る必要のある情報を隠すことです。 そのため、ユーザーがプログラミングの学習を開始すると、通常は隠されているものに突然遭遇します。 プログラミングの方法を学びたいだけの人は、このためにオペレーティングシステムの構造を勉強するべきではありません。
- クラウドテクノロジーは状況を複雑にするだけです。 Webアプリケーションを使用する人々は、データの保存場所とアクセスできるアプリケーションについて非常にあいまいな考えを持っていることがよくあります。 多くのユーザー、特にモバイルデバイスでは、オペレーティングシステム、アプリケーション、Webブラウザー、およびWebアプリケーションの違いがわかりません。 データをダウンロードしたり、インターネット経由で送信したりするとき、多くの場合、このデータがどこから来てどこから来るのかを完全に理解していません。 そして、何かをインストールするときに、何がどこにインストールされているかを正確に理解していないことがよくあります。
Commodore 64で育った人にとって、プログラミングを学ぶことは非常に困難でした。 クラウドサービスに接続されたモバイルデバイスに囲まれた人々にとって、これはさらに困難です。
さて、それで何ができますか? 以下にいくつかのオプションを示します。
- 未来に戻る。 まず、デバイスの使用とプログラミングの間の障壁を打ち破るコンピューター(私のCommodore 64など)を作成できます。 Eben Uptonによると 、Raspberry Piを作成するための前提条件の1つは、ユーザーをプログラマーに変える環境を作成することでした。
- 顔を合わせて痛みに会います。 別のアプローチは、プログラミングを開始する前に(または同時に)開発環境をセットアップして使用する方法を生徒に教えることです。
- 痛みを遅らせます。 3番目のオプションでは、クラウドサービスを使用して、学生がすぐにプログラミングを開始し、自分の開発環境の準備を一時的に遅らせることができます。
私のコースの1つでは、2番目のアプローチを取ります。 学生はCプログラミング言語を学習しながらUNIXコマンドラインを使用することを学習しますが、これらの学生はプログラミングの方法を既に知っているため、インストラクターに助けを求める機会があります。
初心者、特に独立して勉強する人には、3番目のアプローチをお勧めします。 私が使用したいくつかのツールは次のとおりです。
- このようにコンピューターサイエンティストのように考える方法の適応など、ブラウザーでコードを直接実行できるインタラクティブなチュートリアル
- PythonAnywhereなどのブラウザベースの開発環境
- ユーザーが自宅でダウンロードして実行できる(もちろん、仮想マシンを起動するためのソフトウェアをインストールできるという条件で)開発環境がセットアップ済みで動作準備が整った仮想マシンのイメージ。
- クラウドのランタイムであり、ユーザーがブラウザーを介して一部の機能にアクセスできるようにするBinderなどのサービス。
一部のプロジェクトでは、これらのツールをすべて一度に使用しました。 How to Think Like a Computer Scientistのインタラクティブバージョンに加えて、 Trinketが準備および管理するThink Javaのインタラクティブバージョンもあります。
Think Pythonでは、読者が少なくとも最初の4つの章でPythonAnywhereを使用し、Pythonをローカルで使用する方法を説明することをお勧めします 。
過去にいくつかのコースで仮想マシンイメージを使用していましたが、最近、Think DSPブック用のこのJupyterラップトップの場合のように、オンラインサービスをより頻繁に使用しています。 そして、私のすべての本のリポジトリは、バインダーサービスで動作するように準備されています。
説明したアプローチはプログラミングの開始に役立ちますが、独自の制限があります。 いつの日か、学生自身がコンピューターに作業環境をインストールして構成する必要があります。 しかし、プログラミングの研究を適切なソフトウェアのインストールおよび構成方法の研究から分離すると、成功の可能性が高まります。
Nick Coghlanは4つ目のアプローチをツイートしました。これをLook into the Futureと呼びます。 初心者はクラウドベースの開発環境から始めて、そのままでいることができます。
![](https://habrastorage.org/webt/g0/kx/ch/g0kxchw_jvubrm126qxtdktlhbw.png)