理論物理系学生の0から始める機械学習#1


目次
- 1.現状
- 2.プログラミング言語について
- 3.これから

1.現状

このQiitaは将来ITエンジニアを目指す理系学生が
・ 0から始めても理解できること
・ 自分の勉強のアウトプットの見える化
のために始めた備忘録です。
(大した知識もないひよっこです。訂正や助言をいただけると嬉しい、、、お手柔らかに。)

バックグラウンド

機械工学系→理論物理系→ITエンジニア(将来)
という経歴を持つ理系学生

プログラミング習熟度(2020/6時点)

C言語→基本の情報処理ができる、開発経験はない
python→基本の情報処理ができる、開発経験はない

開発環境

MacOS HighSierra -10.13.6
python -2.7.16(Mac初期装備)
python -3.8.0

最低限知識

”0から”という点は意識しているけれど、最低限

  • OSの知識
  • CUIの操作、コマンド
  • プログラミング言語の基本動作

についての説明は省かざるを得ないかも。
ただ高校数学の基礎知識があれば「python」ではなく「プログラミング」の超入門書などで学べると思う。
(理系学生であれば講義で学ぶプログラミングの基礎程度の知識で十分かと思う。)

2.プログラミング言語について

代表的なプログラミング言語

システム・アプリケーション系:Java、C、Ruby、PHP
Webデザイン系:JavaScript、PHP、HTML
人工知能:Python
注*あくまで簡易的な分類。それぞれ応用できる領域がある。

各言語の特徴(調べただけ)

Java: クラスベースのオブジェクト指向(オブジェクト:データとコードの複合体)の汎用プログラミング言語。C言語に似ている。Webアプリケーションで使用されている最も人気のあるプログラミング言語の一つ。

C: 汎用プログラミング言語。動作環境の制約が厳しい。C++、Javaなどの派生源。システム系、アプリケーション系で使われる。

Javascript: プロトタイプベースのオブジェクト指向スクリプト言語。Webサイト、Wenアプリのデザインなどに利用される。多くのWebブラウザで使われる。
注*Javaとは異なる言語。

Ruby: 日本人のまつもとゆきひろさんが開発したオブジェクト指向スクリプト言語。Perlに続く言語、Pythonが競合言語。Webアプリケーション、ホームページ作成などで使用される。わかりやすいコード、日本人の開発なので日本語の情報が入手しやすい。

PHP: プログラミング言語と処理系としての特徴を持つ。言語としてはC、Javaに近い。サーバーサイドで動的なWebページ作成ができる。アプリでも使えるが、Webサイトに多く使われる。

HTML: Webページを作るためのマークアップ言語。WebページのほとんどがHTMLで作られている。

Python: コードがシンプルで学習しやすい汎用。ライブラリが豊富で様々な領域への応用が容易(他人が作ったプログラムの塊を利用できる)、対応している動作環境(ハード、OS)が豊富。人工知能・機械学習などで利用される。

どんな言語を学ぶか

世の中の需要
- アプリ系:Ruby、Java
- web系:JavaScript、PHP
- 人工知能系:Python

が主流か?

シンプルで習熟が容易
-スクリプト言語: ソースコートをそのまま実行できるため結果をすぐ視覚でき学習が容易。ex)Python、JavaScript、Ruby、PHP

-コンパイラ言語: 実行するためにソースコードをコンパイルする必要がある。ex)C、Java

応用が効く
・ Python→ ライブラリ(ある目的のために機能をまとめたパッケージのこと)が豊富で応用に幅が効く。ex)アプリ、人工知能、統計・データ分析、IoT開発
注*複数の関数をまとめたもの→モジュール
モジュールをまとめたもの→パッケージ
パッケージをまとめたもの→ライブラリ
ライブラリ=何かができる大量のプログラムの集合体。

・ JavaScript→ Web系フロントエンジニア必修。ブラウザ上でユーザーの動作に関わる部分に使われる。

・ Ruby→ アプリケーションの開発に使われる。ライブラリRuby on Railsがよく使われている。日本人が開発したのでオブジェクト指向と呼ばれるプログラミング言語のコンセプトを日本語でしっかりと学ぶことができる。

3.これから

学習の目的
1.色々な言語に触れ、どんなことが実現できるのかを知る。
(どんな領域のエンジニアになるかを決めるため)
×目的ありきの職業選択 ○スキルありきの職業選択

2.研究活動への応用
人工知能技術の物理学への応用

エンジニアの種類と使われる言語?(メモ書き程度に)
- AI(人工知能)エンジニア:Python
- アプリケーションエンジニア(業務系):Java、C
- アプリケーションエンジニア(webアプリ系):Java、C、Ruby、PHP
- アプリケーションエンジニア(スマホ系):Swift(iPhone)、Java(Android)
- フロントエンドエンジニア:JavaScript、HTML
- サーバーサイドエンジニア:Ruby、PHP、Python、Java

学習する予定の言語
- Python
- Ruby
- JavaScript
- Java

しばらくは研究のためのPythonの学習と機械学習の実行。
その後独学でRuby、Javaを勉強し、開発経験を積みたい、、、。

参考文献

  • スラスラわかるPython  プログラミング初心者本よりも更に優しい、言わば超初心者にはオススメの一冊。pythonを通してプログラミングを学ぶことができる。他の言語を触ったことがある人にはあまりオススメできないかも?
  • wikipedia(各言語について)