yucatio@システムエンジニア

趣味で作ったものいろいろ

Java歴13年がJava Silver (SE 11)を受けてみた【受験編】

勉強編はこちら

yucatio.hatenablog.com

黒本の模試で正答率90%を超えたので、試験の申し込みを行いました。

受験チケットの購入

受験料の支払いは、受験チケットを購入するか、試験の申込時にクレジットカードで支払います。受験料は37,730円(税込み)です。(私が受験したときは32,340円(税込み)だったのにその後値上げされたようです)

受験チケットは、楽天で購入すると2,000円ほど安くなるのでこちらで購入しました。


購入すると、メールでチケット番号が送られてきます。

受験の申し込み

Certviewというサイトから申し込みを行います。CertviewへのログインにはOracleのアカウントが必要なので、ない場合は作成します。

Certviewにログイン後、メニューの「ピアソンVUEサイト」を選択します。「試験の検索」画面で"Java"で検索します。たくさん出てくるので慎重に選んでください。(私は間違ってSE8を選択しそうになりました。)

Java Silver SE11(日本語)の試験番号は1Z0-815-JPNです。

続いてテストセンターでの受験か、自宅での受験か選択します。私はテストセンターでの受験を選びました。

テストセンターを選択後、日時を選択します。私の場合、最寄りのテストセンターはあまり空きがありませんでしたが、職場と自宅の中間くらいのテストセンターには直近の日時で空きがあったの3日後の日程で予約しました。

続いて受験チケットの番号を入力し、確認画面などを経て申し込み完了です。

当日

持ち物は身分証明書(2点)です。

テストセンターが混んでいる場合にそなえて30分前に会場に到着しました。しかし空いていたため、並ぶことなく手続きを済ませることができました。手続き自体は5分ほどで終わったと思います。

すぐに受験をすることができるがどうするか聞かれたため、すぐに受験することにしました。

テスト

メモ用の、白い下敷きみたいなものとペンを渡されます。

PC画面に問題が出ます。紙と違ってスクロールする必要があります。1度、答えが選択肢の中にない、と思ったらスクロールが足りなかっただけということがあったので、きちんと最後までスクロールしたか確認することが大切です。

試験問題は、ほぼ黒本を覚えていけば解ける問題でした。中には黒本と全く同じ問題も出題されました。黒本全く同じ : 黒本の類似 : 初めて見た気がする = 20 : 70 :10くらいです(体感)

3時間の制限時間でしたが、1時間半程度で終わりました。終わったら退出できます。

結果発表

受験終了のボタンを押すと、結果がすぐに画面に出ます。 また、受験後10分くらいにCertviewへの反映がされたとメールが来ました。

受験結果

92%の正答率で合格しました。黒本一通り終えてすぐ受験できたのが功を奏しました。

総評へ続く

yucatio.hatenablog.com

Java歴13年がJava Silver (SE 11)を受けてみた【勉強編】

Java実務歴13年がJava Silverを受けてみたのでその記録です。

受験のきっかけ

TwitterJava Silverを受ける人を見かけたのが最初に受験を意識したきっかけです。 Webで問題を調べて解いてみたところ、解けそうで解けないことにますます興味がわきました。 自身はJavaメインで開発していますので、この際Goldを取得しようと考えたところ、Goldを受験するにはSilverの合格が必要と分かり、Silverをまず受験しました。

また、Javaを初めて勉強したときのバージョンは5で、それ以降のバージョンについては適宜勉強してきたつもりでしたが、少し不安があったため、これを機に勉強しようと思いました。

あとは、将来的にプログラミングの先生になることにも考えていて、基礎をおさらいするのにちょうどよいと思いました。

勉強期間

1週間強の短期決戦で試験に挑みました。1日3-4時間勉強しました。

  • 1日目&2日目 黒本(下の勉強方法の参照)1周目
  • 3日目&4日目 黒本2周目
  • 5日目 黒本の模試1回目
  • 6日目 黒本の模試2回目。ここで試験を申し込んだ。
  • 7日目&8日目 苦手分野をwebで検索
  • 9日目 試験本番

勉強方法

勉強をする際に購入した書籍は『徹底攻略Java SE 11 Silver問題集 [1Z0-815]対応』通称「黒本」です。この本は問題に対して解説が多く、読みやすいです。


1周目(模試以外)

最初にひととおり問題を解きました。1周目は1問ごとに解いて解説を見ました。1周目の正答率は体感で30%くらいでした。もっとできると思っていたのでちょっと落ち込みました。

