Slide 1

Slide 1 text

プロになるJavaで チート能力を手にして完全勝利 2022/4/18 JJUG ナイトセミナー LINE Fukuoka きしだ なおき

Slide 2

Slide 2 text

プロになるJava ● 仕事で必要なプログラミングの知識がゼロから身につく最高の指南書 ● Javaの文法だけではなく、ツールやSpring Boot、データベースまで1冊で紹介 ● 著者 – きしだ なおき - Java言語、プログラミング – 山本 ユースケ - IntelliJ IDEA、ツール – 杉山 貴章 - Spring Boot + DB ● 2022年3月19日発売 – すでに2刷 ● 技術評論社

Slide 3

Slide 3 text

Duke ● 章ごとに著者陣が描いたDukeが!

Slide 4

Slide 4 text

よくある入門書の問題点 ● 入門書を読んで文法はわかったけどプログラムが組め るようにならない ● 原因 – 文法やAPIを説明するけど「プログラム」は説明していない – UIに触れてないのでアプリケーションが作れない – Java言語への入門であってJavaプログラマへの入門ではな い

Slide 5

Slide 5 text

よくある入門書の問題点 ● Javaを勉強したけどJavaの世界は知らない – JAVAと書いてしまう – Javaがどう作られてるか 知らない ● OpenJDK ● JEP – コミュニティを知らない ● JJUG ● Twitter ● LINEオープンチャット

Slide 6

Slide 6 text

コンセプト ● 対象 – 就職・転職したい人 – プログラミングの仕事のスキルをあげたい人 – プログラミング未経験者 ● 非対象 – 日常の作業をプログラムで効率化したい人 ● そんな人はJavaを選ばないので

Slide 7

Slide 7 text

コンセプト ● 目的 – Webアプリケーションのプログラミングに携われる ● 内容 – プログラミング ● 処理を書けるようにする – IDE ● IntelliJ IDEA – Web ● HTTPプロトコル ● Spring Boot ● データベース https://twitter.com/javarevisited/status/1489090687551242240

Slide 8

Slide 8 text

プログラミングの本 ● 伏線回収 https://nowokay.hatenablog.com/entry/20080220/1203503120

Slide 9

Slide 9 text

なぜNetBeansではない? ● NetBeans9で日本語化が外れた ● 初心者が戸惑うバグがある ● IntelliJ IDEAのJavaりょくが高い

Slide 10

Slide 10 text

なぜSpring Boot? ● デファクトスタンダードを採用 – 創るJavaのときは「Java標準」 – @Injectではなく@Autowired ● Twitterでアンケートとった

Slide 11

Slide 11 text

コンセプト ● 入口は低く、出口は高く – 目標を低く設定することで「わかりやすい」を 達成する本が多い – 目標は高め ● 知っておくべきことにもかかわらず到達しにくいことを 提示しておく – 計算複雑性、オートマトン、スタック・キュー、HTTPプロトコル ● しかしなるべくスムーズに段差なく – 段差はないが急にはなる・・・

Slide 12

Slide 12 text

スムーズに段差なくの工夫 ● レコード – 名前付きタプルとしてListや配列の次に – メソッドの説明でレコードにインスタンスメソッド – クラスの説明でレコードをクラスに変換(IntelliJ IDEAの機能) ● クラスの説明のときには、必要な要素はすでに知ってい る

Slide 13

Slide 13 text

コンセプト ● 難しいことまで扱う – なるべく章の最後にまとめる – 特に難しい話題はパートをわける – わからないところを飛ばしやすく

Slide 14

Slide 14 text

わかりやすさ ● インストラクショナルデザイン

Slide 15

Slide 15 text

プロになるJavaの インストラクショナルデザイン ● 教える題材の構造ではなく理解の構造にしたがって教える – 教訓3 教える理由をはっきりさせる – 教訓4 成功の基準をはっきりさせる – 教訓5 標的行動を見せてやらせて確認させる – 教訓9 誤答を教える – 教訓11 学び手を知る – 教訓14 学ばせて、楽しませる 職業プログラマになる Swing 練習問題 JShell オープンチャットでレベル感を知る

Slide 16

