プログラミング基礎〜プログラミング言語編〜

プログラミング
スポンサーリンク

バックエンドエンジニアが知るべき最低限の知識

バックエンドのプログラム

WEBサーバー
APサーバー
DBサーバー

この3つバックエンドのエンジニアは操る必要があります。

WEBサーバー

世界中のアクセスを受け付ける。
不審なアクセスは遮断したり、いっぱいアクセスがきた場合は、どのAPサーバーを呼べば良いのか?考えて振り分けたりとか。
そういったことをしています。

有名なところで、

Nginx

というものがあります。

ほとんどプログラムは書きません。Nginxの設定ファイルを書くのみです。

APサーバー

=アプリケーションサーバー

皆さんが書いたアプリケーションが実際に動くサーバーですね。

例えば、ユーザーの作成
ログイン/ログアウト
商品の売り/買いをするなど。それらのプログラムを置く場所ですね。

有名なところですと

Tomcat

があります。

DBサーバー

ユーザーのログイン情報というデータを保持しないといけないんですね。
それを管理する場所が、DBサーバーです。

有名なところで。

MySQL
PostgreSQL

などがあります。

Herokuを使えばプラグインとしてDBサーバーも使えます。
設定が簡単なので、Herokuを使う際はオススメです。

OSの基礎知識

OS上でプログラムは動いている。
なので、OSがどのように動いているか知らないと皆さんが問題にぶち当たった時に解決できないということになります。

ターミナル

何をやっているかといると。
自分やリモートのサーバーにコマンドを送ることですね。
ターミナルっていうのは、どんなOSでも入っています。

OS

じゃあこのターミナルから送られたコマンドをどうやっているのか?
OSっていうのは何をやっているのか?ということも知っておく必要があります。

OSっていうのは、大きく5個の仕事をやっています。

タスクの管理
メモリの管理
ファイルの管理
デバイスの管理
APIの提供

タスクの管理

皆さんの携帯
Android=Android OS
iphone=ios

っていうのが入っているんですね。
例えば、皆さんがLINEを使っています。
LINEを使いながらインスタも同時に使ったりしますよね?
そういった時に、OSは何をやっているのかというと。
LINEで新しいメッセージが来ていないかな?という風にチェックしながら。
インスタの情報もとってと並行して作業を行なっているんですね。
この作業を管理する、どの順番で何をやる?という管理する仕事をタスク管理と読んでいます。

メモリ管理

例えば、皆さんがLINEのメッセージをコピーしたいとします。
このコピーしたものは誰かが覚えておかないといけませんよね>
それを覚えてくれる仕事っていうのが、メモリ管理。
OSでやってくれているんですね。

OSが覚えてくれているから、皆さんがコピーした内容をどっかにペースト出来るんですね。

ファイル管理

皆さん写真撮りますよね?
写真撮ったデータっていうのは、消えたら困るのでどっかに保存されているんですよ。
保存されたデータっていうのは、皆さんが消さない限り保存されているんですね。
じゃあこの保存されたデータっていうのは、どこに保存しているのかっていうと。
ハードディスク、SSDというところですね。

この保存をするという仕事もOSがやってくれています。
これをファイル管理と言います。

デバイスの管理

マウスやUSBなどがきちんと作業するように制御するのもOSがやってくれています。
これをデバイス管理と言います。

APIの提供

インスタのアプリでも、LINEのアプリでも。
そのアプリから送られた命令っていのも、最終的にはOSに送られるんですね。
ただ、OSの言葉って難しいんですよ。
数字で制御されているんですよ。
皆さんがこれを作ってくださいって言われても全然わかんないですよね?
なので、OSっていのは、API(Application Interface)皆さんが理解しやすい入口を作ってくれています。
皆さんがアプリを作るときは、入り口に対して命令を送る。
そうすると、OSがその命令に対して仕事をするという風になっています。

プロセス間通信

