ブラックボックスを解明したい

2017年1月よりフリーランスに転向したシステムエンジニアのブログ。プログラミングスクールではRubyの勉強をしていたが、現在はJavaによる開発がメイン。当ブログは筆者の学習メモを投稿していく予定。

【Java】JVMとは?

JVMとは?

Javaで書かれた処理を、OS(コンピュータ)に伝える橋渡しをするプログラムのことです。

JVMを使うことでどんなことができるか?

OSに依存せずにプログラムを実行できます。


これは、Javaの有名な標語である「Write Once, Run Anywhere」のことです。
「一度書けば、どこでも実行できる」というやつです。


プログラムを実行するには、Javaをコンピュータが理解できる機械語に変換してあげる必要があります。

この機械語への変換作業は、OSが異なれば結果が異なります。
同じソースコードから作られた機械語でも、WindowsMacで、この変換作業(コンパイル)の結果は異なります。
機械語は、そのコンピュータの環境に適したものじゃないと正常に動作しません。

しかし、JVMJavaで書かれたソースコードをプログラムの実行時にコンパイルすることで、
OSに依存せずに済むようになります。

つまり、理論上、OSごとにJVMをを用意すれば、
一度Javaでプログラムを組むだけで、
様々な環境(OS)で処理を実行できるようになります。

この実行時にソースコード機械語コンパイルする方式をインタプリンタ方式といいます。
Javaはこのインタプリンタ方式の1種である、実行時コンパイル方式をとっています。

実行時コンパイル方式とは、ソースコード中間コード(2進数のもの)で書かれたクラスファイルコンパイルした後、
実行時に機械語に変換する方式のことです。

ちなみに、JVMJava Virtual Machineの略です。

まとめ

JVMは、Javaで書かれた処理をコンピュータに命令してくれる橋渡し役となるプログラムのこと。
JVMがあるから様々な環境でJavaプログラムを動かすことができる。

参照
徹底攻略 Java SE 7/8 Bronze問題集

【IT総合】ネイティブコードとは?

ネイティブコードとは?

ざっくりいうと、コンピュータが理解できるプログラムのこと

機械語マシン語ともいいます。

コンピュータは、0と1で表現される2進数を読み込んで様々な機能を実現しています。

ようするに、ネイティブコードはコンピュータにとっての母国語です。

コンピュータは、人間が読み書きできるCやJavaなどで書かれたソースコードを、コンピュータが理解できるネイティブコードに変換することで処理を行います。

参照
徹底攻略 Java SE 7/8 Bronze問題集

【Ruby】ミックスインとは?

ミックスインとは?

includeやextendを使って、モジュールに定義した機能をクラスに追加すること。

1つのクラスに複数のモジュールをミックスインすることもできる。
つまり、ミックスインすることで、多重継承のような状態をつくることができる。

includeとextendの違いは?

includeを使うと、モジュール内のメソッドをインスタンスメソッドとして呼び出します。
インスタンスメソッドとは、クラスの内部に定義されたメソッドのことです。


extendを使うと、モジュール内のメソッドを特異メソッド(クラスメソッド)として呼び出します。
特異メソッドとは、特定のオブジェクトのみが使えるメソッド。

【Ruby】インスタンスメソッドとは?

インスタンスメソッドとは?

クラスの内部に定義されたメソッドのこと。

インスタンスメソッドの定義方法は?

class クラス名
  def インスタンスメソッド 
    #=> 処理の内容
  end
end

サンプルコード

class Car 
  def runRun!” 
  end 
end 

car = Car.new 
car.run #=> “Run!”

【IT総合】コンパイラ方式・インタプリンタ方式とは?

以下、プログラムの実行方式であるコンパイラ方式インタプリンタ方式について解説します。

コンパイラ方式とは?

プログラムに書かれた命令を機械語に変換してから処理を実行する方式のこと。

人間が書いたプログラム(ソースコード)を機械語に変換することをコンパイルといい、
コンパイルをするソフトウェアをコンパイラといいます。

コンパイラ方式のメリットは?

実行速度が速いこと。

あらかじめソースコード機械語に変換しておくことで、コンピュータが命令を読み込む速度があがるからです。

コンパイラ方式のデメリットは?

実行するまで手間がかかること。

コンパイルをする際にプログラムにエラーがあるかを判定します。
そのため、エラーが解消されるまでプログラムの動きを確かめられないため、プログラムを実行するまでに手間がかかります。

インタプリンタ方式とは?

プログラムに書かれた命令を1行ずつ機械語に変換しながら実行していく方式です。

インタプリンタ方式のメリットは?

・プログラムを書いたらすぐに実行でき、動作の確認ができること。

・異なるコンピュータの環境(WindowsMacなど)で互換性を保てる。

機械語のコードは基本的にコンピュータの環境が違うと動かせません。
インタプリンタ方式は、コンピュータの環境に合うように1行ごとに機械語に解釈していきます。
そのため、プログラムを変更せず、異なるOSでも動かすことができます。

インタプリンタ方式のデメリットは?

コンパイラ方式と比べて実行速度が遅い

1行1行ソースコード機械語に変換しながら実行するので、コンパイラ方式と比べて実行速度が遅くなります。

まとめ

コンパイラ方式は実行前ソースコード機械語に変換する。手間はかかるが、プログラムの実行速度が速い。
・インタプリンタ方式は実行時に逐次ソースコード機械語に変換する。手軽に動作確認ができるが、プログラムの実行速度は遅い。

参照
オブジェクト指向でなぜつくるのか 第2版

【統計学】分散とは?

分散とは?

偏差を2乗した値を全部足して、「データの総数ー1」で割ったもので、
平均からの散らばり具合を示す値のこと。
f:id:yuki-kato:20200213155531p:plain

偏差とは?

平均との差のこと

例えば、
数学の点数が60で、クラスの平均が50の場合・・・
60 - 50 で 偏差は10となります。

分散の式で、なぜ偏差を2乗しているのか?

プラスとマイナスを同等に扱えるようにするため。
マイナスを2乗するとプラスになるから

ようするに分散とは何か?

ようするに分散とは、
平均値からどれくらい値が散らばっているかを示す指標のこと

分散が大きいとはつまり、平均からの各値の散らばり具合が大きいということです。

テストの点数において考えると、ある科目の分散が大きいことは、生徒の間でその科目の得意と不得意の差が激しいといえる(平均点からの散らばり具合が大きいということだから)。

・分散が大きい → 得意な人は得意、苦手な人は苦手
・分散が小さい → みんな似たような点数

【Ruby】ancestorsとは?

ancestorsとは?

呼び出し元のクラスオブジェクトがミックスインしているモジュールや、継承しているクラスを配列として取得するメソッド

ancestorsメソッドで取得した配列の先頭要素から、メソッドを探しに行く順番となる。


補足:ミックスインとは、includeやextendを使って、モジュールに定義した機能をクラスに追加すること。

サンプルコード

Car.ancestors  # => [Car, Object, Kernel, BasicObject]

上記のコードは、Carクラスがミックスインしているモジュールや継承しているクラスを配列として取得している。
先頭要素からメソッドなどを探しにいく。

例えば、以下のコードの場合、runメソッドを呼び出そうとする際は、

「Car→Object→Kernel→BasicObject」

の順番でrunメソッドを探しに行く

car = Car.new
car.run


参照
Module#ancestors (Ruby 2.7.0 リファレンスマニュアル)
プロになるためのRuby入門