Visual Basicを1日で学ぶ

仕事でVisual Basicがメインのアプリケーションの開発・保守を行うことになりました。 全く未経験のVisual Basicを短期間で習得するために、Soft Skillsで紹介されている独学のための10ステップに則って学んでみました。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

これからVisual Basicを学ぶ方の参考になれば幸いです。

狙い

今回、Soft Skillsの10ステップを試用してみたのには一応狙いがありました。

  • 学ぶ範囲を限定するための枠組みが必要だった。
    • 細かい仕様やプラットフォームによる差異などを追い続けるとキリがないので。
  • 土日で実践投入できるレベルまで持っていく必要だった。
    • 最低限の読み書きができないと週明けからの業務に支障が出るため。

学ぶ前にやったこと

全体像を掴む(ステップ1)

  • Wikipedia
    • 誕生の背景や他言語と比較したときの大まかな特徴、バージョンアップの変遷、現時点での評価をざっと確認するためには、なんだかんだWikipediaが一番手っ取り早い気がしています。
  • なぜVBはC#と比べて駄目なのか - 負け犬プログラマーの歩み
    • 既に慣れ親しんでいるC#と比較して、Visual Basicの特徴・性格を掴みました。
    • 記事では激しくディスられていますが、言語仕様の細かな違いを記載されていて、とても参考になります。

スコープを決める(ステップ2)

  • 基本的な文法を読み書きできるようになること
  • 基本的な文法を使って簡単なコンソールアプリケーションを作成できるようになること
    • バッチプログラムで実践利用する必要があるため。
    • 習得した基本的な文法をテストするため。
  • ファイルやDBとの入出力などはスコープから除外
    • この学習の後にASP.NET Web Formsを学ぶ予定だったため。

達成基準を決める(ステップ3)

使えるリソースや参考文献を確認する(ステップ4~6)

  • 使える時間は休日1日(6時間)
    • 休み明けから仕事で使う必要があったため。
    • C#の経験があること、既にVisual Studioなどの環境が整っていることも勘案。
  • MSDN
    • 書籍も簡単に当たってみましたが、Windowsフォームアプリケーションを前提とするなどプラットフォームへの依存が強く、純粋な言語仕様としての情報は少ない印象でした。

学んでいるときにやったこと

今回は、達成基準に到達することを最優先して、関係しない項目については一旦スキップすることで、短時間で最低限使えるようになることを目指しました。

  1. Visual Studioのコンソールアプリケーションプロジェクトを作成して「Hello, World!」を表示できるようにする(ステップ7①)
  2. MSDNから最低限の文法について確認しながら、作成したアプリケーションにサンプルコードで実験する(ステップ7②)
  3. WhileやFor Eachまで進んだらFizzBuzz、Namespaceまで進んだらキューと単方向リストを実装する(ステップ8)
  4. わからないことが出てきたら、都度MSDNに戻って該当項目を読んで、実装に戻る(ステップ9)
  5. 試したこと・学んだことをブログに投稿する。(ステップ10)

以降は学習の過程で得た気づきや躓いたことのまとめです。

達成基準

新しい言語を学ぶときには、文法レベルの読み書きはスイスイできるレベルに持っていかないと、実践で困ります。 頭で理解するとともに手に馴染むようにするためには、参考文献を読み流すだけではなく、実装課題が必須です。

ただ、問題が難しすぎたり環境構築が面倒だったりするとモチベーションの無駄遣いなので、極力プラットフォームに依存させないようにして、言語仕様にフォーカスできるようにしました。 今回はFizzBuzz、キュー、単方向リストを実装しましたが、他にも配列のクイックソートやリストのマージソート、ディクショナリやハッシュテーブルなどを実装するといいかもしれません。

Visual Basicの言語仕様

どちらかというと見た目で違和感を感じました。

英文っぽい

ブレイス { } で区切るC言語を源流とする構文の言語にしか触れたことがなかったので、「英文っぽい」構文にはなかなか馴染めませんでした。 例えば、

Function Foo()
  '・・・
End Function

とか、

If x > 0 AndAlso y > 0 Then
  '・・・
ElseIf x < 0 OrElse y < 0 Then
  '・・・
End If

です。 読み込めば理解はできますが、無意識に頭のなかで構造化できるほど直感的では無いように見えます。

冗長さ

C#に馴染んでてしまうと、特にLINQなどでは冗長さを感じてしまいます。

' 返り値が有ればFunction、無ければSubで使い分ける必要がある。
Function GetNumber() As Integer
Sub SetNumber(number As Integer)
' Functionがいっぱい。
Dim students As ICollection(Of Student)
students.Where(Function(s) s.Score > 80).Select(Function(s) s.Name)
名前の衝突

これも英文ぽい構文の弊害なのか、予約語が多く、また、大文字と小文字が区別されないこともあって、名前が被ることがしばしばありました。

"Get"/"Set"(メソッド名のみならず変数名としても使えません)や"Next"(ForやFor Eacnのブロックの終端を表す)など、注意が必要です。

配列

C言語等と同じく0スタートです。

numbers(0) = 1.0 ' 1番目の要素へのアクセス

ただし、要素数は最後の要素の添字(=要素数-1)で指定します。

Dim numbers(2) As Double ' 要素数3の配列の宣言

また、添字を()で指定する記法も、関数呼び出しと見間違えそうになる紛らわしさがあります。

まとめ

今回初めて10ステップを導入してみましたが、肝は準備(ステップ1~6)にあったと思います。  最初にそれをクリアできれば「習得した」といえる具体的な基準を設定し、淡々と作業するだけでゴールに近づけるという状態を作り出すことで、あれもこれもと脇道に逸れたり、やり方が正しいのだろうかと不安になったりすることなく、集中して取り組めたと思います。(たった1日の話ですが。)

Visual Basicについては多少毛嫌いしたような書き方になりましたが、(.NET Frameworkがきちんと最新化された環境であれば)C#と概ね同等に使えるので、結局慣れの問題かと思います。