例えば、LINEのログイン情報とインスタのログイン情報があります。
インスタが悪いアプリだったとしましょう。
インスタがLINEnおログイン情報を同意もなしに勝手に取得できるようだとまずいですよね?
そういう事をさせないようにアプリとアプリというのは、空間で区切られています。
LINEからインスタにいけない。インスタからLINEにいけないように制御されています。
場合によっては、プロセスの間で通信をしたい場合があります。
それをサポートしている仕組みをプロセス間通信と呼びます。

パイプ処理

コマンドAをを実行する際にコマンドBを実行しないといけないとします。
ただコマンドBを実行する際は、コマンドAの結果をコマンドBに送りたいときに。
コマンドA|コマンドBってやるんですね。
そうすると、コマンドAが最初に実装されてその結果をコマンドBに送ってくれるんですね。
そうすることによって、コマンドAとBで通信されますよね?
こういったものをプロセス間通信のパイプ処理という一例があります。

並行処理/並列処理

並行処理

並行処理っていうのは、同時に1個の作業しかできないんだけども。
めちゃくちゃ身近い時間で、A/B/Cと処理がめちゃくちゃ短い時間でやっているから。
あたかも僕らは、同時に複数の仕事をやっているように見える。

並列処理

同時に複数の作業ができる。
CPU(シングルコア/マルチコア)

皆さんCore i7って聞いたことないですか?
コアが複数個あるんですね。
並列処理ができるんですね。

コアが一個しかない場合は、並列処理しかできないんですね。

CPUっていうのは、並列処理/並行処理を行っている。

プログラミング言語

バックエンドは使用言語がとても多い。

Java Script

フロントエンドで使われる言語では?

昔はそうだったんですが。Java Scriptができる人口が多すぎて、これでバックエンドもかけたら便利じゃないか?となって。

Node.js

というものを書いた人がいます。

これを使うと、Java Scriptを書いたものをNode.js上で実行することでバックエンドでも動かせるようになった。
この手順でバックエンドのプログラムを書く方法もある。

バックエンドでは大規模な開発になることもあります。
他の言語も学んでおいた方が良いです。

Python

最初にやらなくて良い.

PythonにできてJavaにできないことって何か?って考えた時にAIを作る以外ないんですよ。
逆もそうですよ。
JavaでできてPythonでできないことってAiを作ること以外全て。

Aiっていうのは、Pythonができたら作れますか?というとそうでもないです。
データサイエンティストと呼ばれる数学的知識。
順伝播/逆伝播/RNN ect…

こういった言葉を皆さんわかっていますか?
その裏にある、数学的知識がわかっていますか?
わかっていなくては、Pythonが作れてもAIが作れないんですよ。

もしAIが作りたい方は、
数学を勉強する。AIの事を座学で学ぶ。
その後にPythonをやるというステップを踏みます。

WEBサービスを作りたいのであればPythonから始めるメリットはない。

Java

なんでもできる、
90年代にできた老舗の言語ですよ。
「JAVAって古い言語でしょ?」って思われるかもしれませんが。そうでもありません。
今、Javaっていうのはオラクルって会社が管理しているんですが。
半期に一回Javaっていのはバージョンアップされています。
これ何をやっているのかっていうと。
Python/kotlin/GO
モダンな言語の良いところを取り込んでいるんですね。

とういうことは、Javaを学べばなんでも作れるようになる。
大規模なプログラムを作れる。
モダンな言語を理解できる。

つまり他の言語も対応できる。

GO

年々多くの現場で使われている。

Rust

「安全性/性能/並行性を売りにした」

JavaとCの大きな違いはスピードです。
Javaも十分早いです。実用には問題ないです。
ただCというのはめちゃくちゃ早いんです。

これなんでかというと、よりOSに近い言語だからなんですね。
Rustは、そういったCみたいなスピードを追求しつつ書き方が簡単な言語。

Ruby

WEBサービスを簡単に作れる言語

PHP

WEBサービス作りに特化

コメント