
こんにちわ。SESで10年の経験があるヒロユキと申します。
SESとは客先に常駐してプログラミングをする職業になります。(業務委託という名の派遣)
このSESの場合
- 管理系の仕事をすることはまずない
- 次々に違う現場になることが多い
という特徴があり、結構色々な言語をやることになります。
個人勉強などでキャッチアップしている人には及ばないかもしれませんが、ある程度色々なプログラミングの経験はあるつもりなので難易度のランキングを作ってみました。
自分の経験について
何故この記事を書こうと思ったかというと、ちょうどプログラムのバイトのためにやったことがある言語やFWを履歴書に書いていたところだったからですw。
履歴書から転記になりますが、自分の経験は以下の通りになります。
言語
VB6.0、VB.net、Java、C、C++、C#、Scala、TypeScript、JavaScript、COBOL、ExcelVBA、HTML、Ruby、Python、アセンブラ、PHP、式言語
FW
jQuery、React、ASP.NET、Camel、Spark、Spring、Laravel、Django、LotusScript、JSP、Unity
全く知らん
Go、Perl、Kotlin、Objective-C、Swift、FORTRAN、Delphi、LISP
見ての通り、スマホ系の開発言語はほぼ未経験ですのでランキングに含められません。
あと
- HTMLをプログラム言語に含めるの?ならバッチやbash、SQLも含めるべきじゃないか?
- スクリプト言語はスクリプトであってプログラミング言語じゃねえ
- VB6とVB.netはフレームワークだから、まとめてVBだろ
とかベテランから見ると色々ツッコミがありそうですが、一旦上で上げた言語でランキング付けしようかと思います。
難易度☆
HTML
タグとルールを覚えていけばいいだけなのと、圧倒的にデバッグがしやすい。(ブラウザで開いてみればいいだけ)なので段違いで習得が楽なはずです。
フロントエンドは楽勝と言われるのも、この辺のデバッグの容易さとかですよね。あと解読も非常に楽ですね。
CSSとかを使用して綺麗に書こうと思ったらセンスや経験が問われることになりますが、1ヶ月もやればほぼ理解できると思います。
難易度☆☆
PHP
多少バックエンドの処理も入ってくるが、基本はHTMLに埋め込みだし、プログラム言語の中では相当楽なイメージ。
構文も複雑なのはまったくない。自分はJava→PHPと入ったが、初日からプログラムが書けるくらいでした。アローや文字列の連結など、独特の書き方がちょっと手間取ったくらいです。
開発環境もXAMPP、Xdebugでお手軽に作れます。
フレームワークはLaravelをやったことがあるが、覚えてしまえば一番楽でした。MVCを使用したフレームワークをやったことがないと、ファイル構成などが訳わからんくて難しいかもしれないですね。
VB6.0、ExcelVBA
.NET以外のVBということにしてください。.NETだけ外したのは、ぶっちゃけC#のほうが近いくらい別物だからです。
フレームワークとしてフロントエンド作成も対応してますが、あれはUI操作でできるのでHTMLよりむしろ楽かもしれない。
焦点にしたのはバックエンドですが、returnがなかったりして書き方が独特なこと以外は難しい点はない。スクリプト言語経験者からすると、型宣言とかが戸惑うかも…?くらい
ちなみにGASも似たようなもんなのでここに含めます。
開発環境が作りにくいので、そこが一番の難敵かもしれない。
Ruby
ほぼPHPと同じような感じという記憶しかないw
自分は一時期RPGツクールの開発にハマっていて、そこでRubyをガッツリ書いていましたが、文法も素直な感じで特に苦戦した覚えはないですね。
Railsはチュートリアルだけやったんですが、Djangoとほぼ同じ感じでした。
難易度☆☆☆
Python
機械学習とかやるなら別格で難しいと思いますが、普通に使うのだったらPHPとかVBとほぼ変わらないです。
流行りと言われている割には、日本では案件はあまりないらしい。(知り合いのフリーランス曰く)
構文的には、ネストが{}じゃないのがカルチャーショックでしたが、慣れればむしろ見やすかったかも。
pipを使用した環境作成は若干手間取った記憶があります。
npmやcomposerとかをやった今ならスッと入れるかもしれませんが、初心者は結構手間取るかも。
TypeScript、JavaScript
JavaScriptとかは楽勝の代表格だと思うのですが、ES6の習得に結構苦戦したので、この位置にしました。
無名関数、アロー関数、スプレッド構文とかそのへんですね。最初マジわからんかった。
jQueryは書き方(呼び出し方)が非常に特殊で最初訳わからなかったけど、なれると楽ですね。
Reactは、reduxまで手を出すなら難易度☆4かなあと思います。ファイル構成訳わからん。Vueは未経験…。
難易度☆☆☆☆
Java
JavaはC言語と並んで最難関と言われがちですが、書くのが面倒なだけで割と理解しやすいと思います。
参照型とかがとっつきにくいのでスクリプト言語よりは難しいと思います。(equalsと=の違いとかでつまずいてた記憶もあります。)
継承とか抽象化みたいなクラス操作も割と簡単に理解できると思われる(解読しやすいとは言っていない)。
環境作成も比較的楽な気がしますね。外部参照の追加とかが最初苦戦した記憶があります。
Springフレームワークは直感ではわかりにくい部分がありますね。特に依存性注入周りのところは未だにしっかり理解しているか怪しい。
VB.net、C#
Javaと比較するとちょろいと言われる事が多いですが、個人的には同じくらいですね。
C#はフォームアプリとかも作れたりして、そちらだと難易度は1つ下がるかなあと思いました。
主にASP.NETでの経験を元に難易度を決めたのですが、データセットとかグリッドビューとか難しくはないのですが、他のMVCフレームワークと比べると独特で習得に時間がかかった気がします。
UnityもC#を使っているのですが、あまり業務アプリでは使わないコルーチンなどの理解が大変でした。
開発環境の作成はVisualStudioにExpressが出たので超容易になりましたね。
COBOL
「COBOLって超簡単だよ。」
という文句を信じて案件をはじめましたが、言うほど楽ではなかったですね。
確かに言語自体は直感でわかりやすい気はしますが、つながりがわかりにくく解読出来ず泣いてました。
あとデバッグがクソ難しくて、トライ・アンド・エラーするしかったりとか…。
文字コードをずらしたりとか、ゾーンとパックとかのデータの持ち方とかも説明されてもわからなかった。
個人で開発環境を作るのも難しいので、学習しにくいってのもありますね。
難易度☆☆☆☆☆
C言語
Javaと並んで最難関と言われがちです。たしかに難しいと思いましたが、ポインタや構造体などのつまずきやすい場所以外は、そこまででもないイメージでした。
ちなみに自分が一番初めに勉強したプログラミング言語でもありました。大学の時に授業でやったのですが、一番最初にやらされるのがC言語って辛いにもほどがあります。
当然ポインタとかもやって、訳わからなくて挫折しましたが、構文自体はスタンダードでわかりやすいです。
Scala
「Javaを関数型言語にしただけだから」
という文句を信じて案件をはじめましたが、(ry
JavaScriptのES6でつまずいたのと、ほぼ同じで関数がまず読めなかったです。
特に苦手だったのがカリー化の部分で、「メリットとかはわかるけど、マジで既存ソース読めねえ」ってなって泣いていました。
他はほぼJavaと同じだったのでよかったですが、いきなりScalaからだったらまず死んでた気がします。
難易度☆☆☆☆☆☆
C++
ここからは、自分がやってみて「あーこれは無理っすわ」と思った言語になります。
まずC++ですが、2週間位勉強した程度で「何だよ、この言語面倒臭すぎる、クライアントアプリなんか全部VBで作るわ」って言って完全放棄しました。
確か文字列のchar型でも色々種類があって、既存ソースの関数を呼ぶにもキャスト方法調べるのに一苦労だし、ポインタもガッツリ出てくるしで全く進みませんでした。
アセンブラ
C++は自分で使ってみて断念したのですが、アセンブラは案件でやれと言われて、全くわからずギブアップした言語ですね。
基本情報では「アセンブラは一番楽な言語だ」とか書かれていた気がしますが、そんなことは一切ない。
何だこの文字の羅列は?と思った記憶しかないです。
既存のコードが帳票を出力するとかいうものだったのですが、全くあのコードから帳票を出すイメージが出来なくて、半月持たず戦力外となりました。
まとめ
色々書いてきましたが、2020年の案件の量から見ると
HTML→PHP→Javaとステップアップしていくのが一番硬いと思いますね。
意識が高いエンジニアだと「PHPやJavaは古いよ。これからは○○」みたいなことを聞きますが、まずは案件獲得のために枯れた技術でも需要が高いものをやるべきだと思います。
(PHPやJavaは昔から案件量が多いので、廃り流行りにも強いです。)
逆にPython、Go、Scalaあたりはネット界隈の盛り上がりの割には、あまり案件がないイメージですね。