出題にかなりクセがあります。いわゆる「クソコード」を読み解く問題も何問かあります。

こんなのとか↓

public class Increment {
  public static void main(String[] args) {
    int a = 10;
    int b = a++ + a + a-- - a-- + ++a;
    System.out.println(b);
  }
}

また、答えはAかな?Bかな?と考えていて、答えを見たら、答えはC:コンパイルエラーでした、という問題も多くありました。

このような問題の傾向を覚えるのが1周目でした。1周するとかなり慣れました。

2周目(模試以外)

全ての問題を解きなおしました。解説は、覚えているものについては飛ばしました。正答率は90%を超えましたが、1周目から日数を空けていなかったので単純に問題と答えを覚えていた問題もありました。

クセのある問題にも慣れ、パズルを解く感じで解くことができました。

模試

黒本には模試が2回分掲載されています。ほとんどがそれまでの章で扱った内容です。模試にもくわしい解説がついています。

1回目の模試85%以上、2回目の模試90%以上を正解することができたので、ここで受験を申し込むことにしました。

受験編に続く

yucatio.hatenablog.com

感想はこちら

yucatio.hatenablog.com

pom.xml内のプロジェクトのバージョンをmvnコマンドを使って抜き出す

pom.xmlのバージョンを、コマンドを使って抜き出したかった時のメモ。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yucatio</groupId>
  <artifactId>prototype01</artifactId>
  <version>0.0.2-SNAPSHOT</version>
  <name>penguin-meeting-room-prototype01</name>
  <description>Prototype for Penguin meeting room</description>
  <!-- 後略 -->

このpom.xmlがある場所で、以下のコマンドを実行するとプロジェクトのバージョンが抜き出せる。

$ mvn help:evaluate -Dexpression=project.version -q -DforceStdout
0.0.2-SNAPSHOT

project.versionの部分を変更すれば、任意の場所の情報を得ることができる。

【Java】スネークケース→キャメルケースに変換するプログラム

スネークケース(snake_case)からキャメルケース(camelCase)に変換するJavaのプログラムです。

  public static String toCamelCase(String text) {
    if (text == null) {
      return null;
    }
    if ("".equals(text)) {
      return "";
    }
    
    String[] words = text.split("_", 0);
    String camelWord = Arrays.stream(words)
        .filter(w -> !"".equals(w))
        .map(w -> Character.toUpperCase(w.charAt(0)) + w.substring(1))
        .collect(Collectors.joining(""));
    
    return Character.toLowerCase(camelWord.charAt(0)) + camelWord.substring(1);    
  }

簡単に解説すると、例えば"have_a_good_time"という入力の時、

  1. nullと空文字の場合は、それぞれnull, 空文字を返す
  2. "_"で文字を区切ります。(["have", "a", "good", "time"] の配列がえられます)
  3. 念のため空文字ははじきます
  4. 1文字目を大文字にしたものと2文字以降をつなげます(["Have", "A", "Good", "Time"])
  5. 配列の各要素をつなげます(HaveAGoodTime)
  6. 1文字目を小文字にしたものと、2文字目以降をつなげます(haveAGoodTime)

実行してみます

System.out.println(toCamelCase("a")); // a
System.out.println(toCamelCase("one_two_three")); // oneTwoThree

【Java】キャメルケース→スネークケースに変換するプログラム

キャメルケース(camelCase)からスネークケース(snake_case)に変換するJavaのプログラムです。

  public static String toSnakeCase(String text) {
    if (text == null) {
      return null;
    }
    if ("".equals(text)) {
      return "";
    }

    StringBuilder sb = new StringBuilder(text.length());

    sb.append(Character.toLowerCase(text.charAt(0)));

    for (char c : text.substring(1).toCharArray()) {
      if (Character.isUpperCase(c)) {
        sb.append("_").append(Character.toLowerCase(c));
      } else {
        sb.append(c);
      }
    }

    return sb.toString();
  }

簡単に解説すると、

  1. nullと空文字の場合は、それぞれnull, 空文字を返す
  2. 1文字目を小文字に変換してバッファに格納する
  3. 2文字目から最後まで順にみていって、大文字が現れたらアンダーバーと小文字に変換した文字をバッファに詰める。小文字ならそのまま詰める。
  4. バッファの文字を書き出して終了

実行してみます

System.out.println(toSnakeCase("a")); // a
System.out.println(toSnakeCase("oneTwoThree")); // one_two_three

JUnit実践入門を読んだ

