2016年1月15日金曜日

はじめまして。Sです



こんにちは!
昨年の5月からC#で開発をしているSと申します。
気づけばもう社会人2年目です。

経歴

大学時代は工学部に所属しており微生物の体内で薬の原料をつくる研究をしていましたが、
あまり刺激的ではない毎日に飽き飽きして仕事ではもっと面白いことがやりたい!と思い今の会社に入社しました。

社会人1年目は営業職で主にレストランに営業に行っておりました。
おいしいものが沢山食べられて幸せでした...♡

プログラミングは昨年のゴールデンウィーク明けにゼロから始めたので
毎日新しい発見があり面白いです♪

趣味

これといった趣味は特にないのですが、おいしいものを食べに行くのが好きです。
わりと胃が広がるタイプなので、ブッフェにもよく行きます。
お寿司だと60貫くらいは食べられます!
あと死ぬほど辛いものが好きです!!


おすすめのアプリ

最近毎日使っているアプリはこの「おこづかい帳」です。



すごくシンプルな作りになっていて、すぐに登録できるので続けられています!
レシートを読み込んで記録するタイプなども試したことがあるのですが、
なかなか上手く読み込むことができず、逆にストレスでした。。。


新年だし、しっかりお金の管理をしていこう!という方はぜひ一度ダウンロードしてみてください。
https://itunes.apple.com/jp/app/otonanookodzukai-zhang-deng/id933475348?mt=8


このブログについて。。。

約7ヶ月前。プログラミングを勉強し始めた頃のことを思い返すと、本当に分からないことだらけでした。
分からないことがあってもそれをどうやってググれば良いのか、自分が何が分からないのかが分かりませんでした。。。

なのでこのブログでは主に開発を始めたころ自分が分からなかったこと、詰まったところなどを書いていこうと思っております。

この春から開発を始める方々に少しでもお役に立てると嬉しいです♪


2016年1月14日木曜日

ねこもちです。 前回の続きで、処理を短くする系です。 ※処理そのものは短くなりませんね、良く考えると。パッと見の記述が短くなっているだけです。   ですが、これが本当に大事なことだと思います。 ■「ifのネストが多く、ifとelse節の対比が難しい」 下記のような関数があったとします。
void foo()
{
    var 結果A = 処理A();
    if( 結果A == 成功 )
    {
        var 結果B = 処理B();
        if( 結果B != 成功 )
        {
            var 結果C = 処理C();
            if( 結果C == 成功 )
            {
               処理D();
            }
            else
            {
                失敗Cのリカバリ処理;
                return 失敗C;
            }
        }
    }
    else
    {
        return 失敗A;
    }
    処理F();
    return 成功;
}
ifが3段もネストしていて、途中で抜けたり、抜けなかったり、 else節があったりなかったり、 このメソッドでは、何が起きるのかを知るのは非常に難しいのです。 まず、結果Aのifのネストを解消します。
void foo()
{
    var 結果A = 処理A();
    if( 結果A != 成功 )
    {
        return 失敗A;
    }
    var 結果B = 処理B();
    if( 結果B != 成功 )
    {
        var 結果C = 処理C();
        if( 結果C == 成功 )
        {
           処理D();
        }
        else
        {
            失敗Cのリカバリ処理;
            return 失敗C;
        }
     }
    処理F();
    return 成功;
}
次に、結果Bのifのネストを解消します。 結果Bが成功だったら、処理F()のあと成功返しているので、そのようにします。
void foo()
{
    var 結果A = 処理A();
    if( 結果A != 成功 )
    {
        return 失敗A;
    }
    var 結果B = 処理B();
    if( 結果B == 成功 )
    {
        処理F();
        return 成功;
    }
    var 結果C = 処理C();
    if( 結果C == 成功 )
    {
       処理D();
    }
    else
    {
        失敗Cのリカバリ処理;
        return 失敗C;
    }
    処理F();
    return 成功;
}
同様に結果Cのifもthen節でreturnするようにします。
void foo()
{
    var 結果A = 処理A();
    if( 結果A != 成功 )
    {
        return 失敗A;
    }
    var 結果B = 処理B();
    if( 結果B == 成功 )
    {
        処理F();
        return 成功;
    }
    var 結果C = 処理C();
    if( 結果C != 成功 )
    {
        失敗Cのリカバリ処理;
        return 失敗C;
    }
    処理D();
    処理F();
    return 成功;
}
こうすることで、処理と失敗時の処理が近づき、非常に読みやすくなりました。 こういう書き方のとき、このif群を「ガード節」というようです。

