jfluteがJava入門エクササイズ「javatry」を作りました。

Githubオープンソースとして公開

// javatry
https://github.com/dbflute-session/javatry

Gitでcloneすれば、誰でもtryできます!

ご自身のGithubアカウントでforkして、やった分をコミットするのがオススメです。jfluteが新卒研修などで使うときは、そのようにやってもらっています。

EclipseIntelliJ に取り込んで、コンパイル通してみましょう。(Mavenを使っていますので、pom.xmlを読み込むようにしてください)

※環境構築は、Github上で README.md をご覧ください。

【追記】
オフィシャルページも作りました!
http://dbflute.seasar.org/ja/tutorial/javatry/index.html

どんなエクササイズ?

最初はクイズ形式、気軽にチャレンジ

まずはお手軽なクイズで。

/**
 * What string is sea variable at the method end? <br>
 * (メソッド終了時の変数 sea の中身は?)
 */
public void test_variable_reassigned_basic() {
    String sea = "mystic";
    String land = "oneman";
    sea = land;
    land = land + "'s dreams";
    log(sea); // your answer? => 
}

your answer のところに、想像する答えを書いてみて、テストを実行してみましょう。実行するとコンソールに答えが表示されます。

合ってて納得いくならOK。
間違ってて「ああ、そういうことか」ってならOK。
合ってても納得いかないなら考えてみましょう。
間違っててわからないなら色々と調べてみましょう。

実行できる環境なので、途中でさらにログを追加してみたり、コードを一時的に修正して挙動を変えてみたり、自分で試行錯誤がしやすいものになっています。

バグ修正のエクササイズなんかも

jfluteが作ってますから笑、実務的なスキルを鍛えるエクササイズも用意しています。バグを見つけて直してみましょう。

/**
 * Fix the problem of sales proceeds increased by handed money...
 * (受け取ったお金の分だけ売上が増えていく問題をクラスを修正して解決しましょう...
 */
public void test_class_letsFix_salesProceedsIncrease() {
    TicketBooth booth = new TicketBooth();
    booth.buyOneDayPassport(10000);
    Integer sea = booth.getSalesProceeds();
    log(sea); // should be same as one-day price, visual check here
}

エラーメッセージやコードを読むエクササイズなんかも

そりゃもう jflute ですから、エラーメッセージ読まないと先に進めません(^^。コードも自然と読んでもらいます。読む力を養ってもらいます。

/**
 * Execute this test and read exception message and write situation and...
 * テストを実行して、例外メッセージを読んで、状況と原因をコメント上に書きましょう。
 */
public void test_exception_translation_debugChallenge() {
    try {
        new SupercarClient().buySupercar();
        fail("always exception but none");
    } catch (RuntimeException e) {
        log("*No hint here for training.", e);
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        // What happens? Write situation and cause here. (何が起きた?状況と原因をここに書いてみましょう)
        // - - - - - - - - - -
        //
        //
        //
        // _/_/_/_/_/_/_/_/_/_/
    }
}

再利用のエクササイズなんかも

コードの再利用性を意識してもらいたいですね。

/**
 * Recycle duplicate logics between one-day and two-day...
 * (OneDayとTwoDayで冗長なロジックがあったら、クラス内のprivateメソッドなどで再利用しましょう...
 */
public void test_class_letsFix_refactor_recycle() {
    TicketBooth booth = new TicketBooth();
    booth.buyOneDayPassport(10000);
    log(booth.getQuantity(), booth.getSalesProceeds()); // should be same as before-fix
}

対象とする人は?

1. Javaの本を読んだことある

Javaの本を読んだ、だけど実際に書いたわけじゃないし、まだイメージが湧かない」くらいの方にぜひ。

javatry自体は、文法を0から学ぶものではないので、事前インプットはあった方が良いですが、インプットするだけでは身にならないので、それをチェックしてさらにインプットを増幅させるためにjavatryを活用してください。

2. 本を読むよりまず何かやりたい

Javaの本も読んでないけど、本とか読むのつらい、コードを見て学びたい」くらいの方にもぜひ。

javatryのストーリーが、あなたのサバイバル心を刺激して、つどつどインプットを促してくれるでしょう。

3. 他の言語は書いたことあるけどJava初めて

ぜひ、Javaの特徴を知るためにやってみてください(^^。

逆に、やったことのある他の言語のヒントにもなるかもしれません。

4. Javaは業務で使ってるけど細かいところ不安

確認のためにもぜひやってみてください。大丈夫ならクイズはすぐに終わるでしょうし、苦戦するなら学ぶべきことがあるということです。

また、クラスやメソッド、オブジェクト指向をじっくり学ぶエクササイズも用意されています。業務でJavaをやってても、その辺は意外と習熟していかないもの。中級者でも十分楽しめると思います(^^。

プログラミングを鍛えたい

Javaを題材にしていますが、ここはjfluteのポリシー変わらず、Javaに関わらずプログラミングのエッセンスを学べるようなエクササイズにしているつもりです。

業務の開発だと、いきなりフレームワークやツールがバリバリで、その言語の本質やプログラミングの本質がよくわからない状態でも開発できたりします。それゆえに、そのへんが鍛えられず、いざそういうのが求められたときにできない、ってのが怖いのですよね。

また、仕事では別の言語を主にやっている人でも、javatryをやることで普段さわっている言語の本質が見えてくるような、そんな学べる環境になって欲しいなと。実際にいま研修で使っている現場では、そういう状況でやってもらっている方もいます。

DBFluteハンズオンの前にやりたい

jfluteは、色々な現場でDBFluteハンズオンのレビューやっています。DBFlute関係なくプログラミングのエッセンスをたくさん含んだエクササイズにしているつもりですが、新人の研修が多くなってくるにつれて「DBFluteハンズオンもちょい早いな」って思うようになってきました。

フレームワークとか抜きで、もっとベーシックなプログラミングを学べるエクササイズがないから?ということで作ったのがjavatryです。

ずっと前からあって現場の研修では何年も活用してきたのですが、しっかり体裁を整えたのが最近という感じです。jfluteが協力させて頂いている現場のうち、4社で実際に研修で活用させてもらっています。

後半のステップでは、フレームワーク自体の本質を学ぶようなエクササイズも用意しています。まだ少ないですが、これからどんどん増やしていきたいなと。

そういう意味では、初心者向けというか、初心者から中級者までという感覚です。いずれ上級なステップも作っていきたいなって。(いまでもすでに、高難易度のエクササイズでは、リフレクション使わないと解決できないものも...笑。すでに上級者でも悩むようなエクササイズありますね^^)

支援に感謝

U-NEXTさんが、javatryを支援してくださっています。
ありがとうございます!

U-NEXTの若者も、いままさしく javatry を頑張ってくれていて、エクササイズに対するフィードバックも頂いたりしています。
(jfluteの特別レビューと1on1フォロー付き)

まだまだこれから

いまは単にjavatryのプロジェクトが公開されているだけで、説明資料とか何もないですから、そういうのも徐々に付け足していきたいなとは思っています。

また、エクササイズの数もやりたいことも半分以下でしょう。もっと色々な側面を鍛えられるエクササイズを作っていきたいです。

すでにあるエクササイズのクオリティーも上げていきたいですね。研修で使えば使うほどフィードバックがやってきます。進化し続けるカリキュラムということで、うまく運用していきたいなと。

f:id:jflute:20200301234821p:plain