geekProgrammer

2次元に恋するプログラマ

客先常駐はやめるべき?

IT業界には客先常駐(SES)という働き方があります。

というか、よほどの大企業でも無い限りそれが当たり前になってます。 私も他社に常駐しているわけですが、私はこの働き方はエンジニアに対して大きな負担をしいていると思っています。 ここでは自分の会社を自社、客先常駐先を常駐先と表現します。 ちなみに自社での雇用形態は正社員です。

労働時間

f:id:a-rise:20160123212441j:plain
客先に常駐する以上、勤務時間や休日は全て常駐先に準じます。会社によって多少異なりますが、月の契約時間は160~180時間であるとされています。 この契約時間と言うのがすごく厄介なんです。
例えば2016年6月と5月例にしてみます。(一日の勤務時間は8時間で計算します。)

6月の稼動日(月~金)は22日です。 22日 × 8時間 = 176時間

5月の稼動日(月~金)は19日です。 19日 × 8時間 = 152時間

5月の稼働時間を見て下さい。152時間です。そうです契約時間以下となってしまいます。 契約時間に満たない場合にはどうするのか?そうです。強制残業です。

足りない時間は8時間なのでその分残業してカバーする必要があるのですが、その8時間分の残業代は出ません。 つまりは無駄で意味がない残業をしなければならないのです。
ちなみに契約時間に満たない場合は、その分常駐先から自社に支払われる契約金が減額されるそうです。

プログラマになってからというもの、休日は嬉しいのにゴールデンウィークみたいな祝日が嫌になりました。異常ですよね。

以前に自社の社長に契約時間の件について相談したことがあります。しかし、「契約時間を割らなくて良いように仕事を増やしてもらえるように常駐先の責任者に話しておいたから!」とアスペかよこいつ・・・ みたいな回答を頂いたので私の憂鬱はしばらく無くなりそうにありません。

客先常駐って派遣と違うの?

f:id:a-rise:20160123212523j:plain
私のような正社員を他社に常駐させるのと、派遣会社から派遣されるのでは契約が全く違うそうです。 例えば私のような場合だと、常駐先の上司は私に対する指揮命令権は持っていません。派遣の場合は派遣先の上司は派遣されてきた人に対する指揮命令権を持っています。

でも実際に現場に行けばわかるのですが、客先常駐と派遣は同じです。だって「あなたは私に対する指揮命令権がないでしょ?だったら指示に従いません」なんて言ったら仕事になりません。
いくら自分に派遣社員は違うんだから・・・と思っていても常駐先の人や友人から見たら同じ派遣社員に見えるでしょうね。(友達に要するに派遣社員でしょと言われ心を深くえぐられました)

客先常駐しかない会社は早めに見切りをつけて転職するのが良いと思います。私も今はとにかく経験やキャリアを積んで早く違う会社に転職出来るように行動しています。
今度は自社開発をやってる会社がいいなぁ・・・

ソースコードを直訳したようなコメントは書くべき?

面白いtogetterがありました。

togetter.com

 

直訳したようなコメントは書くべきか?

 

私は書くべきではないと思います。

 学生時代は先生から「コメントは書くように」という指導を受けていました。

 

しかし、実際に仕事にでてみると、先輩社員から「そもそもコメントが無ければ解読できないソースコードはおかしい、見ただけでどんな処理をしているかわかるプログラムを書くようにしなさい

こう指導されました。

たしかに、コメントだらけのソースコードって非常に可読性が悪いですよね。例えば

 

// 速度

int velocity = 0;

// 速度を3プラスします

velocity += 3;

 

別にコメントが無くても、変数名を見れば意味はわかりますよね。

 

学生時代はわかりやすいと思ってコメントは積極的に残していましたが、今は各クラスやメソッドの上にjavadocを書くだけになりました。

 

Java DecimalFormatを用いたフォーマット(ゼロ埋め)

qiitaにも投稿したのですが、こちらのブログにも投稿します。

 

仕事でDecimaFomatを使いました。これを使うと簡単にゼロ埋めが可能です!

しかも条件によって桁数を変えたい時とかはすごく便利!

 