2016年1月13日水曜日

はじめまして、エンジニアのKです

こんにちは。エンジニアのKです。
既に何個か投稿済みですが、今回は簡単な自己紹介をしたいと思います。

経歴

学生時代は工学部に在籍し、無線通信の研究を行っていました。
ITSと呼ばれる自動車に搭載する無線通信技術や地上デジタル放送波の受信品質の改善などをテーマとして扱っていました。
今考えると怪しさ満点ですが、地デジの放送波を計測するためにアンテナを持ってビル陰などを徘徊していたような学生時代でした。

計測した電波の解析やシミュレーションを行うためにプログラミングを本格的に学び始めたのですが、
次第にアプリケーションを作って世の中の人に使ってもらいたいと思うようになり、webサービス系の会社に就職しました。
早いもので社会人6年目となりました。

扱ってきた言語としては、
  • Javascript
  • PHP
  • MySQL
  • Java
  • C、C++
あたりで、一番好きな言語はjavascriptです。ブラウザに表示されるDOMをゴリゴリ動かすのが楽しいです。
HTML5によってブラウザでも色々なリッチな表現ができるようになってきており、
今はまだスマホのネイティブアプリのリッチさには敵いませんが、いつかアプリとブラウザの垣根が無くなって、
web上でリッチなコンテンツを作れる日を夢見ています。そう遠くは無さそうです。

趣味

コレと決めたものに没頭する傾向があり、少し前まではパズドラにどっぷりハマっていました。課金額は秘密です。
最近はモンスターハンターの新作が発売されたので、そちらにどっぷりハマっています。
モンハンは4から始めたニワカなのですが、当時もどっぷりハマって気づけばハンターランクがカンストしていました。
今作も村の平和のために頑張りたいと思います。

あと、今はシーズオフですが野球観戦も好きです。最近、贔屓球団の球場の近くに引っ越したので、シーズンの開幕が待ち遠しくてたまりません。

おすすめアプリ

他のメンバーの流れに乗って、僕からもひとつ「TimeTree」というアプリを紹介します。


ひとことで言うと家族、恋人、友人達と使う共有カレンダーなのですが、UIが優れていてとても使いやすいです。
一度聞いた予定を忘れて「○日に××って言ったじゃない!」と良く怒られている方には、とても重宝すると思います。
僕も凄く助かっています。

最後に

今、技術的にはJavaを習得中で、ServletとAndroidアプリの両方を実務で扱っています。
今後もJava(と、好きなJavascript)中心の投稿になっていくと思いますが、よろしくお願い致します。

2016年1月12日火曜日

いのうえです。

改めまして、自己紹介をさせて頂きます。
※私って、こんな人です。


■職歴&技術歴

□2000年4月 新卒入社


 不動産営業を希望し、就職をするも 

 「システムエンジニアという響きが格好いい」

 という理由で、ネット系の関連会社への勤務を希望

 Yahooジオシティーズで、見よう見まねでHPを作ってアピール ⇒ 希望が通り、ネット系の関連会社へ出向
 もちろん、開発の「か」の字も知らない超初心者。
 でも、「自分で作ったものが動く」という体験に心奪われ、楽しくてしょうがない状態に。

 開発言語 : ASP(VBScript) データベース : SQLServer


