Milkのメモ帳

日々の思いつきを忘れないようにのメモ用です。

Milkのメモ帳

【プログラムとは?】プログラムを書くには何から始めたらいいの?


f:id:maxminkun:20161002164706j:plain

こんばんは。Milkです。

ここ数日、自分のマシンの環境設定をせっせと行っておりました。

それは何故か。この記事を書くため!!

日常の中で、またブログを通して、「プログラムを書ける!」とか「アプリが作れる!」と言うことが、とっても凄いことのように一般の方は感じるようです。

実際の所、その道のエキスパートのソースコードは、私みたいなお馬鹿が読んでもさっぱり意味が分かりません。

確かに、そのレベルになると魔法。でも、ある程度までは誰でもプログラムは書けるようになります!

だから、思ったんです。一緒に、魔法を読み解いていくと面白いんじゃないかな?って。

興味はあるんだけど、何から手を付けたら良いか分からない。あるいは、その世界(IT)の知識だけでも聞いてみたい!って人は多いのではないかと・・・

初心者向けに書きますから、上級者の方からはツッコミがあるかも知れませんが、その所はちょっと大目に見てね。

さぁ!一緒に、魔法の世界に行ってみましょう!



その前にここ数日の反応

さて、この数日は、私のマシンの環境セットアップの状況をメモとして記事に残していました。

いきなりの超真面目な技術系の記事の連投に困惑したのか、フォロワーさんからは面白い反応がww

https://twitter.com/skiyuic/status/782125566975627268

すみません。いきなりに超真面目モードでガリガリ書きまくってたら、周りに大混乱を引き起こしましたww

ふひひ。サーセン!

