この記事ではプログラミング初心者やプログラミングに関心を寄せた方を対象に、プログラミングとは何か・学ぶ意味は何か・学習したスキルは社会人として生活していく上でどのように役立つのか・初心者向きの学習方法についてご紹介します。
プログラミングとは何か
2020年度からは小学校でもプログラミング教育が必修科目になっています。
なぜ、今になってプログラミングという言葉が改めて注目を集めているのでしょうか?
プログラミングとは
ワクチン予約やオンライン学習、オンラインショッピングなどのシステムが持つ機能はコンピュータ(パソコン、スマホ、サーバーなど)で走行する専用のアプリケーションソフトがもたらしたものです。これらのアプリケーションソフトを作る作業をプログラミングといいます。
ワクチン予約システムでは、利用者がパソコンやスマホの予約画面にデータを入力をして送信すると、暫くして予約画面には予約完了や予約失敗が表示されます。
この際、パソコンやスマホは入力データに誤りのないことをチェックし、送信します。センターのサーバーではデータベースの台帳データと矛盾しないことや接種場所の空き状況などを確認し、空きがあれば予約受付して予約完了/空きがなければ予約失敗を返信します。この返信を受けて手元のパソコンやスマホの予約画面に予約完了/予約失敗が表示されます。
プログラミングでは、このような一連の動きをコンピュータにさせるための手続きを記述します。記述した一連の手続きをソースコードと呼びます。プログラミングでは、さらにソースコードをコンピュータに読み込ませて実行させてテストします。この結果、所定の処理結果が得られればプログラミングは完了します。
プログラミング言語とはプログラミングに使う言語で、プログラマーがコンピュータに一連の動きをさせる手続きを記述するためのものです。そもそも「コンピュータに一連の手続きをさせる」とはどんなことを指すのでしょうか?
プログラミング言語とは
プログラミング言語とはプログラミングに使う言語で、プログラマーがコンピュータに一連の動きをさせる手続きを記述するためのものです。そもそも「コンピュータに一連の手続きをさせる」とはどんなことを指すのでしょうか?
コンピュータはプロセッサやメモリ、ハードディスク、LANアダプターなどのハードウェアと、それらハードウェアや通信を制御する基本ソフト(WindowsやLinux、Android、MacなどのOS)を組み合わせたものです。
プロセッサの性能やメモリー容量、ハードディスクなどでコンピュータの性能は異なります。センターのサーバーには高性能なハードウェアやデータベース向きOSが使われ、一般ユーザーには安価なハードウェアやWindowsなどのOSが使われます。
コンピュータのハードウェアはOSで覆われ、OSを介してのみ利用者と接しています。このため、利用者はコンピュータの物理的な動作を気にせずに所望の処理をさせることができるのです。
また、OSにはアプリケーションプログラムを動作させる機能が備わっています。この機能により、コンピュータがプログラミング言語で書かれたソースコードをバイナリコードに翻訳し、その言語で書かれた一連の手続きを実行することができるようになっています。
このようにプログラミング言語は、コンピュータがバイナリコードに翻訳できて、人間にも理解し易い特殊な言葉になっています。例えば、ソースコードのc=a+bは「プロセッサを動作させて、変数aに対応したメモリの内容と変数bに対応したメモリの内容を加算して、その結果を変数cに対応したメモリに格納さしない」という命令ですが、これをバイナリコードに変換してコンピュータに実行させます。
小学校の算数では=(イコール)は「等号」で、「左辺と右辺の値が等しい」を意味すると習いました。プログラミングでは、=は「左辺の変数の値を右辺の計算結果にしなさい。または、右辺の計算結果で左辺の変数の中身を書き換えなさい。」という意味です。
このように、プログラミング言語は、日常私たちが使っている言葉のイメージに近いですが、微妙な違いがあることに注意しましょう。
また、ハードディスクの利用はノートに書いたり、書いてある内容を読んだりすることに対応します。複数あるノートの所定のページを読み書きすることに対応して、ハードディスクのファイル名やレコード位置を指定します。
読んだり書いたりすることは、ハードディスクの内容をメモリにコピーしたり、メモリの内容をハードディスクに書き込んだりすることに対応します。プログラミング言語を使えば、変数をメモリのどこに配置するかやファイルやレコードのハードディスクの物理的な保存場所を考えなくても良くなります。またファイルに読んだり書いたりする際に、その行為を「プロセッサを動かして如何に実現するか」などを意識する必要がなくなります。
このように、「変数」や「配列」、「ファイル」、「レコード」などの抽象的な世界で論理だけ駆使するだけで、実現したい処理をさせることができるのです。
これまでにも述べましたが、プログラミング言語はソースプログラムをコンピュータが翻訳して実行できるばかりでなく、人間にとっても実行内容が理解しやすいように工夫された言語です。人間が、そのプログラミング言語を用いて、さまざまなアプリケーションソフトを創作しやすいように工夫されているのです。
また、アプリケーションのジャンル毎にプログラミングの効率化に適したプログラミング言語やライブラリ、フレームワークが開発され提供されています。
このようなジャンルに特化したプログラミング言語やライブラリ、フレームワークを使えば、アプリケーションを簡潔に効率良く記述できます。
ライブラリとはよく使う機能をパッケージ化した「部品」です。フレームワークはアプリケーションの雛形で、自分の開発目標に近いものを選択して手直しすれば素早く目的のプログラムが完成し、利用できるようになります。
プログラムとは
プログラムとはコンピュータに与える一連の命令を記述したものです。ソースコードやバイナリコードを指します。ちなみに、ソフトウェアとはプログラム以外に文書なども含む概念です。
なお、パソコンなどにインストールされているOS以外のプログラムは、アプリケーションプログラムと呼ばれます。私たちが日常使う機会が多いのはその一部です。
私たちが日常目にしないところでも、コンピュータは利用されており、利用場面に応じてアプリケーションプログラムは、Webアプリ、業務システム、ゲーム、電子機器(組み込みソフト)、AIなどのジャンルに分類されます。ジャンル毎に必要とされるプログラミング言語やプログラミング・スキルが異なります。
プログラミングを学ぶ意味は何か
プログラミングが何を意味するか大体分かりましたが、なぜ国を挙げてプログラミングを推進しているのでしょうか?
専門的知識を得ることができる
「プログラミングを学ぶ」とは、コンピュータを使いこなすための専門的な知識を身に付けることにつながります。プログラム開発に関わるプログラマになるために必要なことは言うまでもありませんが、ネットワークやサーバーなど各種IT機器をセットアップするエンジニアにとつても欠かせない知識です。
それは、エンジニアがIT機器などをセットアップする際にノートパソコンやキーボード、操作盤などを操作してセットアップに必要な一連の命令を一つづつ打ち込む操作が行われるからです。
両者の違いは、入力した一連の命令が前者ではプログラムとしてコンピュータ上に保存され実行されるのに対し、後者ではセットアップした機器の内部状態が変化し機器が利用可能になることです。
どの職種の業務にも役立つ
「IT人材の不足」が取り沙汰され、2020年度に実施された「小学校のプログラミング教育必修化」の要因となっています。しかし、プログラミングスキルは、エンジニアやプログラマとして生計を立てる人にのみ要求されるスキルではありません。企業では業務系や情報系を中心にコンピュータ化が進んでいますが、それに取り残された業務が多々あります。
どの職種の業務に従事していようと役立つプログラミングスキルがあるのです。
今や仕事をする上で、Excelなどの表計算ソフトが使うのは謂わば常識になっています。Excelの場合、スプレッドシートのセルにデータを入力するだけでも役立ちます。しかし、セルのデータ入力の際にメニューから選べるようにすれば、入力間違いが減り入力が楽になるでしょう。
また、Excel関数の使い方を知っていれば、データ入力がさらに省力化されます。Excelマクロの作り方を知っていれば、集計などの自動処理をしたり、簡単なツールを自ら作ることができます。
ここでは、Excelを採り上げましたが、パソコンの維持管理をはじめ、これから本格化するAIなどIT関連のスキルが職種に捉われず役立つでしょう。
キャリアアップすれば高い年収が得られる
IT人材の年収は他の職種と比べてどうなっているのでしょうか? ITエンジニアのキャリアパスを見ると、最初はプログラマとして採用され、テスト要員を経てプログラム開発に参画し、次第にプログラム全体の開発を任せられるようになる場合が多いです。
このような段階が10年程つづき、その後はシステムエンジニアにキャリアアップしてより仕様書や設計書などより広い範囲の仕事につくようになります。さらに、プロジェクトマネージャーになって、プロジェクト全体を指揮するようになります。
キャリアアップすることに年収は増えていきます。令和2年賃金構造基本統計調査によれば、年収はプログラマーで480~570万円、システムエンジニアで650~670万円です。
子供の教育に生かせる
昨今のIT技術の進歩は第4次産業革命と言われ、私たちを取り巻く社会環境が大きく変化しています。加速するテクノロジーの進化や社会構造の変化に対応し、牽引する人材を育成したいという思いも、プログラミング教育必修化の背景にはあるようです。
日常生活の中で身の回りのICT機器を使いこなすだけでなく、コンピュータを主体的に活用する人材が求められているのです。
プログラミングはどこで使われているか
「第1章3節 プログラムとは」で、アプリケーションプログラムは、Webアプリ、業務システム、ゲーム、電子機器(組み込みソフト)、AIなどのジャンルに分類されると述べましたが、具体的にどのような用途で使われているのでしょうか。
Webアプリ・スマホアプリ
ワクチン予約システムやオンライン学習、オンラインショッピング、SNSなどがその例です。ブラウザー上で動作するプログラムです。インターネット環境で全国規模でサービスする人間相手のシステムです。
プログラミングに当たっては「大規模」「インターネット」「ユーザーフレンドリー」「セキュリティ」などへの配慮が要求されます。
Web系アプリは短期間に開発して機能毎にリリースし、改善を繰り返しながら品質を高めていくのが特徴です。このような開発方式はアジャイル開発方式と呼ばれています。
ユーザーとの擦り合わせが多いため、開発と改造の全てを国内で行います。Webアプリを開発するには、HTML/CSS、JavaScript、Ruby、PHP、Javaなどの言語を学ぶ必要があります。
業務システム
販売管理システムや生産管理システム、会計システムのように企業が業務処理するために使われるものです。これらのシステムは、どの企業にも共通する業務プロセスをコンピュータ化するのが狙いです。
このため、提供するシステムイメージを最初に作り、これをブレイクダウンして作り込むことが行われています。このような開発方式をウォーターフォール方式と呼びます。
最初に、トップダウンで仕様書を固め、プログラム開発します。仕様を固めてからの開発のため、単金の安い海外で開発するオフショア開発が多くおこなわれています。
各導入企業の特殊性を反映して、これらのシステムを改造することをカスタマイズといいますが、カスタマイズもプログラマーの仕事の1つです。業務システムを開発するにはC言語、C++、Java、JavaScript、Perl、PHPなどの言語を学ぶ必要があります。
ゲーム
文字通り家庭用ゲームやソーシャルゲーム、スマホゲームなどを指します。
登場するキャラクターの動きや、背景・効果音などをプログラミングします。制作者の思いがゲームに反映されるためゲーム好きな人に向く仕事です。
ゲームを開発するにはC++、Java、JavaScript、Python、PHP、Rubyなどの言語を学ぶ必要があります。
電子機器
家電製品や自動車、ロボット、IoTなどの電子機器に組み込まれた専用プログラムです。電子機器の基板に搭載されたマイクロコンピュータにより機器を制御します。これらのプログラムは組み込みプログラムと呼ばれています。
機械をリアルタイム制御するために、高度のプログラミング・スキルが要求されます。組み込みプログラムを開発するためには主にC言語を学ぶ必要があります。
AI
AIはディープラーニングという技術を利用し、「見本となるデータを多く与えるほど正しい判定を下す」ことができるため画像認識や音声認識、自然言語処理の分野での利用が広まっている技術です。
自社の業務で困っている箇所を具体的に絞り込んで、それが画像認識や音声認識、自然言語処理の精度が問題となるならば、AI化の効果が期待できます。ITシステムとAIの活用ができるAIエンジニアやAIプログラマーが推進します。
AIを活用するためにはPythonなどのプログラミング技術を学ぶ必要があります。
初心者のプログラミング学習法
ブログラミングに魅力を感じ、もう少し勉強したいと思った方に、お薦めの学習法について以下に紹介しましょう。
学習ロードマップには、全く予備知識が無い方向けに記事が書かれています。学習ロードマップの無料記事の範囲内で或る程度の知識を深めてから次のステップに進めることをお薦めします。
次のステップとしては、学習ロードマップの有料サービスを受ける、書籍で学ぶ、Webサービスで学ぶ、スクールで学ぶなどがあります。一長一短がありますので、違いを理解して、最も適した方法を選んでください。
書籍で学ぶ
予備知識が全くない場合は、全体像をイメージできるようになることが重要です。このためには、プログラミングに関するアウトラインや体系的な説明がなされている本を読むことをお薦めします。
次に、自分が希望するジャンルのプログラミングを解説した本を読みます。この際、簡単な例題でもよいので、アプリケーション全体のソースコードが掲載され、解説の付いているものがお薦めです。
具体的にどのようにコーディングするのか理解でき、パソコンにソースコードをそのまま打ち込み、記載通り動作することを確認しましょう。自分でも出来る自信が付きます。
その次のステップで、より深く理解するために、言語別の本を入手します。言語別の本は読むというよりも、辞書のように「必要な箇所を参照して真似る」ような使い方になります。
Webサービスで学ぶ
オンライン授業です。自作したプログラムを走行させてバグやエラーが出たり、何らかの不可解な現象が生じた場合、書籍の場合だれにも相談できません。このようなことが続くと学習することの意欲が削がれ、挫折する可能性が高いです。
オンラインサービスでは、質問でき、助けて貰うことができます。開発環境も提供されていることも書籍で学ぶ場合に比べて優れています。
スクールで学ぶ
多くのオンラインのプログラミングスクールでは就職や転職、案件獲得を支援するサービスも提供しています。
オンラインのプログラミングスクールは、学習時間や学習場所を自由に選べる点で、通学型のプログラミングスクールに比べて優れています。
ただ通学型は、土日の日中、および夜間に開講されることが多く、通学で知り合った仲間と雑談する機会にも恵まれ、お互いに刺激しあうことで挫折し難いでしょう。
まとめ
プログラミングとはコンピュータを動かす一連の手続きを考え、コンピュータを操作して入力し、期待通りにコンピュータを動作させることです。一連の手続きを記録したものプログラムといいます。
プログラムにはWebアプリ、業務システム、ゲーム、電子機器の組み込みプログラム、AIなどのジャンルがあり、各ジャンルに適したプログラミング言語があります。
これからプログラミングを学ぶ方は、目指すプログラムのジャンルを決めて、プログラミング言語と使い方を学び慣れることが必要です。初心者がプログラミングを学ぶ方法は幾つかありますので、自分に最も適した方法を選びましょう。
導入文
プログラミングって何? 去年から小学校の必須科目になったことは知っているが・・・。
プログラミングをやってみたいけど、どこから手に付けてよいか分からないで困っている人は、ぜひ本記事を読んでみて下さい。
この記事は、プログラミングという言葉が気になるのでどんなものか知りたいと思っている方や、コンピ―ターとプログラミングの関係が分らずモヤモヤしている方の悩み解消の手助けになるでしょう。
また、プログラミングを学習するとはどうすることか、学習すればどんなうれしいことがあるか、初心者がブログラミンを学習するにはどのようにすれば良いか紹介します。