□2002年5月 新しい言語の習得へ①


 Javaを覚えるべく、所属会社の好意もあり、1ヶ月間の詰め込み型研修へ参加させてもらう
 なかなかハードな研修で、1週間毎にテストがあり、結果が悪いと、研修を打ち切られてしまう
 さらには、卒業試験があり、こちらも結果が悪いと、卒業できない(=1ヶ月研修延長)という・・・。

 私は、こういった追い込まれた状況が好きなので、楽しみながら研修を満了。

 無事、JavaでのWeb開発のきっかけをつかむことができました。

 以降、数年間は

 開発言語 : Java(Struts) データベース : MySQL or PostgreSql


 での開発中心

□2004年1月 新しい言語の習得へ②


 初期に習得したASPからASP.NETへの移行タスク
 ASP.NETにはVB.NET、C#.NETといった選択肢はあったが、Javaに似ているという理由もあり、C#.NETを選択

 当時は、Frameworkバージョン1.0

 その後、1.1、2.0とバージョンアップを重ね、2.0中心の開発をする。

□2004年1月~現在


 遅まきながら、Framework4.5をやっと経験。もちろん、MVC。
 Razarの使い勝手の良さや、LINQの便利さに心奪われるも、今は80%開発卒業。
 マネージャーとして稼働して、早5年となりました。

 今でも、ちょくちょく時間を見つけては、開発にも携わりつつ、でも本命は、組織マネジメントプロジェクト推進



2016年1月7日木曜日

処理を短くする

ねこもちです。

古いプログラムを修正していると、そのプログラムが非常に「長大」であると気づくことがあります。
一つの関数(メソッド)が数百・数千行に及んでいることもあります。

こういうのは、大体
「どこにあるデータがいつ更新されるのか、追うのが難しい」
「ifのネストが多く、ifとelse節の対比が難しい」
「途中でreturnすればいいのに、制御フラグに値をセットした上で最後まで処理を続けるので、処理を追うのが難しい」
「途中でreturnしているが、どの条件でそこに入るのかを追うのが難しい」
「同じようなコードが何回も出てくる(が、100%同じと断言できないので、結局すべて追う必要がある)」
など、その他のいろいろな「難しいポイント」を含んでしまっていることも多いのです。


■「どこにあるデータがいつ更新されるのか、追うのが難しい」
これについては、下記の方法を取ると、難しさが減ります。
「変数は使う直前で定義する」
「できるだけローカル変数にする」
「できるだけImmutableな設計にする」

たとえば、Webアプリケーション(ASP.NETなど)の例を挙げます。

public class XxxxPage : Page
{
private string _a = "";
private int _b = 0;

public void Page_Load(object sender, EventArgs e)
{
_a = Request.QueryString["a"];
if( string.IsNullOrEmpty(_a) ) {
return;
}
_a = _a.Trim();

if( IsPostBack )
{
_b = int.Parse(_a);
}
}

public void OnXxxxEvent(object sender, EventArgs e)
{
// _a, _bを使用するコード
}
}

このようになっていると、OnXxxxEvent()が呼ばれるときに、
・事前にPage_Load()が呼ばれていること
・Page_Load()内で、どのようなルールで_a, _bの値が決まるのかを知っていること
の2点がわかっていないと、OnXxxxEvent()を書くのが難しくなります。
また、他のメソッドが_a, _bの値を変更する可能性もあり、
結局すべてのプログラムを調べないと、挙動がわからないということになります。

public class XxxxPage : Page
{
public void Page_Load(object sender, EventArgs e)
{ // 何もしない。
}

public void OnXxxxEvent(object sender, EventArgs e)
{
string a = (Request.QueryString["a"] ?? "").Trim();
int b = !string.IsNullOrEmpty(a) && IsPostBack
? int.Parse(a)
: 0;
// a, b を使用するコード
}
}

このように、「使用する箇所で」変数を定義し、同時に初期化することで、aがなんなんか、bがなんなのか、
まぎれることがなく、プログラムが非常に明快です。

また、この書き換えの際に、元のコードでは
_a がまず Request.QueryString["a"]を指し、
つぎにそれをTrim()したものを指すようになっていましたが、
書き換え後ではaはRequest.QueryString["a"]をTrim()したものを指し、それを変更しないようにしています。
こうすることで、aという変数がいつでも同じ値になり、プログラムの挙動を理解するのが簡単になります。


その他についてはまた後日。