ジャストシステムjava100本ノックのご紹介

45
0 ジャストシステムで作った Java100本ノックのご紹介 JustTechTalk#07 2016/09/02 Twitterハッシュタグ #Java100

Upload: justsystems-corporation

Post on 06-Jan-2017

3.067 views

Category:

Engineering


0 download

TRANSCRIPT

0

ジャストシステムで作ったJava100本ノックのご紹介

JustTechTalk#072016/09/02

Twitterハッシュタグ

#Java100

1

自己紹介

株式会社ジャストシステム 福嶋 航    @fukushiwJavaでWebサービスを作っています

Javaを使って早20年近く。Javaは1.0から使い始め、仕事では1.1から使っています。

若い頃はひたすらコアSDKのソースを読みまくって勉強(遠い目)

2

背景

3

背景

素早いサービス立ち上げが重要期間が短いとどうしても作りが「エイヤー」になりがち・・・

4

背景

素早いサービス立ち上げが重要期間が短いとどうしても作りが「エイヤー」になりがち・・・

リファクタリングフェーズは・・・え?なにそれおいしいの? それよりも集客力アップのためにXX機能追加ね

5

背景

素早いサービス立ち上げが重要期間が短いとどうしても作りが「エイヤー」になりがち・・・

リファクタリングフェーズは・・・え?なにそれおいしいの? それよりも集客力アップのためにXX機能追加ね

プロジェクトへのフレキシブルなメンバーアサインここの部分はYYさんに聞かないと・・・え?忘れた?

6

背景

素早いサービス立ち上げが重要期間が短いとどうしても作りが「エイヤー」になりがち・・・

リファクタリングフェーズは・・・え?なにそれおいしいの? それよりも集客力アップのためにXX機能追加ね

プロジェクトへのフレキシブルなメンバーアサインここの部分はYYさんに聞かないと・・・え?忘れた?

将来を見据えた設計で、ちゃんとしたコーディングを最初にしておかないとメンテナンスが困難に

7

どうやったら最初からいいコードがチームで書けるか

社内の複数プロジェクトで、「あそこがイクナイ」「ここがイクナイ」という事例がたまってきていて、これをバネに各開発チームのスキルアップが必要と感じていました。

8

どうやったら最初からいいコードがチームで書けるか

社内の複数プロジェクトで、「あそこがイクナイ」「ここがイクナイ」という事例がたまってきていて、これをバネに各開発チームのスキルアップが必要と感じていました。

そんな折、「SQLアンチパターン」の社内読書会に @t̲wada さんにお越し頂く機会がありました。そこで、

     アンチパターンには名前をつけるとよいです

というお言葉を頂きました。

9

どうやったら最初からいいコードがチームで書けるか

社内の複数プロジェクトで、「あそこがイクナイ」「ここがイクナイ」という事例がたまってきていて、これをバネに各開発チームのスキルアップが必要と感じていました。

そんな折、「SQLアンチパターン」の社内読書会に @t̲wada さんにお越し頂く機会がありました。そこで、

     アンチパターンには名前をつけるとよいです

というお言葉を頂きました。

これ、使えるんじゃないだろうか?

10

アンチパターン書いてみた

11

本当にあった怖い話

12

本当にあった怖い話

ログ監視システムからアラートメールが到着。肝心のメッセージ部分には

      java.lang.NullPointerException: null

とだけ書かれている

13

本当にあった怖い話

ログ監視システムからアラートメールが到着。肝心のメッセージ部分には

      java.lang.NullPointerException: null

とだけ書かれている

!?ユーザーへの影響は?

何が起きているのかサッパリ分からん・・・

14

本当にあった怖い話

ログ監視システムからアラートメールが到着。肝心のメッセージ部分には

      java.lang.NullPointerException: null

とだけ書かれている

!?ユーザーへの影響は?

何が起きているのかサッパリ分からん・・・運用環境に乗り込んでログを確認・・・(初動調査に遅れ)

15

アンチパターンにして共有

16

それを繰り返して現在14パターン

17

でもアンチパターンだけでは足りない

社内Qiitaでいいねはつく。ストックもつく。

18

でもアンチパターンだけでは足りない

社内Qiitaでいいねはつく。ストックもつく。

でも、見るだけだと「へ~」で終わり。やはり手を動かさないと。

19

でもアンチパターンだけでは足りない

社内Qiitaでいいねはつく。ストックもつく。

でも、見るだけだと「へ~」で終わり。やはり手を動かさないと。

社内で相談してみたら、東北大学に「言語処理100本ノック」というのがあると…

20

でもアンチパターンだけでは足りない

社内Qiitaでいいねはつく。ストックもつく。

でも、見るだけだと「へ~」で終わり。やはり手を動かさないと。

社内で相談してみたら、東北大学に「言語処理100本ノック」というのがあると…

