転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

C#を勉強する④_ラムダ式

C#を勉強すると、ラムダ式の壁にぶつかった。何度勉強しても、難しく感じる。ラムダ式を書くにあたり、「ラムダ式の{}の中が1つの文の場合は、{}とreturnを省略することができる」などのルールが存在するが、それらを全て覚えることは不可能だと判断した。
ここでは、ラムダ式を使った例を書く。

奇数の数をカウントする

var count = Count(numbers, n => n % 2 == 1);

5以上の数をカウントする

var count = Count(numbers, n => n >= 5);

5以上10未満の数をカウントする

var count = Count(numbers, n => 5 <= n && n < 10);

数字の1が含まれている数をカウントする

var count = Count<numbers, n => n.ToString().Contains('1'));

なお、ラムダ式が渡されているCountメソッドは以下のようになっている。

public int Count(int[] numbers, Predicate<int> judge) {
    int count = 0;
    foreach (var n in numbers) {
        if (judge(n) == true)
            count++;
    }
    return count;
}

第二引数として渡しているPredicateデリゲートは、ある基準を満たしているかどうかを判断するメソッドを表している。
これにラムダ式を指定することで、Countメソッドでいうと、if文の条件を汎用的に変更できる。
|

最近転職したので、自分の転職活動をまとめてみた

最近、転職しました。もちろん同じSEではあるけれど、転職活動は結局3ヶ月ほどやった。せっかく転職するんだから今よりもいい条件で働きたくて、色々悩んでたら3ヶ月も経っていた。
働き方としては以下を考えた。

前職は都内で働いていたため、通勤時間が片道2時間とかなりえぐかった。電車も2回乗り換えがあり、仕事を21:00に終えても家に到着するのが23:00過ぎになり平日は仕事だけで終わってしまう。
こういう生活に嫌気がさし、「お金」よりも「時間」を優先して仕事を探した。
具体的には「フレックスタイム」「裁量労働制」のいずれかを取っているか、また私服勤務OKかも条件に加えていた。この「私服勤務」も重要で都内では私服で働けていたので、今さらスーツ勤務は無理だと思ったからだ。あと、意味のないスーツ勤務を強いる会社で働きたくないという気持ちも強かった。
ただ、実際に仕事を探してみて感じたのは、都内に比べて地方は働き方にまだまだ自由度がないということ。(自分は地方へ引越しするため転職を余儀なくされた経緯のため、転職先は地方で探していました)
これは転職エージェントにも言われたことだが、地方ではスーツ勤務必須だったり、勤務時間も9:00スタートだったりといった会社は多いとのこと。けど、探せば地方でもフレックスタイムや裁量労働制をとっている会社もあるので、探してみることは大事だなと感じた。

で、努力の甲斐あって自分の条件に合う会社を見つけることができた。探すにあたり、色々な転職サイトを利用したのでちょっとまとめてみる。

Green

www.green-japan.com

「転職しよう」と決め、真っ先に登録したのがこれ。なぜGreenにしたのかは特に意味はなく、ただ自分が存在を知っていたから。
Greenは、自分の情報を登録すると企業がその情報を見てスカウトがくる。このスカウトにも種類があり、ただ企業が興味を持っただけの「気になる」から、「面談確約スカウト」なんかもあったりする。こちらから企業を探すこともでき、その企業に対して「気になる」ボタンを押せば、話が早く進むこともある。

このGreenは転職前半ではメインで使っていて、2社は書類面接応募、1社はビデオ会議による会社説明会に参加、1社は直接会社に訪問する会社説明会に参加してきた。
Green自体は登録している企業も多く、応募までの過程や会社とのやり取りはスムーズそのもの。あとGreenに登録したら、専用アプリのインストールは必須。特に日程調整などのやりとりは、このアプリから行えるのが大きかった。

forkwell jobs

jobs.forkwell.com

ここは登録しただけで、結局利用せず。都内での転職活動だといいのかもしれないが、地方だとちょっと厳しいかな。

BIZREACH

www.bizreach.jp

