プログラミング言語の違いについて 未経験者が知っておくべきこと

未経験からプログラミングを学ぶ上で、
何の言語を学ぶかを検討する際は、
言語によって何が違うのかを考える必要があります。

私は本格的に勉強を始めて今日で一ヶ月ですが、
これまでに学ばせて頂いた内容のアウトプットとして、

「扱う商材や規模による違い」
「需要と供給の違い」
「ブラウザとサーバーのどちらを扱うかの違い」

という視点から話をしていきたいと思います。

扱う商材の規模による言語の違い

私は元々大手メーカーの製造現場で働いており、
現場のエンジニア、同期のカメラメーカーで働いている
エンジニアの話を聞くと、量産型の製品のシステムは
大半がC言語、C++の言語で書かれています。

C言語は、大学や高専の授業で教えられる定番言語で、
大企業の開発現場でもかなり使用されている一方、
WEB関係の開発会社ではほとんど使われません。

一番の要因は、C言語はコンパイルという
「機械語と人が入力する言葉の翻訳作業」を挟む為、
非常に開発するのに手間や時間がかかるからです。

その一方で、情報の通信速度自体は
最近流行りのモダンな言語の数十倍はあると言われています。

工業製品は一製品あたりの製造単価が高く、
開発期間が3年4年かかるのも当たり前な世界なので、
性能が競合に劣り売れないと、損失が凄まじい金額になります。

(プラスチックの液体を流し込んで成型する
モールド成型用の金型は、パーツ一つ分だけでも
400万円以上かかってしまいます)

なので、絶対に失敗やエラー・バグなどは許されませんし、
一定以上の品質を追求することは至上命題になります。

そして、WEB業界のように、次から次へと職場を変えたり
数年で転職をするような世界ではない為、ひとつの技術を
長期間かけて極めていくキャリアを積む人が多数。

逆に、WEBプログラミングでは、開発者達の手で
より効率の良い新しい言語が生み出されることが多く、
一つの言語を3年5年扱う人よりも、半年一年で
次々と新しい技術を習得していく人が多いです。

実際、それくらいのスピード感で勉強をしないと、
自分が覚えたり扱い始めるよりも早いペースで
再び新しい技術が世の中に生まれてしまいます。

代表的な言語は、HTML/CSS、Javascript、
Ruby、PHPやSQLなど、ブラウザに表示をする言語と
サーバーとの通信を行う言語になります。

このように、扱う商材の種類や規模により
サービスや製品を作る開発スパン、技術の進歩のスピードが
全く異なるため、扱う言語が異なってきます。

需要と供給の違い

最近はプログラミングスクールが大量に増加しており、
例えばサーバサイドの言語で、RubyとPHPがありますが
多くのスクールでは、Rubyの教育が推されています。

これは、Rubyが新しい言語で、一時期積極的に使われ始め、
フレームワークを覚えれば、大して知識が十分に無いままでも
とりあえずアプリケーションを作り始めることが出来るなど、
初心者がWEBサービスを作るには都合が良かったからです。

しかし、先ほどの大企業の製造業にC言語が多いのと同様、
規模の大きな事業会社さんの社内システムやサービスは、
javaやPHPの、古いバージョンの頃に書かれたコードが
そのまま使われているところも、沢山あります。

大きなシステムであるほど、一度コードを納品した後、
根本的にアルゴリズムをゼロから全部書き換えることは
非常にリスキーな為、既存のプログラムを修正することが
ベースになる、そういう案件も市場には沢山あります。

現に、Rubyを使って新規事業の立ち上げをする件数は
減る傾向にあり、ウェブカツ主催者のかずきちさんは、

「スクールが市場に初心者を大量に送り込んだ影響で、
Rubyを扱うプロジェクトで、いざという時に
プロジェクトを回せる人が居ない状況になっている」

という風に考察されています。

