1度は、C言語プログラマーを経験しておくべき
はじめに
この記事は2008年に書いたものですが、当時とはかなり状況が異なっています。
「1度は、C言語プログラマーを経験しておくべき」というタイトルとはなっていますが、未経験から職業プログラマーを目指すのではれば、今(2013年現在)の業界の状況を考えると、それほど重要な言語ではありません。
ただ、CやC++を学ぶことは無駄ではありません。iPhoneのアプリもCの兄弟言語(Objective-C)で書きますし、オープンソースの多くはCやC++で書かれています。コンソール系のゲームもそうでしょう。
ですから、上記の様な業界に進むのでなければ、無理して学ぶ必要は、もう無いのかと思います。
もっと言うと、大学や専門学校で学ぶ以外に、独学でCやC++を勉強しても、直接的には、仕事には結びつかない可能性が高い(未経験者が取り組むには、あまり効率が良くない)という状況です。
上記を踏まえ、ご覧いただければと思います。(でも、機会があれば学んで頂きたいなと!)
人により様々ではありますが、 IT業界に興味を持つ未経験者の多くの方は、プログラミングはしたことが無いけれど、とにかくPCが好きなので、漠然とプログラマーになりたい!と興味を抱いて応募しました!と言う方が結構多いと思います(面接の経験上…)。
最近は、スマートフォンのアプリやWEBプログラミング等から興味を持ち、IT業界へ進む事を考える方も多いと思います。
プログラマーという職業を選び、生活してゆく事を考えるのであれば、どのよう言語を経験して行くかと言う計画も非常に重要であると考えています。
それは、長期的な視点で考えると、収入の差や職場選択の自由度に大きな影響を与える為です。
エンジニアとしての幅を広げる
色々な意見はあると思いますが、1度はC言語(もしくは、C++)での業務経験を積んでおくと、プログラマーとして生きて行く為の選択肢が広がると考えています。
ただ、CやC++の仕事は、理工系の大学や専門学校を出た新卒者がメーカーや、ソフトウェア会社に入り、そのまま従事する流れが多い為、一般的には未経験者がすぐに携わることが出来る仕事ではありません。
だからこそ、CやC++の経験を積む機会があれば、積極的にやってみてほしいと考えています。
なぜ、CやC++をやっておくことがプラスになるのか、私なりの考えを書きたいと思います。
なぜ、C言語(C++)なのか
1つ目の理由
言語の論争は果てしなく、いわば宗教に近いものです。よって、ここでは何の言語が最上と言う話をするつもりはありません。それは趣味の世界だからです。
私がお話したいのは、『日本で、長期的に、プログラマーと言う職業で生活して行く(お給料をもらい続ける)』為には、何の言語を選択すると良いのか?についてです。
日本の産業で世界に名だたる物といえば、やはり自動車でしょう。その次は、家電等の工業製品でしょうか。(まぁ、最近はどちらも調子が悪い面もちらほら見えますが)
自動車も家電も規模の違いはあれど、本体制御の為にコンピュータ等を積みプログラミングされ動作しています。そう言った物の多くが、CやC++によってプログラミングされています。
言い換えると、昨今の工業製品は制御プログラム無しには、その複雑な動作を実現できないレベルであり、日本の機械産業が死滅するまでは、制御系プログラミングが出来る人間は仕事にあぶれないことになります。これが1つ目の理由です。
2つ目の理由
2つ目の理由としては、C言語はコンピュータを完全に制御する為に作られた言語であり、その使用にはメモリに関する理解が欠かせない事です。
メモリの操作は様々な危険を伴う為、最近のプログラミング言語はプログラマー側にその操作を求めない傾向があります。
従事する人間のスキルレベルが様々な大規模開発の場合、メモリ操作を伴わない言語のほうがメリットあることは間違いありません。
しかし、プログラマーとして生きて行く上で、C言語での経験は必ずプラスになります。それはメモリ操作を意識する必要の無い言語においても、一段高いレベルで実装を考えることが出来るようになるからです。
ですから、頭の片隅にC言語を置いておき、その手のプロジェクトに参加できる機会があれば、積極的に経験を積むべきです。
3つ目の理由
3つ目の理由は、(この理由は、私の主観ですが…)C言語の業務経験がある人は、色々つぶしが利く人が多い印象があります。
C言語はWEBプログラミングであろうと、業務システムであろうと出来ない物はありませんが、処理速度を気にしたり、システムをバイナリで提供したい時以外は、今の時代、他の言語を使用したほうが圧倒的に有利です(何倍も楽に実装出来き、ワザワザCでやる意味が無いからです)。
C言語の面倒さを知っているからこそ、『言語なんて何でも良いでしょ、楽に開発できれば…』と言う具合に言語に対する拘りがありません。プロジェクトの縛りさえなければ、その時最も効率の良い実装方法を選択することが出来るようになります。
一例を上げると
Androidのアプリは主にJAVAで書かれていますが、NDKというものを用いることで、CやC++で実装することもできます。
仮に、色々工夫したが、どうにも処理速度が遅い、JAVAでやれることはやり尽くしたよ、という問題が発生したとします。
ここでプロジェクトの選択としては、お客さんに「ごめん、ちょっと遅いかも」と謝るか、Cが判れば、NDKで実装してみるという選択肢が生まれます(結果、大して変わらないって場合もありますけどね 笑)。
実際は、こんな簡単な話では済まされませんが、何か問題にぶつかった時、低レベルのレイヤー(よりハードウェアに近い側)についての知識があることにより、問題解決を迅速に行うことができようになるのは確実です。
そういった知識はお客さんをよりスムースに説得する材料を用意すること出来るわけで、それが出来る人材の価値は高い、というのは想像できるかと思います。
未経験者がいきなりCやC++の仕事に就くことは難しい…
C言語の経験を積むべきと言ってみたものの、現状、未経験でC言語プログラマーになる道はそう多くはありません。
通常、C言語プログラマーの求人の多くは2〜3年の経験者を求めているものが多いかと思います。しかし、ある程度の段階を経て行けば、未経験でもチャンスがあると考えています。
現状、考えられる案としては、テスターや品質管理業務の仕事を派遣等で探すことです。テストの仕事を通して、実際の開発現場を体験し、チャンスを覗います。経験上このパターンが結構多いのではと私は思います。
事実、私もテスターという立場から、IT業界でのキャリアが始まりました。
派遣であるがゆえのメリット
派遣である理由は、未経験でも大量に人間が必要になる状況が発生することが往々にしてあり、PCが触れる程度でも採用される可能があること。チャンスが到来した際、動きやすい様に派遣と言うスタイルを取っておくこと等の理由があります。
ちなみに、テストの現場は、開発作業のしわ寄せをモロに受ける現場ですから、開発チームと顧客の両方に挟まれ、非常に割りに合わない環境です。よって、働く人間も流動的で本当に優秀な人は去ってしまいがちです。だからこそ、比較的求人が多く、そこに未経験者でも立ち回れるチャンスがあります。
そして、プログラマーになることを意識してテスト作業に従事することで、道が開けると考えています。
こちらも参考にご覧ください。
>>あなたが全くの未経験者の場合
>>IT系派遣会社について正しく知る