ある値をゼロ埋めしたいとき、さらに条件によって桁数を変えたいときはNumberFormatのサブクラスである
DecimalFormatを用いると簡単です。

Sample
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * DecimalFormatを用いたゼロ埋め
 * @author owner
 *
 */
public class Sample {
    public static void main(String[] args) {

        DecimalFormat format = new DecimalFormat("#.#");

        // 小数点以下の最小値
        format.setMinimumFractionDigits(2);
        // 小数点以下の最大値
        format.setMaximumFractionDigits(2);

        BigDecimal number = new BigDecimal(1000);

        System.out.println(format.format(number));
    }
}

上記のサンプルでは小数点以下の表示する桁数を2桁に指定しています。
結果は下記のとおりです。

結果
1000.00

setMinimumFractionDigitsとsetMaximumFractionDigitsの引数に表示したい桁数を入力するだけです。
ちなみに値は自由に変更することができます。

小数点以下をの表示桁数を10に変更
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * DecimalFormatを用いたゼロ埋め
 * @author owner
 *
 */
public class Sample {
    public static void main(String[] args) {

        DecimalFormat format = new DecimalFormat("#.#");

        // 小数点以下の最小値
        format.setMinimumFractionDigits(10);
        // 小数点以下の最大値
        format.setMaximumFractionDigits(10);

        BigDecimal number = new BigDecimal(1000);

        System.out.println(format.format(number));
    }
}
結果
1000.0000000000

あらかじめ小数点が表示されている場合

あらかじめ小数点が表示されている場合でもそれを含めた桁数が指定した値になります。

あらかじめ小数点が表示されている場合
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * DecimalFormatを用いたゼロ埋め
 * @author owner
 *
 */
public class Sample {
    public static void main(String[] args) {

        DecimalFormat format = new DecimalFormat("#.#");

        // 小数点以下の最小値
        format.setMinimumFractionDigits(5);
        // 小数点以下の最大値
        format.setMaximumFractionDigits(5);

        BigDecimal number = new BigDecimal(1000.05);

        System.out.println(format.format(number));
    }
}
結果
1000.05000

小数点以下以外のゼロ埋め

小数点以下の桁数ではなく、整数値部分でもゼロ埋めをすることが可能です。
小数点以下の桁数の指定はsetMinimumFractionDigits()とsetMaximumFractionDigits()を使用しましたが
整数値部分の指定はsetMinimumIntegerDigits()とsetMaximumIntegerDigits()の引数に表示したい桁数を入力します。

指定方法
小数点以下の桁数の指定
setMinimumFractionDigits(最小値)
setMaximumFractionDigits(最大値)

整数値部分の桁数の指定
setMinimumIntegerDigits(最小値)
setMaximumIntegerDigits(最大値)
Sample
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * DecimalFormatを用いたゼロ埋め
 * @author owner
 *
 */
public class Sample {
    public static void main(String[] args) {

        DecimalFormat format = new DecimalFormat("#.#");

        // 小数点以下の最小値
        format.setMinimumFractionDigits(5);
        // 小数点以下の最大値
        format.setMaximumFractionDigits(5);
        // 整数値の最小値
        format.setMinimumIntegerDigits(5);
        // 整数値の最大値
        format.setMaximumIntegerDigits(5);

        BigDecimal number = new BigDecimal(1000.05);

        System.out.println(format.format(number));
    }
}
結果
01000.05000

DecimalFormatを使うとユーザが指定した形にフォーマットが出来る!

Java 文字列の検索

仕事で使って便利だなと思ったことを書いていきたいと思います。

今日は文字列の完全一致検索が必要になったので、MatcherをPatternを使って検索処理を行いました。

qiitaにも投稿したのですが、一応ブログにも。

 

PatternとMatcherを用いた文字列の検索方法(完全一致)

sample
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Sample {
    public static void main(String[] args) {

        String airlines = "JAL";

        String searchString = "ANA|JAL";
        Pattern pattern = Pattern.compile(searchString);
        Matcher matcher = pattern.matcher(airlines);

        if (matcher.matches()) {
            System.out.println("一致します。");
        } else {
            System.out.println("一致しません。");
        }
    }
}
結果
一致します。

文字列検索にはPatternとMatcherを用いれば簡単にできる。