これ、使えるんじゃないだろうか?

21

Java 100本ノック書いてみた

22

Java 100本ノックとは

プログラミング言語 Java に関するスキル向上を目的とした問題集です。具体的には、運用環境で安定稼働でき、かつ、保守性・拡張性に優れたコードがより多く生産できるようになることを目指しています。

23

Java 100本ノック 作問の狙い(1)

001-010:はじめの一歩EclipseなどのIDEに慣れきった体に今一度標準コマンドをたたき込むことで、環境適応能力を補完する

24

Java 100本ノック 作問の狙い(1)

001-010:はじめの一歩EclipseなどのIDEに慣れきった体に今一度標準コマンドをたたき込むことで、環境適応能力を補完する

あるEclipseユーザーに言われた衝撃の一言「えーと、シェルからJava実行するのってどうするんでしたっけ?」

25

Java 100本ノック 作問の狙い(1)

001-010:はじめの一歩EclipseなどのIDEに慣れきった体に今一度標準コマンドをたたき込むことで、環境適応能力を補完する

あるEclipseユーザーに言われた衝撃の一言「えーと、シェルからJava実行するのってどうするんでしたっけ?」

(゚Д゚)ハァ?

26

Java 100本ノック例えばこんなの(1)

27

Java 100本ノック例えばこんなの(1):解答例

errorcheck(){ if [ $1 -ne 0 ]; then exit $1 fi}

CLASSES=classesJARFILE=answer010.jar

if [ ! -d ${CLASSES} ]; then mkdir ${CLASSES} errorcheck $?fi

javac -sourcepath src -d ${CLASSES} -encoding UTF-8 src/Answer010.javaerrorcheck $?

jar cfe ${JARFILE} Answer010 -C ${CLASSES} Answer010.classerrorcheck $?

java -jar ${JARFILE}errorcheck $?

answer010.sh

28

Java 100本ノック 作問の狙い(2)

011-040:言語仕様Javaのソースコードはどう書くべきか、言語仕様を押さえて正しいプログラムを効率的に書けるようにしたい

29

Java 100本ノック 作問の狙い(2)

011-040:言語仕様Javaのソースコードはどう書くべきか、言語仕様を押さえて正しいプログラムを効率的に書けるようにしたい

あるミドル年齢エンジニアのつぶやき「どうも最近のJavaには慣れてなくて・・・」

30

Java 100本ノック 作問の狙い(2)

011-040:言語仕様Javaのソースコードはどう書くべきか、言語仕様を押さえて正しいプログラムを効率的に書けるようにしたい

あるミドル年齢エンジニアのつぶやき「どうも最近のJavaには慣れてなくて・・・」

ガ━(゚Д゚;)━ ン !!!

31

Java 100本ノック例えばこんなの(2)

32

Java 100本ノック例えばこんなの(2):解答例

medals.forEach(System.out::println);

33

Java 100本ノック 作問の狙い(3)

041-060:コアAPIAPIを呼び出すときの作用を正しく把握し、説明のできないコードを後世に残さない。

34

Java 100本ノック 作問の狙い(3)

041-060:コアAPIAPIを呼び出すときの作用を正しく把握し、説明のできないコードを後世に残さない。

あるレビューでの驚愕の説明「このAPI呼び出しの意図は?」「いや、参考にしたソースがこうなっていたので同じように呼び出しました」

35

Java 100本ノック 作問の狙い(3)

041-060:コアAPIAPIを呼び出すときの作用を正しく把握し、説明のできないコードを後世に残さない。

あるレビューでの驚愕の説明「このAPI呼び出しの意図は?」「いや、参考にしたソースがこうなっていたので同じように呼び出しました」

あら(゚Д゚)そう

36

Java 100本ノック例えばこんなの(3)

37

Java 100本ノック例えばこんなの(3)

「等価なオブジェクトは等価なハッシュ・コードを保持する必要がある」というhashCodeメソッドの汎用規約に従う必要があるため

java.lang.Object#equals()java.lang.Object#hashCode()

のAPIドキュメント参照

38

Java 100本ノック 作問の狙い(4)

061-080:複合・Java EE「~しといて」と仕事を任されたときに今あるものを鵜呑みにせず臨機応変に対応できるようにする

39

Java 100本ノック例えばこんなの(4)

40

Java 100本ノック例えばこんなの(4):解答ヒント

41

Java 100本ノック 作問の狙い(5)

081-090:ライブラリ091-099:フレームワーク100:Webアプリケーションの作成

基本は押さえた上で、どのプロジェクトでもよく使われるライブラリやフレームワークの使い方を習得し、応用できるようにする

42

Java 100本ノック例えばこんなの(5)

43

Java 100本ノックはGitHubで公開しています

https://github.com/JustSystems/java-100practices

Twitterハッシュタグ

#Java100

We are Hiring!!