近年、世界各地で突如「みんなでプログラミングを書こう」というブームが吹き荒れている。アメリカ大統領のオバマでさえJavaScriptを書いている始末だ。しかし、プログラミング(と、勤務時間中のぶらぶらネットサーフィン)で生計を立てている一介のdeveloper(いわゆる「ソフトウェアエンジニア」の、より洒落た言い方である)として、プログラミングを学びたい人々に一つ重要なことを伝えておきたい。最初のプログラミング言語は慎重に選べ、と。

ソフトウェアエンジニア(中国では「程序员」や「码农」と呼ばれる)の業界では、「文人相軽」の傾向が非常に深刻だ。プログラミングのあらゆる分野には、複雑に絡み合った「蔑視の連鎖」が存在している。プログラミング言語、エディタ、プラットフォームから、{をifと同じ行に書くか次の行に書くかという細部に至るまで、異なる陣営の人々は互いに見下し合うのが習慣となっている。その中でも「お前はどのプログラミング言語を使っているんだ?」は、誰もが最も熱中する蔑視の連鎖だ。ゆえに、プログラミングの世界に足を踏み入れたばかりの初心者にとって、プログラミング言語の選択を誤れば、最初から蔑視の連鎖の最下層に落ちてしまうことになる。

ソフトウェアエンジニアの蔑視の連鎖は、一体どれほど凄まじく、どれほど残酷なのか。

63918611gw1enbo8tfia9j20jg0dw753

程序语言篇

Functional Programming を理解しているエンジニアは、いつもデザインパターンを口にするエンジニアを見下す。いつもデザインパターンを口にするエンジニアは、「こう書いたら OO じゃないよ」と言うエンジニアを見下す。「こう書いたら OO じゃないよ」と言うエンジニアは、「は?何がオブジェクト指向?重複するコードを1つの function にまとめればいいだけじゃないの?」と言うエンジニアを見下す。「は?何がオブジェクト指向?重複するコードを1つの function にまとめればいいだけじゃないの?」と言うエンジニアは、同じコードをあちこちにコピペするエンジニアを見下す。同じコードをあちこちにコピペするエンジニアは PM を見下す。

静的型付け言語を使うエンジニアは、動的型付け言語を使うエンジニアを見下す。

アセンブリ言語を使うエンジニアはC言語を使うエンジニアを見下し、C言語のエンジニアはC++のエンジニアを見下し、C++のエンジニアはJavaとC#のエンジニアを見下す。JavaのエンジニアとC#のエンジニアは互いを見下し合い、C#のエンジニアはVisual Basicのエンジニアと、C#を「C井」と読むエンジニアを見下す。C#を「C井」と読むエンジニアは、HTMLをプログラミング言語だと思っているデザイナーを見下す。

Python 3 を使うエンジニアは、まだ Python 2 を使っているエンジニアを見下す。Python 2 を使うエンジニアは、UnicodeEncodeError に遭遇するエンジニアを見下す。

iOSアプリを開発するエンジニアはAndroidアプリを開発するエンジニアを見下し、Androidアプリを開発するエンジニアはWindows Phoneアプリを開発するエンジニアを見下す。

Swift歴1年のエンジニアはObjective-C歴5年のエンジニアを見下し、Objective-Cを使うエンジニアは、PhoneGapでネイティブアプリにパッケージしているエンジニアを見下す。

React.js を使うエンジニアは AngularJS を使うエンジニアを見下す。AngularJS を使うエンジニアは jQuery を使うエンジニアを見下す。jQuery を使うエンジニアは Vanilla JavaScript を使うエンジニアを見下す。Vanilla JavaScript を使うエンジニアは IE のユーザーを見下す。

debugger を使えるエンジニアは assert を使うエンジニアを見下す。assert を使うエンジニアは print() しかできないエンジニアを見下す。console.log() でデバッグするエンジニアは alert() でデバッグするエンジニアを見下す。

Ruby on Railsを使うエンジニアは、他のすべての言語を使うエンジニアを見下す。

何だって?Rubyだって?RubyはRuby on Railsの単なるフレームワークだ。プログラミング言語なんかじゃない。

すべてのエンジニアはPHPエンジニアを見下す。

工具篇

テキストエディタを使うエンジニアは、IDEを使うエンジニアを見下す。

Vimを使うエンジニアはEmacsを使うエンジニアを見下し、Emacsを使うエンジニアはVimを使うエンジニアを見下す。VimとEmacsのどちらを使うエンジニアも、他のすべてのエディタを使うエンジニアを見下す。Atom、VSCode、Sublime Textを使うエンジニアは、Windowsのメモ帳を使うエンジニアを見下す。

Android Studio または IntelliJ IDEA を使うエンジニアは Eclipse を使うエンジニアを見下す。Eclipse を使うエンジニアは NetBeans を使うエンジニアを見下す。

コードのインデントにスペースを使うエンジニアはタブを使うエンジニアを見下し、タブを使うエンジニアはスペースとタブを混在させてインデントしているエンジニアを見下す。

GitかMercurialを使うエンジニアはSubversionを使うエンジニアを見下し、Subversionを使うエンジニアはDropboxでバージョン管理をしているエンジニアを見下し、Dropboxでバージョン管理をしているエンジニアはバージョン管理が何かすら知らないエンジニアを見下す。

GitHubを知っているエンジニアはGitHubを知らないエンジニアを見下す。GitHubにprivate repoを持っているエンジニアは、無料のprivate repoが目当てでBitBucketを使うエンジニアを見下す。

Zshを使うエンジニアはBashを使うエンジニアを見下し、Bashを使うエンジニアはCygwinを使うエンジニアを見下し、Cygwinを使うエンジニアは「コマンドプロンプト」を使うエンジニアを見下し、コマンドプロンプトを使うエンジニアはGUI環境を使うエンジニアを見下す。

IRCを使うエンジニアはHipChatを使うエンジニアを見下し、HipChatを使うエンジニアはSlackを使うデザイナーとPMを見下す。

reStructuredTextでドキュメントを書くエンジニアは、Markdownでドキュメントを書くエンジニアを見下す。Markdownでドキュメントを書くエンジニアは、HTMLでドキュメントを書くエンジニアを見下す。HTMLでドキュメントを書くエンジニアは、ドキュメントを書かないエンジニアを見下す。そしてLaTeXでドキュメントを書くエンジニアは、すべてのエンジニアを見下す。

Nginxを使うエンジニアはApacheを使うエンジニアを見下し、Apacheを使うエンジニアはIISを使うエンジニアを見下す。

Sparkを使うエンジニアはHadoopを使うエンジニアを見下す。Hadoopを使うエンジニアは、数GB程度のデータを処理するのにHadoopを使うエンジニアを見下す。たった1GBのデータをHadoopで処理するエンジニアは、NoSQLを使うエンジニアを見下す。NoSQLを使うエンジニアは、リレーショナルデータベースを使うエンジニアを見下す。リレーショナルデータベースを使うエンジニアは、Excelを使うPMを見下す。

Docker でサーバーをデプロイするエンジニアは、Ansible または Puppet でサーバーをデプロイするエンジニアを見下す。Ansible または Puppet でサーバーをデプロイするエンジニアは、Fabric でサーバーをデプロイするエンジニアを見下す。Fabric でサーバーをデプロイするエンジニアは、手動で SSH するエンジニアを見下す。

OS 篇

Mac OS Xを使うエンジニアはLinuxを使うエンジニアを見下し、Linuxを使うエンジニアはWindowsを使うエンジニアを見下す。

Debianを使うエンジニアはUbuntuを使うエンジニアを見下し、Ubuntuを使うエンジニアはLTSではない版のUbuntuを使うエンジニアを見下す。

硬件篇

MacBook Pro Retina を使うエンジニアは MacBook Air を使うエンジニアを見下す。MacBook Air を使うエンジニアは ThinkPad を使うエンジニアを見下す。そして Raspberry Pi を使うエンジニアは MacBook Pro Retina を使うエンジニアを見下す。

Dvorakキーボードを使うエンジニアはMacキーボードを使うエンジニアを見下し、Macキーボードを使うエンジニアはQWERTYキーボードを使うエンジニアを見下し、QWERTYキーボードを使うエンジニアはQWERTYキーボードが何かを知らないエンジニアを見下し、QWERTYキーボードが何かを知らないエンジニアはペンタブレットを使うデザイナーを見下す。

Aeronチェアに座るエンジニアは普通のオフィスチェアに座るエンジニアを見下し、普通のオフィスチェアに座るエンジニアは自分と同じ普通のオフィスチェアに座っているPMを見下す。そして立ったままコードを書くエンジニアはAeronチェアに座るエンジニアを見下す。

职场篇

ハードウェアをやっているエンジニアは、ソフトウェアをやっているエンジニアを見下す。

OSを開発するエンジニアはWeb系エンジニアを見下し、Web系エンジニアはデスクトップアプリを開発するエンジニアを見下す。

バックエンドエンジニアはフロントエンドエンジニアを見下す。

エンジニアとデザイナーは互いに見下し合っている。

Test-Driven Developmentを信奉するエンジニアは、先にコードを書いて後からテストを追加するエンジニアを見下す。先にコードを書いて後からテストを追加するエンジニアは、テストを書かないエンジニアを見下す。テストを書かないエンジニアは、要件をまた勝手にめちゃくちゃに変えるクソPMを見下す。

資格を持たないエンジニアは、資格を山ほど取っているエンジニアを見下す。

出勤時にラフな私服を着るエンジニアは、出勤時にスーツを着るエンジニアを見下す。出勤時にスーツを着るエンジニアは、出勤時に学科Tシャツを着るエンジニアを見下す。

———

上記のむごたらしい蔑視の連鎖を見てもなおコーディングを学びたいという気持ちが揺るがないなら、最も重要なことを忠告しておく。先に彼女を作れ。それからプログラミングを学びに来い。ソフトウェアエンジニアになったら、彼女はもう作れなくなるのだから。

原文出处:http://vinta.ws/blog/695