デザイナーが始めるプログラミング

グラフィックデザインを経験後、プログラマーへと転身すべく日々の勉強を書き綴った奮闘日記

素敵!プログラミング原則

どうもお久しぶりです。 最近は気持ちがバタついているのかどうも何かと手がつかないでいましたが そろそろ気持ちを落ち着つかせて色々と取り組んでいこうと思っていたり。。

そんなある日、自分のメモに「YAGNI」って書いてあったのを発見し「ヤグニ??」って思って調べたら興味深かったんですね。

YAGNIの原則

You Aren't Going to Need It.  
それを必要としないでしょう

システムを開発する際に今後の追加するであろう仕組みを想定して事前に組み込んでも
実際はほとんど使用する事がない。という事を言葉にした経験則。  

「え!?そうなん!?」 システムは今後のメンテナンスを考えて事前に想定できる機能を用意するのが正解かと思っていました。

とはいえ思いおこせば色々想定してプログラムを作っていたら結構時間を取られて先輩から教わった 「なるほど」な考えです。

まさにミニYAGNIが起きたわけですね。

YAGNIをきっかけに教訓を色々見てみるとかなり沢山あるんですね。 (全然知らなかった。。)

まだまだプログラマーとしてはピンとこない事が多いんですが 元デザイナーとしては共通する事が多い!

特にこれはシビました。

PIEの原則

Program Intently and Expressively  
意図を明確にしたプログラムを書く

コードは書く事よりも読む事が多いため、読む人の事を考えたコードを書くこと。

「そんなの当たり前だろ」って言われそうですがすごく大事な気がしますね。

デザインもすべての要素に意味があるはずなんです。ただ、気がついたら 小手先で作業してしまってる事も少なくありません。

だからこそこの原則には共感と教訓を感じてしまいます。

そしてこんな名言がありました。

プログラムコードは一行一行すべてに魂がこもっていなければならない

これはやばいですね。かっこよさMAXです。 僕は職人気質が弱いので、こういった事はどうでもいいって思ってた側なんですが。

 

デザインを経験した事でこういった事が大事に思うようになりました。 文字間とか行間とか数ミリの違いなんですがそこに手を抜くと全体もだらしなくなるんですね。 プログラミングもきっと同じなんかな?

まだまだ知らない事だらけですね。

今回はこちらのサイトを参考にさせてもらいました。 興味のある方はどうぞ!
ストラテジックチョイス

働き出してはや2週間。。

会社へ出勤してはや2週間が経過しました。

日々研修に追われる日々やーー

もうすぐ30歳になる俺を1ヶ月もみっちり研修してくれる会社に本当に感謝してます。

そして思う。やっぱりこれは俺に合っている説!

 

デザインってなかなか評価しにくいし評価されても実感がまったくしないんですが

プログラミングは評価がはっきりしているのでいいですね。

もちろんソースコードの組み方に正解があるという訳ではないと

思うんですが評価されるとやっぱりうれしい気持ちになれるのは

プログラミングかなーと。(現段階で)思います。

 

またプログラミング+ユーザーインターフェースも含めて

考える事ができるのでわくわくしますね。

 

ただ、同年代で比べてかなり実力、経験が劣るんで

日々勉強しないと追いつけません。というか俺は追いつけるのか。。

 

 

Java SE 7 Programmer Silver・・・・合格!涙

今までいろいろとメモしてきましたが。。

それはそう!この資格「1Z0-803-JPN Java SE 7 Programmer I」取得のため!

ご存知の方はあれなんですが、Silverってカッコいい響きですがJavaプログラミングの基本的な知識を証明する試験なんですね。。

 

7月からプログラミングとインターフェースデザインの仕事を両立していくので

プログラミングの基本はもう一度復習しないといけないんです。

そして転職先の会社から入社までの課題として出ていたのがこの資格です。

 

5年のブランクと、そもそもエセプログラマー的な仕事内容だったのでJavaの基本とはいえあなどれない。。そう思いOracle認定の参考書3冊

・オラクル認定資格教科書 JavaプログラマBronze[SE7]

・オラクル認定資格教科書 JavaプログラマSilver[SE7]

・オラクル認定資格教科書 JavaプログラマSilver[SE7]スピードマスター問題集

を買って勉強しました。汗

 

試験費も¥26,600(税抜き)!!

 

無職中の俺には痛すぎる出費。。それもあって

試験当日はかなりのプレッシャーと緊張で不覚にもマウスを持つ手が震えました。笑

 

とはいえ本を熟読したおかげで少し余裕をもって試験を終了する事ができました。

Java言語の基本をおさえる系」の本だけだと確実に落ちてました。

というのも出てくる問題に「こんな書き方した事ない!!汗」みたいなコードが結構入ってます。

