$30 off During Our Annual Pro Sale. View Details »

プロになるJavaでチート能力を手にして完全勝利

 プロになるJavaでチート能力を手にして完全勝利

2022年4月18日に開催されたJJUGナイトセミナーでの登壇資料です
https://jjug.doorkeeper.jp/events/135559

Naoki Kishida

April 18, 2022
Tweet

More Decks by Naoki Kishida

Other Decks in Programming

Transcript

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

    View Slide

  2. プロになるJava

    仕事で必要なプログラミングの知識がゼロから身につく最高の指南書

    Javaの文法だけではなく、ツールやSpring Boot、データベースまで1冊で紹介

    著者
    – きしだ なおき - Java言語、プログラミング
    – 山本 ユースケ - IntelliJ IDEA、ツール
    – 杉山 貴章 - Spring Boot + DB

    2022年3月19日発売
    – すでに2刷

    技術評論社

    View Slide

  3. Duke

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

    View Slide

  4. よくある入門書の問題点

    入門書を読んで文法はわかったけどプログラムが組め
    るようにならない

    原因
    – 文法やAPIを説明するけど「プログラム」は説明していない
    – UIに触れてないのでアプリケーションが作れない
    – Java言語への入門であってJavaプログラマへの入門ではな

    View Slide

  5. よくある入門書の問題点

    Javaを勉強したけどJavaの世界は知らない
    – JAVAと書いてしまう
    – Javaがどう作られてるか
    知らない

    OpenJDK

    JEP
    – コミュニティを知らない

    JJUG

    Twitter

    LINEオープンチャット

    View Slide

  6. コンセプト

    対象
    – 就職・転職したい人
    – プログラミングの仕事のスキルをあげたい人
    – プログラミング未経験者

    非対象
    – 日常の作業をプログラムで効率化したい人

    そんな人はJavaを選ばないので

    View Slide

  7. コンセプト

    目的
    – Webアプリケーションのプログラミングに携われる

    内容
    – プログラミング

    処理を書けるようにする
    – IDE

    IntelliJ IDEA
    – Web

    HTTPプロトコル

    Spring Boot

    データベース
    https://twitter.com/javarevisited/status/1489090687551242240

    View Slide

  8. プログラミングの本

    伏線回収
    https://nowokay.hatenablog.com/entry/20080220/1203503120

    View Slide

  9. なぜNetBeansではない?

    NetBeans9で日本語化が外れた

    初心者が戸惑うバグがある

    IntelliJ IDEAのJavaりょくが高い

    View Slide

  10. なぜSpring Boot?

    デファクトスタンダードを採用
    – 創るJavaのときは「Java標準」
    – @Injectではなく@Autowired

    Twitterでアンケートとった

    View Slide

  11. コンセプト

    入口は低く、出口は高く
    – 目標を低く設定することで「わかりやすい」を
    達成する本が多い
    – 目標は高め

    知っておくべきことにもかかわらず到達しにくいことを
    提示しておく
    – 計算複雑性、オートマトン、スタック・キュー、HTTPプロトコル

    しかしなるべくスムーズに段差なく
    – 段差はないが急にはなる・・・

    View Slide

  12. スムーズに段差なくの工夫

    レコード
    – 名前付きタプルとしてListや配列の次に
    – メソッドの説明でレコードにインスタンスメソッド
    – クラスの説明でレコードをクラスに変換(IntelliJ
    IDEAの機能)

    クラスの説明のときには、必要な要素はすでに知ってい

    View Slide

  13. コンセプト

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

    View Slide

  14. わかりやすさ

    インストラクショナルデザイン

    View Slide

  15. プロになるJavaの
    インストラクショナルデザイン

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

    View Slide

  16. わかりやすさ

    難しい表現をさける
    – プログラミングの本は難しい言葉を使いがち
    – 読みやすい表現を使うと、文章が難しいのかJavaやプログラミングが難しいのか判別しにくくなる
    – 例

    本書→この本

    取得する→取る

    スムーズに読めるように
    – 1500番のサンドペーパーをかけた程度のなめらかな文章を目指す
    – ツルツルだけど艶が出るまではない

    プログラミングの難しさに集中する
    – ただし3部で力尽きた模様(4部はわかりにくい部分が多い)

    View Slide

  17. わかりやすさ

    JShell
    – コードと結果の対応がわかりやすい
    – プログラムの結果を読み解くにはプログラムの理解
    が必要

    プログラムを理解するためのサンプルなのに

    View Slide

  18. わかりやすさ

    Swing
    – 文字を出すだけのプログラムを「プログラム」と認識しても
    らえない
    – クラス、オブジェクト、インスタンスの説明がやりやすい

    ValueBasedなオブジェクトはオブジェクトと認識しづらい
    – Valhallaのvalue classで「オブジェクト」ではなくなる

    “test”をあらわす2つのオブジェクトはあまり意味がない
    – JShellでSwingはほんとに楽しい

    View Slide

  19. 手にとりやすく

    パステル調
    – 「プロになる」だと黒くシュッとしたデザインに
    なりがち

    初心者が手を出しづらい

    副題に「ゼロから身につく」を
    – 座談会で(話すかも)

    デザインは「青っぽく!かわいく!」とだけ
    言って寝てたので細かいとこはユースケさん

    View Slide

  20. 処理を書けるようにする

    Javaの文法やAPIはあまり細かく網羅しない
    – shortなど基本型も全部は説明してない

    ループに関して手厚く
    – デバッガ
    – パターン
    – 描画でわかりやすく
    – 練習問題

    View Slide

  21. 迷路ゲーム

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

    割と純粋に楽しい

    View Slide

  22. 状態遷移

    プログラミングの基本だけどあまり勉強の機会
    がない

    実数文字列の判定を行う

    正規表現との対応

    難しい処理もループと条件分岐の
    組み合わせだゾという提示

    View Slide

  23. 計算複雑性

    階層
    – 組み合わせ論理

    ループのないコード
    – 有限オートマトン

    スタックや再帰のないコード
    – プッシュダウンオートマトン

    スタックのあるコード
    – チューリングマシン

    スタックがふたつ以上あるコード

    任意のデータ構造を扱う

    View Slide

  24. 有限オートマトンを難しさ別に分解

    ループの各処理が独立

    ループの各処理は独立しているけど集計が必要
    – Stream

    他の要素の値も扱うリスト処理
    – Streamで書けない

    隠れた状態を扱う
    – ランレングス圧縮(文字列の連続数が隠れた状態)

    状態遷移図が必要な処理

    View Slide

  25. HTTPプロトコル

    Socketでクライアントとサーバーを実装

    「この程度のプログラムでWebが動く」と実感
    しておいてもらう

    View Slide

  26. オブジェクト指向

    ファンタジーに陥らない
    – いぬねこや姫様勇者のようなクラス

    わかった気になるけどアプリケーションの実装につながらない

    継承の使い方を差分プログラミングと値の分類に整理

    オブジェクト指向の限界も提示しておく
    – 「オブジェクト指向ならいいプログラムになる」みたいな夢を見せない
    – 「いいプログラムにするためにはオブジェクト指向する必要がある」み
    たいな誤解をさせない

    View Slide

  27. 差分プログラミング

    継承の主な用途のひとつは差分プログラミング

    継承がラムダに置き換わっていくところを見せ


    関数型が支配的であることの説明

    View Slide

  28. 継承での値の分類

    値型を継承で分類する

    View Slide

  29. 公称型と構造的部分型?

    Javaの言語設計が唯一ではないことの提示

    設計者という人間が言語機能を選択している

    View Slide