2022年4月18日に開催されたJJUGナイトセミナーでの登壇資料です https://jjug.doorkeeper.jp/events/135559
プロになるJavaでチート能力を手にして完全勝利2022/4/18 JJUG ナイトセミナーLINE Fukuoka きしだ なおき
View Slide
プロになる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や配列の次に– メソッドの説明でレコードにインスタンスメソッド– クラスの説明でレコードをクラスに変換(IntelliJIDEAの機能)●クラスの説明のときには、必要な要素はすでに知っている
コンセプト●難しいことまで扱う– なるべく章の最後にまとめる– 特に難しい話題はパートをわける– わからないところを飛ばしやすく
わかりやすさ●インストラクショナルデザイン
プロになる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の言語設計が唯一ではないことの提示●設計者という人間が言語機能を選択している