職場でJUnitを使っています。JUnitについてなんとなく理解はしているものの、もう少し便利な機能がないかと思って本書を手に取りました。


感想

読みやすかった

平易な日本語で書かれていて読みやすかったです。テストコードの例も適切だと思いました。全体的にすらすらと読めました。

JUnitの機能が知れた

構造化テストやFiture、カスタムマッチャーは職場で使用していなかったので、今回知れてよかったです。

JUnitだけでなく、単体テスト関連のトピックが網羅されていた

JUnitだけでなく、テストデータの選び方、TDD、CI/CDと幅広く単体テストに関連するトピックが取り上げられていました。いくつかは すでに知っている内容ではありましたが、他の人と認識を合わせるときに便利だと思いました。

TDDの章では、実際にTDDを体験できるようになっていて、作業の進め方がわかりました。

JUnit4だった

現在(2022年8月)のJUnitの最新版は5で、こちらを使うのがよいようです。

次にすること

会社では作りたいものを作れるわけではないのにプログラミング初学者には作りたいものがあってほしい、について

先日、表題のツイートをしまして、もっとこの件について語りたいため、記事にしました。

会社では作りたいものを作れるわけではない

ネガティブな言い回しになっていますが、単に、仕事って、顧客が欲しいものを作る(そして対価を得る)ということだよね、ってだけの話です。

プログラミング初学者には作りたいものがあってほしい

一方、プログラミングを学ぶ際には作りたいものがあってほしいのも事実です。1番の理由はプログラミング学習に挫折してほしくないためです。

語学を考えてみましょう。「なんとなくかっこよさそうだから」という動機の人と、「通訳になりたい」とか、「海外に行ってやりたいことがある」とでは、「思っていたより難しかった」と感じたときに違いが出るのではないでしょうか。

プログラミング学習は語学よりも難しくないと(個人的には)感じていますが、普段は使わない概念や専門用語が多く、理解するまで時間がかかることもあります。そこで挫折しないためにも、目標は持っていてほしいのです。

また、作りたいものがある場合、プログラミングを学ぶにつれて、目標に近づいている感じがしてわくわくするものです。 そのわくわくをぜひ体感してほしいと思っています。

繰り返される「プログラミング何から始めればよいですか」「何をしたいかによりますね」

話は変わりますが、 Twitterでは、たびたび「プログラミングに興味を持ちました。まず何から始めればよいでしょう」 に対し、 「何をしたいかによりますね」 と返信しているのを見かけます。

これは「作りたいものがあってほしい」とは少々性質が異なります(多少その成分は含まれますが)。

「何をしたいかによりますね」

これは、100%善意で発言しています。 と言うのも、プログラミングを学ぶ際、

  1. 習得するプログラミング言語を決める
  2. 1.で決めた言語の入門コンテンツをオンライン学習サービスや本で学ぶ

というステップになります。なので、最初に学ぶプログラミング言語を決定する必要があります。

しかし、現在、入門にぴったりなプログラミング言語はコレ!と言った鉄板な言語は存在しません。 また、圧倒的なシェアを誇る言語も存在しません。 ただ、言語によってどのような用途で使われるかの傾向があります。

というわけで、どのプログラミング言語を学ぶかのアドバイスをしたいために聞いています。

質問を質問で返されたほうの気持ち

システムエンジニアって「かっこいい」「給料がよさそう」「リモートワークができる」。少し勉強してみて、向いてそうだったら本格的に勉強して転職しよう、と考えている人にとって、質問に質問で返されるのは予想外かもしれません。 その気持ちはなんとなく分かります。 そもそもプログラミングで何ができるのか分からないのに、何がしたいのか聞かれても答えられるはずがありません。その場合は、

  • フィーリングでプログラミング言語を選択する
  • 自分がエンジニアになったときに、周り(親戚・友人)はどんなことを頼んできそうかを想像して、作りたいものを決める*1

で次に進みましょう。

「作りたいものが無いのになぜエンジニアを目指すのか」という辛辣な意見も目にしますが、 プログラミングを学習しながら、世の中でどのようにプログラミングが使われているか意識することで作りたいものも明確になってくると思います。

おわりに

会社では作りたいものを作れるわけではないのにプログラミング初学者には作りたいものがあってほしいという矛盾に気づいてからしばらく悶々としていましたが、フローとしては

プログラミングを勉強する

自分が作りたいものをつくる

他の人がほしいシステムを作る

こんなフローをたどれたらうれしいと思います。

*1:これは発想法の話であって、実際に知り合いから仕事を受注しろと言う話ではない