これから SE になろうとプログラミングを学習する方はどのプログラムを学習するか、技術選定の際に、プログラミング言語や関連するソフトウェアの多さに驚くことでしょう。別の記事で、プロジェクトの工程中でプログラミングの占める割合が意外と低いことを述べていますが、プログラミングを行う際に、実際プログラミング言語を扱っている割合も 100%ではありません。
例えばシンプルな Web システムの構成は以下のようになります。
上記では Laravel と Vue で実装されたプログラムを AWS の EC2 上にインストールした Nginx にデプロイして、データは MySQL で操作しています。実際の動作としては、
- ①Chrome からシステムの URL をリクエストする
- ②インターネット経由で EC2 へアクセスし、Nginx が窓口となり PHP などのプログラムを起動し処理をリクエストする
- ③プログラムが処理を実行し、必要に応じデータベースへアクセスする
- ④処理した結果(文字列や HTML ファイル)をリクエスト元に返却する
となります。そして以下はこれを開発する担当者の環境例となります。
開発の流れとして、
- ①GitHub からリポジトリをクローンし、以降資産を管理する
- ②VSCode を使ってコーディングを行う
- ③Chrome で動作を確認する
- ④必要に応じてデータベースを構築し、プログラムからアクセスする
ということになります。
————————————————–
何を言ってるかわかりますか?僕にはわかりません。…いや、まあ、わからないということもないのですが、横文字の連打で辟易しませんか?わかります、慣れもあるのですが、やはりはじめは丸暗記せざるを得ないのは事実です。そこで各用語に分類をつけて覚えることを推奨します。
人によって考え方はありますが、僕が考える技術的な分類はざっとこんな感じです。
- OS:Linux、Windows、MacOS、iOS など。
- プログラム言語:C、C++、Java、PHP、Python、Ruby、HTML、JavaScript など。
- フレームワーク:Laravel(PHP)、Django(Python)、React(JavaScript)など。
- データベース:MySQL、PostgreSQL、SQLServer、Oracle など。
- Web サーバ:Apache、Nginx など。
- クラウド:AWS、GCP、Azure など。
- ブラウザ:Chrome、Safari、Edge など。
各分類の詳細はどこかで説明するとして、このように汎化させたものを上記の図に当てはめると以下のようになります。
はじめの画像に出てきた技術的な用語と比較してこちらでは幾分か種類が削減されていることがわかります。これだけだとあまり効果は少ないかもしれませんが、ほとんどのシステムが上記分類、特に OS、プログラム言語・フレームワーク、データベース、Web サーバ、ブラウザから選定された技術をひとつずつ(プログラム言語の場合は複数あり)使っているに過ぎません。そして同じ分類であれば多少の機能は違えど、用途はすべて同じです。
OS はソフトウェアを制御する、プログラム言語・フレームワークはプログラムを実装し動作する、データベースはデータを保存する、Web サーバはリクエストを受付けプログラムを動作させる、ブラウザは HTTP 通信を行い HTML を表示する、といった用途は同じです。各分類の中で利用される技術がシステムやプロジェクトによって変わるということです。
この分類をおさえておくだけでも、見知らぬ名前が出た際にどの分類か整理するだけでも理解が早くなるでしょう。例えば、Nginx 上でプログラムを動作させていたひとが別のプロジェクトに異動になって、そこでは Apache を使っていたとしても、Apache が Nginx と同じ Web サーバであることを知っておけば、あとは起動や設定などの使い方を学ぶだけで充分扱うことができる、ということです。
分類についてざっくり知ったところで Web システム開発を志す方がこれから何かを勉強しようと思うなら、上記のうち、プログラム言語、フレームワーク、データベースからピックアップして学習すると実務に応用しやすくなります。具体的には、
- プログラム言語:HTML、JavaScript、PHP、Python
- フレームワーク:Laravel(PHP)、Django(Python)
- データベース:MySQL
あたりがニーズも多いのでオススメです。尚、プログラム言語を 3つあげていますが、HTML と JavaScript は基本的に避けれないと思ってください。まず間違いなく、どこでも使います。プログラム初心者はまずこの 2つから学習をはじめましょう。また、言語の習得の際には GitHub など Git ベースのサービスを利用することを推奨します。使ってないところの方が寧ろ少ないですからね。
また、すでに開発業務をされている方で、新しい技術を習得しようとしている方は、業務で必要なものを優先的に習得するのでよいと思います。但し、現在のプロジェクトの在籍期間が長く、プログラム言語についてすでに理解が深まっているような場合、上記分類のうち理解度が低いもの、特にデータベースについては 1種類詳しくなっておくと何かとつぶしが利くというか、どこでも重宝されます。
意外とここらへんをちゃんと理解している人って少ないんですよねぇ。
さて最後に、よく使われている技術についてリストアップしたものを以下に列記しておきます。重要度には需要が高いものの順にランク付け[1]S:必須、A+:分類中ひとつの習得がほぼ必須、A:需要が高い或いは今後需要が高まる、B:携わる業務によっては必須しているので今後の参照にしてみてください。
大分類 | 中分類 | 小分類 | 重要度 | 備考 |
OS | Windows | – | S or A+ | Mac かいずれ必須 |
OS | Linux | – | S | |
OS | MacOS | – | S or A+ | Windows かいずれ必須 |
OS | iOS | – | B | アプリケーションエンジニアには必須 |
OS | Android | – | B | アプリケーションエンジニアには必須 |
マークアップ言語 | HTML | – | S | CSS とあわせて必須 |
プログラム言語 | JavaScript | – | S | |
プログラム言語 | C | – | B | 組込みエンジニアには必須 |
プログラム言語 | C++ | – | B | 組込みエンジニアには必須 |
プログラム言語 | Java | – | A | |
プログラム言語 | PHP | – | A+ | |
プログラム言語 | Python | – | A+ | AI エンジニアには必須 |
プログラム言語 | Ruby | – | A+ | |
プログラム言語 | Swift | – | B | アプリケーションエンジニアには必須 |
プログラム言語 | Kotlin | – | B | アプリケーションエンジニアには必須 |
プログラム言語 | Flutter | – | B | クロスプラットフォーム開発 |
フレームワーク | Java | Spring Framework | A | |
フレームワーク | PHP | Laravel | A | |
フレームワーク | Python | Django | A | |
フレームワーク | JavaScript | React | A | |
フレームワーク | JavaScript | Vue.js | A | |
フレームワーク | JavaScript | Angular | B | |
フレームワーク | JavaScript | jQuery | A+ | 厳密にはライブラリ。 |
Web サーバ | Nginx | A+ | ||
Web サーバ | Apache | A+ | ||
データベース | RDB | MySQL | A+ | AWS が推奨 |
データベース | RDB | PostgreSQL | A | |
データベース | RDB | SQLServer | A | |
データベース | NoSQL | MongoDB | B | |
データベース | NoSQL | Redis | B | |
クラウドサービス | AWS | – | A | |
クラウドサービス | GCP | – | A | |
クラウドサービス | Azure | – | A | |
ミドルウェア | 構成管理ツール | GitHub | A+ | |
ミドルウェア | 構成管理ツール | GitLab | A+ | |
ミドルウェア | CI ツール | Jenkins | A+ | |
ミドルウェア | CI ツール | Circle CI | A | |
ミドルウェア | 仮想化ツール | Virtual Box | A | |
ミドルウェア | 仮想化ツール | Hyper-V | A | |
ミドルウェア | 仮想化ツール | Docker | A | DevOps では必須 |
開発ツール | IDE | VSCode | A+ | |
開発ツール | IDE | Xcode | B | iOS アプリでは必須 |
開発ツール | IDE | Atom | B | デザイナやフロント向き |
開発ツール | IDE | InteliJ など JetBrain 社製各種 | A |
脚注
↑1 | S:必須、A+:分類中ひとつの習得がほぼ必須、A:需要が高い或いは今後需要が高まる、B:携わる業務によっては必須 |
---|