本当は、大したことしてないんだけど、「尊敬する」なんて言われちゃうと照れちゃう・・・(*´ω`*) はずかちぃ・・・

多分、フォロワーさんは、こんな記事を待ってたんだと思う(笑)

www.milkmemo.com

プログラムってそもそも何か?

では、本題に入りましょうか。

「プログラムって何?」

うーん。これは難しい話になりますね。プログラムとは命令順序を書きだしたリストだと想像して下さい。コンピュータは、そのリストを参照しながら処理を行います。

プログラミングする、あるいはコーディングするとは、その命令順序を書き出す作業のことを指します。

この命令順序を書き出す文法として、プログラム言語というものがあるのです。まさしく、世の中の言語と同じように、多種多様なプログラム言語があります。

そして、言語がその国や地域に適して発展してきたように、プログラム言語も用途に合わせて発展を続けて来たのです。文法的に変化があって、いわゆる方言というのも存在するんですよ?(笑)

プログラム言語

プログラム言語には、様々なものがあります。

メジャーなものでいけば、C、C++、C#、Java、Ruby、Python、Basic、VB(Visual Basic)、JavaScript、Swift、bash、Korn shell、アセンブリ・・・

挙げていくときりがありません。

一般的にプログラム言語とは、高級言語と呼ばれています。

どうして高級なの?

それは、人間が理解しやすいかどうかによって分類しています。

機械語&低級言語

突き詰めていくと、コンピュータは0と1の羅列しか理解が出来ません。もう少し硬い言葉で言うと、パルス信号しか処理が出来ないのです。

f:id:maxminkun:20171012102605g:plain
参照:パルス信号とは? | パルス計測 | 計測器ラボ | キーエンス

信号が立ち上がっている部分を1、下がっている部分を0として表します。すると、「010000100111111000・・・」と言った0と1の羅列で信号を表すことになるのです。

因みに、0と1で表す方法を2進数と言います。本当は、この0と1の羅列の状態を書いていかないと、コンピュータは理解できません。

でもそんなこと普通は出来ないでしょ? もう少し、理解しやすいように16進数と言う方法で、この0と1の羅列を置き換える手段もあります。

例えば、5500という数を2進数で表すと、「1010101111100」、これを16進数で表すと「157C」

少し短くなったでしょ?(笑)

仮の話ですが、この5500と言うパルス信号が「足し算」の意味だとしましょう。そうすると、計算をする際には、この「157C」って暗号みたいなもので書いてあげないといけない。あるいは、直接的にコンピュータに分からせるためには「1010101111100」と書かないといけません。

最終的にはこういった状態のデータにしなければ、コンピュータは理解出来ませんので、この0と1の形式になったデータをバイナリデータと呼んでいます。そして、機械が解釈できる言語なので、これを機械語と言っているのです。

この機械語に近く、もう少し人間に分かりやすい言語を低級言語と呼びます。アセンブリと言った言語はこの部類です。人間が視覚的に分かる命令(例えば、足し算はaddという命令で書ける)で書けますが、まだまだ人間がぱっとは理解出来ません。

アセンブリ言語 - Wikipedia
f:id:maxminkun:20161002184609p:plain

CPUの記憶部分(レジスタ)と言った場所を制御することを意識して、本当にちまちまと書く必要があるのです。

皆さんが想像する、プログラマが書くプログラムは、これとは違います。

高級言語

これらと比べ、高級言語というのは人間が理解しやすいように書く!ということが大前提です。

2進数だ、16進数だ、アセンブリだどーのこーのと、CPUの仕組みまで考えて書くことは効率が悪すぎます。と言うよりも、誰もが書けるわけではないし、書き間違った場合にどこが間違ったのかが全然分かりません。

なので、数式と英語で書けるようにしよう!ざっくり言うとそういうことです。

歴史的に古いのは、C、Basic、と言った言語たちです。これらがどんどん進化して、C++、C#、Java、Swift等が出てきました。

C言語入門 - 入力した2つの整数を足し算・引き算 - Webkaru

英語や数式が多くなったでしょ? 0と1で書かれるのより、よっぽどマシです。

例えば、printfというのは、「コンソール画面(コマンドプロンプトなど)に文字を表示してね」という意味です。

しかしこのままではコンピュータは意味が分かりません。0と1じゃないから・・・

ですから、これらの人間に分かるように書いたプログラムを、コンピュータが分かる機械語に変換する必要があります。

その変換ソフトのことを、コンパイラーと言います。

大まかな流れはこうです。

  1. 高級言語でプログラムを記述する
  2. コンパイラーにプログラムを機械語に翻訳させる(バイナリデータへ変換させる)
  3. コンピュータは機械語(バイナリデータ)を読み、処理を実行する

因みに、このコンパイラーに変換させる作業のことを、コンパイル、メイク、ビルドと言ったりします。

本来はそれぞれ微妙に意味が違ったのですが、今はさほど差を意識して使い分けされていません。

例えば、この業界のジョークとして、相手の言ってる意味がわからない時は、「ごめん。お前の話、全然コンパイル出来ねぇ」と言ったりします(笑)

開発環境

細かく見ていくと、各言語によって少々、開発する環境が異なります。

マークアップ言語&Script系言語

例えば、ブロガーさんでしたら、HTMLやCSSと言った言語を知っていることでしょう。

これらは、プログラム言語とはちょっと違って、マークアップ言語に分類され、厳密にはプログラム言語ではありません。データ定義ファイルと言うものです。簡単に説明しますが、タグと呼ばれるもので囲み、そのタグがどのような意味であるか、又はどのような動作をさせる必要があるのかというものをブラウザが解釈します。

ただしJavaScriptと言った言語や、装飾するための定義ファイルであるCSSは、最終的にはこのHTMLに埋め込まれた状態になり、これをブラウザが解釈して表示しているのです。

これはOSが解釈するタイプの言語ではないので、コンパイルが不要な珍しい言語です。ただし、ブラウザがタグの解釈を行いますから、各ブラウザを提供する会社によって、動きや見栄えが微妙に異なってくるのです。

また、RubyやPython、はたまたエクセルのマクロであるVBAと言った言語は、Script系言語と呼ばれます。

これは、最終的にはコンパイルが必要なのですが、実行時にコンパイルしながら動作するタイプの言語です。

と言うことは、これらの言語で開発するためには、プログラムを書く機能が最低限そろっていればいいということになります。コンパイルは実行時にコンピュータがやってくれますから。

このような、テキストを書くことに特化したソフトのことをエディタと呼びます。

エディタ

エディタには様々な種類があって、そして好みもバラバラです。

中には、宗教戦争に発展するほどの犬猿の仲の派閥さえあります(;´Д`)

代表的なものを取り上げてみましょう。また以下に取り上げるエディタは無料ですから、皆さんも利用可能です。


Vim

f:id:maxminkun:20161002195123j:plain

特殊なキーバインドが特徴的なエディタです。Linuxにはデフォルトで入っています。昔から存在し、熱烈な支持者が多いエディタです。


Emacs

f:id:maxminkun:20161002195342j:plain

こちらも特殊なキーバインドが特徴的なエディタです。主にLinuxで使用されています。Vim信者とEmacs信者で戦争がいつも勃発します。因みに、拡張機能によって様々なことが可能になります。例えば、これ一本でメールが書けるようになっちゃうとかしちゃいます・・・


メモ帳

f:id:maxminkun:20161002195654j:plain

Windowsに標準に付いているエディタです。これも立派なエディタなんですよ? これでコツコツとプログラムを書く猛者もいます。


サクラエディタ

f:id:maxminkun:20161002195926j:plain

Windowsで動作する、国産フリーソフトウェアのエディタです。Grep(ファイル検索)や置換機能など、本当に多機能なエディタです。愛用者は多く、私も仕事で、よくサブとして使っていました。また、ファイルの拡張子を解釈して色分けをしてくれたりします。


Atom

f:id:maxminkun:20161002200345j:plain

