プログラミングって何から勉強すればいいんだ・・・
プログラミングと一言で言っても、範囲が広すぎるから、目的が必要だね
知り合いの学生から、「プログラミングを始めたいけれど、何から始めてたらよいか?」という質問を受けました。
私自身、プログラミングは独学で、人に教えるということはあまりないのですが、10年程度システムにかかわる仕事をしてきました。その経験から、プログラミングとは何なのか?を再度自分に問い直し、整理してみました。プログラミングで重要なのが、問題発見とその解決方法を模索することだと考えました。しかし、解決するにも、基本的な知識が必要になってくるわけで、できる限りどう学習に入ると楽しく知識が身についていくのかな、と考え、学生さんにアドバイスをさせていただきました。
こんな人には役に立つかも
・長期休みを利用してプログラミングを始めようと考えている学生さん。
・プログラミングを独学で始めたいけれどとりあえず何をしてよいかわからない。
・プログラミングができるとよいって聞くけれど、いまいちどんなものなのかイメージできない。
そもそも、プログラミングって何?
プログラミングは、
「端末」への命令を作成すること
です。
プログラムはコンピュータへの命令なんですね。
端末ってなんなのさ??
端末は、プログラムを実行するコンピュータ、いろいろな形がある
端末は、プログラムを動かすことができるコンピュータの役割をするものの事です。パソコン、スマホ、タブレット、ネットで接続されたたくさんのパソコン同士のかたまりなど、プログラムを実行するのには、いろいろな形の端末が考えられます。
プログラミングは、その端末を操作するために行われます。
プログラムを実行するいろいろな形の例
パソコンのゲーム
Windowsのパソコン、やmacにインストールしてその中だけで動くアプリです。プログラミングの基本的な学習は、まずは1台のパソコンの中だけで動作するアプリを作成することが目標になると思います。
パソコン1台のみで動作するプログラムの形
スマホのアプリ
iPhoneやアンドロイド携帯で動くアプリです。ネットワークでつながったりして動くソフトもたくさんあります。その場合、世界のどこかに設置されている24時間動くコンピュータ(サーバー)に接続してたくさんのスマホからアクセスできるようにしています。
スマホ1台のみで動くプログラムの形
複数のスマホとサーバーが連携するプログラムの形
Webサイト
サーバー(特に、ウェブサイトを表示するために設置されたものをWebサーバーという)と呼ばれる24時間止まらないパソコンの中にWebサイトのデータを入れておいて、それをインターネットエクスプローラや、グーグルクロームという「ブラウザ」というソフトで見に行くとページが表示されるという仕組みで動いています。
Webサーバーとパソコンが連携して動作するプログラムの形
ブロックチェーンアプリ(Dapps)
今のインターネットは、必ずどこかにプログラムを実行させる24時間止まらないパソコン(サーバー)が動いており、それが止まると、サービス停止になってしまいます。ブロックチェーンは、たくさんのパソコンに少しづつデータを分割して入れておき、どこか止まってもどこかが動いているから大丈夫、みたいな雰囲気のネットワークです。このネットワークを使ったアプリがDappsです。仮想通貨もブロックチェーンの仕組みで動いています。また、少しづつに分割されたデータは一か所のみではなく、重複して保存されているので、改ざん(誰かがデータを書き換える)しにくくなっています。
複数のパソコン、スマホ、サーバー等(複数の端末)が連携している形
電化製品
電化製品のなかにも、プログラムを動かす頭のような機械(チップ)が入っています。これも端末のひとつといっていいですね。一般的なパソコンとは違って、接続されているものが用途によって違います。洗濯機ならコンピュータにモーターがつながっていたり、といった感じです。
最近は、ネットワークでつながってスマホで遠隔操作できたり、音声認識させたりということができるようになってきました。
特定の用途に作られたコンピュータで動く形
プログラムを実行するためには、実行する端末(ハードウェア)が必要だね。
目的によって動かす形が変わって、プログラミング言語も違うんだね。
プログラムには目的がある
プログラミングをするということは、必ず目的があります。その目的が誰かの利益になろうが、不利益になろうが目的があるはずです。
・パソコンのゲーム
人を楽しませる。娯楽を提供。
・スマホのアプリ
生活の利便性を向上させる。家計管理は煩雑なデータ整理を楽にしてくれる、等。
・Webサイト
24時間、多くの人に情報を共有することができる。検索エンジンは欲しい情報にたどり着くまでの時間を短縮してくれる。
・ブロックチェーン
改ざんできないようにデータを蓄積できる。データの欠損がなくなる。
・電化製品
生活の利便性を向上させる。冷蔵庫は夏場でも物を腐らせることなく保存できる。IHヒーターは、加熱して調理できる。
プログラミングには、作るための環境が必要
プログラミングをするためには、作るための環境を整える必要があります。
作るための環境は無料で準備できることが多いですので、気軽に始めることができます。
Pythonや、VBAといった有名なプログラムほど、簡単に開発を始められるように環境が整えられています。
特に、VBAは、パソコンにエクセルが入っていれば開発を始めることができます。
一方、ブロックチェーンや、Webサイトといった外部のパソコンも利用するようなものや、電化製品のような特定の用途向けのコンピューターのプログラムとなると、プログラムを作成するための環境づくりに苦労することがあります。
まずは自分のパソコンの中で動かせるプログラムに挑戦するといいかも
方向性:プログラミングの学習には、2つのアプローチがある
①教養としてのプログラミング
最近は、テレビなどでもよく「プログラミング」という言葉を聞きます。プログラミング教室というものも増えてきたような気がします。学校で学習する内容は、教科書があって、公式があり、世の中に一般化されている知識を勉強するような感覚でプログラミングを学ぶという雰囲気があるような感じがします。
教養としてのプログラミングについて考えてみました
教養としてのプログラミングというものがあるとしたら、一般的に広く利用できそうな言語を学ぶことが良いのかなと考えました。
私が一般的に広く利用できそうだと考えているの次の2つです。
・VBA
VBAは、MicrosoftのExcelを主とするofficeのマクロを作成したり、いろいろな事務処理を自動化することができるようになります。
・Python
データサイエンス(たくさんのデータを分析したり)や、はやりの機械学習など、いろいろなことができるので、やって損はないと思います。また、Pythonは、windows、mac、linuxなどいろいろなパソコンで使えます。
また、春休みや夏休みなど、学習の時間が取れる学生さんなどには、基本情報処理技術者の資格を受験してみることをお勧めします。現代の情報処理技術はどのようなものがあるのか、や、その仕組み等を少し掘り下げて勉強することができますので。ただ、資格の勉強をしてもプログラミングができるようになるわけではない点に注意です^^;
②ツールとしてのプログラミング
「このようなことがしたい!」と目的意識がある場合、ある程度どのプログラミング言語でどの技術を組み合わせて使うか、を具体的に勉強することになります。実際に、作りたいものがある場合が一番学習としては良いと思います。
モノづくりで活かせるツールとしてのプログラミングを学ぶことになります。
私自身、プログラミングは、目的を達成するための道具の一つなので、作るべき目的がないと身につかないと考えています。
自分で作った音楽を使ったシューティングゲーム作りたいな
それ、楽しそうだね、やってみようよ~
勉強する目的を見つけよう
私がプログラミングを始めた動機
私は、学生の頃、ゲーム音楽が作りたかったので、ゲーム音楽を作れる場所を探していました。
絵(ドット絵)ができる友達がいたので、一緒にゲームを作ってみない?と声をかけ、プログラムはいなかったので、自分が担当することになり、windowsのC#でシューティングアプリを作成する流れになりました。
なぜwindowsでC#を選択したかというと、XBoxで実行させることができたのも一つの決め手でした。
結局、紆余曲折し、作曲というよりもプログラムの勉強を中心に行い、1年で1ステージ完成させるのに精いっぱいでした。しかし、当時はやりの弾幕シューティングで、かなりクオリティの高いものができたのかなと、自信になりました。
目的を探そう
できるだけ楽しめそうな目的が良いと思います。完全に私の思い付きですが、いくつかの目的を書いておきます。
・C#でゲームプログラミングに挑戦してみる。
・htmlを使ってWebサイト制作に挑戦。
・VBAで今の仕事の一部を自動化してみる。
・MQL言語でシステムトレードに挑戦してみる。
・C言語でモーターとマイコンで扇風機を作ってみる。電子工作も体験してみる。
プログラミング学習のコツ
一番最小の機能を作って動かす
アプリを作るとしても、いろいろな機能が必要になります。
まずは、最小の機能に絞って動くことを確認してみるのが良いです。
例えば、作りたいアプリに文字入力をする必要がある場合、
・入力した文字を表示する
だけのアプリを作成してみます。
最小限の機能を備えたものを作り、それらを組み合わせるというアプローチが混乱を防いでくれます。
挫折してもよい
3回くらい挫折すると何となくわかってくると思います 笑
私も、C#でゲームプログラムを作成し始めたときは、本を買ってそれをまねして、という流れで学習していったのですが、3回くらいは挫折して1から作り直しています^^;
挫折してもやっぱやりたいな、と思えれば、自分にとって、プログラミングはやるべきことなのか、と思えます。
頭に入れておくとよい共通な処理の流れ
私が広く浅くいろいろなプログラミング言語を触ってきた中で、この考え方をもって作っているよ、という基本的な知識を記載します。
①順次
プログラムは常に上から下に処理が実行されます。
プログラミングでは、機能ごとに記載するファイルを分ける場合が多いです。分かれている場合も上から下に流れますので、常にどのように実行されるかの流れを追いながらプログラムを作成していきます。
②繰り返し
いろいろな言語に共通なfor文というものがあり、指定した回数繰り返すというものです。もちろんfor文以外にも繰り返す書き方はあるのですが、プログラムは同じことを何回もさせるときは、繰り返すことがポイントです。
③条件
「もしも~の場合は~をする」みたいな処理です。条件分岐ができると、かなりいろいろなプログラムを作ることができます。
この①~③を意識してプログラムを組み立てると、いろいろな処理ができるようになります。
人生ゲームみたいに一本道を歩いて行って時々どこかに飛ばされたり、戻されたりする感じに似ているね。
情報の収集
エラーはまずそのままGoogleで検索してみる
プログラミングでつまずくのが、実行しようとしたときに出るエラーが多いと思います。結局エラーの見方がわからずに挫折してしまう・・・という場合も結構あると思います。
初心の頃のほとんどが、入力ミスによるものですが、最近の開発環境は、エラーをリアルタイムで表示してくれますので、しっかりエラーに向き合って動くプログラムを作ることを目標にしましょう。
表示されるエラーも最初は意味が分からないものばかりだと思いますが、それを検索してどのようなエラーで、どうすれば解消するのかを調べましょう。
自分の作りたいものに近いことをしている情報を見つける技術
「自分の作りたいものに近いことをしている情報」が見つかれば、その情報を実行して、自分が欲しいものに近づけていくトライアンドエラーの始まりです。
作りたいもののほとんどは、すでにあるものを若干変化させたものが多いと思います。
Udemyなどの動画サイト
Udemyなどの教育系動画サイトでは、1000円とかで結構なボリュームの良質な入門動画を見ることができます。1000円なのに6時間の動画とか、コスパ良すぎます・・・最近は本の代わりに何げなく購入してしまうことがあります。
結局見切れていないものもあります^^;
プログラミングの始め方のまとめ
・とにかく小さくてもプログラミングの目的を作る
・どんな形のコンピュータで動かすかを決める
→何で作ることができるかが決まります。(開発環境や開発方法)
・情報収集をして小さなプログラムを作成してみる
機械学習で最近はやりのAIみたいなもの作りたいな。