LINQ勉強会に行って来ました

タイトルの通りですが、LINQというプログラミング手法の学習を行う勉強会に参加して来ました。開催場所の大阪のグリー株式会社は阪急梅田駅から徒歩10分位なので近いです。綺麗なオフィスビルなのでなんだか久しぶりにサラリーマンに戻った気分です(w

LINQ勉強会 : ATND

多分主催の方達がグリーの関係者だと思います。40名位は入れるミーティングルームで、プロジェクターも有って、電源も使用出来る。非常に良い環境で勉強会を開催してくださって本当にありがたいことです。

Microsoft社のバックアップがあるのかどうかわかりませんが、ロゴ入りボールペンをいただいたり、なんとWindows8(非売品)をじゃんけん勝ち取りプレゼント等、その他にも色々あって、リッチな勉強会だなって思いました。きっとグリーとマイクロソフトが会社つながりで何かあるんだろうなぁ(あくまでも想像です)。

さて肝心の内容です。ぶっちゃけ、LINQのハンズオンはマジ厳しかったです。主催側は「わからない人は手を上げて下さいねーフォローしますので」てな感じで声をかけて下さったのですが、プログラマーでは無い私は、これはちょっと場違いかもしれないなと思う瞬間があり、手を上げることが出来ませんでした。

普通に課題をプロジェクターで投影されたのを見てプログラミングで答えを出さなくてはなかったのですが、if文とかwhile文と使わないと出来ません。一応それ位の概念というかプログラミングの構造はイメージ出来るのですが、私はまだC#の構文を覚えていないので、リファレンスマニュアルが無いと書けないのです。持ってきてないし・・(汗 プログラミングスキルはセンスや適正なども重要でしょうが、繰り返し行うことで自然に身に付くと言うか、言葉を話す様に綴れる様にならないとプロのプログラマーとは言えないと思います。私の場合は言うまで無くまだそこまで到達していません。

課題に使われたのはProject EulerProblem 1Problem 2でした。

1000以下の自然数(整数)の内、3の倍数と5の倍数を抽出してその合計値を求める。これが一番最初の課題でした。割り算して割り切れたら(余りが無かったら)倍数だという理屈は分かります。3の倍数、5の倍数、1000以下と条件が3つあるのも分かります。

考えたのは1から1000までのループをカウントしつつ、その値が3か5で割り切れた場合は変数に+して行き、最終的に変数の値を出力するというものです。どうやら考え方は合ってました。これが一般的なやりかたらしいです。私が今まで見てきたプログラムソースはこの考えしか無かったと思います。

さて問題は自分でこれをプログラムにするとなると、IF文にかっこは必要だったよなぁとか、whileの構文全く覚えてないし・・とか、ちょっと助けてくださいレベルでは無いと察知しました。これは大人しく考え方などを学習して帰り、自宅で一人で復習するしかないなと。おそらく皆さんそういう段階をクリアした人ばかりなので、私は場違いだと感じざるを得ませんでした。

ちなみにこの計算程度でしたら公式があるらしいので(もう忘れたよ・・)公式で計算したら一瞬らしいです。ループ処理というコンピュータの力にまかせるばかりでなく、公式で求められる計算はその方が断然速いという事も改めて認識出来ました。プログラミングに強力なスキルは数学的知識ですね。たしかにそのとおりですよね。

正直ハンズオンという課題にはついていけませんでしたが、勉強会全体を集中して聞いてきたので、考え方とかはしっかり頭に入れました。説明してくれているLINQの構文などは正直いってなんでここに「=>」が来るの?とか疑問だらけなのですが(ラムダ式と言うらしい)、こればっかりは自分で乗り越えるしか無いですからね。

LINQは用途によっては非常に書きやすいという事は十分に理解出来ました。特にデータソースがSQLやXML等のデータ形式になっている場合は、LINQを使った方が断然便利じゃないか!って感じました。少しSQLの知識を使うだけでかなり楽になりますね。

一般的には最初にデータ・ソースのファイルから読み込んで配列変数に取り込んで、配列をループで読み込みながら順番に処理するとか言う、機械的な構造のプログラムをイメージしてしまいますが(そういうのばっかり見てきたので)、LINQを使うとちょっと違うプログラムの動きを実現出来ます。そのデモとなるソースも提示して見せてくれました。

表現が難しいですが、ループ処理よりも、もっと対話的な挙動をするプログラムを組めるのです。具体的にはデータの抽出などはSQLサーバーにまかせてしまえるので、SQLの基本構文を学習すれば目的のデータを探す為にループ処理なんかしなくても良くなりますし、かなり見やすいプログラムが組めそうです。

もちろん、C#でも工夫すればその様な動きをするプログラムは書けるのでしょうが、そういう書き方(テクニック)を学習するよりもLINQを覚えた方が断然シンプルでミスも減るんじゃないかと思いました。Microsoft社がLINQを.NET Framework 3.0以降で実装して来た目的はそこにあったとお聞きしましたので、それがC#(Visual Studio)流じゃないかなと。

ちなみにループ処理もLINQの得意技って感じらしいですけどね。まぁ表面上ループ処理の記述に見えなくても中身はループ処理がガシガシのソースに置き換えてコンパイルすると言う仕組みだそうで、コンパイラが賢いと言うか凄く配慮して作られているという事でしょう。ユーザー視点から見るとマイクロソフト社は最近なんか変な事してると思ってしまいますが、開発環境に関してはしっかりやってるなって思います。

LINQ以外にも収穫は沢山あって、参加して本当に良かったなと思いました。勉強会ってのは対象が自分のスキル以上だったりすると躊躇してしまいますが、こういうのは越えられないハードルだとわかっていても、その場に参加して同じ空間で頑張ってみるって位のスタンスで良いのかも知れないなって、ちょっと気軽な考え方が出来るようになった気がします。迷惑をかけなきゃ良いのです(w

プログラミングは私の本業ではありませんが、今後確実に身につけたいスキルだとは思っていますし、途中までは取り組んでちょっとしたものは作れる程度にはなっているので、次のステップへ上る為にも良い刺激を頂けたと思います。LINQを完全に理解するなんて到底無理ですが、LINQを適材適所で使って読みやすいコードを書ける様になりたいなと思っています。今日は非常に価値のある時間を過ごせました。

コメント

  1. moririring より:

    LINQ勉強会主催者の森理です。

    参加頂き有難うございます!そして勉強会の感想本当に有難うございます。

    こういうアウトプットをして頂けると励みになります!今後共宜しくお願いします。

    サポートしきれなかった点に関しては反省しております。もう少しきめ細やかなサービスが出来るように頑張ります。

    ちょうど今回の内容をHPにまとめているのでこのブログのリンクを貼らせて頂いて宜しいでしょうか?
    https://sites.google.com/site/visualstudiohackathon/vshtcstudyosaka2

    あとグリーの関係者ではありませんw。

  2. shinsuke より:

    森理さま
    先日は大変お世話になりました。
    ブログへのコメントも下さってありがとうございます。

    懇親会に参加できれば、「実はハンズオンについていけなかった」事を直にお話出来たんじゃないかと思ったりもしますが、恥を偲んでブログの方に記してみました。

    勉強会の流れは非常に理解しやすかったので、ひとえに私の基礎知識が足りなかっただけだと思います。事前にソースコードをテキストファイルで配布していただけたら、個人的には付いて行きやすかった気はしますが、標準レベルの方たちは実際に手を動かした方が良いに決まってますね。

    それでも参加した価値は有ったと思いますし、今回の経験で今後はちょっと無茶かな?って思う様なレベルにも挑戦してみようと思います。全てを理解するのは無理だとしても、何かしら吸収できますからね。

    グリーの関係者さんじゃなかったみたいでスミマセン。訂正しておきます。

    この記事には勉強会の具体的な内容を書いていませんが役に立ちますでしょうか?リンクを貼っていただくことはいっこうに構いません。

    今度は.Net Micro Frameworkに参加したいと思っていますので、またどうぞよろしくお願いいたします。

  3. […] Studioで行う方法に、Microsoft .NET Micro Frameworkという方法があります。以前参加させてもらったC#系のプログラミング勉強会でその存在を教えてもらい、Arduino等のハードウェア系+プログラ […]

タイトルとURLをコピーしました