関ジャバ'19 6月度 で登壇した際の資料です。 https://kanjava.connpass.com/event/134119/
新人研修講師の体験を通して考える自己学習のアプローチ2019/06/20 関ジャバ'19 6月度
View Slide
自己紹介名前:キット属性:プログラマー、講師最近の興味:学習初心者向け勉強会企画してます
新人向けのJavaプログラミング研修講師をしています
受講生のフィードバックを聞いているとプログラミング始めたての頃の気持ちを思い出した
自分も新しい技術を学ぶ際には同じことに陥っているはず
彼らの問題を客観的に見て自分の学習方法を改善できないかな
目次- 取り組んでいる技術が何かわかってない問題- 用語やツールの関係がわからない問題- 研修でテキストエディタ使う問題- その他いろいろ
今取り組んでる技術が何かイマイチわかってない問題
「JSPサーブレットプログラミングについて学習した」
まだJSPやってない
まだ学習が浅い人はざっくりと大きな枠で括りがち
初心者の視界Java
実際JavaSpringGradleThymeleafMybatis
例えばIDEの画面
例えばIDEJavaJava
例えばIDESpringGradle
視界がぼんやりしてると学習時に混乱する
視界を詳細化することを意識する
やってみる
自分が全くわからないものでやらないと
そういえば最近Flutter気になってた(Java関連じゃなくてごめんなさい)
事前にわかっている情報
Flutterはモバイルアプリを作るためのフレームワーク
FlutterはDartで書く
Dartはプログラミング言語
以上
Flutter
Dart?
知ってるワードなら認識できる(今回は「dart」)
その他は知らないので地道に調べる
詳細化してみた
PubFlutterFlutterFlutter
itemBuilder: /*1*/ (context, i) {if (i.isOdd) return Divider();/*2*/final index = i ~/ 2; /*3*/if (index >= _suggestions.length) {_suggestions.addAll(generateWordPairs().take(10)); /*4*/}return _buildRow(_suggestions[index]);});sky engine(DartとFlutter Engineの間のインターフェース)
わかったこと
Pubというパッケージ管理ツールを使っている
dart packagesはPubで取得してきた外部ライブラリ
FlutterはDartの標準ライブラリを直接使っていない
DartとFlutterについてわかったこと- Pubというパッケージ管理ツールを使っている- dart packagesはPubで取得してきた外部ライブラリ- FlutterはDartの標準ライブラリを直接使っていない
感想
ドキュメントを漫然と読むだけでは詳細化は難しい
「これは何なのか」から調べてドキュメントを読んでみたら良さそう
ドキュメントが違うサイトなら「違うツール」だと明確にわかる
詳細化してもコードは書けない
詳細化しても各々の関係性はわからない
客観的にはまだ視界がぼんやりしてるかもしれないが自分では気づけない
詳細化をミスると的外れなワードで調べ続けてハマる
普通にドキュメント流し読みするより楽しい
ハマった例
Dartプロジェクトにあるyamlファイルは全部Pubだと思ってたが違っていた
詳細化にチャレンジした感想- ドキュメントを漫然と読むだけでは分類は難しい- 「これは何なのか」を意識しながら読んでみたら良さそう- ドキュメントが違うサイトなら「違うツール」だとわかるが同じサイトだと「同じツール」と思いがち- 詳細化してもコードは書けない- 詳細化しても各々の関係性はわからない- 詳細化をミスると的外れなワードで調べ続けてハマる
詳細化まとめどこまで詳細化できてるか自分ではわからないが、チャレンジすることでわかることが結構ある。意識してやってみると詳細化できてない自分に気づける。
用語やツールの関係がわからなくて混乱する問題
今の演習ではPostgresを使ってるのにとりあえず前までの演習で使ったH2を起動する
H2がPostgresと同じ、データベースだということがわかっていない
PostgreSQLMySQLH2
名前に「SQL」ってついてないから別物
PostgreSQLMySQLH2 Database Engine
名前って重要
名前は省略しない方が良い
どうすればわかりやすい?
マインドマップ使ってみる
データベースPostgreSQLMySQLH2 Database
RDBPostgreSQLMySQLH2 Databaseデータベース
分類するとわかりやすい
RDBPostgreSQLMySQLH2 DatabaseデータベースNoSQLドキュメント指向MongoDBDynamoDBKey-ValueストアmemchaedRedisグラフ指向
NoSQLに種類がある
Key-ValueストアとNoSQLの関係(同じ意味ぐらいに思ってた)
ドキュメント指向データベースというものがある
NoSQLって「Not Only SQL」なのね
それぞれをis-a関係で分類できた
それぞれの用語の関係性がはっきりした
やっぱり名前って重要
合ってるかわからない
一次情報に当たるものがなさそう
Wikipedia頼み
見える化できるので自分の理解を人に説明しやすい
もう1つやってみた
Flutterで
FlutterモバイルアプリフレームワークDartionicReact Native
DartはFlutter?
コレジャナイ感・・・
DartはFlutterに含まれる
has-a関係
Flutter Dart Pub
まだ少し違和感
FlutterというフレームワークにDartという言語が含まれる?
Flutter SDKDart SDKPubFlutter標準ライブラリFlutterテストライブラリDart標準ライブラリDart VMdartanalyzer
そういえばJDKには何が含まれる?
ToolsjavacjavapOracle JDK8UI Tool KitjavajarJVMLang And UtilLibrariesRich InternetApplicationsIntegrationLibrariesOther BaseLibrariesjavadocjdepsScriptingSecurityMonitoringJConsoleVisualVMJMCJFRJPDAJVM TIIDLRMIJavaDBDevelopmentjjsjrunscriptInternationalizationWeb ServicesTroubleshootingkeytooljarsignerpolicytoolJava Web StartApplettJavaFXSwingIDLJDBCMathCollectionsRef ObjectsRegularExpressionsLoggingManagementInstrumentationConcurrencyUtilitiesReflection
「javac」は「Oracle JDK8」に含まれる「Tools」である
参考- https://docs.oracle.com/javase/8/docs/- https://docs.oracle.com/en/java/javase/12/index.html- https://ja.wikipedia.org/wiki/Java_Development_Kit- https://dart.dev/tools/sdk
深掘りするには
RDBPostgreSQLMySQLH2 DatabaseデータベースNoSQLドキュメント指向MongoDBDynamoDBKey-ValueストアmemchaedRedisグラフ指向is-a関係
PostgreSQLを理解しようと思うならRDBを理解する
RDBを理解しようと思うならデータベースを理解する
ToolsjavacjavapOracle JDK8UI Tool KitjavajarJVMLang And UtilLibrariesRich InternetApplicationsIntegrationLibrariesOther BaseLibrariesjavadocjdepsScriptingSecurityMonitoringJConsoleVisualVMJMCJFRJPDAJVM TIIDLRMIJavaDBDevelopmentjjsjrunscriptInternationalizationWeb ServicesTroubleshootingkeytooljarsignerpolicytoolJava Web StartApplettJavaFXSwingIDLJDBCMathCollectionsRef ObjectsRegularExpressionsLoggingManagementInstrumentationConcurrencyUtilitiesReflectionhas-a関係
Oracle JDKを理解しようと思うなら含まれているツールを1つ1つ理解していく(つらい)
分類してみて
頭の中が整理された気がする
is-a関係で用語を学ぶ
has-a関係でプロダクトを学ぶ
分類まとめ- 分類すると用語の関連がはっきりする- 自分で分類した結果が合ってるかは自信ない- 用語の場合、一次情報に当たるものがない- Wikipedia良い- 見える化すると人に説明しやすい- is-a関係で用語、has-a関係でプロダクトを整理すると学習しやすい- 名前はやっぱり重要
既存の研修のやり方を考える
テキストエディタ使う問題
テキストエディタでコード書く↓javacコマンド
なぜ最初からIDE使わないの?
最初からIDEだとjavacコマンドの存在は知らないまま
IDEが裏でどんなことやってるかわからないまま
トラブルに弱くなる
初心者の頃、Gradleの有り難さがわからなかった(あって当たり前だった)
テキストエディタ→IDEIDEの有り難さがわかる
でも2週間もテキストエディタ使わなくてもいいかな
そのツールが何を解決したくて登場したものかを知る
「歴史」を調べると背景が見えてくる
ビルドツール 歴史
歴史を調べるのは面白い
テキストエディタ問題まとめ- 最初にテキストエディタでコード書くのはありだと思う- ただし3日くらいでいい- ツールの登場背景を知っておくとどんな問題を解決するものか見えてくる- 歴史を調べるのは面白い- Wikipediaやっぱり良い
その他いろいろ
「ServletとDBを接続することができなかった。原因としては、Javascriptが理解できてないからだ」
自分の理解できていないところが原因と思いがち
複数の技術を使い出すと混乱する
「みんな完成度の高いWebページだったが、自分は写真表示とテーブルの作成しかできなかった」
「よくわからない隙間ができたりでWebページ作成が嫌いになりかけた」
その人のレイアウト
他の人のレイアウト
学習してない技術を使ってる
他の人は学習した技術でいかに綺麗に見せるかを実践している
持ってる武器を使おう
まとめ
研修講師で初学者と接するのは非常に勉強になる