アラサーからのプログラマー生活

アラサーの新米PGが必死に頑張る成長記録です。あとは旅行とか。

久しぶりにお仕事の話

こんばんは、堀井です。
最近お仕事の記事を書いていなかったのにはずっと気づいていたのですが、なにせ機密情報が多すぎるので、何を書いていいかいけないかを判断することが全然できなかったんですよね。

と言うことで当たり障りのない開発現場のお話をしようかなと思います。


すごく久しぶりになってしまったので、入社までの概歴を改めてお話するとこうなります。

2018年3月
前職(ホテル系)を退社

2018年6月〜8月
職業訓練校でC言語とSwiftの勉強をし、その間にサーティファイ C言語プログラミング能力認定試験2級を取得

2018年10月
現在の会社に就職

2018年11月〜
出向中(恐らく3月頃まで)

なお出向先の業種ですが、愛知県でC言語を使った開発と言うことでなんとなく察してください。

また、出向と派遣と紹介の違いはこちらをご覧ください。
www.hollage.nagoya



お仕事を始めて最初にやることですが、勉強でした
何を勉強するかと言いますと、業種そのものの一般常識ですね。

モノを作る業界なので、そのものを深く知らないと何もすることができません。
機械を作るのにその中身を知らないとコードの書きようもないですもんね。

と言うことでパソコンとID/PWが届くまでの2週間近くはずっと業界の本を読んでいました。
途中で飽きてきたので、書棚にあった「オブジェクト指向でなぜ作るのか」をこっそり読みましたが、非常に面白かったです。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

こちらですね。
入門書に必ず書かれている「犬やネコや人間をオブジェクトとして、オブジェクトに対して"鳴け・泣け"と命令することで云々」、
こういった比喩を無駄に使いすぎるせいでオブジェクト指向が訳の分からない物に聞こえてしまう、と言う初心者ありがちな誤解を解消してくれる本です。
これを読んだからと言ってコードが書けるようになるものではありませんが、理解の一助にはなると思います。
オブジェクト指向に少し手を出して諦めた・心が折れそうな方は一度手にして見るのもいいと思います。

他にも「リーダブルコード」や「マスタリングTCP/IP入門」なども入門書というか、エンジニアは読んでおいて損はないと言われている良書ですね。
先日「リーダブルコード」は少し立ち読みしてみたのですが、全然訳がわかりませんでしたね。そのうちまた腰を据えて読んでみたいです。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

  • 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)
  • 購入: 68人 クリック: 1,802回
  • この商品を含むブログ (140件) を見る

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

  • 作者: 竹下隆史,村山公保,荒井透,苅田幸雄
  • 出版社/メーカー: オーム社
  • 発売日: 2012/02/25
  • メディア: 単行本(ソフトカバー)
  • 購入: 4人 クリック: 34回
  • この商品を含むブログ (37件) を見る



しばらくしてパソコンを使う環境が整ったので、次に何をしたかと言うと環境構成です。

・テキストエディタ(久しぶりに秀丸を使いましたが、あれ結構便利だったんですね)
・単体テストユニットツール
・チャット、通話アプリ
・メーラー(安定のOutlook)
・バージョン管理ツール(カメさん)

その他諸々、正直丸1日かかりました。
でもまあ、同じ環境下でないと動くものも動かない可能性がありますからね!!
(の割にはWin7とWin10が混在しているんだよなあ・・・)


そんな感じで環境を整えましたら最初はやはりテスターから!!

ユニットツールにコードとテストをしたい関数名をぶち込んだら出来上がり。
とはいえテストということで色々考慮しないといけない部分がありますね。
例えばこんなコードがあったとしましょう。

int main (void){
    int date = getDate();
    int discount = 0;

    if (date % 10 = 0){
        if ( ( date / 10 ) % 2 == 1 ) {
            discount = 10;
        } else {
            discount = 5;
        }
    } else {
        discount = 0;
    }
    return 0;
}

int getDate(void){
    return 10;
}

10日と30日は全品10%オフ、20日は全品5%オフにしたいとでも言いたげなコードですね。
2分で書いたので汚さに関しては目をつぶってください。
さて、main関数に対しての単体テストは一体何をするのかと言いますと、

  • 全ルートを通るか

条件式で、全ルートを間違いなく通るか(=どんな条件だろうが通らないデッドコードが書かれていないか)どうかですね。
今回だと、getDateの返り値を操作することになりそうですね。
テストケースで言えば1, 10, 20あたりでどうでしょうか。通るだけなら通りますね。
(そもそもですがこのコード、32以上の自然数や自然数以外を考慮しないクソコードです)


実際のコードだと関数自体は3〜40行だったりするのですが、関数を呼び出して、その呼び出した先で関数を呼び出して、更にはグローバル関数は使うわマクロは使うわとしっちゃかめっちゃかです。
ポインタのポインタとかビット演算も使っていたのでなかなか参りますね。



ひとまずはこんなところでしょうか。
まだまだ分からないところだらけで周りに迷惑をかけていますが、なんとか慣れていきたいですね。
それではまた次回。