プログラミング はじめの一歩、これからプログラミングを始めたい方へ
これからプログラミングを始めたいという方向け「プログラミングはじめの一歩」というテーマでプログラミング講座をやっていきます。 プログラミングとはなにか?どのプログラミング言語を選ぶか、各言語の特徴など、これからプログラミングを始める前に知っておきたいことの、基礎固めをしていきます。
対象読者
- プログラミングという名前は聞いたことがあるが具体的には知らない方
- これからプログラミングを始めたい方
- プログラミングの勉強を何したらいいかわからない方
- プログラミング初心者の方
目次
プログラミング はじめの一歩
Youtubeのライブ配信でも講座を行いました、動画で見たい方はこちらも見てみてください
1.プログラミングの目的
最近「プログラミングをやってみたい」という言葉を周りで聞くことが増えたとおもいます。
その背景には小学校の教育に「プログラミング教育」が必修化されニュースで話題になったり、 AIの話題なども近年は多いですが、そこでもプログラミングが関わってくるなど、注目されているということが挙げられるでしょう。
ただこの「プログラミング」というキーワードだけが一人歩きをしていてしているように感じます。
「プログラミングをやってみたい」と思っている人は本当にプログラミングをすることが目的なのでしょうか?
プログラミングの目的について少し考えてみましょう。
なぜプログラミングをするのか
プログラミングをする目的はソフトウェア(プログラム)によって問題解決・課題解決をするためです。
つまり、プログラミングをすること自体は目的ではなく、目的を達成するための手段です。
例えばチームで情報共有がうまくいっていないという課題があって、その課題の解決のためにWebで掲示板を作ろう!っと思ったとします。 それを実現するために必要な道具の1つがプログラミングなわけです。
料理に例えてみると、プログラミングは包丁や鍋などの道具の一つです。 「プログラミングをやりたい」といっているのは「包丁を振りかざしたい!」といっているようなものなんですよね。
「包丁を振りかざしたいから料理をはじめました!」というひとはあまりいないと思います。
私ももともとは「プログラミングをやりたい」という理由ではなく「ゲームを作りたい」という理由でプログラミングをはじめました。
プログラミングでできること
ではプログラミングでできることは何があるでしょうか?
いくつか例を上げておきます。
- Webアプリ、Webサービス作成
- 人工知能・AI作成
- スマホアプリ
- デスクトップアプリ(PC上で動くソフト、例:ペイントソフト、Excelなど)
- ゲーム作成
- 電子期の制御、IoT
Webアプリ、Webサービス
Google,Facebook, Twitter, Youtube などブラウザから利用しているかとも多いかと思います。 そういったブラウザ上で提供されているサービスはWebアプリケーション、Webサービスと呼ばれます。
人工知能・AI
身近な例でいえばSiriなどもそうですし、自動運転や、画像認識など色々な例があると思います。
私は将棋をやっていたりするのですが、将棋の指しての評価値などもAIによって算出されたりしていますね。
スマホアプリ
スマートフォン上のアプリのことです。 iPhoneで動くものをiOSアプリ、Android上で動くものをAndroidアプリなどと呼ぶこともあります。
デスクトップアプリ
デスクトップ環境上で動くアプリケーションのことです。 パソコンにインストールが必要なアプリケーションを思い浮かべるとわかりやすいかと思います。
ゲーム
PCで動くゲーム、PS4,PS5,Switchなどで動くコンシューマゲームなどもプログラミングによって作られています。
スマホゲームなどのソーシャルゲームとコンシューマーゲームでは技術的な違いが大きいので、この記事ではゲームと言ったらコンシューマーゲームを指しているものと思ってください。
電子機器の制御、IoT
洗濯機、電子レンジなど家電などにもプログラムは組み込まれています。
洗濯機であれば、回転数を制御したり、回す時間の制御だったりする必要がありますよね。
そういった電子機器の制御に使われていたりします。
「組み込み系」などといわれる分野です。
プログラミング言語
プログラミングをするには「プログラミング言語」を学ぶ必要があります。
「Java」や「C」、「Python」などのプログラミング言語の名前を聞いたこともある方もいるかもしれません。
実はこのプログラミング言語は多くの種類があります。
色々な言語がありそれぞれ特徴があるので、用途に応じて適切に使い分けることが重要です。
そもそもプログラミングって?
そもそもプログラミングとは何を指すのでしょうか?
プログラミングとはコンピュータに処理させるプログラムを作成することです。
そして、プログラムとは、コンピュータに対する処理(命令)を記述したものです。
例えば、下の図のように、スタートのマス目からゴールに移動するにはどう命令したらよいか考えてみましょう。
次のように動けばうまく行きそうだなというのはわかるかと思います。
- 上に3マス進む
- 右に1マス進む
この「上に3マス進む」、「右に1マス進む」というのが命令になります。
この2行がスタートからゴールに行くためのプログラムになります。
プログラムについてなんとなく理解できたと思いますが、 実はこの日本語で書かれた2行をコンピュータがそのまま読み込んで理解できるかというと理解できません。
どうやって命令するの?
コンピューターは日本語をそのまま理解することはできません。
コンピュータが理解できる言葉は「機械語」と呼ばれるものになります。
これは01の羅列(2進数)で表現されるため人間が理解するのは非常に難しいものです。
そこで登場するのがプログラミング言語になります。
プログラミング言語の実行方法
プログラミング言語を使うと人間が理解できる言葉でコンピュータに命令を書くことができます。
しかし、プログラミング言語を使って書いたとしても、最終的には機械語似直さないとコンピュータは理解できません。
そこで、プログラミング言語を機械語に変換してくれるコンパイラ、もしくはインタプリタというものに通して実行可能となります。 コンパイラや、インタプリタは翻訳家や通訳と思うとわかりやすいかもしれません。
プログラミング言語と書きましたが、実は多くの種類があります。 冒頭に述べたJava, C, Pythonなどの他にも数多くの言語があり、下記のような特性に差異があります。
- 性能
- わかりやすさ(学習コスト)
- 用途
各分野で使われる主要な言語
主要なものを図にまとめました。
- スマホアプリ
- Swift
- Kotlin
- Java
- 組み込み系
- C
- C++
- データサイエンス・AI
- Python
- R
- デスクトップアプリ
- C#
- C
- C++
- Swift
- Java
- Webアプリケーション
- フロントエンド
- JavaScript
- バックエンド
- PHP
- Ruby
- Python
- JavaScript
- Java
- Kotlin
- Go
- フロントエンド
主要なプログラミング言語の特徴
言語 | 性能 | 学習コスト | 利用場所 | 補足 |
---|---|---|---|---|
C/C++ | ◎ | △ | 組込み、デスクトップアプリ、ゲームなど 性能が求められる場所で利用される | |
C# | ○ | ○ | デスクトップアプリ、ゲーム(Unityなどで採用される)など | |
Java | ○ | ○ | Androidアプリ、バックエンド(サーバサイド) 大規模開発する場合に使われやすい | |
Kotlin | ○ | ○ | Androidアプリ、バックエンド(サーバサイド) | |
Swift | ○ | ○ | iOSアプリ、Macアプリ | |
JavaScript | △ | ◎ | Webフロント、Webバックエンド フロントをやる場合はほぼ必須 | |
Python | △ | ◎ | 人工知能・AI、データサイエンス、Webバックエンド | |
R | △ | ○ | データサイエンス データサイエンス分野に特化 | |
PHP | △ | ◎ | Webバックエンド | |
Ruby | △ | ◎ | Webバックエンド | |
Go | ○ | ○ | バックエンド |
複数の言語を覚えるのは大変?
上記に挙げたように数多くのプログラミング言語があります。
そして用途によって使い分けるため複数の言語を使えることは割と普通なことです。
「言語」と聞くと、英語や中国語など覚えるのに相当時間がかかるので大変かと思われるかもしれませんが、 プログラミング言語に関しては、どの言語も文法が似ていることが多いため、1つ覚えれば他の言語で応用できることが多いです。
言語の違いというよりも、方言の違いくらいなイメージです。
なので「私はPythonしかできないから。。」といってなんでもPythonでやろうとしたりする人もいるかもしれませんが、言語自体の違いをそこまで恐れる必要はないと私は思っています。
むしろ、Pythonでスマホアプリを作ろうとしたりすれば、茨の道になるのではないかと思います。
スマホアプリを作りたいのであればそれに適した言語を使うべきだと私は考えます。
料理に例えると、刺身包丁でジビエのイノシシや鹿の肉をさばいたりせずに、ちゃんとそれ用の包丁をつかいますよね。
というわけで、プログラミング言語もしっかり使い分けてそれぞれの分野で目的に応じてそれぞれの使い方を学んでいくのが良いと思います。
プログラミングを始めてみる
プログラミング言語を目的に応じて使い分けると上述しましたが、実際にこれから初めてプログラミングを始める方が、いきなり高性能なゲームを作りたいと言ってC++で大規模ゲーム開発をしようとしてもかなり無理があります。
どのように始めていけばいいか考えていきましょう。
何から作ればよいか?
作りたいものの機能が大きかったり、複雑なものは当然プログラミングでコードを書く量や難易度が増えます。
規模感を軽く把握してもらうために、コード行数でここではいくつかのプログラム例を提示します。
もちろん行数は使う言語などによっても結構変わるので、ざっくりと書いています。
プログラム | 行数 |
---|---|
スクレイピングのスクリプト | 数十行〜数百行 |
簡単なWebアプリケーション(掲示板等) | 数十行〜数百行 |
Webアプリケーション | 数百行〜数千行 |
将棋のプログラム | 数千行〜数万行 |
いきなり複雑なプログラムを書こうとしても、完成のまでの道のりが遠く初心者の方はいきなりは目的のものを作れないでしょう。
また料理に例えると、初めて料理をする人がいきなりフランス料理とか難しいのを作ることはなく、まずは卵焼きとか簡単なものから作っていきますよね。
おすすめのプログラミングの始め方
初めてプログラミングをやる方に私がおすすめしているのはJavaScriptによる簡単なWebアプリケーションの作成です。
おすすめする理由として下記の3つがあります
- 動くものが目に見える
- Webは普段使っていて馴染みがある
- 環境構築が簡単
動くものが目に見える
Webアプリケーションであればブラウザを使ってインタラクティブなアプリが作れますし,HTML、CSSを使うことで簡単にきれいなレイアウトのアプリも作れるのでモチベーションも保ちやすいと思います。
C言語などで勉強し始めるとGUI(Graphical User Interface)のアプリケーションは作るのが難しく、はじめはコンソールアプリケーションという文字だけでやり取りするようなプログラムで勉強することになります。
イメージとしてはハッカーが黒い画面に文字打ってなんかやってたりするイメージです。 文字のやり取りのみで動きがないので少し退屈に感じてしまうことがよくあります。
そのため、Webアプリケーションの開発をおすすめします。
Webは普段使っていて馴染みがある
WebはYoutube,Twitter,SNSなどで使っていてなじみがありとっつきやすいです。
簡単なプリケーションを作って見るにしても、作るイメージがわかりやすいと思います。
また、なれてきてこんなこともやってみたなどのイメージも湧きやすいのでおすすめです。
環境構築が簡単
プログラミングを始める前にプログラミング環境を作る必要があります。
使う言語によっては、プログラミングをするために色々なソフトを入れたりする必要があり環境構築で挫折してしまうこともあるのですが、 JavaScriptであれば、Edge、Chromeなどのブラウザが入っていれば、すぐに使うことができます。
JavaScriptでプログラミングをやってみよう
Chromeを開いて右クリック「検証」をクリック。
文字を出力する
Consoleというタブをクリックしてそこに下記を打ち込んでみてください。 Enterでそのまま実行されます。
console.log("Hello world!")
HelloWorldと出力されたと思います。
単純ですが、これも1つのプログラムです。
console.log
というのは、指定した文字列を出力する命令をするものなんですね。
ためしに、console.log("Hello")
カッコ内を書き換えてみると解ると思います。
ブラウザの機能を使ってみる
次は簡単にブラウザの機能を使ってみましょう。
同じように下記を打ち込んで実行してみてください。
alert("こんにちは")
実行するとブラウザのダイアログが表示されたと思います。
このように簡単にブラウザの機能も使うことができ、動きのあるアプリケーションが作れるので色々触ってみると面白いと思います。
さらなる一歩
簡単にJavaScriptを触ってみましたが、次からもう少しアプリケーションっぽいものを作って学んでいきましょう。
この後の勉強する道筋を下記に示します
- 簡単なWebアプリケーションを作ってプログラミングの基礎(順次、分岐、反復、変数、関数、クラス)
- サイコロ
- おみくじ
- クイズ
ここまでやって基礎を学んでからは、自分がやりたい領域で次は学んでいきましょう
- 自分のやりたい領域で学ぶ
- Webアプリケーション
- ゲーム(Unity)
- 効率化スクリプト作成(スクレイピングなどの自動化プログラム)
まとめ
- プログラミングは目的を達成するための道具
- プログラミング言語にはそれぞれ特徴がある
- プログラミング言語を目的に合わせて選ぶのが大事
- はじめは簡単なWebアプリケーションで学んでいこう!