CMでおなじみビズリーチ。知り合いはここで転職先を決めた。自分も登録したのだが、登録したときにはいくつかの会社と面接が進んでいたので結局利用せず。こういった転職エージェントサイトにしては珍しく、登録後にエージェントから電話がかかってきたりなどはなかった。企業から直接スカウトがくるシステムで、ほんとにいくつかの企業からバンバンスカウトがきた。ちゃんと利用すれば、結構良さそう。

レバテック

freelance.levtech.jp

フリーランスという働き方も考えたので、登録した。登録すると、電話面談がある。
フリーランスになると一気に高単価を目指せるかと思ったが、ある程度の経験がないとそんなに高単価は望めない(当たり前なのかもしれないが。。)
SE歴5年の自分の実力じゃ、単価も低く全然希望条件を満たせなかったのでフリーランスは早々に断念した。

ちなみにここで重要視されたのは、何よりも経験だった。開発だったら、要件定義、設計、実装、テストのどの工程が経験あるか、DBの設計経験はあるか、プログラミング言語はどれが仕事で使用したことがあるか(プライベートで書いたことあるは、そんなに意味ないみたいだった)、SQLの知識はあるか、インフラ周りの知識はあるかなどなど。
ちなみに上記で、自分の希望条件を満たせなかっただけで、案件自体は結構あった。

paiza

paiza.jp

エンジニア向けの学習サービスとして有名なpaiza。実は転職もできる。転職後半でメインで使用していたのはこれ。
ここは独特で、まずは情報登録。次にpaizaのスキルチェックを受ける。具体的には、自分の好きな言語でプログラムを書く(競技プログラミングに近い)。そうすると、ランクがつき(ランクはS,A,B,C,D)、書いたソースコードも会社が見れる。
このランクとソースコードで諸々判断され、会社からスカウトがくるという仕組み。ランクが高くなれば、より多くの会社からスカウトがくるし、何よりソースコードを見てもらっているので応募側としてもどことなく安心感がある。

自分はランクBだったのだが、結構スカウトがきた。中にはかなり条件がいい会社もあり、paiza側も個別にメールをくれたりとサポートも手厚い。
スカウトがくると書類面接がスキップされることが多く、自分もスカウトがきたものはすべて書類面接がスキップされるものばかりだった。

まとめ

転職活動中は早々と会社を決めたいと思いがちになり、自分の希望条件を下げそうになることがある。自分も思ったより転職先が決まらず、もろもろ妥協しそうになった。
けど、案外探せば自分にピッタリの会社は見つかるものだと思う。もしこのブログを見ている人が転職活動をしている人ならば、頑張ってほしい。

しばらくブログを更新しなかったら、アクセスが確実に増えてきている

しばらくブログ更新していないなーと思っていたら、最後に更新したのが11月だった。なので、90日間更新していないブログに表示される広告が、ついにこの広告にも表示されてしまっていた。
更新はしていないものの、アクセスは日々見ていたんやけど、そうするとコンスタンスに月間1000pvを超えてくるようになってきた!
これは、嬉しい。やっぱり、プログラミングの勉強内容を書いてきたのが大きいと思う。

ということで、まずは更新して不要な広告を消して、ブログ再開します。
あと、更新が滞ってたのには理由もちゃんとあり。。ってことも、追々書いてきます。

C#を勉強する③_インターフェイスについて

静的メソッドとインスタンスについて

静的メソッドからは、自分自身のインスタンスを呼び出せない。よく例にあげられるのが、Mainメソッドでのこと。
このように、静的メソッド内では、自分自身のインスタンスメソッドは呼び出せない。

// 静的メソッドとして定義
public static void Main(string[] args) {

    for(int feet=1; feet<=10; feet++) {
        // 静的メソッド内では、自身のインスタンスメソッドは呼び出せない
        double meter = FeetToMeter(feet); 
        Console.WriteLine("{0} f = {1:0.0000}m", feet, meter);
    }
}

static double FeetToMeter(int feet) {
    return feet * 0.3048;
}

インターフェイスの考え方

public class List : IList, ICollection, ,,,,,,, IEnumerable,
Listクラスは、IListインターフェイスが定義しているメソッドやプロパティを持っている⇨Listクラスは、IListインターフェイスを実装していると、この記述から読み取れる。
なお、.NET Frameworkが提供しているインターフェイスには接頭辞Iが付いている。

