プログラミング言語はWindows系とLinux系どちらを学ぶべき?

   

ほとんどの人は「Linux系学んだ方がいいに決まってんじゃん!」って思われたかと思います。

「Windows系の仕事よりもLinux系の仕事の方が多い」
「Linux系の技術のほうがオープンだし広く使われている」

などの理由によるものだと思います。

確かに仕事ではLinux系の技術を使うほうが多いと思います。

私の場合、プログラミングを始めたのは1998年に情報処理の専門学校に入学してでした。

当時の授業はVisualC++とVisualBasicを使ったものが中心でした。現在主流のJavaやPHP、Rubyなどはカリキュラムに入っていませんでした。

卒業後SIerに就職したのですが、VisualC++、VisualBasicを使った仕事は一度もやっていません。

C言語を使った仕事はありましたが、Windowsアプリケーションを開発するのではなく、Unix上で動くC言語のバッチプログラムを作るものでした。

私が就職したのが2000年でしたので、ちょうど時代の流れがデスクトップからWebアプリケーションへと移り変わる時期でした。それまではVisualBasicでWindowsアプリケーションを開発してサーバ側をC++で作るみたいなC/S(クライアント・サーバシステム)というものが主流だったそうで、専門学校のカリキュラムもそれに合わせていたのだと思います。

そんな時期だったので、私の場合、学校で習ったプログラミング言語はほとんど仕事でつかうことはなかったわけです。とはいえ、ちょっとした作業を自動化するExcelVBA(Visual Basic for Aplication)などでVisualBasicの知識を活かすことは出来ましたし、プログラミングの基本は言語が変わっても同じなので、学んだ知識を活かすことが出来ています。

なので、「仕事だとWindows系よりもLinux系の技術学んだほうがいいに決まってんじゃん」というのは正しいわけです。

そんな私ですが、2000年から仕事を始めてから10数年経った2014年に、Microsoftの主力プログラミング言語であるC#を使った仕事をしました。

そこから見えてきたWindows系言語の現在の状況について紹介します。

C#はWindowsだけのものではない

私がやったのはWindowsアプリを作る仕事ではなく、スマホゲームを作る仕事でした。

UnityというゲームエンジンではC#を使って比較的かんたんにゲームを開発することが出来ます。

UnityはMicrosoftの技術ではありません、Unity Technologiesという会社が開発したゲーム開発のプラットフォームです。

「なぜ、Microsoft以外の会社が作ったプラットフォームでC#が使われているんだ?」というと、.NETのオープンソース版である「Mono」があるからです。

MonoはWindows以外のプラットフォームで動きます。Linux上でも動きますし、Unityのような独自の環境にも組み込むことが出来ます。

なので、今やMicrosoftの技術はWindowsに限ったものではなく、オープンな技術なんです。

今やMicrosoftの方がクロスプラットフォーム?

スマホアプリにおいてもXamarinというプラットフォームを使うことで、C#で書いたコードをWindowsアプリだけでなく、iOSやAndroidようにビルドしてくれる機能があります。つまりクロスプラットフォームなんです。

Unityも同様で、Unity上で開発したコードはiOS用にもAndroid用にもビルドすることが出来ます。

iOS用アプリの開発言語であるSwiftやObjectiveCで書いたコードはiOSでしか動きませんし、Androidアプリ開発でJavaで書いたコードはAndroid上でしか動きませんが、UnityやXamarinで開発したC#のコードは様々なプラットフォームで動かすことが出来ます。

以前はMicrosoftの技術はクローズドでWindows上でしか動かないものでしたが、モバイル環境においては、AppleやGoogleの技術の方がクローズドになっているんです。

その原因はMicrosoftがモバイル開発で遅れを取ったからだと考えられます。スマートフォンのOSのシェアはAndroidとiOSで二分しており、Windowsのシェアは微々たるものです。そのため、Microsoftはモバイル開発プラットフォームにおいてオープンでクロスプラットフォームな戦略を取っているのだと思います。

