用語をクリックすると、解説が表示されます。
ハードウェアやソフトウェアの基本的な設計方針、考え方のことです。
たとえばCPUアーキテクチャというと、インテル系(インテル製とインテル互換のAMD製など)アーキテクチャ、Arm系アーキテクチャなど設計方針が異なるCPUがあります。
インテル系CPUはパソコンで使うことを主目的に開発されてきたので、さまざまな用途において高速に処理することを目指してきました。
一方Arm系CPUはスマートホンや家電などで使うことを主目的として開発されてきたので、省電力や低価格であることを目指してきました。
最近ではArm系CPUも高速なタイプが作られるようになり、Mac miniに使われたApple M1やスーパーコンピュータ富岳に使われたA64FXといった製品もありますが、アーキテクチャ自体はインテル系とは違っています。
CPUは0と1で書かれたマシン語(機械語)のプログラムしか実行することができません。マシン語は人間にとっては理解しにくく、直接プログラムを書くことはきわめて困難です。
そこで人間に分かりやすいプログラミング言語で元となるソースコードを書き、それを専用の変換プログラムを使ってあらかじめマシン語に変換するやりかたが一般的になっています。ソースコードをマシン語に変換することをコンパイルといい、変換するためのプログラムをコンパイラといいます。micro:bitのプログラミングではオンラインエディタで開発したソースコードをmicro:bitのマシン語にコンパイルし、micro:bitに書き込む作業が必要です。
ソースコードをあらかじめマシン語に変換しておくのではなく、コンピュータに実行させるときにマシン語に変換するものがインタプリタです。インタプリタはソースコードを1行ずつ読み込み、対応するマシン語に変換します。
そのため、ソースコードを手直しすることが簡単ですが、コンパイル式より実行速度が遅くなります。また、大規模なプログラムを書くには向いていません。
最近のインタプリタはCPUが高速・高機能化したので、実行時にソースコードをまとめてマシン語に変換する実行時コンパイラ方式もあります。
人間にとって分かりにくいマシン語でプログラムを直接書くのではなく、理解しやすい言葉で書くための人造言語です。CPUの命令を一語単位で言葉に置き換えたアセンブラ言語と、もっと人間が使う通常の言葉に近い高級プログラミング言語とがあります。
高級プログラミング言語にはパイソン、ジャバスクリプト、ジャバ、C++、フォートラン、PHP、Perl、ベーシックなど用途・目的に応じて数百以上の種類があります。
ほとんどが英語を基本にしていますが、日本語で書けるプログラミング言語、スペースとタブだけで記述するので真っ白にしか見えないジョーク系難読言語といったものもあります。
書きやすく、比較的簡単な処理を行うことができるプログラミング言語のことです。厳密に決まった定義はありませんが、主にWebで使われるジャバスクリプト、PHP、Perl、パイソンなどがスクリプト言語と呼ばれます。
コンピュータは0と1で書かれたプログラムしか実行することができません。これをマシン語、機械語といいます。マシン語は人間が読み書きすることはたいへん難しく、直接プログラミングすることはほとんど不可能です。
そのため、人間が理解しやすいアセンブリ言語や高級プログラミング言語でプログラムを書き、アセンブラやインタプリタ、コンパイラといった変換ソフトを使ってマシン語にすることがほとんどです。
情報の単位です。1ビットは2進数の一桁で、0か1、ONかOFF、真か偽といったどちらか一つを示します。CPUやメモリが一度にやりとり・処理できる情報の量や通信回線の速度などを示すのに使われています。
8ビットのデータを1バイトといいます。バイトはメモリやストレージの記録容量など、主にデータ量を示すのに使われます。
1024ビット/バイトが1キロビット/バイト、1024キロビット/バイトが1メガビット/バイト、1024メガビット/バイトが1ギガビット/バイトとなります。
スマホの通信規格である5Gの「最大3.4Gbps」といった場合は通信速度なのでギガ・ビット、「大容量20GBプラン」といった場合はデータ容量なのでギガ・バイトのことです。
0からはじまり、9まで行ったら次に10へ、19の次が20、99の次が100と桁があがるのが10進数です。私たちが日常的に使っています。
コンピュータの中では回路を簡単にするため、0の次は1、1の次は10、11の次は100と2ずつ桁があがる2進数が使われています。
人間が2進数を直接読み書きしようとすると桁が長くなりすぎるので、9の次はA、B、C、D、E、Fと進み、次が10となる16進数表現がよく使われます。
たとえば10進数の255は2進数だと11111111、16進数だとFFになります。
プログラミング言語で命令を書いたものです。人間が読み書きできる命令で記述されており、これをコンパイラやインタプリタによってコンピュータが実行できるマシン語に変換して使います。
ソースコードは1行の単純なものから、OSやアプリケーション、ゲームなどではトータルで数百万行を越える巨大なものまであります。
ソースコードがあれば、そのプログラムの動作を解析したり、修正・改良することができます。そのため、ソースコードを公開しているフリーソフトウエアやオープンソースソフトウェアはユーザーによってバグが見つけられたり、改良版が作られて配布されることがあります。一方、商品として売られているOSやアプリ、ゲームなどは勝手に無料でコピーされたり改造されないよう、ソースコードを非公開とし、コンパイルしたマシン語ファイルだけを提供しているのがほとんどです。
パソコンやゲームをやっていて、画面がおかしくなったり、データが消えてしまったり、ハングアップしてしまうことがあります。その原因の一つがプログラムを書く時の間違いで、バグといいます。大きなプログラムだとソースコードが数千行、数万行になり、どうしても間違いが潜んでしまいます。重大な間違いだと最初から動かないので公開・販売されることはありませんが、小さな間違いだととりあえず動いてしまうので、見逃されて公開・販売されることがあります。ユーザが開発者の予期していない操作を行ったり、コンピュータやネットワークの特定の状態によってたまたま発生するわけです。
バグによってプログラムの販売が中止されたり、使っていた人から損害賠償を求められたり、器械が誤動作して被害が出ることもあります。1962年に打ち上げられたアメリカの火星探索ロケットのマリナー1号は航行プログラムのバグにより発射293秒後に制御不能となり、地上からの指令で爆発破壊されました。
インターネット経由でコンピュータに不正にアクセスするセキュリティ事件の多くは、プログラムのバグ(セキュリティホール)を利用しています。
プログラムの開発時にソースコードの動作しない、あるいは誤動作するバグを修正する作業のことです。デバッグは、まずバグの存在を認識し、バグの発生源を分離し、原因を特定し、原因を修正し、テストするという段階を踏みます。
デバッグにはいろいろな方法が使われます。ソースコードに、原因となりそうなデータを出力させるデバッグ命令を組み込んで実行したり、ソースコードを1行ずつ実行するステップ実行などがあります。ソースコードを書くエディタにコンパイラ、そしてステップ実行やデータの現在値を表示する統合開発環境を使うとデバッグが能率よく行えます。
プログラム開発の途中、あるいは開発後にそのプログラムが正しく動くかどうかテストする工程のことです。大きなプログラムになると、たとえばオンラインショップでは「ユーザー登録」「商品登録」「商品紹介」「購入」「発送指定」など複数のプログラムに分かれて開発することになります。ソフトウエアテストは、まずそれぞれ単体のプログラムが設計書通りに動くかどうかをテストする「単体テスト」から始まります。単体テストに合格すると、関連するプログラムを連動させてテストする「結合テスト」、そして最終的に実際に使われるのと同じ状態でテストする「システムテスト」などの段階を踏みます。
各段階で不具合、バグが発見されると開発工程に戻って修正します。
Webで公開利用するようなプログラムだと、一度に大量のアクセスがあっても正常に動作するかを試す「負荷テスト」が行われ、不正アクセスをはねのけるかどうかの「セキュリティテスト」も欠かせません。
ソフトウェアテストはシステム設計図に基づいて、どのような項目をどのようにテストするのか、テスト設計が大事になってきます。
プログラミングの考え方の一つで、処理する対象やデータを「オブジェクト」という独立した「モノ」と捉え、そのオブジェクトにメッセージを送って組み立てます。それまでのプログラミングが、すべての手順を書き連ね、命令やデータを送った先が何をするのかを厳密に把握してないといけなかったのが、オブジェクト指向では送る先のオブジェクトは送る側とは独立しており、送った先の中身はブラックボックスとして扱うことができます。これにより、プログラムが整理され、開発の効率が上がりました。
スクラッチもオブジェクト指向を取り入れています。ステージに登場するネコなどのスプライトがオブジェクトです。「<10>歩動かす」という命令をクリックすると、スプライトに「<10>歩動かす」というメッセージが送られ、ネコが動きます。ネコがどのようにして動くのか、知る必要はありません。
プログラムの中でまとまったデータの組を配列と呼びます。データの入れ物を用意し、それに番号を付け、データを出し入れします。
たとえば10個の入れ物を用意し0番から9番まで番号を付けておきます(プログラム言語によって0番から始まるものを1番から始まるものがあります)。これには10個までの数字や文字を入れることができます。AさんからJさんまでの体重をそれぞれの箱に入れ、プログラム中で「8番目のデータを読みだして」といった使い方をします。
配列には体重だけ、身長だけといった一種類のデータだけを入れる1次元配列、「体重と身長と名前」といったように複数種類のデータを持てる多次元配列とがあります。
多くのプログラミング言語では、実行したい処理をブロック、「関数」として書きます。主たる関数から目的に応じた関数に引数を与え、処理を行ってその結果をメイン関数に返す、ということの積み重ねです。主たる関数をメインルーチン、処理を分担する関数をサブルーチンともいいます。
プログラムの中で使われるデータには、決まっていて変更のない定数、実行中変化していく変数、関数が別の関数を呼ぶときに渡す引数があります。
たとえば円周率πは3.141、令和元年は2019年、ある試験の合格点は60点といったものが定数です。これに対し、円の直系、現在の年度、試験の点数は変数となります。そして円の面積を求める関数に渡す直系が引数になります。
変数はキーボードやマウスから入力するものもあれば、同じ処理を繰り返すときに、1回ごとに増えて(あるいは減らして)、決まった値になったら処理を抜けるカウンタ変数などもあります。
仕事でプログラムを作るときには、その仕事を頼む発注者と、プログラムを設計し、コードを書く人とがいます。
発注者は「この作業を楽にしたい」「このサービスを提供したら儲かる」といった要望を持っており、プログラマーはその要望に応じてプログラムを書きます。たいてい発注者はプログラムのことをよく分かっておらず、プログラマーは発注者がやらせたい仕事の内容をよく理解していません。この間に立って発注者の要望をまとめ、プログラマーに依頼する職業がシステムエンジニアで、エスイー(SE)と呼ばれます。スケジュール管理や発注者との調整などプロジェクト管理もSEの大事な仕事です。
システムエンジニアにもプログラムの知識が豊富な人もいれば、プログラミングは苦手だけど発注者のこと、業務をよく理解している人など、さまざまな人がいます。プログラムの知識、業務の理解度、コミュニケーション能力、プロジェクト管理能力が問われます。
連続的に変化する量のことです。温度とか色、音、明るさ、湿度、速度といった自然界の量はほとんどが連続的に変化します。私たちが感じることができるものもたいていはアナログです。
コンピュータはアナログを直接処理できないので、デジタルに変換して渡す必要があります。
不連続的に変化する量のことです。たとえば音楽CDは音楽を毎秒4万4100回、大きさを65,536段階に区切ったデジタルデータとして保存しています。デジカメ・スマートホンのカメラは1枚の画像を縦横数千に区切り、合計数千万個の「画素」という細かい単位のデジタルデータとして保存しています。
コンピュータの中ではデジタルデータしか処理することができません。
デジタルデータはコンピュータで様々な加工・処理を加えることができ、ネットワークを通じて高速にやりとりすることが可能です。コピーを繰り返しても元のデータが壊れにくい、劣化しにくいという特徴もあります。
プログラムの手順を図式化する方法の一つです。上から下、あるいは左から右へ処理を置き、開始と終了は丸四角、処理は四角、条件判断はひし形の図で書かれ、処理の流れを線で結びます。
プログラムの中で使う計算方法のことです。例えば東京から大阪に行くのに、飛行機を使う、新幹線を使う、高速道路を使う、歩くなど、いろいろな方法があります。速さを求めるか、お金を節約するか、道中を楽しみたいかなど、目的によって選ぶ方法が違ってきます。
プログラムのアルゴリズムも「簡単に書けるけど、データの数が増えると膨大な時間がかかってしまう」ものと「高速だけどメモリを大量に必要とする」ものがあったりします。良いプログラムを書くにはアルゴリズムを工夫することが大切です。
プログラムの中で処理するデータをどのように持つか、というのがデータ構造です。データを積んでいき、最後に入れたデータを最初に取り出すことができるスタック、最初に入れたデータが反対側から最初に取り出せるキュー、次のデータが何番目につながっているかを示すリスト、幹から枝のように分かれていく木構造、路線図のように平面的に広がるグラフなどさまざまな種類があります。
プログラムはアルゴリズムとデータ構造からできているとも言われます。
プログラムの中にはファイルの読み書き、文字処理、計算、画像処理など決まり切った同じ処理を行うものがあります。これらをいちいちゼロから書いていては大変なので、再利用な可能な別のプログラムとして保存しておくものがライブラリです。ライブラリはメインのプログラムから必要に応じて読み込んで利用します。標準ライブラリはプログラム言語にあらかじめ用意されています。
特殊なライブラリは無料または有償の商品として入手することができる場合もあります。フォートランというプログラミング言語は数値計算のライブラリが豊富にあるのでスーパーコンピュータで使われ、パイソンという言語はグーグルが人工知能処理用のテンソルフローというライブラリを無料で公開したので、人工知能の開発に多用されています。
プログラムのソースコードを公開し、修正・改変を認め、再配布を認めているものをさします。マイクロソフトのWindowsやアップルのmacOS、WordやExcel、フォトショップなど市販されているソフトウェアのほとんどはソースコードが非公開で、ユーザが修正すること、他人にコピーして渡すことを禁止しています。
これに対し、プログラムは人類の共有財産として公開され、不具合や使いにくいところがあれば修正・改変することができ、他人にコピーして配ることを認めるべきだというのがフリーソフトウェアやオープンソースソフトウェアです。フリーソフトウェアとオープンソースソフトウェアは推進している団体が異なり、使える条件に違いがあります。
市販されているソフトウェアやハードウェアにもフリーソフトウェア・オープンソースソフトウェアを一部使っている製品もあります。
インターネットのサーバ用に広く使われているリナックスというOS、リナックスをスマートホン用に改良したアンドロイド、Webブラウザのファイアフォックス、スクラッチやPHP、パイソンなどのプログラミング言語がフリーソフトウェアやオープンソースソフトウェアです。
自分の考えや思い、思想などを作品として表現したものが著作物で、それを守る権利が著作権です。
年齢や性別、国による制限は無く、届け出などの手続きも不要です。著作物は表現されたときから、全世界で保護されます。小説や詩、論文、絵、彫刻、音楽、朗読、踊り、写真、映画などが対象です。コンピュータプログラムも著作権で保護されます。
権利を持っていない人が著作物を勝手に使うことは制限されます。音楽や動画やプログラムを勝手にコピーして他人に渡したり、ネット上に公開すると著作権侵害となって罰せられたり損害賠償を請求されることがあります。
ただし著作権者が再配布を認めているフリーソフトウェアやオープンソースソフトウェアもあります。また、自分が使うためだけに自分で本やCDをコピーする、スマホに取り込むことは「私的利用」として自由にできます。
著作権の保護期間は、作者が亡くなってから70年後まで、企業など団体が作成したものについては発表から70年後です。
ジャバスクリプト。元々はWebサイト、Webアプリケーション上で動くスクリプト言語として開発されました。Webの画面制御、文字入力、ゲームなど動的なサイト作成に幅広く使われています。
micro:bitのオンラインエディタはブロックプログラミングしたコードをJavaScriptとPythonのコードに自動変換できる機能があります。
パイソン。プログラミング言語の1種で、読みやすく、効率が良いソースコードを簡潔に書けることを目的としています。ある動作をさせる方法は、基本的に1通りしかないように作られており、同じ動作を行うソースコードは誰が書いてもだいたい同じようになります。書き方の特徴としてはある機能(関数など)のブロックをカッコでくくるのではなく、文字下げ(インデント)で指示するオフサイドルールがあります。
Webアプリケーション、数値計算、プログラミング教育などで利用されています。特にGoogleが人工知能開発用言語として選定したことから人工知能の開発で有力な言語となっています。
Raspberry piおよびmicro:bitの標準的なプログラミング言語でもあります。