スッキリわかるPython入門 読了

book.impress.co.jp

ひさびさにスッキリシリーズを読んだ

プログラムの勉強はじめた最初の最初はスッキリJava3冊読んで、
プログラムの基礎の基礎を学んだ。プログラミング全くわからない初心者に
すごくわかりやすい内容で、いまでもスッキリJavaには思い入れが深い。
そのあとプログラマに転職してからもスッキリシリーズはSQLC言語を読んだ。

今回のPythonもとてもわかりやすい内容だった。

プログラムがすごく書きやすい

実際のWebアプリとか開発するためにはモジュールとかクラス分けとかあるのだろうけど、
基礎の基礎ということでPythonの文法が学習できた。Javaと比べてすごく記述量少ないし、
可読性よし。Javaが読めればとりあえずPythonは基礎の文法だけ理解しとけば
プログラム読むのに苦労しないと感じた。
最近AtCorderに手を出し始めたけど、ググると結構Pythonでの回答例を記載したブログが多い。
自分はC++でチャレンジしてるけど、Pythonの回答例でもある程度は読めるようになった。

スプレッドシート操作の目的で読んだ

いまPythonでやりたいことって特にないけれど、自社待機で新しい技術身につけないと
もったいないし、次につながってかないなと思ってPythonに手をつけた。
ちょうどVBAの基礎をある程度理解してきたので、せっかくだし同じようにExcelなんかの操作として
Pythonできるようになれたらいいなと思ってまずは基礎の学習でスッキリPythonを読んだ。

次はExcel操作のPython本とか読んでみようと思ってたのだけれど、
AtCorderもっと解けるようになりたいという気持ちのが強いので、
C++の基礎やアルゴリズムの勉強をしばらくすることにする。

またやる気が出てきたらPythonの勉強に手をつける。

jQueryクックブック 読了

www.oreilly.co.jp

クックブックだった

すごく当たり前の話クックブックだった。
jQueryを少し書くようになったし、入門書も以前に一度読んでたから
ちょっと難しい本読んでみようと思って読んだ。
結果、むずかしすぎた。オライリーだししょうがないけど
内容追っててやっぱ理解できない箇所がたくさん。
PowerShellクックブックと同じく、自分で興味の出たとこだけ
抜き出して拾い読みした。

もう一度初歩に帰ってみるべきか迷った

ちょっと読むには難しすぎる内容でもっと簡単な参考書を
1つ読んでみるほうが良いかと感じた。
ただ、いまこの本読んでjQueryをこれ以上勉強する
モチベーションはないのでまたモチベーションあるときに勉強する。

ちょっと難しい本を読むモチベーションがなくなってきたので、
ほかの言語だったりの簡単な入門書に手を付けてみようと思う。

脱入門者のExcel VBA 読了

bookclub.kodansha.co.jp

前作に引き続き読みやすかった

入門者のExcel VBAは読んでいて少し物足りなさを感じたけど、
こちらは続編として少し内容も難しくなっていて、 参考になることたくさんだった。
プログラミング言語少しは覚えてるから理解しやすいのもあるけど
とにかく書いてる方の説明がわかりやすい。
少し回りくどく書いてるとこもあるように思ったけど、
プログラム触ったことのない方への配慮だと感じた。

VBAを1から作る上で必要となる知識を学べた

前作読んでからいくつか自分でVBA作ってみたけど、
VBEの扱いとしてコード補完あまりしてくれないなとか
デバッグわからんとかなってた。
コード補完に関してはCtl + spaceでできることネットで調べて
便利に使えるようになった。
デバッグの仕方はネットで調べなかったけど本書に
やり方詳しく載っていてすごく参考になった。

自作したプログラムを改修してみてまた次読みたい

次は、入門者を読んでから自作したプログラムを、
今回読んで学んだことを改修してみることにする。
そのあとに実例で学ぶVBAも読んでみたい。

ドメイン駆動設計入門 読了

www.shoeisha.co.jp

Kindleの半額セールで特にまだ勉強するつもりなかったけど、
ついポチってしまってから半年たってから読んだ。

