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
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
22
5.9k
LLMベースAIの基本 / basics of LLM based AI
kishida
12
3.3k
Java 24まとめ / Java 24 summary
kishida
3
770
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
550
Java Webフレームワークの現状 / java web framework
kishida
10
11k
Is Object Oriented nesessary? COSCUP 2024
kishida
0
200
Other Decks in Programming
See All in Programming
Compose Multiplatform × AI で作る、次世代アプリ開発支援ツールの設計と実装
thagikura
0
170
Laravel Boost 超入門
fire_arlo
3
220
Ruby×iOSアプリ開発 ~共に歩んだエコシステムの物語~
temoki
0
350
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
230
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
870
個人軟體時代
ethanhuang13
0
330
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
710
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
170
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2.5k
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
480
Swift Updates - Learn Languages 2025
koher
2
510
より安全で効率的な Go コードへ: Protocol Buffers Opaque API の導入
shwatanap
2
730
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
The Pragmatic Product Professional
lauravandoore
36
6.9k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
We Have a Design System, Now What?
morganepeng
53
7.8k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
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の言語設計が唯一ではないことの提示 • 設計者という人間が言語機能を選択している