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.4k
プロになる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
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
410
Java Webフレームワークの現状 / java web framework
kishida
10
10k
Is Object Oriented nesessary? COSCUP 2024
kishida
0
140
プログラムに組み込みたい人向けLLMの概要 / LLM for programmers
kishida
3
490
Javaの現状2024夏 / Java current status 2024 summer
kishida
5
1.9k
Java 22 Overview
kishida
1
330
Is Object-Oriented nessesary?
kishida
0
110
オブジェクト指向は必要なのか / Is object-oriented needed?
kishida
36
25k
AI時代を乗り切る実装力をつけよう / Get avility of implementation beyond AI era
kishida
4
7.7k
Other Decks in Programming
See All in Programming
103 Early Hints
sugi_0000
1
280
テストコード書いてみませんか?
onopon
2
240
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
1
300
KubeCon NA 2024の全DB関連セッションを紹介
nnaka2992
0
100
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
760
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
2
480
20241217 競争力強化とビジネス価値創出への挑戦:モノタロウのシステムモダナイズ、開発組織の進化と今後の展望
monotaro
PRO
0
120
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1.1k
バグを見つけた?それAppleに直してもらおう!
uetyo
0
190
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
900
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
340
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.8k
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Documentation Writing (for coders)
carmenintech
67
4.5k
Making Projects Easy
brettharned
116
6k
Music & Morning Musume
bryan
46
6.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
920
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
18
2.3k
Agile that works and the tools we love
rasmusluckow
328
21k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
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の言語設計が唯一ではないことの提示 • 設計者という人間が言語機能を選択している