[no_toc]
これから学習を進めていく上で言語選定が重要です。その中で、初心者におすすめできないプログラミング言語が存在します。
この言語選定を間違えると、学習が続かなくなるだけではなく、今後の仕事にも影響を及ぼす可能性があります。
なので、この記事ではまず
- 初心者におすすめできない言語は「Java」と「C言語」であること
- なぜおすすめできないのかその理由について
この内容についてご紹介します。
JavaとC言語は専門性が高く技術的に難しい
基本的にC言語およびC++とJavaはとても難易度が高い言語になります。なぜならバグの解析や将来を見据えた設計がとても難しいからです。C言語およびC++とJavaは、エラーなどの対処につまずきやすい言語と言えます。
難易度の高いバグの解析につまずきやすい
特にC言語/C++はバグの解析、つまり意図しない動作やエラーの対処に高度な知識が要求されます。コンピュータを構成するメモリやCPUというものの性質を知っておく必要があります。
最悪の場合、自分が作っているアプリケーションだけでなくPC自体に害を与えたり他の動作しているアプリの動作がおかしくなる場合もあります。
場合によっては「メモリダンプ」と呼ばれる、エラーが起きた瞬間に0と1のデータがメモリ上にどのように配置されているかを表すものを解析に使ったりする必要もあります。
難易度の高い設計が必要
設計においては、仕事として行う場合大規模なシステムを作る機会が多いので、後から拡張しやすいように将来を見据えた設計が必要になります。
これは文法レベルの問題ではなく広い知識や経験が必要になります。下手な設計をすると根本から作り直すようなはめにも陥る可能性があり、中途半端な技術で扱うものではありません。
マスターするまでに相当な努力を必要とするため大多数の人が挫折してしまいます。
こんな声も…
私には、がむしゃらにいろいろなソフトを弄くり回していた時期があった。
当時、ちょっとばかりHTMLやらVBSが書けたので、Webの情報を頼りに、C++を弄りだした。
当時、C++を使えば楽々GUIのプログラムが組めると思っていた。ライブラリとか、そういうものの存在すらよく分かっていなかったので、”Hallow World”止まり。GUIのプログラムを組むことができなかった。これが1度目の挫折。
JavaとC言語は技術が高いぶん学習コストが高い
C言語やJavaは学習コスト、つまり学習し習得するまでに大幅な時間がかかることでも有名です。
プログラミング言語の仕組みを理解することが難しいというのは勿論ですが、仕事にするためには学習範囲はプログラミング言語の学習だけにとどまりません。
例えば、ネットワークやハードウェア系の知識もないと仕事として成り立たないことも多いです。また、特にC言語/C++やJavaは人によって様々な設計方法があります。デザインパターンと呼ばれるプログラミングをする上での定石なども学習して、汎用的な設計方法を身に付けておく必要があります。
そうでなければ、後で機能追加等がとてもやりづらいシステムになってしまいます。ある程度使えるまでにも時間がかかりますし、本当に一人前として仕事が出来るまでには何年も時間がかかります。
とりあえず有名だからという理由で学習しはじめて、やりたいことと違ったという声も聞きます。
こんな声も…
ある程度プログラミングできるようになっても、今度は選択肢の多さに圧倒されます。同じことを実現するのにいろいろ方法がありすぎて、どれが適切なのか初心者には選択が難しいのです。
選択肢が多いということは、それだけ覚えなければならないことが多いということです。
(統合開発環境の操作、クラスライブラリ、各種フレームワークなど)
JavaとC言語は初心者には学習環境が揃えづらい
最近のプログラミング学習は、無料で学べるサービスがもはや無料レベルではないのです。
例えば、ドットインストールやSchoo、Progateのような革新的な学習サービスがいい例でしょう。
ただ、Java学習やC言語学習に対応した実践レベルまで学習可能なサービスはほとんどありません。また、会社独自のフレームワークを使っている場合もあり、実践的な内容は現場の人に聞くなどする他ありません。
よって、他の言語よりも実務レベルまで学べる環境も揃えづらくなります。
JavaとC言語は個人ビジネスには向いていない
もちろん、C言語やJavaで個人でアプリ開発を行うことは可能です。
しかし、個人でサービスを提供する場合わざわざC言語やJavaで制作するのは、開発時間が長くなりほとんどメリットがありません。独立志向の強い人や将来起業したいと考えている人など、今後自身でプロダクトを作りたい人は、まずC言語やJavaを学習するべきではありません。
JavaとC言語は習得後も肉体労働になりがち
プログラミングと聞いてどのようなイメージを持たれるでしょうか。
- 色んなサービスを想いのままに作れる
- 時間を有効に使い自由に働ける
このようなイメージは、少なくとも純粋なC言語やJavaから学習するのでは難しいでしょう。
Javaなどのエンジニアとして働く場合は朝出勤→現場に常駐→仕事する、という出向に近い働き方以外の選択肢はほとんどありません。もちろん職場にもよりますが、C言語・Javaを習得して仕事をする場合、特に人手不足が深刻な超労働集約型の下請けが大多数です。
大規模システム開発の為に招集されて、期日に追われてひたすらコーディングやテストを繰り返すという働き方が華々しいシステムの裏側を支えています。大変な割に技術力や営業力が弱いと大した給与も期待でき無いため、高収入を得るためには継続的な努力が必要になります。
こんな声も…
【知らないと一生後悔するITゼネコンの構造】
大手ITベンダー(元請け)が仕事を取ってくるけど、自社の社員だけでそんな大きなシステムを作るのは硬直化している日本の労働市場(簡単にクビを切れない)では人件費的に不可能だから、下請け企業を集めてそちらに仕事をさせるという構造のことですね。
JavaとC言語は初級者レベルではキャリアの選択肢がない
特にJavaやC言語で入門レベルが終わり中級エンジニアになったからと言って、担当できる仕事は少なく、キャリアの選択肢はあまり広がりません。
またC言語やJavaと聞くと、とても汎用的な技術に感じるかもしれませんが、実際はその会社や現場に依存したシステムとつなげて使用していることが多いという現状があります。
ベースはできていても様々な応用力がつかない会社に依存する知識であることが多いです。
常駐作業が中心の場合、場所を選ばない・時間を選ばない働き方が出来るようになれる人はほんの一部だけです。技術が出来れば様々な事が出来る様になる!と考えているひとにもC言語やJavaから学習することはオススメできません。
こんな声も…
ただ、CやC++の仕事は、理工系の大学や専門学校を出た新卒者がメーカーや、ソフトウェア会社に入り、そのまま従事する流れが多い為、一般的には未経験者がすぐに携わることが出来る仕事ではありません。
自分の好きなようにプログラミングできるわけではありません。大抵の場合、元請けから指示されたフレームワーク、コーディング規約、設計などに従って行うことになります。そのフレームワークが洗練されたものであるとは限りません。全然イケてない可能性もあります。なんでオープンソースのあれやこれを使わないんだ?と疑問に思うかもしれませんが、、、そういうものなのです。
JavaとC言語は新しい技術を身につけづらい
特にC言語やJavaなどでの大型システム開発の現場はとても保守的です。大規模システム開発で利用されることが多いC言語やJavaですが、大規模なシステムであればあるほど、その開発の運用体制や使用技術は化石のような技術もいまだに使用しています。
新しい技術を入れようにも、その技術をチームメンバー全員が理解する必要があり、そこにコストを掛けたくないので古いモノが残りやすく提案も通しづらい現場も少なくありません。
ITという革新的な技術を使いながら、新しいことに挑戦出来ないというジレンマが発生しがちです。新しい技術やサービスの情報をキャッチして行きたい方には不向きと言えるでしょう。
こんな声も…
SI業界では「どう考えても非効率的な運用」などがあったとしても、システムの規模や関わる人数が多い為、各個人レベルでは提案してもなかなか動くことが出来ません。
システムの規模が大きくなれば大きくなるほど、ウォーターフォールモデル(システム全体を要件定義 → 設計 → 開発 → テストと順番に進めるシステム開発の方法)では全体の掛かる時間や、それに伴うコストの見積がとても難しく、少なからず炎上案件(人を投入してなんとか案件を終息させる消火作業)が生まれます。
複数のシステムとの連携を行ったり、大規模な環境構築が必要なため、ウォーターフォールモデルでは限界があると分かっていつつも、足並みを合わせて開発していかざるを得ない面があります。
昔作られたソースコードを引継ぐことが多く、そのチーム独自の書き方や用語(造語)により業務を進めることが多いです。
基本的に元々開発に携わっていた人が分かるものや、昔作られたシステムに採用されている技術を採用することが多く、新しい技術にアンテナを貼る文化もあまりありません。
従来の「自分たちが分かる安定したやり方」で仕事をこなすのが当たり前に行われている現場も多い為、「クリエイティブ」という言葉とは程遠い業務フローになります。
JavaとC言語はどんな人におすすめなのか?
ここまででプログラミング入門者はC言語・Javaを学習するべきではない理由を上げてきました。あえてC言語やJavaを入門として学習するのをオススメするとすれば、以下の様な人たちです。
- 工学部の学生の人
- 研究職の人
- 大規模システム開発での安定した仕事を行いたい人
- Android等特定のプラットフォームのアプリを作りたい人
この記事の復習
この記事で学んだことは、初心者にJavaとC言語をおすすめできない理由は以下の通りです。
- JavaとC言語は専門性が高く技術的に難しい
- JavaとC言語は技術が高いぶん学習コストが高い
- JavaとC言語は初心者には学習環境が揃えづらい
- JavaとC言語は個人ビジネスには向いていない
- JavaとC言語は習得後も肉体労働になりがち
- JavaとC言語は初級者レベルではキャリアの選択肢がない
- JavaとC言語は新しい技術を身につけづらい
JavaやC言語を学習すべき場合もありますが、そのネームバリューだけで学習をはじめて自分ってプログラミングに向いてないと挫折してしまう人があまりに多いのが現実です。目的をはっきりさせてから自分にあった言語で学習を始めましょう。