Slide 16 text

わかりやすさ ● 難しい表現をさける – プログラミングの本は難しい言葉を使いがち – 読みやすい表現を使うと、文章が難しいのかJavaやプログラミングが難しいのか判別しにくくなる – 例 ● 本書→この本 ● 取得する→取る ● スムーズに読めるように – 1500番のサンドペーパーをかけた程度のなめらかな文章を目指す – ツルツルだけど艶が出るまではない ● プログラミングの難しさに集中する – ただし3部で力尽きた模様(4部はわかりにくい部分が多い)

Slide 17

Slide 17 text

わかりやすさ ● JShell – コードと結果の対応がわかりやすい – プログラムの結果を読み解くにはプログラムの理解 が必要 ● プログラムを理解するためのサンプルなのに

Slide 18

Slide 18 text

わかりやすさ ● Swing – 文字を出すだけのプログラムを「プログラム」と認識しても らえない – クラス、オブジェクト、インスタンスの説明がやりやすい ● ValueBasedなオブジェクトはオブジェクトと認識しづらい – Valhallaのvalue classで「オブジェクト」ではなくなる ● “test”をあらわす2つのオブジェクトはあまり意味がない – JShellでSwingはほんとに楽しい

Slide 19

Slide 19 text

手にとりやすく ● パステル調 – 「プロになる」だと黒くシュッとしたデザインに なりがち ● 初心者が手を出しづらい ● 副題に「ゼロから身につく」を – 座談会で(話すかも) ● デザインは「青っぽく!かわいく!」とだけ 言って寝てたので細かいとこはユースケさん

Slide 20

Slide 20 text

処理を書けるようにする ● Javaの文法やAPIはあまり細かく網羅しない – shortなど基本型も全部は説明してない ● ループに関して手厚く – デバッガ – パターン – 描画でわかりやすく – 練習問題

Slide 21

Slide 21 text

迷路ゲーム ● forとifを勉強しただけでforとif使ったプログラ ムが書けるようになるわけじゃないぞーという 威圧 ● 割と純粋に楽しい

Slide 22

Slide 22 text

状態遷移 ● プログラミングの基本だけどあまり勉強の機会 がない ● 実数文字列の判定を行う ● 正規表現との対応 ● 難しい処理もループと条件分岐の 組み合わせだゾという提示

Slide 23

Slide 23 text

計算複雑性 ● 階層 – 組み合わせ論理 ● ループのないコード – 有限オートマトン ● スタックや再帰のないコード – プッシュダウンオートマトン ● スタックのあるコード – チューリングマシン ● スタックがふたつ以上あるコード ● 任意のデータ構造を扱う

Slide 24

Slide 24 text

有限オートマトンを難しさ別に分解 ● ループの各処理が独立 ● ループの各処理は独立しているけど集計が必要 – Stream ● 他の要素の値も扱うリスト処理 – Streamで書けない ● 隠れた状態を扱う – ランレングス圧縮(文字列の連続数が隠れた状態) ● 状態遷移図が必要な処理

Slide 25

Slide 25 text

HTTPプロトコル ● Socketでクライアントとサーバーを実装 ● 「この程度のプログラムでWebが動く」と実感 しておいてもらう

Slide 26

Slide 26 text

オブジェクト指向 ● ファンタジーに陥らない – いぬねこや姫様勇者のようなクラス ● わかった気になるけどアプリケーションの実装につながらない ● 継承の使い方を差分プログラミングと値の分類に整理 ● オブジェクト指向の限界も提示しておく – 「オブジェクト指向ならいいプログラムになる」みたいな夢を見せない – 「いいプログラムにするためにはオブジェクト指向する必要がある」み たいな誤解をさせない

Slide 27

Slide 27 text

差分プログラミング ● 継承の主な用途のひとつは差分プログラミング ● 継承がラムダに置き換わっていくところを見せ る ● 関数型が支配的であることの説明

Slide 28

Slide 28 text

継承での値の分類 ● 値型を継承で分類する

Slide 29

Slide 29 text

公称型と構造的部分型? ● Javaの言語設計が唯一ではないことの提示 ● 設計者という人間が言語機能を選択している