karino2が友人にAndroidを教えている会の名称。正式名は「karino2のあおぞらAndroid開発教室」
プログラム素人の友人がAndroidアプリを作ってみたいのでプログラムと一緒に教えてよ、と言ってきたので始めた所、 俺も習いたいんだけど?というのがちょこちょこ出てきたので何人かに教えてるもの。 地元の市の雑談スペースみたいなので教えているのが本体だけれど、 説明とか課題とかはテキストで書いておくし、復習用に動画なども作った結果、 まぁまぁ自習にも使えそうな感じになってきたのでまとめておく。
リソースからBitmap作って描くまではだいたい完成。
Canvasでいろいろ描画 - karino2のあおぞらAndroid開発教室
とりあえず2Dゲームを作るのに最低限必要なカスタムビューの話題は全部入ったかな。ひとまずここまででカスタムビュー編は完成でいいかな。
ここからはこういうのを作るのがいいと思うが、説明をざっと読んだ感じ、まだクラスとか作った事も無いkotlinしか知らない人に読ませるにはちょっと難しいな。
javascriptで作るシューティングゲーム的な何か(1) #JavaScript - Qiita
Android版を作れば需要はあると思うが、自分でやる気は起きないな。
就活という点ではこれまでで基本は終わりで、ここからは就職先ごとに独自の勉強をしてくのがいいだろう、と思っている。 例えばSQLiteやHTTPやJSONを覚えていくのか、Canvasとかを覚えていくのか、というのは、大きく方向性が違う。 そして就職としては前者の方がいいんじゃないか、という思いもある。
だが、プログラム素人がここまでやった後にプログラムの楽しさに触れていこう、と思うなら、 カスタムビューとCanvasは割と手頃なのも間違いない。 分野として閉じているから学びやすいし、 ゲームを作るのはプログラムの経験があまりなくても、どういうものを作っていきたいかを具体的にイメージしやすいので、中規模のものを自分で作りやすい。
という事で、カスタムビューで簡単にものを動かしたりタッチの処理をする、くらいまでは解説をしてみる事にした。
はろーCustomView - karino2のあおぞらAndroid開発教室
興が乗ったのでinvalidateまで解説。
invalidateで四角を動かそう - karino2のあおぞらAndroid開発教室
さらに興が乗ったのでonTouchEventまで解説。
onTouchEventでタッチを処理 - karino2のあおぞらAndroid開発教室
これでひとまず様子を見るでいいかな。
予定では次回で終わりの予定だったが次回は皆の予定が合わずに今日で終わりとなった。全体の振り返りなど。
3人でやっていたが、家で進めてくるのは一人だった。 毎週3時間ちょっとくらい講義みたいなのを聞いて家で復習してくる、くらいでは、途中からは分量は足りないかなぁ、という印象。
一方で全員が一応はListViewを作って要素を追加したり削除したり、が出来るくらいの理解には到達していたし、 条件分岐やループは理解出来ていたように思う。 プログラムやった事無い人がスマホアプリを開発してみよう、という時の最初の段階としてはこんなもんなんじゃないかな、と思う。
家で進めてくる人は用意したコンテンツはだいたいは終わったかな、という感じ。 ファイルの入出力を自分の作ったライブラリみたいなの使ってやって、テキスト処理も簡単なのは出来るようになっていた。 ラムダ式、クラスとか継承を教えてこれまで何も分からずに書いていたコードがどういうものかを説明している途中くらいで終わり。
もうちょっとちゃんと仕上がるまで行くかと思っていたが、後半二ヶ月は進みが悪くてこの位、となった。
Androidの入門としては
のあたりが欠けているが、こういうのを学んでいく段階までは来たかな、とは思う。
単に習い事的に来てその場で学んでいくだけ、というスタイルだと、ListViewになんか出すくらいがせいぜいかなぁ、という気がする。 必要な事を全部教えるのも出来なくは無いが、この辺より先は自分で学んでいく方がいいのかな、と思った。
逆にListViewあたりまでやっておけば、Androidでアプリを作るというのがどういう事か、とか、 プログラム言語を学んでプログラムをするとはどういう事か、 というのは割と体験出来る訳で、最初に学んでみるには十分なんじゃないかな、と思う。
自習をしていく人は最初に想定していた内容はだいたい教え終わったのだが、 意外とアプリを作っていく感じには出来なかった。
その後にプログラム言語的な事を教えてみたが、これは途中で終わった感じ。
教えた内容だけでも結構多くのものは作れるとは思うのだけれど、 作れる範囲にやりたい事が無い、みたいな感じで、 また、必要な事を自習して進んでいく感じにはまだ足りてない気がした。
例えば我々はgithub pagesで普段からブログを書いていたりするので、 そういうのと連携するような何かとかがいろいろ考えられるのだが、 そういうPC側での普段の生活があまりプログラマ的でないので、 プレーンテキストでやりたい事、とかがあまり無い。 プログラマは小物ツールとか作りたいものがいろいろあるのだが、 非プログラマは作りたい小物ツールとかがあまり思いつかないみたいで、 その辺はある程度用意してやる必要がありそうだった。
「これくらい教えればあとは作っていきながら教える感じになるかな〜」と思っていた、 「これくらい教えれば」は教えられたと思うが、その後の状態は目標には届いていない気がする。
用意したコンテンツをやってもらう分には想定通りに進むが、 ツアーとか公式ドキュメントなどを読んでいくのは難しい。 これはAndroidやkotlin周りが入門者に厳しいから、というのも大きい。
一般のコンテンツを学べるようになる、というのは一つ目標に掲げるべき所なんだな、 というのを今回学んだが、それに必要な事はまだ完全には自分の中で考えられていない。
パラグラフリーディングとかを教えていて、ある程度の手応えはあったが、これだけではダメな気もした。 ここはもう少し考える必要がありそう。
最初はまぁその場で来て習うだけでも、必要な事全部教えればいいか、と思っていたが、 やってみると結構厳しかった。膨大過ぎて全部は教えられない。
やはり自分である程度はやる必要があるなぁ、というのが結論。 受け身で教わるだけではとりあえずListViewのあたりまで、と最初に決めてしまってそこで終わりにする方が良いように思う。
また、用意したコンテンツを自習してくるだけ、でも途中で限界は来る。 全部用意するのはやっぱ結構たいへん。 こちらの用意したコンテンツをやるだけなら、とりあえず今のトップページ - karino2のあおぞらAndroid開発教室にもう少し足したあたりがせいぜいなんじゃないかなぁ、という気がした。 ここより先はWikiとか用意して参加者がある程度書いていく必要があるよなぁ。
という事で
というのがとりあえず出来る範囲なのでは無いか。
ここより先はやはり自習してきて分からない所を聞く、というスタイルにする必要があるよなぁ、と思う。 そしてそれは教室でやるよりもオンラインで良いのでは?という気もする。
達成出来た事にも焦点を当ててみよう。
この辺は達成出来た。 その結果として、
とは思う。 端的に言えばAndroidの入門書とKotlinの入門書は自分で読んでいけると思う。
入門書はやったが作りたいものは作れない、的な、中級者になれないプログラマ、みたいなステータスになれる所までは来たともう。
次同じような事をやる時の自分への課題について
理系では無いプログラム素人にプログラムを教えるというのがどういう感じかというのは理解が進んだ。 教わりに来るだけという人にどのくらいまで教えられるか(教える気になるか)、というのもだいたいわかった。
自習教材として一人前になるものを用意するのはまだ出来ていない気がする。入門書は終えたがその後どうしたらいいか分からない、くらいの人に前に進める教材にはまだ足りてないものがありそう。もうちょっとコードの量を書く機会があれば良さそうな気はした。
次教えるなら自習で進めて来る、は最低ライン要求することにしようかな。
なんとなく思う事を書いていく。
海が寒くなってきたので奄美に行く計画を立て始める。あおぞら教室は12月中旬くらいで一旦終わりかな。
再開するかは未定だが、とりあえず終わりまでに何をやるかを考えたい。 一番進んでいる人はツアーを一通りやって、リファレンスのいくつかを読んだ、くらいの状態で、 リファレンスの方は理解度は低い感じ。
自分が終わったあとに自分で進めるのに必要な事を伝えて終わりにするのがいいかな、という気がしている。 自分で進めるのに必要な事はなんだろう? まぁ最初の難関はもう超えているので何もいらない、という話もある。 適当に自分でも理解出来るものを探してそれを進める、を繰り返せば、時間は掛かっても基本的な事はやっていけるだろう。
一方で今すぐ仕事を開始して十分か、っていうとそういう感じはしない。別に仕事を始めた時に十分じゃなくても仕事をしながら学んでいければいいとは思うが、 少し時間があるので、仕事を開始するのに必要な事を学んでいくのがいいかな、という気はする。
今少し不安に感じるのは、
あたりに思う。
4は自分が教えたいという気もあまりしないので、 最近やっている技術文書の読み方的な話で1をちゃんと教えつつ2も少しカバーする、くらいで終わりにするのがいいかもしれない。 1を身に着けて自習していけば、そこで出た分からない事を質問していく事で2の練習にもなるだろうし。
3は時間があったらやりたかったんだが、タイムアップだな。
まぁ実際1が普通のプログラマって感じの状態まで行けば、拾ってくれる所はある気もするし。
あんま進んでない方も学んでいく方法を一緒に教えて終わりにする、で良いかな。
授業はパラグラフリーディングを教えているが、それとは別にクラスや継承について、 実際に使う例をもう少し置きたいなぁ、と思い、 過去の例のコードの一部を変更して使ってみる例をいろいろ作ってみている。
もっとたくさんあった方がいい気もするが、それよりもなんか作る方がいい気もしてくるので、 そろそろ作って学ぶ系の課題を作る時が来たかなぁ。
技術文書の読み方の延長として、パラグラフリーディングを教えてみようとしたが、 節の内容を推測させる所でうまく行かず頓挫。 もうちょっと教え方を考える必要がありそう。
今回失敗だったのは、練習をさせたいのに全然練習してくれない、という所にある。 それは難しすぎるから、という事なのかもしれない。
全体像がわからない状態でやらせるのもなぁ、と思い全部説明しようとしたが、 もうちょっと最初の所はとりあえず反復練習させる、から始める方がいいかもしれない。
前からなんとかしたい、と思っていた、関数の入門を書き直した。
以前のは、JS入門の該当の所を読んだ後に読むようになっていたが、このJS入門の解説がかなり長ったらしく、 文章を読むのが苦手な人には向いていないなぁ、と思っていた。
それよりももっと触って慣れる感じの内容にしたいな、と思っていたので、kotlinで知らない人向けに書き直した。 まぁまぁ良く書けたんじゃないか。
ついでにラムダ式の解説も書いた。
これで関数周りは割と十分な所まで解説出来たかな、と思う。
あとは
あたりを教えたら言語の基礎は終了ってことでいいかな。
解説を見ていると、継承だけ乗り越えればあとは軽い補助くらいで自習出来そうだ、と思う。 ということで継承の解説を作り始め。
object宣言のあたりも解説が要るとは思うが、逆に言えばクラスの継承とobject宣言のあたりの解説が終われば、 あとはリファレンスで学習出来るのでは無いか。
メモ: ANBERNIC なんかAndroidでパッドがあるような安いゲーム機的なヤツ。
なんか数独アプリとかずっと遊べるようなの作るのがいいかなぁ、と思って、 そもそも数独の生成ってどうやるんだろう?と思ってググっていたら、以下を発見。
ナンプレプログラムの作成-答えの作成-ナンプレ京(数独)無料パズルゲーム
これはロジカルにもわかりやすいし数学的にも面白いので、このやり方でやるのがいいかもしれない、と思った。
メモ: opensudoku/OpenSudoku at master · romario333/opensudoku オープンソースの数独実装。カスタムビューだった。
どうも教えていて、プログラムを書く量が少なすぎる気がする。Androidの入門はそういうものではあるのだけれど、 そこの次のステップとしてそこそこの長さの何かを書きたい気がする。
c-lessonくらいの何かでもうちょっと難度が低いものを書きたいと思うのだが、 Androidといえばどういうものがいいんだろう?
なんか自分でクラスを作るような課題を用意したいんだよなぁ。なんかいいの無いだろうか?
そろそろツアーでもやってもらって、分からないあたりを説明するか、とやってもらうと、思っていたよりも苦戦する。 章立てというか文章の構造を理解して整理する、みたいなのがあまり出来ないようで、 マインドマップを教えてそれを元に内容を議論する練習をしたりする。 これはプログラム教室なのか?という気もするが、まぁいいだろう。
話してみて、分から無さそうな所などを補助教材として解説を作ることにした。
実践編もだいぶ終わりが見えてきた。ここから先は
の二本立てになるのかなぁ、と思っている。
前者は何かまともな本を読むのに必要な土台を作る(クラスとかの説明とか)でいいかなぁ、という気がするが、 まともな本があんま無さそうなんだよな。どうしたもんか。
後者に関してはAndroid開発者でも知っているものもあれば知らないものもある、という感じになっていくゾーンなので、 全員が知っていなくてはいけない最低限のヤツとは違うよな。 この辺をどのくらい用意するべきかは悩ましい所でもある。
そんな難しい訳では無いが簡単でも無い、NFCだとかGPSだとかいったライブラリ系もどっかでやる必要はある気もするが、 どこにどういう形で入れるかは悩ましいな。
ナビゲーションバーを作る事にする。いろいろ試したが素直にminimaをカスタマイズする事に。 まぁまぁの仕上がり。>GithubPages
ファイル保存はいろいろ考えた結果、ライブラリ的なコードを提供して使ってもらう形に落ち着いた。 バージョン的にAndroid 10以上は結構事情が違うが、現時点で9以下を切り捨てるのはまだ早いので、過渡期と割り切って一番楽な手段にしておいて、API切ってあればあとは直せばいいでしょう、的なスタンス。
あとはテキスト処理の解説書いて出来るようになれば、実際にアプリ作り始める所まで行くな。
夕方はあおぞら教室開催。3回目?という事である程度は慣れてきたし、やってる側もだいぶプログラムっぽい内容にはなった。 一番進んでいる人は定期開催前からなので5回目くらいの進捗だが、実際のアプリ作り始めるまであと2〜3回って所までは来ているな。
台風が逸れて水曜の夜は普通に開催出来そうなので、毎週水曜夜開催のあおぞら教室をやるべく準備を進める。
コンテンツとしてはDateオブジェクトについて簡単な説明をして、data classの説明をしている。 これで投稿日を持つdata classを作ってListViewで表示出来るようになる。
あとはファイル保存とテキスト処理が出来れば実用的なCRUDアプリを作り始められるな。 そこまで行けばいろいろ作りながら出てくる要素を説明していけるので、進め方も楽になる。
ListViewに挑戦、の表示編まわりの動画を一通り揃える。 ListViewに挑戦、の編集編も少し書き足す。
ここまで終われば、Android側としては、あとはメニューとか複数Activityとかの話を順番にやっていくだけだな。
むしろプログラム言語の勉強の方で関数とかに取り掛かる必要がありそうだ。 という事で関数の問題を幾つか作ってみた。 まぁこの位から先は実際に使っていく事で慣れていこう。
Listに複数要素を持たせるのに、data classくらいは説明しておきたいな。