なので、サーバーサイドの分野ではLinux系の技術であるJava, PHP, Ruby, Pythonのような技術を学んだほうがいいでしょうけれども、モバイルアプリの分野ではC#を学んでクロスプラットフォーム開発をするというのも良い選択肢となります。

とはいえ、スマホアプリ開発においてXamarinを採用している会社は少数派です。AndroidアプリはJavaで開発して、iOSアプリはSwiftで開発している会社がほとんどです。それぞれのプラットフォームに合わせたUIを作り込みたいので、それぞれのネィティブ言語で開発しているという状況なんです。

それに比べてスマホゲーム開発は状況が異なります。Unityを使ったクロスプラットフォーム開発が主流になっています。大ヒットしたポケモンGOもUnityで開発されています。

そんなわけでスマホゲームの分野ではUnity・C#がホットなんです。

C#はLL言語のような楽しさがある!

C#は言語としても優れていて静的型言語でありながら、LL言語のように簡潔に書ける工夫がされています(varによる型推論やプロパティ、インデクサなど)。

例えばJavaでArrayListの操作は

と書くのに対してC#では

のように配列にアクセスするのと同じシンタックスで書くことができます。これがインデクサです。varにして分かりきっている型の表記を省略してるのがvarによる型推論です。

連想配列も同じです。Javaだと

C#なら

のように書けます。RubyやPHPと同じ表記ができるんです。

簡潔できれいなコードをに書ける構文が用意されていると、きれいにコードを書こうというモチベーションがわきます。

犯罪発生率の話で「割れ窓理論」というものがあります。

「汚いコードを書く」という犯罪を減らす方法

ある犯罪率が高い都市では、窓ガラスがたくさん割られていて、毎日更に割られる数は増えていました。

そこで、窓ガラスをすべてキレイに張り替えた所、犯罪発生率が減ったそうなんです。

しかし、一枚でも窓ガラスが割られて、それを放置していると、窓ガラスは次々に割られて犯罪発生率は上がったそうなんです。

つまり、人は窓ガラスが割られているのを見ると、もう一枚くらい割ったっていいじゃないかという気持ちが湧いて実際に割ってしまいやすくなるということです。

部屋の汚さとかもそうで、引っ越したばかりで部屋が整理整頓されているうちはきれいに使おうとしますが、だんだん散らかってくると、さらに散らかりますよね。

ソースコードも同じでJavaで冗長なコードを書かれているのを見ると、「じゃあ、おれも冗長なコピペコード書いたっていいや」と思いやすくなってしまうということです。

ですから、言語に簡潔で美しい構文が用意されていることは、きれいなコードを書くための強力な仕組みなのです。

そして、そんな優れた構文を持つC#はWindowsだけでなく、.NETのオープンソース版であるMonoによってUnityやXamarinなどの様々なクロスプラットフォーム環境が用意されているのでLinux系言語に引けを取らない学ぶ価値がある言語だと思います。

エージェントを使った方が転職活動は楽です

東京・大阪近郊のイケてるIT企業に転職したい人には『レバテックキャリア』

 東京・大阪近郊のエンジニア経験者向け転職サービスです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

あとホームページ見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

エンジニア未経験の方や地方在住の方にはDODAというエージェントをおすすめします。

エンジニア未経験の方や地方在住の方には『DODA』

全国の求人を扱っていて、しかもITエンジニア未経験の人にも転職支援をしてくれるエージェントです。

未経験の人はサポート対象外のエージェントが多い中、DODAは未経験者を支援し転職を成功させています。未経験の方こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいきます。

フリーランスになりたい人には『ギークスジョブ』

フリーランスエンジニアになるには人脈が必要と思われがちですが、ギークスジョブに登録して希望条件を伝えれば、自分に合った案件を紹介してもらえるんですよ!思ってるより全然簡単にフリーランスってなれるもんなんです。

東京・大阪・名古屋・福岡の案件を紹介してもらえます。

 - 勉強法 ,