インターフェイスの基本的な考えとして
・AクラスがIXインターフェイスを実装していると、AオブジェクトはIX型の変数に代入できる。
・IX型の変数は、IXインターフェイスが定義するプロパティ、メソッドが使える。
・プロパティやメソッドの具体的な動作は、IXインターフェイスではなく、Aクラスに実装されている。

上を例で示す。

List<int> list = new List<int>() {1, 2, 3, 4, 5 };

// Listクラスは、IColliction<T>のインターフェイスを持っているので変数に代入できる
ICollection<T> collection = list;

// collection変数は、ICollection<T>型のプロパティやメソッドが使える
var count = collection.Count;
collection.Add(6);

また、別の例として

// これだと、List<T>しか受け付けていない
private List<Sale> _sales;

// インターフェイスに変えると、IEnumerable<T>を実装しているすべてのクラスが使える
private IEnumerable<Sale> _sales;

暗黙の型指定varの使い方

List<Sale> sales = new List<Sale>();

// varを使ってかくと
var sales = new List<Sale>();

エルカミーノ:ブレイキング・バッド THE MOVIE_海外ドラマの王者は、映画になっても面白い

※多少、ネタバレありです。

Breaking Badの後日談が、NETFLIXで映画になって公開された。

f:id:uuc1h:20191014131254j:plain

Breaking Badとは、2008年から始まったアメリカのテレビドラマシリーズで、シーズン5で完璧なラストを迎えた。
いわゆる海外ドラマというジャンルだが、海外ドラマの主流といえば、1話完結物だった。例をあげると、「クリミナル・マインド」、「ボーンズ」などだ。もちろん、これらドラマは素晴らしいのだが、一つ大きな欠点があった。
それは、人気が出ると「長期化」することだ。これは、どんなドラマも駄作に貶める、最悪な流れだと思う。

だが、Breaking Badはなんの蛇足もなく、シーズン5で完璧な終わりを迎えた。だが、完璧すぎて、この「エルカミーノ」でBreaking Badが映画化されると聞いて、拒絶反応を起こした人もいるかもしれない。
しかし、自分は傑作に違いないと信じていた。それは、スピンオフにあたる「ベター・コール・ソウル」を見ているからだ。

ソフトシェル ベター・コール・ソウル SEASON 1 BOX [DVD]

「スピンオフは成功しない」と勝手な法則を持っていた自分だが、このベターコールソウルにいたっては例外だった。Breaking Badのクオリティーを保ったまま、圧倒的に面白い。このベターコールソウルで、エルカミーノに関しても見る前から「絶対に面白いはずだ」と確信していた。

エルカミーノは、限られた人だけが見ることを許された傑作だ

少し前置きが長くなったが、結論を先に。

エルカミーノはおもしろいのか?」と人に聞かれたら、自分はこう答える。

あなたは、Breaking Badをシーズンファイナルまですべて見ましたか?
すべて見たなら大丈夫です。安心して見てください。傑作です。

エルカミーノは、Breaking Badの後日談だ。しかも、Breaking Bad本編で語られていない過去の話や、Breaking Badの登場人物が出てくる。そのため、Breaking Badの内容が頭に入ってないと、色々楽しめない。
Breaking Badを見たことがなく、いきなりこのエルカミーノから見ると、ストーリーは意味不明だろう。だからこそ、「エルカミーノは、ファンムービーだ」と言われているが、少なくとも自分は「いや、これが見たかった」と言いたい。

また、全体的に非常に暗い。ジェシーはトッドたちに監禁されていたトラウマに苦しめられ、心に更なる傷をおってしまっている。そもそもが、見る人を選ぶ映画だ。
だが、そこはBreaking Badクオリティ。終始暗いままではなく、時にポップに、テンポよく進むため、没頭して見れてしまう。

そして、やはり本作を傑作たらしめているのが、主演のアーロン・ポールの存在が大きい。Breaking Badのシーズン1のジェシーとは完全に別人で、色々なことが自分に起きたからこその変化を、完璧に演じきっている。Breaking Bad後半の情緒不安定な状態が、さらに悪化しつつも、人としての凄みが感じられるのが、エルカミーノジェシー・ピンクマンだ。

