Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プロになるJavaでチート能力を手にして完全勝利
Search
Naoki Kishida
April 18, 2022
Programming
2
1.5k
プロになるJavaでチート能力を手にして完全勝利
2022年4月18日に開催されたJJUGナイトセミナーでの登壇資料です
https://jjug.doorkeeper.jp/events/135559
Naoki Kishida
April 18, 2022
Tweet
Share
More Decks by Naoki Kishida
See All by Naoki Kishida
Current States of Java Web Frameworks at JCConf 2025
kishida
0
1.3k
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
24
6.6k
LLMベースAIの基本 / basics of LLM based AI
kishida
13
3.4k
Java 24まとめ / Java 24 summary
kishida
3
790
AI時代のプログラミング教育 / programming education in ai era
kishida
25
26k
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
10
2.6k
AI時代に求められるプログラマの能力 / ability of programmer in AI era
kishida
19
13k
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
560
Java Webフレームワークの現状 / java web framework
kishida
10
11k
Other Decks in Programming
See All in Programming
CSC305 Lecture 06
javiergs
PRO
0
270
SODA - FACT BOOK(JP)
sodainc
1
8.6k
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
190
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
16
6.6k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
560
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.4k
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
130
Range on Rails ―「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
rizap_tech
0
6.7k
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
350
CSC509 Lecture 07
javiergs
PRO
0
240
All About Angular's New Signal Forms
manfredsteyer
PRO
0
200
品質ワークショップをやってみた
nealle
0
600
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Side Projects
sachag
455
43k
Writing Fast Ruby
sferik
629
62k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
Why Our Code Smells
bkeepers
PRO
340
57k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Invisible Side of Design
smashingmag
302
51k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Facilitating Awesome Meetings
lara
57
6.6k
Building an army of robots
kneath
306
46k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Transcript
プロになるJavaで チート能力を手にして完全勝利 2022/4/18 JJUG ナイトセミナー LINE Fukuoka きしだ なおき
プロになるJava • 仕事で必要なプログラミングの知識がゼロから身につく最高の指南書 • Javaの文法だけではなく、ツールやSpring Boot、データベースまで1冊で紹介 • 著者 – きしだ
なおき - Java言語、プログラミング – 山本 ユースケ - IntelliJ IDEA、ツール – 杉山 貴章 - Spring Boot + DB • 2022年3月19日発売 – すでに2刷 • 技術評論社
Duke • 章ごとに著者陣が描いたDukeが!
よくある入門書の問題点 • 入門書を読んで文法はわかったけどプログラムが組め るようにならない • 原因 – 文法やAPIを説明するけど「プログラム」は説明していない – UIに触れてないのでアプリケーションが作れない
– Java言語への入門であってJavaプログラマへの入門ではな い
よくある入門書の問題点 • Javaを勉強したけどJavaの世界は知らない – JAVAと書いてしまう – Javaがどう作られてるか 知らない • OpenJDK
• JEP – コミュニティを知らない • JJUG • Twitter • LINEオープンチャット
コンセプト • 対象 – 就職・転職したい人 – プログラミングの仕事のスキルをあげたい人 – プログラミング未経験者 •
非対象 – 日常の作業をプログラムで効率化したい人 • そんな人はJavaを選ばないので
コンセプト • 目的 – Webアプリケーションのプログラミングに携われる • 内容 – プログラミング •
処理を書けるようにする – IDE • IntelliJ IDEA – Web • HTTPプロトコル • Spring Boot • データベース https://twitter.com/javarevisited/status/1489090687551242240
プログラミングの本 • 伏線回収 https://nowokay.hatenablog.com/entry/20080220/1203503120
なぜNetBeansではない? • NetBeans9で日本語化が外れた • 初心者が戸惑うバグがある • IntelliJ IDEAのJavaりょくが高い
なぜSpring Boot? • デファクトスタンダードを採用 – 創るJavaのときは「Java標準」 – @Injectではなく@Autowired • Twitterでアンケートとった
コンセプト • 入口は低く、出口は高く – 目標を低く設定することで「わかりやすい」を 達成する本が多い – 目標は高め • 知っておくべきことにもかかわらず到達しにくいことを
提示しておく – 計算複雑性、オートマトン、スタック・キュー、HTTPプロトコル • しかしなるべくスムーズに段差なく – 段差はないが急にはなる・・・
スムーズに段差なくの工夫 • レコード – 名前付きタプルとしてListや配列の次に – メソッドの説明でレコードにインスタンスメソッド – クラスの説明でレコードをクラスに変換(IntelliJ IDEAの機能)
• クラスの説明のときには、必要な要素はすでに知ってい る
コンセプト • 難しいことまで扱う – なるべく章の最後にまとめる – 特に難しい話題はパートをわける – わからないところを飛ばしやすく
わかりやすさ • インストラクショナルデザイン
プロになるJavaの インストラクショナルデザイン • 教える題材の構造ではなく理解の構造にしたがって教える – 教訓3 教える理由をはっきりさせる – 教訓4 成功の基準をはっきりさせる
– 教訓5 標的行動を見せてやらせて確認させる – 教訓9 誤答を教える – 教訓11 学び手を知る – 教訓14 学ばせて、楽しませる 職業プログラマになる Swing 練習問題 JShell オープンチャットでレベル感を知る
わかりやすさ • 難しい表現をさける – プログラミングの本は難しい言葉を使いがち – 読みやすい表現を使うと、文章が難しいのかJavaやプログラミングが難しいのか判別しにくくなる – 例 •
本書→この本 • 取得する→取る • スムーズに読めるように – 1500番のサンドペーパーをかけた程度のなめらかな文章を目指す – ツルツルだけど艶が出るまではない • プログラミングの難しさに集中する – ただし3部で力尽きた模様(4部はわかりにくい部分が多い)
わかりやすさ • JShell – コードと結果の対応がわかりやすい – プログラムの結果を読み解くにはプログラムの理解 が必要 • プログラムを理解するためのサンプルなのに
わかりやすさ • Swing – 文字を出すだけのプログラムを「プログラム」と認識しても らえない – クラス、オブジェクト、インスタンスの説明がやりやすい • ValueBasedなオブジェクトはオブジェクトと認識しづらい
– Valhallaのvalue classで「オブジェクト」ではなくなる • “test”をあらわす2つのオブジェクトはあまり意味がない – JShellでSwingはほんとに楽しい
手にとりやすく • パステル調 – 「プロになる」だと黒くシュッとしたデザインに なりがち • 初心者が手を出しづらい • 副題に「ゼロから身につく」を
– 座談会で(話すかも) • デザインは「青っぽく!かわいく!」とだけ 言って寝てたので細かいとこはユースケさん
処理を書けるようにする • Javaの文法やAPIはあまり細かく網羅しない – shortなど基本型も全部は説明してない • ループに関して手厚く – デバッガ –
パターン – 描画でわかりやすく – 練習問題
迷路ゲーム • forとifを勉強しただけでforとif使ったプログラ ムが書けるようになるわけじゃないぞーという 威圧 • 割と純粋に楽しい
状態遷移 • プログラミングの基本だけどあまり勉強の機会 がない • 実数文字列の判定を行う • 正規表現との対応 • 難しい処理もループと条件分岐の
組み合わせだゾという提示
計算複雑性 • 階層 – 組み合わせ論理 • ループのないコード – 有限オートマトン •
スタックや再帰のないコード – プッシュダウンオートマトン • スタックのあるコード – チューリングマシン • スタックがふたつ以上あるコード • 任意のデータ構造を扱う
有限オートマトンを難しさ別に分解 • ループの各処理が独立 • ループの各処理は独立しているけど集計が必要 – Stream • 他の要素の値も扱うリスト処理 –
Streamで書けない • 隠れた状態を扱う – ランレングス圧縮(文字列の連続数が隠れた状態) • 状態遷移図が必要な処理
HTTPプロトコル • Socketでクライアントとサーバーを実装 • 「この程度のプログラムでWebが動く」と実感 しておいてもらう
オブジェクト指向 • ファンタジーに陥らない – いぬねこや姫様勇者のようなクラス • わかった気になるけどアプリケーションの実装につながらない • 継承の使い方を差分プログラミングと値の分類に整理 •
オブジェクト指向の限界も提示しておく – 「オブジェクト指向ならいいプログラムになる」みたいな夢を見せない – 「いいプログラムにするためにはオブジェクト指向する必要がある」み たいな誤解をさせない
差分プログラミング • 継承の主な用途のひとつは差分プログラミング • 継承がラムダに置き換わっていくところを見せ る • 関数型が支配的であることの説明
継承での値の分類 • 値型を継承で分類する
公称型と構造的部分型? • Javaの言語設計が唯一ではないことの提示 • 設計者という人間が言語機能を選択している