Binary Diary

Take Agile で

プログラミング?コーディング?エンジニアリング?それぞれの言葉の違いを定義してみる

どうもこたにんです。

お風呂に入ってたらふと思ったのです。
「プログラミング」「コーディング」の違いってなんだろう?
と思ってつぶやいてみたら、見事に煽られまして。


というわけで、したためます。
今回したためるのは、プログラミング、コーディング、そしてエンジニアリングの違いについてです。

はい、目次どん!

 

まずは言葉の意味から

プログラミング

プログラミング (コンピュータ) - Wikipedia
Wikipediaがあった、大勝利。

読んでいき、すごくざっくりした説明で丸めるとこんな感じ。
「設計〜実装〜テスト〜リリース〜保守」までひと通りやること。
プログラミング言語でコードを書くだけではなく、設計から分析までやるのがプログラミングらしい。

コーディング

まさかのね。

f:id:Kotanin0:20181225012039p:plain
プログラミング、に転送されたよね。

転送先をよーく読んでみると

プログラミングの過程で、ソースコードを記述することを特に指してコーディングという。

と書いてあった。
なるほど、コードを書くことに限定してコーディングと呼ぶらしい。

エンジニアリング

エンジニアリングについても今回のテーマに含めます。

f:id:Kotanin0:20181225013645p:plain
曖昧さを回避させられた。
ブリコラージュ的な部分もあるけど、今回は技術の方に潜ってみた。

技術 - Wikipedia

編み出す技術(エンジニアリング)

エンジニアリングengineering)とは(略)。現在の意味は、自然界の現象を現実的な人間の手段として利用するため、道具(ツール)や体系(システム)をつくる(設計(デザイン)・構築(ビルド)する)という目標(ゴール)があり、そのなかでの「設計や構築の方法」をエンジニアリングという。現代ではエンジニアとは、自然法と社会の必要性の制限の中でテクノロジーを創り出す人のことをいう。

なんかそれっぽいことが書いてある、いいぞ。
おまけにエンジニアという人のことも補足してくれている、素敵。

あれれ?これだけ聞くと違いがよくわからないぞ?

そうなの。
プログラミング、コーディング、は明確な役割の違いを認識できたからOKなのだけど。
プログラミングとエンジニアリングが混同してきました、これはまずい。

今この言葉の説明を図に起こすとこんな感じ。

f:id:Kotanin0:20181225180914p:plain

プログラミングは、設計から開発までを行うこと。
エンジニアリングは、設計や構築を行うこと。

プログラミングとエンジニアリング、どちらも意味合い的にはほぼ同じに感じます。
たしかにこれは、誤解を招くというか、言葉選びが難しくなる。

言葉を再定義するためにちょっと深掘り

3つの言葉を担っている人を考えてみる

ことエンジニア界隈においては、上記3つの言葉の使われ方が、本来の言葉の定義と異なる気がします。
エンジニアリング、プログラミング、コーディング、それぞれを担っている人を考えてみる。

エンジニア=設計からリリースまで行う、システムエンジニアとも言う、実装もする人もいればしない人もいる
プログラマープログラミング言語でプログラムを書く、設計通りに書く人もいれば設計しながら書く人もいる
コーダー=HTML, CSSなどのフロントエンド部分を書く、静的なページを作る人を指すことが多い。

なんとなく日本の標準で捉えたときは、上のような役割になっている気がします。
これは、前項の言葉の説明とは少しズレています。

f:id:Kotanin0:20181225181318p:plain

この図が合っているかは置いておいて、こういう捉え方をするとしっくりくるのは事実です。
システムエンジニアが案件を持っていて、プログラマーが実装を担い、コーダーがその一部の実装を担う。

じゃあコーディングとは、HTMLを書くことを指すの?
プログラミングとは、それ以外の実装を指すの?
エンジニアリングは案件を動かせばいいの?

ヒャーややこしい、迷走しそう。

明確な定義はなく言葉を選ぶ人の基準次第な気がしてきた

おそらくこの言葉たちに明確な定義はない、RFCにもない。
ただ、社内文化や用語、近しい人たちの呼称などで、使い方が変わっていくのかもしれない。
わたしの近くですら、コーディング・プログラミングの言葉から散らばっている。

対象を明確にすれば良いのでは?

考え方を変えてみる。

今この言葉たちを能動的な言葉として捉えていた。
能動的というのは、「自分が」「プログラミングを」「する」のようなかたち。

そうではなく受動的な言葉としたらどうか。
「誰/何が」「プログラミングを」「される」のようなかたち。

プログラミングをされるのは、要件はあるが技術的実現方法や設計が不明確なもの。
プログラミングによって、言語選定からクラス設計、アルゴリズムの実装などまで行う。

コーディングをされるのは、要件が固まって動きを実現するだけの開発タスク。
コーディングによって、要件を機械で解釈して動くことができるように、コードを書く。

エンジニアリングをされるのは、解決したい課題。
課題は技術的なもの、そうでないもの、どちらもある。
CIツールの導入も、環境改善も、人材採用も、エンジニアリング。

お、なんかいい感じで定義できそうたぞ...!?

いよいよ言葉を再定義する

各言葉を、わたしの定義で、まとめます!

プログラミングとは

プログラミングとは、技術的な計画を立てて、それを技術的に実行することである。
技術的な計画というのは、要件に対して取れる手段を用意して組み合わせていくこと。
検討したり計画したりするので、頭を使う。

コーディングとは

コーディングとは、プログラミング言語を用いて、設計通りに動くプログラムを実装することである。
設計が整っており、それを実際にプログラミング言語で記述するという具体的な行為のこと。
指示通り書くだけだから頭をあまり使わないと言いたいけど、頭を使う。

エンジニアリングとは

エンジニアリングとは、課題に対して、様々な手法で解決に取り組むことである。
課題の解決には、ツールの導入やリソースの拡充、メンバーのメンタリングなど、手法は様々。
課題がどこにあるかという着眼点を常に持ち続けるので、頭を使う。

まとめ

プログラミング、コーディング、エンジニアリング、3つの言葉について再定義しました。
全部すなわち、頭を使う。

もとい。
この定義が絶対的に正しいわけではなく、あくまで私の中でのひとつの解釈として。

言葉の意味に囚われすぎず、かといって無闇矢鱈に使わないように。
自分自身の中で確固たる定義をもって扱っていく、そしてそれを伝えていく。
そうすることによって、認識のズレが少なくなっていくのではないでしょうか。

「コーディングをプログラミングしてエンジニアリングする」
この文章を混乱することなく読み解けたら、本記事のインプットは達成です。