簡単な例ですが二次元配列の宣言では基本的に下記のように宣言すると覚えますが
 int[ ][ ] array;

 int array[ ][ ];

試験だと複数選択の中に下記みたいなのもいます。

 int[ ] array[ ];

「え?なにこれ?」ってなります。(ちなみにこれも宣言可能です。)

 

賢い方は「この選択しかない」といった消去法でも解けそうなんですが

俺はその自信がまったくないので実際にコードを打って実行しないと嫌なんです。。

事前に知っておく=資格本がいる という事でございます。

 

結果は試験が終了して30分後には専用のサイトで分かります。

これを見る瞬間もさらに緊張しました。自信があったとはいえ模擬試験も自信満々に答え合わせをしたら解率70%程。ギリギリ汗

なのでもう「えい!!!」って感じでサイトを見ました。

 

結果は正解率88%で無事合格!!

この結果がでる瞬間までは緊張とれないですね。おかげで一気にお腹が減りました。笑

 

そもそも資格のためとはいえ、勉強というよりはしっかり基本をおさえるために

やっていたので、いい機会になりました!

 

さぁ仕事まで後2日!!!

Javaの不明点箇条書き

Javaの勉強中ですが。資格範囲外のところで不明点はいったん放置状態のため

忘れないように随時欠いていこうと思います。汗

もうすでに過去にあった不明点が何だったか忘れてしまった!!!!

解決次第また覚え書きしていきます。

 

・StringBuilderのappendメソッドは何度でも繰り返し使えるのよ?

例)new StringBuilder().append("").append("").append("").append("");

 

 

・オーバーライド元のメソッドはメモリ上のどこかに生きているのか??

→説明には「上書き」と言われているがメモリ上でも「上書き」されてるのか気になる。。。

ラッパークラスを利用した安易な考えの結果。。。

これはできません!(自分に言い聞かせています)

 

publicclass Test04 {

  void add(int num) {

  num[0] += 30;

  }

void Int_method(Integer i) {

  System.out.println("Integerクラス");

  i += 100;

  //Integerクラスも参照型のためStringクラスと同様に一度決めた値は変更できない。

  }

  public static void main(String args) {

 

    int[] num = { 10 };

    Test04 test = new Test04();

 

   test.add(num);

   System.out.println(num[0]);//参照渡しのため、しっかり変更されている。

 

   Integer j = new Integer(10);

   test.Int_method(j);

   System.out.println(j);//値は返れません。。

   }

}

 

intを配列ではない参照渡しをしたいと思ってラッパークラスを使用しましたが

普通に考えてみるとStringクラスなどと同じで値は変更できないため上記のような事はできません。。

 

俺のバカチン。

そして今更やけどメソッド名が適当すぎる。

ローカル変数とメンバ変数の初期値について

初期値についての基本を覚え書きです。

下記のようにローカル変数とメンバ変数では初期化が異なるため

注意が必要です。

 

public class Test05 {

  static int j; //staticメソッドから使用するため変数もstaticにしています。

 static Integer k; //ついでにラッパークラスの初期値も確認

 public static void main(String[] args) {

  int i;

  Integer m;

  System.out.println( j ); //メンバ変数は自動的な初期化(intは0)がされるため問題ない。

  //System.out.println( i ); ローカル変数は自動的に初期化されないためコンパイルエラーとなる。

  System.out.println( k ); //Integerはラッパークラスなのでnullが初期値になる。

  //System.out.println( m ); ローカル変数は自動的に初期化されないためコンパイルエラーとなる。

 }

}

実行結果

0

null

 

という事でJava資格取得のためにはこういった普段は書かないような

プログラミングが出題されるので基本的な事を押さえないと

「あれ?これ打った事ないけどどうなったっけ?」ってなります汗

 

staticメソッドをオーバーライドすると。。。

またまた基本的な事をメモ。。

下記の様にスーパークラス型でサブクラスをインスタンスすると

オーバーライドしたメソッドはサブクラスメソッドが呼び出されます。

Animals animals = new Cow;

animals.Say(); //サブクラスのメッソッド呼び出し

 

しかしSayメソッドがstatic宣言されていた場合には最初にスーパークラス型で

宣言しているためスーパークラスのstaticメソッドが呼び出されます。

 

class Animals {

 public static void Say() { //static宣言

 System.out.println("Animal");

 }

}

class Cow extends Animals {

 public static void Say() { //static宣言をオーバーライド

 System.out.println("Cow");

 }

}

public class Test05 {

 public static void main(String args) {

  Animals[] animals = { new Animals(), new Cow() };

  for (Animals a : animals) {

  a.Say();

  }

 new Cow().Say(); //サブクラス型で呼び出すとサブクラスのstaticメソッドが呼び出されます。

}

実行結果

Animal

Animal

Cow

 

レッツ覚え書き。