モチベーションは積読の解消として読み始めたけど、
実際にソース書きながらドメイン駆動設計の触りが学べて
予想以上に勉強になる内容ばかりだった。
開発経験浅いけど、わかりみの深いお話ばかりだった。

今後に活かそうと思った言葉

  • 人間は間違いを犯す生き物
    尊敬してるプログラミングの先生にも言われた言葉。
    だからこそコンピュータにやってもらうし、その指示を出すためのプログラミング。

  • 特定の技術に依存することは危険
    レガシーコードの案件を1年経験して身に染みた。
    独自フレームワークとか特定のDB製品に依存したSQLとか。
    もう現場離れてしまったけど、自分の努力次第で改善に貢献できる箇所もあったのではと感じる。

  • システムは利用者の問題を解決するためのもの
    上の2つも当たり前なんだろうけど、これも当たり前のこと。
    でありながらたぶん開発に集中してるとだんだん薄れてく。
    開発経験長い方だったらそんなことないかもしれないけど、
    自分は利用者視点の意識持ちながらコード書いてることほとんどなかった。

下流しか経験してないのもあるだろうけど。
実際に利用する方とお話しながら自分でプログラム書くってのやってみたい。
時間足りなくなりそうだけど。

正直積読の解消ってモチベーションで読むものじゃなかった。
ソースの内容とか設計の触りの部分はある程度理解できたつもりだけど、
ソース写経するだけで実際に実行して確認とかしなかったし
全体の触りを理解したくらいで読了してしまった。

まだDDDをちゃんと勉強しようとは思っていないけど、
いずれ必要になったら再読したい。

というより自分の場合、まずデザインパターンもう少し勉強して
ポリモーフィズムの理解を深めないといけないと、本書読んでみて感じた。

Kotlin勉強してはまったこと

前置き

Webアプリもほんの少し作れるようになったので、
Androidアプリに手を出してみた。はじめてのKotlin。
落とし穴がいっぱい。これからも学習してみて、
嵌まってきたら定期的にこちらにアップしようと思う。
あと用語も間違えてるの気づいたらたまに修正する。

継承可能なクラスの作成

Kotlinで作成するクラスは、デフォルトで継承不可とのこと。
継承可能にするためにはopenモディファイアなるものをつける必要がある。

継承可能なクラスを作成する (open, abstract, override) | まくまくKotlinノート

下記のような感じ

// classの前にopenつけてる
open class TodoItem: RealmObject(){
    @PrimaryKey
    var id: Long = 0
    var dateTime: Date = Date()
    var todo: String = ""
}

Realm Databaseと一緒に使ったときに嵌まった。
上記コードはRealmのモデルクラスになるのだけれど
openつけないでビルドしたらなんか失敗した。
↓こんなエラー

Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

エラーコードでググってもよくわかんなかったけど、
参考書のソースコードと比べてみてやっとopenつけなきゃいけないことに気づいた。

ビルド中にRealmモデルクラスを継承したJavaクラスを作ってる模様。
appname_TodoItemRealmProxy.javaみたいなクラスができてた。
自分で継承してなくて気づかなかった。

画面パーツにidつけ忘れた

たぶん写経くらいでしか嵌まることないんだけど。
下記のようなソースではまった。

class MainActivity : AppCompatActivity() {
    private lateinit var realm: Realm
    private lateinit var adapter: TodoRecyclerViewAdapter
    private lateinit var layoutManager: RecyclerView.LayoutManager

    override fun onStart() {
        super.onStart()
        realm = Realm.getDefaultInstance()
        val realmResults = realm.where(TodoItem::class.java)
            .findAll()
            .sort("id", Sort.DESCENDING)
        layoutManager = LinearLayoutManager(this)
        // このrecyclerViewではまった
        recyclerView.layoutManager = layoutManager

        adapter = TodoRecyclerViewAdapter(realmResults)
        recyclerView.adapter = this.adapter
    }
}

