Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
プロになるJavaでチート能力を手にして完全勝利
Search
Naoki Kishida
April 18, 2022
Programming
1.6k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
プロになるJavaでチート能力を手にして完全勝利
2022年4月18日に開催されたJJUGナイトセミナーでの登壇資料です
https://jjug.doorkeeper.jp/events/135559
Naoki Kishida
April 18, 2022
More Decks by Naoki Kishida
See All by Naoki Kishida
Java 27新機能 / Java 27 new features
kishida
2
150
ローカルLLMでどこまでコードが書けるか -LLM基礎知識 / How much code can be written on a local LLM - fundamental knowledge
kishida
10
9.6k
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.4k
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
400
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
5.6k
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
230
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
640
ローカルLLM基礎知識 / local LLM basics 2025
kishida
30
17k
AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mcp for jjug
kishida
5
1.3k
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
What We Talk About When We Talk About XP
m_seki
2
650
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
700
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
wkhtmltopdfの次どうするか問題2026
willnet
2
1.3k
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.3k
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
720
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
130
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
1.6k
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
From π to Pie charts
rasagy
1
370
A Tale of Four Properties
chriscoyier
163
24k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
エンジニアに許された特別な時間の終わり
watany
109
250k
Become a Pro
speakerdeck
PRO
31
6.3k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
BBQ
matthewcrist
89
10k
My Coaching Mixtape
mlcsv
0
320
Agile that works and the tools we love
rasmusluckow
331
22k
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の言語設計が唯一ではないことの提示 • 設計者という人間が言語機能を選択している