7289


私はかつて（約10年前）VisualBasic6.0を使っていました。  
その当時はVBを使える人材が重宝されていました。

最近、たまに求人広告を見ることがあるのですが、VisualBasic.NET  
よりもC#の方が圧倒的に需要が高いように思います。

私はVB.NETもC#も使ったことがありませんが、両者ともに開発環境の  
雰囲気が似ていたような記憶があります。

だとすると、文法等分かりやすいのはVB.NETだと直感的に思っていて  
アプリケーションを開発しやすいのもVB.NETだと勝手に思っています。

でも、多くの企業ではVB.NETよりもC#を使える人材の募集をしています。  
これは何故でしょうか？  
C#に特別な何かがあるのでしょうか？


CC BY-SA 3.0
2015-03-01T15:30:05.487
7288
2016-11-26T14:09:31.517
2015-03-02T12:12:31.510
85
7634
question
c# visual-studio vb.net
VB.NETよりもC#の方が求人が多いのはなぜ？


文法が分かりやすいかどうか、アプリケーションが開発しやすいかどうかは主観的な問題ですので置いておきます。

`C#`と`VB.net`は機能的に大きな差があるわけではありません。しかし言語の人気に[大きな差](http://goo.gl/H5ci7Z)がありますので、わざわざ人気がなく情報量の少ない`VB.net`を選ぶ理由があまりないと言えます。

ではなぜ`C#`の方に人気が出たのかという理由はちょっと難しいですが、私の思いつく限りでは、

  * `Java`や`C++`を利用している人には文法的に`C#`の方が馴染みやすい
  * `Mono`の`VB.net`への対応が`C#`に比べて遅いため、`Windows`以外の環境も考慮すると`C#`のほうが利用しやすい

ということになると思います。


CC BY-SA 3.0
2015-03-01T16:19:25.473
7289
2015-03-01T16:19:25.473
3639
7288
answer


現実問題として`C#`で開発されたプロジェクトや資産が多く、また`C#`を理解できる人間が多いというのが表向きの理由かと思います。

ではなぜ`C#`のほうが人気なのかという部分についてですが、これは客観的な理由よりも主観的な理由の方が大きい気がします。  
私の周囲でも`Windows`向けの開発あるいは`Windows
Server`を利用したWebアプリケーションの開発では、`C#`の採用数が`VB.NET`に比べるととても多いです。大抵の場合、

  * `VB.NET`は古い
  * `VB.NET`は遅い(実際には`C#`と違いが出るかは疑問です)
  * `VB.NET`は初心者向けなので、できることが限られている(どうなんでしょう)

といった理由、あるいは暗黙の了解的なもので`C#`が選択されています。私自身もはじめて`.NET`を使うことになった際、あまり考えずに`C#`を採用しました。(`VB.NET`には初心者向けで本格的な業務用ではないというイメージはありました。)

あるいは、書籍など情報の偏りもあるかもしれません。`C#`には初心者向けから中級者向けまで書籍は日本語でも充実していますが、`VB.NET`の本は`C#`ほど充実していないように思います。(O'Reillyも`VB.NET`の日本語の本は取り扱っていません。)
ただし卵(書籍)が先か鶏(人気)が先かはわかりません。

もしかすると、物理学の世界で言う自発的対称性の破れのようなもので、最初はどちらに転がってもおかしくないような差だったのかもしれませんね。

* * *

調べもせずに書いていますので、ご注意ください。


CC BY-SA 3.0
2015-03-01T17:20:53.720
7290
2015-03-02T02:40:04.223
2015-03-02T02:40:04.223
3313
3313
7288
answer


歴史的には.NET Framework 3.5の時期に

  * 言語機能の差が一時的に大きくなった(`yield`、自動実装プロパティ等)
  * Windows Phone SDKなどでVB対応が後回しにされた

とVBが機能的に大きく劣っていた期間があり、VB.NETを利用していた企業もC#に流れたのもこの頃という印象です。  
両言語機能は当時導入されようとしてたLINQやLINQベースのORMに欠かせないものであり、VB.NETでは最新技術を生かせないという状況がしばらく続いていました。  
このギャップは.NET4.5までに徐々に解消するのですが、その間にC#側に`dynamic`機能が追加されたため、VBのメリットも失われてしまった格好です。

* * *

なお個人の主観的な意見としては、C#で  

[code]

    public TItem this[TKey key] { get; }
    
[/code]

と書けるプロパティがVBでは  

[code]

    Default Public Overloads ReadOnly Property Item(ByVal key As TKey) As TItem
    
[/code]

となってしまうようにVBはキーワード中心のためとにかく打鍵量が多く好きになれません。


CC BY-SA 3.0
2015-03-01T21:57:36.250
7293
2015-03-02T12:53:33.737
2015-03-02T12:53:33.737
5750
5750
7288
answer


もうちょっと低いレベルの話題を出しておきます。

個人的には、変数スコープの違いが言語の違いを作っているのではと考えています。  
従来C言語では変数をスコープの先頭に記述する制限がありました。その制限を何をどう勘違いしたのか関数の先頭と思い込み、結果、C言語や（元より制限のない）C++言語において関数の先頭にずらずらと変数を並べるスタイルのソースコードをちょくちょく見かけます。仕様をきちんと理解している人から見ると「わかってない人が書いているな」とそのソースを避けたくも思うはずです。  
スコープの概念そのものはとても重要でJavaScriptのようにブロックスコープが存在しない場合、強引な手を使ってでもスコープを実現するわけですし。

さてVB言語も似たような状況で、ブロックスコープはありますが関数の先頭に書かれる傾向があるように思います。C#言語においてはC / C++ /
VBと比較するとそのような傾向はかなり低いです。結果、言語仕様を理解せず、変数の有効期間及びそれに付随するオブジェクトの生存期間を考慮せずただ動けばいいという考えの人はVB言語を使う傾向にあり、仕様を理解しコードロジック、アルゴリズムを考える人はC#言語を使う傾向にある、というのが個人的な見解です。

さてこのような状況でソフトウェアを作ろうとする場合にどちらの言語を選択し、その言語の求人を行うかとなればやはり後者でしょう。

// VBのブロックスコープは[罠](https://msdn.microsoft.com/ja-
jp/library/1t0wsc67\(v=vs.120\).aspx#mt35)もありますしね。


CC BY-SA 3.0
2015-03-02T01:09:02.923
7298
2015-03-02T01:09:02.923
4236
7288
answer


プロジェクト規模が大きくなるとVB.NETのほうがVisualStudioが重くなりがちです。  
デフォルト設定のVB.NETは記述中の未改行状態のコードもエラーチェックしていたり  
してC#よりも重くなっていました。  
コードの実行速度は変わらないはずです。

変数宣言を強制しないことができたり、VB6の悪いところをイメージさせるものが  
あります。  
VB6は素人プログラマが品質の悪いコードを量産したのが大変問題になりその  
イメージの悪さを引きずっているのでしょうか

ですので、C#になにかあるというよりはVB.NETが敬遠されているのだと感じます。

実質の機能はほぼ同じですが、間違いを起こしにくいC#のほうが開発者から好まれています。  
ほかの方もおっしゃられるように差はとても小さいです。


CC BY-SA 3.0
2015-03-02T02:41:33.007
7306
2015-03-02T02:41:33.007
8239
7288
answer


概ね同じような回答になりますが、  
VBを採用している開発部署は、コードの質を追究するプログラマが少ないように感じます。

VB6.0の悪習を結構引き継いでるので、プログラマ次第ではバグ量産の温床になるから等も理由の一つかもしれません。


CC BY-SA 3.0
2015-03-02T11:46:50.247
7328
2015-03-02T11:46:50.247
7501
7288
answer


技術的な回答は多く出ているので、人的リソースの視点で書かせて頂きます。

VB6→VB.NETの移行期に活躍したプログラマーは現在既にいいお年で、新たにC#を習得させるコストを払うより現状維持または職種変更してもらい、C#erは外から調達する企業が多いのではないでしょうか。

一部の優秀なプログラマーは除外しますが、日本の人月ビジネスが消費してきた「コーダー」については上記のことが言えると思います。


CC BY-SA 3.0
2015-03-02T12:06:39.373
7330
2015-03-02T12:06:39.373
2238
7288
answer


> 文法等分かりやすいのはVB.NETだと直感的に思っていて  
>  アプリケーションを開発しやすいのもVB.NETだと勝手に思っています。

そうは思いません。VBとVB.NETは別物です。  
世の中に多く存在するであろうC/C++/Javaなどの開発者にとってC#の方がとっつきやすいと思います。

(1)VB.NET登場時、旧VBとの言語的な差が大きく、どうせ覚えるなら.Netのために新しく作られてオープンな規格であるC#を勉強した方がいいよね、という流れになった。

[補足]  
当時VBが流行っていたのは、プログラミングスキルの低い人でもGUIアプリケーションを簡単に作れる、Microsoft製言語というのが理由だと思います。  
しかし、VB.NETになって本格的なオブジェクト指向言語になった結果、習得難易度も増し、GUIアプリの作りやすさ(C#でも簡単に作れる)というアドバンテージも無くなってしまいました。

難易度は

初心者→VB  
中級者→Delphi  
上級者→C/C++

というイメージ。  
Borland社(社名がコロコロ変わって現在は何になっているか知りませんが)のDelphiはVBより少し難しいがC/C++より簡単でGUIも簡単に作れて熱烈なファンもいましたが、OS開発元であるMicrosoft製の言語を使う人が圧倒的に多かったです。

(2)文法がC/C++やJavaに似ているので、これらの言語を使っている人たちがC#に入りやすかった。

[補足]  
VBブームの後はJavaブームが来ました。

(3)VB系言語で開発されたアプリケーションは他の言語で作られたものに比べ、質の低いものが多い。  
これは実感した人、多いと思います。  
他人がVB系言語で作った質の悪いアプリをメンテすることになった苦い経験から、VB使いの技術力は低い、と多くの人に思われるようになったのです。  
実際、そう考えてあながち間違いではないでしょう。  
「VB系しかできません」なんて開発者は全く信用されません。  
趣味のプログラミングならいいのですが、仕事でやる場合、複数言語を使えるのは当たり前です。

(4)2016年現在、Windows以外のプラットフォームも見据えた言語の存在感として、C#の圧勝です。今更VB.NETを選ぶ人はいないでしょう。

(5)C#は書きやすい、使い勝手がよい  
「C#は書いていて気持ちがよい」「思考をそのままコードにできる」という表現を時折見ます。

[C# と共に歩んだ 15 年 - Powered by C# - Microsoft Visual
Studio](https://www.microsoft.com/ja-jp/dev/campaign/csharp/story.aspx)

> C# は、当時よく使われていた C++ 開発者にとっては取り組みやすい夢のような言語で、それほど勉強しなくても使うことができました。
>
> C#
> の文法は実用性とサイエンスが絶妙。コード生成しやすいし、オブジェクト指向をベースに、コンポーネント志向も関数型もパラレルコンカレントも動的も無理なく取り込まれている。

[需要No. 1言語はどれ？ 2016年度人気プログラミング言語を徹底比較 |
ReadWrite［日本版］](http://readwrite.jp/develop/33939/)

> C#で働いた技術者たちはC#を好きになる傾向があり、この言語はとても強いコミュニティを持っている。  
>  C#はUnity 3Dの主要言語であり、iOSやLinux上で動くゲームエンジンにも使用されている。ゲームエンジンとしてのUnity
> 3Dの台頭は、C#の存在を確固たるものにし、バーチャルリアリティアプリの開発を支えている。


CC BY-SA 3.0
2016-11-26T10:39:39.243
30687
2016-11-26T14:09:31.517
2016-11-26T14:09:31.517
19725
19725
7288
answer