変数使うときKotlinではvarとかvalで宣言してるけど、
recyclerViewっていう変数は特に宣言してない。参考書の写経してて、
なんで宣言してない変数名があるんだ誤字脱字か?
と勝手に怒って小一時間くらい悩んだ。

結果、原因はactivity_main.xmlのidつけわすれ。
画面に表示するボタンとかレイアウトとかパーツごとに
idをつけといて、そのidでパーツ特定してKotlinで操作するのだけど、
そもそも「recyclerView」というidを該当のパーツにつけ忘れてた。

変数の宣言は全然関係なかった。参考書はすごく良書です。
ちゃんとidつけててbuild.gradle(:app)に

plugins {
    id 'kotlin-android-extensions'
}

って書いとけばAndroid Studioのコード補完に出てきてくれる。

作ればわかるAndroidプログラミング 読了

www.shoeisha.co.jp

はじめてKotlinに触れるのに最適

ただし、開発経験は少しあったほうがよいと思った。
個人的にはアプリ作成しながら様々なパーツの使い方学べてすごく良書だった。
ただ、Amazonの評価少ないし、読み始める前は本選びに失敗したかと思った。

最近の言語だから、本の情報が古くなるのは仕方ないし
そこらへんは自分でネット検索してコード修正する。
バグが発生したらデバグしてログ見て問題箇所特定してコード修正する。
少し開発経験あると、本に載ってない情報の検索やバグ解消もスムーズにできるかと感じた。

ちなみに自分は全然経験不足で本読みながら何度も嵌まった。
Javaの開発経験1年になったけど、Kotlin触れるの初めてで、デバグしてても
Kotlin側のコードでバグだったら修正できたけど、Java側に行っちゃうとよくわからん。

結局筆者のサンプルコードと比較したりしてなんとかアプリ完成させられた。
あと最後の音を鳴らすアプリは、自分で作成した.midファイルが鳴らず、
サンプルコードから取得したらちゃんと鳴った。
ファイルの違いがわからん。

サンプル修正して自作アプリを作っていきたい

サンプルアプリ作りながら学ぶのは、すごく楽しかった。
自分のスマホで動かしてみるのがすごく楽しい。
JavaでWebアプリ作成するのより敷居も低いし、いくつか自分でアプリ作成してみることにする。

新しい言語を学ぶこと

ここ1カ月自社待機で暇なので、いろいろ手をだしてるわけだけど、
いろいろな言語(といってもKotlinとPowerShellVBA)を学んでみると
プログラミング言語って結局はコンピュータに命令をすることっての思い知らされる。
しばらくはKotlinに触れてみて、また違う言語を学んでみたい。

入門者のExcelVBA 読了

bookclub.kodansha.co.jp

転職前に勉強したけど全然理解してなかった

プログラマ転職する前、営業で日中はずっと外出、
定時過ぎてから会社戻って事務作業ってこともよくあった。
子どもできてからはできるだけ早く帰りたくて、
事務作業が早く終わるようにWindowsのショートカットや
Excelの便利な関数なんかをよく勉強してた。
その中で、VBAにも手を出したけど、正直使い方あまりよくわからず。
それがだいたい3年前くらいのこと。

改めて学習するとプログラミング言語だった

今回、暇を持て余していろいろ身の回りを自動化しようと思い、
PowerShellVBAに手を出した。
改めて学習してみると、そっかVBAってプログラミング言語か。
以前勉強したときはちんぷんかんぷんだったけど、
プログラマなってみて改めてコード見てみると、
結局ifとforでなんやかんやしてるだけでJavaと変わらないじゃん。
VBEは予測変換とかあまりしてくれないし、
ツールとしていまのところ好きになれないけど。

日常で使うExcelシートでどんどん活用したい

1日ちょっとで読み切れた。プログラム初めてでもすごくわかりやすい内容だと思う。
以前にちゃんと理解できなかったのは、参考書選びを失敗したのもあるのかな。
簡単なプログラムはどんどんかけそうなので、量産して自分の技術にできるようにする。
ひとまずは会社の出勤簿をできるだけ手書き減らせるようにVBA書いてみる。