最近、Web系の人達に人気が出ているエディタです。例えば、HTMLと言ったものだと即時にプレビューを表示すると言った機能があります。また、拡張機能も豊富でカスタマイズが出来るのも人気です。

www.milkmemo.com


Visual Studio Code

f:id:maxminkun:20161002204815j:plain

これは、Microsoftがクロスプラットフォーム戦略の一環として開発したエディタです。Atomのように、Mac、Windows、LinuxのどのOSでも動作します。また、各プログラム言語の拡張プラグインを入れることで、カスタマイズが可能です。この点でもAtomに近いですね。動作も軽く、私としてはデフォルトのエディタとして使用しています。


どうでしょうか。エディタというのは、簡単に言うと「メモ帳」の機能拡張ソフトです。「プログラムは書かないよ〜」と言う皆さんにとっても、日常の中で使ってみて損はないソフトだと思います。きっと、メモ書きやファイルのデータの修正でも、大変役立つことでしょう。

事前にコンパイルが必要な言語

さて、今度は事前にコンパイルが必要な言語についてです。

例えば、C、Basic、C++、C#、Javaなどが該当します。

一つ補足しますと、先ほどのエディタで書いたものを、コンパイラーを使って変換すれば良いので、

  1. エディタでプログラムを書く
  2. コンパイラーに書いたプログラムを変換させる

これらの順序で操作して開発する方もいます。

と言うよりも、元々はそうでした。ですから、VimやEmacsと言ったエディタが昔から存在し、今現在も人気があるのです。

しかしながら、このコンパイルが必要な言語を開発するときに、エディタとコンパイラーを別々で制御することが少々面倒臭くなってきたのです。また、画面を作る(GUI)と言う点も大事になってきました。

そうすると、「エディタ+コンパイラー」を合体させた、
IDE(Integrated Development Environment):統合開発環境
と言うものが登場したのです。

IDE(統合開発環境)

では、比較的メジャーな統合開発環境を見てみましょう。基本的にIDEは、その場でプログラムをコンパイルして、ソフトの実行も行えるようになっています。つまり、そのままボタン一つで動作させて、挙動を確認できるのです。

また、以下に紹介するIDEは、無料ですから皆さんも利用可能です。


Visual Studio

f:id:maxminkun:20161002225317j:plain

先ほどの、Visual Studio Code とコンパイラーが合体したものと考えて下さい。(厳密に時代の流れとしては、Visual Studio からコンパイラーを差し引いたものが Visual Studio Code になります。)
主に開発出来る言語は、VB、C#(他の言語も、もちろんカスタマイズすれば開発可能)などです。私がメインで使っているIDEになります。

f:id:maxminkun:20161002225437j:plain

画面もその場で見ながら作りこみが可能です。主にMicrosoftのソフトウェアを開発する際に利用します。インストール可能なOSは、Windowsです。


Eclipse

f:id:maxminkun:20161002211358j:plain

主に、Javaの開発で利用されることが多いIDEです。Javaはクロスプラットフォーム(Javaをインストール出来れば、どのOSでも動作可能)のソフトウェアを開発出来ますから、利用される機会は多い言語になります。デスクトップ向けのソフトウェアの開発であったり、Webアプリケーションの場合にも、Javaの技術が利用されることがありますから、このIDEが使われることは多いです。

f:id:maxminkun:20161002212047j:plain

プラグインを入れる必要がありますが、画面の作りこみも可能です。余談ですが、もともとはIBMが開発を行っていたIDEでした。しかし、これをフリーのIDEとして公開し、今では無料で利用できるようになりました。現在も日々、有志によって改良が続けられているIDEです。

www.milkmemo.com


Android Studio

f:id:maxminkun:20161002222252j:plain

Googleが提供している、Androidアプリを開発するためのIDEです。2〜3年前にリリースされました。Androidアプリも、基本的にはJavaで書かれているため、Android Studio が提供される前までは、Eclipseの機能を拡張してアプリ開発をしていました。ここ数年は、こちらのAndroid Studio で開発することが推奨されています。

f:id:maxminkun:20161002222308j:plain

もちろん画面をつくり込むことは可能で、Nexusと言ったAndroid端末のエミュレートも行えるようになっています。

www.milkmemo.com


最後に

いかがだったでしょうか。今回は、ソフトウェア開発の環境にスポットを当てながら、どのようにソフトウェア開発がなされているかを記事にしてみました。

読者の方の中には、「プログラムには興味があるんだけど、何したらいいか分かんない!」って言う声もありました。

今後は、そういった方向けに、初心者講座のような「簡単お試しソフトウェア開発講座」のシリーズも考えています。

需要があればだけど・・・

皆さんにとっての”魔法”が、より身近なものになることを願っています!(*´ω`*)

では、今回はここまで。

ふぅ〜。疲れた・・・(;・∀・)

それでは、adios!!

www.milkmemo.com