SlideShare a Scribd company logo
0
ジャストシステムで作った
Java100本ノックのご紹介
JustTechTalk#07
2016/09/02
Twitterハッシュタグ
#Java100
1
自己紹介
株式会社ジャストシステム 福嶋 航    @fukushiw
Javaで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=classes
JARFILE=answer010.jar
if [ ! -d ${CLASSES} ]; then
mkdir ${CLASSES}
errorcheck $?
fi
javac -sourcepath src -d ${CLASSES} -encoding UTF-8 src/Answer010.java
errorcheck $?
jar cfe ${JARFILE} Answer010 -C ${CLASSES} Answer010.class
errorcheck $?
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:コアAPI
APIを呼び出すときの作用を正しく把握し、説明のできないコードを後世に残さない。
34
Java 100本ノック 作問の狙い(3)
041-060:コアAPI
APIを呼び出すときの作用を正しく把握し、説明のできないコードを後世に残さない。
あるレビューでの驚愕の説明
「このAPI呼び出しの意図は?」
「いや、参考にしたソースがこうなっていたので同じように呼び出しました」
35
Java 100本ノック 作問の狙い(3)
041-060:コアAPI
APIを呼び出すときの作用を正しく把握し、説明のできないコードを後世に残さない。
あるレビューでの驚愕の説明
「この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!!

More Related Content

PDF
Javaのログ出力: 道具と考え方
PDF
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
PPTX
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
PDF
Test Yourself - テストを書くと何がどう変わるか
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
テスト文字列に「うんこ」と入れるな
PDF
BuildKitの概要と最近の機能
PDF
マルチテナントのアプリケーション実装〜実践編〜
Javaのログ出力: 道具と考え方
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Test Yourself - テストを書くと何がどう変わるか
コンテナの作り方「Dockerは裏方で何をしているのか?」
テスト文字列に「うんこ」と入れるな
BuildKitの概要と最近の機能
マルチテナントのアプリケーション実装〜実践編〜

What's hot (20)

PDF
Keycloak拡張入門
PDF
これからSpringを使う開発者が知っておくべきこと
PDF
Serverless時代のJavaについて
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
RedmineのFAQとアンチパターン集
PDF
Spring Bootをはじめる時にやるべき10のこと
PDF
マイクロにしすぎた結果がこれだよ!
PDF
Linux女子部 systemd徹底入門
PDF
組織にテストを書く文化を根付かせる戦略と戦術
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
入社1年目のプログラミング初心者がSpringを学ぶための手引き
PDF
ソフトウェアテスト入門
PDF
オブジェクト指向エクササイズのススメ
PPTX
世界一わかりやすいClean Architecture
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
PPTX
Python製BDDツールで自動化してみた
PPTX
Redisの特徴と活用方法について
PPTX
Spanner移行について本気出して考えてみた
Keycloak拡張入門
これからSpringを使う開発者が知っておくべきこと
Serverless時代のJavaについて
単なるキャッシュじゃないよ!?infinispanの紹介
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
RedmineのFAQとアンチパターン集
Spring Bootをはじめる時にやるべき10のこと
マイクロにしすぎた結果がこれだよ!
Linux女子部 systemd徹底入門
組織にテストを書く文化を根付かせる戦略と戦術
分散トレーシング技術について(Open tracingやjaeger)
入社1年目のプログラミング初心者がSpringを学ぶための手引き
ソフトウェアテスト入門
オブジェクト指向エクササイズのススメ
世界一わかりやすいClean Architecture
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
Python製BDDツールで自動化してみた
Redisの特徴と活用方法について
Spanner移行について本気出して考えてみた
Ad

Similar to ジャストシステムJava100本ノックのご紹介 (20)

PDF
Open stack swift is too Enterprise? 2014/12/01 advent cal
PDF
Lineにおけるspring frameworkの活用
PPTX
Viewを使って開発を楽にする話
PDF
Javaで1から10まで書いた話(sanitized)
KEY
PlayFramework1.x基礎編
PDF
実戦Scala
PDF
永和コンサル式プレゼン作成法(公開用)
PDF
Dev lobe20090325v1.0
PDF
じっくりコトコト煮込んだJavaスープ
PDF
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
PDF
Jslug勉強会 awsと比較するネットワーク
PDF
遅いクエリと向き合う仕組み #CybozuMeetup
PPTX
オワスプナイト20150115 dependency check
PDF
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
PDF
おすすめインフラ! for スタートアップ
PPTX
初心者による初心者のためのMySQLクエリチューニング
PPTX
着任したエンジニアをスムーズにテイクオフさせる道具だて
PDF
Practical migration from JSP to Thymeleaf
PDF
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
PDF
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
Open stack swift is too Enterprise? 2014/12/01 advent cal
Lineにおけるspring frameworkの活用
Viewを使って開発を楽にする話
Javaで1から10まで書いた話(sanitized)
PlayFramework1.x基礎編
実戦Scala
永和コンサル式プレゼン作成法(公開用)
Dev lobe20090325v1.0
じっくりコトコト煮込んだJavaスープ
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
Jslug勉強会 awsと比較するネットワーク
遅いクエリと向き合う仕組み #CybozuMeetup
オワスプナイト20150115 dependency check
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
おすすめインフラ! for スタートアップ
初心者による初心者のためのMySQLクエリチューニング
着任したエンジニアをスムーズにテイクオフさせる道具だて
Practical migration from JSP to Thymeleaf
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
Ad

More from JustSystems Corporation (20)

PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PDF
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
PDF
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
PDF
現役23名のPM:タイプ別マネジメントパターン
PPTX
JavaでインメモリSQLエンジンを作ってみた
PDF
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
PDF
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
PDF
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
PDF
最新のJava言語仕様で見るモジュールシステム #jjug
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
PDF
JustTechTalk#10 React開発における自動テスト実践
PDF
JustTechTalk#10windowsアプリでのテスト自動化事例
PDF
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
PDF
AWS運用における最適パターンの徹底活用
PPTX
ジャストシステムのDevOps実例 今後の取り組み
PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
PPTX
Kotlin is charming; The reasons Java engineers should start Kotlin.
PDF
CSSレイアウトでなぜ失敗するか?
PPTX
Selenium WebDriver + python で E2Eテスト自動化
PPTX
TypeScriptの大規模開発への適用
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
現役23名のPM:タイプ別マネジメントパターン
JavaでインメモリSQLエンジンを作ってみた
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
最新のJava言語仕様で見るモジュールシステム #jjug
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10windowsアプリでのテスト自動化事例
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
AWS運用における最適パターンの徹底活用
ジャストシステムのDevOps実例 今後の取り組み
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Kotlin is charming; The reasons Java engineers should start Kotlin.
CSSレイアウトでなぜ失敗するか?
Selenium WebDriver + python で E2Eテスト自動化
TypeScriptの大規模開発への適用

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