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.2k
プロになる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 22 Overview
kishida
1
170
Is Object-Oriented nessesary?
kishida
0
40
オブジェクト指向は必要なのか / Is object-oriented needed?
kishida
31
21k
AI時代を乗り切る実装力をつけよう / Get avility of implementation beyond AI era
kishida
2
4.6k
AI時代を生き抜くために処理をちゃんと書けるようになろう / write a executable process for AI era
kishida
23
12k
Javaは今どうなっているの? / how about java now
kishida
14
19k
動くコードを書こう / let's code a process
kishida
24
7.1k
Java 21の概要 / outline of Java 21
kishida
10
6.1k
エンジニアはLLMとどう付き合うか / How engineer get along with LLM
kishida
19
13k
Other Decks in Programming
See All in Programming
Semantic search with Django and pgvector
pauloxnet
0
240
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
470
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
430
Javaエンジニアのための Nodejs/Nuxt3入門
hidekatsu_izuno
0
280
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
350
AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen
kasacchiful
1
250
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.7k
[技育CAMPアカデミア]アイディアを形に!【超入門】スマホアプリ開発〜リリースまでの流れをご紹介
teamlab
PRO
0
350
Ruby Function Composition
bkuhlmann
1
330
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
310
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
240
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
340
Featured
See All Featured
Practical Orchestrator
shlominoach
181
9.7k
Embracing the Ebb and Flow
colly
79
4.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
23
2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.3k
Agile that works and the tools we love
rasmusluckow
324
20k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
321
20k
Designing for humans not robots
tammielis
247
25k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
For a Future-Friendly Web
brad_frost
171
8.9k
[RailsConf 2023] Rails as a piece of cake
palkan
22
3.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
16
6.4k
Debugging Ruby Performance
tmm1
70
11k
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の言語設計が唯一ではないことの提示 • 設計者という人間が言語機能を選択している