ただ、少しダメ?というか、気になったことが一つ。
エルカミーノでは、過去のシーンがたびたび登場する。Breaking Badでは語られていないシーンだ。例でいうと、ジェシーが監禁されているとき、実はトッドとこんなことが起こっていたみたいなシーンが多く出てきた。
それらエピソードはどれも最高だが、そこに出てくるトッドが当時と違って、かなり太っている。(Breaking Bad当時のトッドは細身だった)
過去の話のはずなのに、トッドは年齢からくる体重の変化なのか、見た目がかなり違っていた。これは、他のシーンでも度々見られ、その度に気になってしまった。
Breaking Badの終了から6年近くたっているからこれは仕方がないのだが。。

と、最後は少しだけ気になる点をあげたが、エルカミーノはまさに傑作です。面白いドラマは、映画になっても面白い。激しくおすすめです。

C#を勉強する②_値型と参照型を理解する。

分かったつもりになっても、ちょっと時間がたてば混乱するのが値型と参照型の違い。
まず、例となるソースコードを書いてみた。ちなみに、構造体は値型。

public class Program {

        public static void Main(string[] args) {

            MyClass myClass = new MyClass();
            MyStruct myStruct = new MyStruct();

            // それぞれに値を代入
            myClass.X = 80;
            myStruct.X = 40;

            // メソッドでそれぞれの値を出力(結果:MyClassX = 160, MyStructX = 80)
            PrintObjects(myClass, myStruct);

            // 再度、それぞれの値を出力(結果:MyClassX = 160, MyStructX = 40)
            Console.WriteLine("MyClassX:{0}, MyStructX:{1}", myClass.X, myStruct.X);
        }

        static void PrintObjects(MyClass myclass, MyStruct myStruct) {

            // プロパティの値を2倍
            myclass.X *= 2;
            myStruct.X *= 2;

            Console.WriteLine("MyClassX:{0},MyStructX:{1}", myclass.X, myStruct.X);

        }

        
        
    }

    class MyClass {
        public int X { get; set; }
        public int Y { get; set; }
    }

    struct MyStruct {
        public int X { get; set; }
        public int Y { get; set; }
    }

ここで2回目のConsoleへの出力結果を見てみると、MyStruct(値型)の値は2倍されていないのに、MyClass(参照型)の値は2倍されている。
PrintObjectsメソッド内でMyClass.Xの値を更新しているが、参照型の場合、文字通り参照先の値を更新するため、2回目にMyClass.Xの値を参照した場合、2倍に更新された値を参照しているからである。
では、値型はなぜ2倍になっていないかというと、PrintObjectsメソッドにMyStructを渡しているが、これはオブジェクトそのものをコピーして、メソッドに渡しているからだ。
よって、メソッド内で2倍しても、2回目の出力時にMyStruct.Xの値は2倍になっていない。PrintObjectsメソッドに渡したMyStructと、Mainクラス内で宣言したMyStructは別物である。

参照型はわかるが、値型をメソッドに渡すとき、オブジェクトをコピーして渡しているという概念を自分は忘れがちなので、ここで復習しておく。

C#を勉強する①_継承の基礎を理解する。

自分はUnityでゲームを作っている。つい先日も、新しいゲームをリリースした。 uuc1h.hatenablog.jp UnityではC#の言語が採用されているので、必然的にC#の知識が必要になってくる。 普段の業務ではJavaを使っているので、なんとなくC#も書けるがやはり1から学び直しておきたい。ということで、C#について、基礎から学ぶことにした。勉強内容を、本ブログに記録していく。

C#での継承について

Javaと違う点として、継承がある。C#の方が記載が簡単。

public class Employee : Person{
    public int Id { get; set; }
    public string DivisionName { get; set; }
}

継承先のクラス名:継承元のクラス名(基底クラス)と記載する。
そして、継承の時にはis a 関係も考慮する必要がある。
上のソースの「人間クラス」、「社員クラス」を例とすると、「社員は人である」が成立するため上記のような継承が成立する。
逆に、「人は社員である」という関係は成り立たないため、

public class Person : Employee

という継承は使わない。

また、is a 関係から、以下のような形も可能。

// Employeeクラス特有のプロパティなどは利用不可
Person person = new Employee();

しかし、逆の代入は不可。

Employee emp = new Person();