他にも、WEBサービスと比較される言語のひとつに、
SwiftやObject-Cなど、スマホアプリを作る言語があり、
これもまた、色々なスクールでコースが開講されています。

しかし、言語の名前が市場で聞かれた時期は同じでも、
Rubyなどに比べて、案件の母数がとても少ないと、
友人でスマホアプリ開発歴2年の方が仰っていました。

原因は、iphoneのアプリを作るビジネスをする会社が、
通常のWEBサービスを作る会社に比べて少ないからです。

かといって、他の言語より覚えるのが簡単だったり、
「iphoneアプリなので、より稼げる」という訳でもありません。

このように、同じプログラミング言語でも、

・需要(お客様)がある言語と無い言語
・供給(競合する相手)が多い言語と少ない言語

にはっきり分かれる為、ゼロから学ぶ言語や職場を選ぶ際、
違いをしっかり考える必要があります。

ウェブカツは、PHPやjavascriptを厚めに学び、
フレームワークは使いつつも、ゼロからも書けることを
推奨して叩き込んでいることから、私の予想としては、

「仕事としての面白みやモダンな言語を使っているかよりも、
世に供給の少ないエンジニアになり、人手が特に足りない所に
高い技術量を売り込むことを優先しよう」

「エンジニアである以前に、俺達は商売人である」

というメッセージを送っているのではないかと予想します。

この辺は、恐らく3カ月目や4か月目に明らかになると思うので、
また新しい学びが見つかり次第、記事を挙げたいと思います。

ブラウザを操るか、サーバーを操るかの違い

扱うプログラムの種類の違いによって
プログラマーの属性を大きく分ける一つの指標が、

・ブラウザ上で情報を処理し、表示する言語を扱うか
・サーバーとの通信、サーバ内の情報処理をする言語を扱うか

という点であり、前者はフロントエンジニア、
後者はバックエンドエンジニアと言われています。

この中で、バックエンドエンジニアは既に供給が多い状態、
フロントエンドもjQueryが少し書ける程度の人は
世の中に既に腐る程いる為、なかなか単価が上がりません。

最近はフリーランスになろうと煽導する人がいたり、
1カ月や2カ月で独立しましょうと謳う人もいますが、
大半が、フロントエンジニアの初級レベルであり、
上記よりも更に何倍も競争が激しくなります。

クラ〇ドワークスやラ〇サーズなどの案件は
一般の相場よりもかなり安いので、出稿企業に
案件で買い叩かれてしまっても、文句は言えません。

ウェブカツで推奨されているのは

「バックエンドも多少分かり、1からフルスタックで
コードを全部書いて開発できるフロントエンジニア」

ですが、その本質的な部分は、
「いかに他の人と差別化を図ることができるか」
という点ではないかと思います。

マーケティングができる人、元々経営者だった人、
デザインが他の人よりもできる人は、それが武器になりますし、
競争の無い環境で戦うことは、商売の基本中の基本です。

このブログに辿り着く人の大半は、
プログラミングの初心者や未経験者だと思いますが、
プログラミングの言語の違いや取り組む対象を考える前に、

まず、今の自分にどんなスキルがあるのかを棚卸して、
エンジニアスキルと組み合わせて戦える方法が無いか、
自分だけが取れるポジションが無いか、戦略を考えましょう。

まとめ

個人的には、プログラミングをゼロからやると決め、
違う言語の中から何をやるかを選ぶ際、
最初は、儲かるお金を基準にした方がいいと思います。

勉強をしたり、ものを作ること自体は楽しいです。

ですが、仕事をして、人生を変えようと思った時、
お金を一番大事な決断の基準にすると腹を決めておかないと、
大事なところで、判断を誤ってしまいます。

勉強時間も、皆忙しい中、捻出しているだろうし、
いつまでも自由に勉強をしていられる環境は、長くは続きません。

なので、プログラミング言語の違いを踏まえて
取り組む対象を決めたら、ダラダラやらずに、
短期集中で取り組みましょう。