実はよく分かっていなかった言葉を調べる
僕は「プログラマ」なのか?「エンジニア」なのか?
目次
実はよく分かっていない言葉が沢山ある
皆なんか当たり前に「インテグレーターとしてインフラからプラットフォーム、ミドル (ウェア) からアプリまでワンストップでソリューションを提案」みたいなことを言っててスゲーなーと思っている。皆その言葉の意味を正確に同じように理解してるの?だとしたら俺の勉強不足?
そう思って勉強することにした。
職業的な言葉
プログラマ・コーダー
- プログラムを書く人のこと。プログラミングする人、コーディングする人
- よく「プログラムを書くだけの人」と表現されるが、実際それだけのスキルでやれる仕事はない
- 「設計書どおりにプログラムを書くだけ」と、さも簡単な作業みたいに言われることもあるが、それはちっとも簡単な作業ではない
- 自然言語に例えれば、「大体の話の流れは草稿に書き起こしてあるので、あなたはそれを最終原稿として書くだけです」って言われてるようなもの。草稿から原稿に昇華させていく場所に創造性や論理的思考力が必要ないはずがない
- なんならココが一番難しいところだと思うのだが、勘違いされているところがある
- 本当に「(自分で考えたりすることなく) プログラムを書くだけ」を仕事にするなら、タイプ速度が爆速であるとか、そういうスキルがないと成り立たない仕事だと思うんだけどな…
- でも「SE」という言葉と対比させると、「設計工程に携わらない人」「実装とテストを担当する人」みたいな分け方がされがちかな
- 参考 : プログラマ - Wikipedia
システムエンジニア・SE
- 先に関連用語の整理
- エンジニアリング : 工学。工業技術。科学技術を実用化し、人の生活に役立てること
- IT : Information Technology。情報技術。コンピュータをベースにして情報を伝達・処理するような科学技術
- よくいう「エンジニア」は「IT エンジニア」「システムエンジニア (SE)」「ソフトウェアエンジニア」あたりを指す
- だいたいは要件定義 (顧客要望をヒアリングしてシステム実現方式を考える) → 設計 → 開発 → テスト → リリース → 保守・運用 と一連の工程を担当する。また、その進捗を管理する (プロジェクトマネジメント)
- なんでも屋
- 参考 : システムエンジニア - Wikipedia
コンサルティング・コンサルタント
- コンサルティング : 「相談」の意
- IT コンサルタント : IT を切り口に、ビジネスや経営を援助する仕事
- システムエンジニアが「要件定義」前後から担当するのに対して、コンサルはもう少し手前、企画・営業寄りといえるだろうか
- 「困ってることあります?」→「それ、ウチの IT 技術でこうやって解決できますよ!」「コレを導入すれば御社のビジネスがこのように向上!」みたいなことを言う
- 概念的なこと、「そのツールで何が出来るか」は多少知っていても、プログラミングスキルを持たない場合が多く、「そんなの実装できねえよ…」というような案件を SE に持ち込んでくる人
- 参考 : コンサルティング - Wikipedia
インテグレーション・インテグレータ
- インテグレーション : 「統合」の意
- システムインテグレータ (SIer) : 情報システムの企画、設計、開発、構築、導入、保守、運用などを一貫して請け負う会社のこと
- 「システムインテグレータ」企業に勤めて、「システムインテグレーション」業務を行うのが、「システムエンジニア」という人・職種、といった関係性
- 営業や企画、設計などの上流工程や、顧客窓口やプロジェクトの進捗管理、下請け企業との受発注管理など管理・調整業務に特化することが多い
- 複数のサブシステムを1つのシステムとして統合し機能するようにすること
- なんでも屋企業
- 参考 : システムインテグレーション - Wikipedia
運用
- 日々システムを動かし続けるようにする仕事
- 監視して障害を検知したら復旧させる
- 「運用」のみを仕事にしている人は、プログラム改修は行わない。改修するのは「保守」担当
保守
- 運用トラブルを回避するための予防措置を取ったり
- 障害の原因を改修する、調整する、修理する仕事
- 老朽化対応、リプレイス
- ネットワークやサーバのメンテナンス
職業・職種・業界・業種
色んな文献読んだけど微妙に定義がズレてて気持ち悪いけど、だいたい以下のような認識でいれば大丈夫だと思う。
- 職業 : どうやって生活しているのか?
- 大抵は「会社員」「自営業」のいずれかで答えれば良い
- 職種 : あなたはどんな仕事をしているのか?職務の種類・肩書
- 「事務職」「営業職」「企画職」とか答えるヤツ
- 専門性が高い仕事だと「エンジニア」「パイロット」のように答えても良い
- エンジニアの場合は自分の思いによって「事務職」と答えても間違いではないし、コンサル寄りなつもりなら「企画職」でも良いかもしれない
- 業界 : 何をする会社なのか?
- メーカー : 有形のモノを作る仕事
- 小売 : モノを消費者に売る
- 商社 : モノを小売業者に売る
- サービス : モノが残らないモノを売る。接客業や士業、IT エンジニアが該当する
- 業種 : どういう会社なのか?
- 「農業」「建築業」などと答えるヤツ
- だいたい 「ソフトウェア業」「情報通信業」「情報処理サービス業」 とかその辺で答えれば良い
- 参考 : 統計局ホームページ/平成26年経済センサス‐基礎調査 産業分類一覧
ということで、「俺の職業は会社員。職種は (IT・システム) エンジニア。業界でいえばサービス業に属する。会社の業種でいうと「情報通信業」「ソフトウェア業」にあたる」なんて答えれば合ってるっぽい。
レイヤーを分ける言葉
インフラ・インフラストラクチャ
- 下支えするもの・基盤の意
- IT の文脈では、ネットワークやハードの全体的な構成を指すことが多い
プラットフォーム
- 基礎・土台・足場・基盤
- 「インフラ」も「プラットフォーム」も基盤じゃねえか!と思うが、コンピューティングの文脈では、「インフラ」がより外側の概念で、コンピュータ1台の中を見るのが「プラットフォーム」な感じ)
- ハードウェア、OS などを指す
- ハードや OS レベルの設計・パラメータ調整・構築みたいな感じ
- 参考 : プラットフォーム (コンピューティング) - Wikipedia
ミドルウェア
- OS とアプリの中間に位置するソフトウェアのこと
- アプリほど特化せず共通する機能を提供するソフト → DB とか、監視ソフトとか
- アプリケーションを制御するソフト (WebLogic や Apache などのサーバ)
- DB や Apache サーバなどは、そのものは「特有の業務に向けて作られたプログラム」ではないので「ミドルウェア」に属する
- 何らかの「アプリケーション」があって、そのアプリがやりたいことを支援する立場にいる、もう少し汎用的なツール、という感じ
アプリケーション
- ソフトウェア
- 業務に応じて作成されたプログラムのこと。「適用」という言葉の意味から考える
- 大抵は「自分で書いた・内製のプログラムコードが含まれる、目的となる一連の処理をこなせるソフトウェア」の意味で「アプリ」と呼ぶ
サーバ
ウェブサーバ
- HTTP リクエストを解釈し HTML を返したり、CGI を呼び出したりするソフト
- および、そういうプログラムが動作するサーバコンピュータのこと
- 例 : nginx・Apache
アプリケーションサーバ (AP サーバ)
- Web サーバからのリクエストに応じてビジネスロジックの結果を返すアプリ
- そういうアプリを管理するミドルウェア
- そういうミドルウェアが動作するサーバコンピュータ
- 極端にいえば、アプリケーションサーバは HTTP リクエストを直接解釈できなくても良くて、何らかの方法で呼び出されたらビジネスロジックを処理して応答する部分と思えば良い
なぜウェブサーバと AP サーバを分ける必要がある?
- 実質的に、「Web サーバ」の機能がセットになっている「AP サーバ」が多いので両者の区別が付けづらくなっているが、これらの Web サーバ機能は「おまけ機能」。最大同時接続数が少なかったりする
- Tomcat は Java サーブレットコンテナであり、Web サーバとしての機能もオマケ程度に持っている
- WebLogic は Java アプリを管理できる
- IIS は Web サーバ機能もアプリサーバ機能も持っていてどちらにも分類されうる
- 大量リクエストをさばくためには、プロセスやスレッドがネックになりうる。ココに特化したミドルウェアおよびサーバコンピュータを用意しておき (= ウェブサーバ)、そこで処理した要求に応じて動的コンテンツを処理・返す AP サーバコンピュータが別にいた方が、安定するし効率が良い
- 参考 : ミドルウェア(Web、AP、DB)について知ろう | Think IT(シンクイット)
- 参考 : なぜAPサーバーをWebサーバーとして利用しないのか - Qiita
- 参考 : APサーバの役割とは?Webサーバとの違いをしっかり理解しよう! | キツネの惑星
- 参考 : いまさら聞けないNode.js | さくらのナレッジ
- 参考 : なぜ、Webサーバが必要か説明できますか? - Qiita
いったん以上
その言葉の意味を正確に捉えていないと、僕はその言葉をうまく使えない。
自分の解釈があいまいな状態でその言葉を使うと、聞き手が考えている範囲とズレていたりして、「そういうつもりじゃなかった」「そこまでは言っていない」といった認識齟齬が発生しやすい。
「自分はココからココまでの範囲で、○○という言葉を使っています。△△の領域は別の話だと思っています」と説明できる状態が、話を正確に理解しあい、円滑にやり取りを進めるために望ましいと思う。