18 Sep 2017, 02:24

Java本格入門(モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで)を読んだ

仕事でJavaをつかうことになった。

2年間Javaを使ってなかったので、忘れてしまった。

さびついた頭脳に磨きをかけるために、Java本格入門を読みました。アクロ本というらしい。

特徴

Javaの文法がコンパクトにまとまっている

Javaの文法を外観できます。

Java8まで対応しているので、ラムダ式やストリームまでカバーしています。

また、各Javaのバージョンごとの説明が詳しいです。

裏タイトル: 35歳からのJava入門

この本の裏タイトルは、35歳からのJava入門です。

世の中には、プログラマ35歳定年説というものがありますが、私はこれは嘘だと思います。

その根拠は、新人研修で習った知識で10年開発をやってきて、

時代の流れについていけなくなった人を指すのだと思います。

学び続ける人に定年はないです。そして、この本は、Java5,6を勉強して、

そのまま月日が経ってしまった、人に対する視点で書かれています。

新しくなったJava7,8の仕様がふんだんに紹介されています。

Javaの開発について書かれている

Javaの文法のみに終始している本とは違い、この本には、開発でつかうための知識が書かれています。

具体的には、(ビルド、javadoc, JUnit, FindBugs, Jenkins, JSON, Log…)

などの知識がてにはいります。実践的なJavaの入門書です。

ミッションクリティカルな配慮

秀逸なのは、例外についての説明や、並列処理についての説明です。

ここは、ミッションクリティカルなプロジェクトの経験を元に、とても丁寧に解説されています。

どこでどんな例外を捕捉するべきか、どんなライブラリを使うとスレッドせーフなプログラムになるか、

読んでいて知らないことが多いこのあたりの領域は目にウロコです。

感想

Java7,8の知識が知りたかったので、この本は当たり。

Java7,8ではこういう書き方があるということが書かれている。

自分は、一応 Java8 SE Silverの資格と2年間のJavaの開発経験があるので、

初心者ではない。そんな自分にとっては優しすぎる本は物足りない。

この本は、初心者以上の中級者をターゲットにして書かれているので、

自分にはちょうどよい難易度だった。

また、Java8で追加されたラムダ式やストリームについてもよくまとまっているので、

何度も参照して使いこなしたいところだ。

デザインパターンとか載っているけれども、これはおまけかな。

本格的に学ぼうとするなら、他の書籍をあたった方がいい。

とにかく、Javaに関する知識が盛りだくさんなので、

机の脇においておいて、困ったらいつでも参照できるようにしたい。

19 Apr 2017, 11:22

TensorFlow で学ぶディープラーニング入門を読んだ。Kaggle で実践してみた。

TensorFlow で学ぶディープラーニング入門~畳み込みニューラルネットワーク徹底解説を読みました。

概要と感想

この本は、 手書き文字の認識処理を MNIST データを利用してすることが目的。

また、Tensorflow で 畳み込みニューラルネットワーク(CNN)を実装することが目的。

章をおうごとにソースコードがパワーアップしていき、認識精度が上がっていくところが面白い。

  • 2 章: Softmax をつかった多項分類器
  • 3 章:
    • 2.単層ニューラルネットワーク
    • 3.多層ニューラルネットワーク
  • 4 章: 単層 CNN
  • 5 章: 多層 CNN

本のはじめににも書いてあるけれども、この本は TensorFlow の公式 Web サイトのチュートリアルで 「Deep MNIST for Experts」として紹介されているものをほぼそのまま採用しているそうだ。

私は、公式サイトは読んでいないから差分がどうこういうことはできないけれども、 数式を交えて丁寧に解説されていて、わかりやすいと感じた。

なお、Jupyter Notebook が提供されていて、 自分の環境で動かしながら勉強できるところがとても気に入った。

この本で提示されている「機械学習の 3 ステップ」が心に残ったので、引用したい。

[sourcecode language=”text” title=”” ]
①与えられたデータを元にして、未知のデータを予測する数式を考える
②数式に含まれるパラメーターの良し悪しを判断する誤差関数を用意する
③誤差関数を最小にするようにパラメーターの値を決定する
[/sourcecode]

TensorFlow について、この本ででてくるコードは毎回似たようなことをしているので、 はじめは困惑したのだけれども、繰り返し見ているうちにすらすら意味がわかるようになった。 入門レベルとしては、十分力がついたと思う。

環境構築は Anaconda をつかった

この本には、Docker をつかって環境構築をするように書いてあったのだけれども、 自分は、Anaconda を利用して読みめてみた。

ツールのバージョンも以下で読んだ。

  • Anaconda 4.3.16
  • Python 3.6
  • TensorFlow 1.0.1

ところどころ元のソースコードに修正が必要になったけれども、全て問題なく動作した。

自分がした修正は以下のリポジトリにあります。

Kaggle で実力試しをした

2017 年現在、Kaggle で MNIST をりようしたコンペが主催されている。

私は、各章を読み終わるたびに、理解度を深めるために Kaggle の MNIST のコンペに挑戦した。

これはとてもよい、また楽しい復習方法なので、ぜひオススメしたい。

ただし、この本を参考に実装した結果は、1150 位で 上位 1000 位以内にも入れないけれどもね。

04 Apr 2017, 06:25

ゼロから作る Deep Learning を読んだ

Deep Learning の初歩(ニューラルネットワーク)を学ぶために, 遅ればせながら、ゼロから作る Deep Learning を読んだ.

読んだ理由

なぜ読んだかというと、この本がバカ売れしていて、すこぶる評判がよいから。

今現在(2017.4)、オライリー 5.5 万部売れているらしい。 エンジニアの人口が 90 万人と推定すると、5,6%の人が 20 人に 1 人が読んでいる。

みんな読んでいるので自分も読んでおこうというのが動機。 coursera の Machine Learning の講座で ニューラルネットワークが出てきて追い詰められていたという理由もある。

内容

誰におすすめか

なぜこんなに売れているのかというと、 高校生程度の数学の知識でもニューラルネットワークが理解でき、 さらには Python でニューラルネットのコードが書けるからだ。

  • Python 初心者だ
  • numpy つかったことない
  • 数学苦手

そんな君も大丈夫!すごくわかりやすく初歩の初歩からかかれている。

また、ゼロから自分で作るからこそ、知識を深く吸収することができる(と著者がいっている)。

ディープラーニング(深層学習)に入門

ディープラーニングのニュースが毎日世間を騒がし、 最近の風潮としてエンジニアならとりあえず機械学習かじっとけみたいなのもある。

この波にのっからないわけにはいかない。しかし、どっから取りかかればいいのだろう。 そう迷っているひとが五万といるからこそ、この本がとても売れているのではないかと思う。

ディープラーニング(深層学習)の入門書としては、この本が今のところ一番。

目次

目次は以下の通り。

1. Python 入門
2.パーセプトロン
3.ニューラルネットワーク
4.ニューラルネットワークの学習
5.誤差逆伝搬法
6.学習に関するテクニック
7.畳み込みニューラルネットワーク
8.ディープラーニング

本書は、pyhton と numpy ライブラリのみをつかって、 ニューラルネットワークと畳み込みニューラルネットワーク(CNN)をゼロから実装していく。

逆にいえば、CNN 以上のことは、RNN, LSTM, DCGAN, DQN などはかかれていない。

5 章までニューラルネットワークが続く。 6 章では、パラメータ更新の最適化法、バッチ正規化、正則化などハイパーパラメータ関連のことがかかれている。 7 章では、畳み込みニューラルネットワーク(CNN)を豊富な図と、丁寧な説明で紹介される。 8 章では、ディープラーニングの最新動向が説明される。

私は、coursera Machine Learning のバックプロパゲーションを理解するために 5 章までを 2 回読んだ。 そのあと読むのを止め、時間に余裕ができてから 6,7,8 章を読んだ。

感想

わかりやすいわかりやすいと書きつつ、実は理解できないところもあった。

計算グラフによる誤差逆伝搬法は、2 度読んでようやくなんとなくわかった。 が、誤差逆伝搬法はこっちの本で数式からのアプローチですんなりふに落ちた。

ちなみに、筆者が強く影響を受けている計算グラフによる説明動画は以下。 見てみたけど、英語なのでよくわからない。 日本語で、ニューラルネットワークに関してまとまっている本書はありがたい。

また、CNN の実装も理解できなかった。ライブラリに依存しないということだが、 im2col という謎のユーティリティが出てきて、これが理解できなかった。 もう一度、CNN の章については読み返す必要あり。

6 章や 8 章で、最新の手法が紹介されているところもよいと思った。 また、このディープラーニングという分野は変化が激しいのだなと感じた。

これからどうするか

ニューラルネットワークについてはだいたい理解できた。 いろんな教材であれこれ品を替えて触れているので、さすがに理解できてきた。

今後の目標は、CNN を理解すること。次は、この本を読もうと思っている。

TensorFlow を使って CNN を理解する本だ。 CNN の実装の箇所を読みながら、難しいところは自作するよりもライブラリを使ったほうがいいなと感じた。 引き続き、Deep Learning の知識を深めていきます。

29 Mar 2017, 13:01

ディープラーニングがわかる数学入門を読んだ

ディープラーニングがわかる数学入門を4章まで読んだので、感想を書きます。

5 章の CNN はとりあえず時間をおいてから読んで、追記します。

これを読むまで、バックプロパゲーション(誤差逆伝搬法) がわかったようなわからないような、モヤモヤしていた。

  • coursera Machine Learning
  • ゼロから作る Deep Learning
  • Udacity Deep Learning Nanodegree Foundation

この本でようやく、バックプロパゲーションがなにをやっているのかわかった気がする。

数列の漸化式と初めから言ってくれよ。

どんな人にオススメか

目次はここから。

  • ディープラーニングがわかる数学入門:書籍案内|技術評論社

    • ■ 1 章 ニューラルネットワークの考え方
    • ■ 2 章 ニューラルネットワークのための数学の基本
    • ■ 3 章 ニューラルネットワークの最適化
    • ■ 4 章 ニューラルネットワークと誤差逆伝播法
    • ■ 5 章 ディープラーニングと畳み込みニューラルネットワーク

    ベストセラーになったゼロから作る Deep Learning は平易だったけれども、 それと同等、それ以上に平易なのがこの本。

  • ディープラーニングに関心のある学生,社会人。
  • ディープラーニングの勉強のために数学の基礎固めをしたいけれども、 なにから始めればいいか分からない人。
  • ゼロから学ぶ Deep Learning を読んで、数理をもう少し深めたいと思った人。
  • 逆誤差伝搬法を(計算グラフではなく)数式から理解しようとしたけど挫折した人。

内容

題名はディープラーニングだけれども、 ほとんどがニューラルネットワークの理解のためにページが割かれている。 最終章で 畳み込みニューラルネットワーク(CNN) の説明がある。

よい点

  • 説明がとても初心者にやさしい。
  • 図が豊富。
  • 例題が多く、簡単でわかりやすく理解が深まる。
  • できるだけ汎用的な記号の表記方法を使っているところ。
  • Python とか Ocatve とか、プログラミングは出てこない。
  • Excel を通じて各値がどう変化するか目で追えるところ。

(LibreOffice で値の確認はできた。マクロ使ってるだけで、VBA とかはつかっていないから)

どんなの数学が出てくるか

ニューラルネットワークの理解に必要な数学のみが厳選されて丁寧に説明されている。 具体的には、第 2 章の目次をみてもらうと分かる。

  • 1 ニューラルネットワークに必須の関数
  • 2 ニューラルネットワークの理解に役立つ数列と漸化式
  • 3 ニューラルネットワークで多用されるΣ記号
  • 4 ニューラルネットワークの理解に役立つベクトル
  • 5 ニューラルネットワークの理解に役立つ行列
  • 6 ニューラルネットワークのための微分の基本
  • 7 ニューラルネットワークのための偏微分の基本
  • 8 誤差逆伝播法で必須のチェーンルール
  • 9 勾配降下法の基礎となる多変数関数の近似公式

-10 勾配降下法の意味と公式 -11 勾配降下法を Excel で体験 -12 最適化問題と回帰分析

著者の 涌井 良幸さん、涌井 貞美さんは, 共著で統計関係の本を多数書いているようなので、わかりやすさはその実績からも伺える。

感想

意外だったのは、機会学習というと統計学が重要になるけれども、 この本には統計はほとんど出てこない。回帰分析が最適化の例として出てくる。

解析学の知識が多い。

行列や、シグマさえも、なるべく使わないで説明してくれるのだ!ベクトルは使う。

個人敵にハッとさせられた説明は、

  • コーシー・シュワルツの不等式は勾配降下法の基本原理。
  • 逆誤差伝搬法は、数列の漸化式。
  • 自ら学習するということは、重みとバイアスを「最適化」すること。

    ディープラーニングがわからない人のための最後の一冊として オススメです。

    分かる人には、必要ないかもしれない。

07 Dec 2016, 09:22

ウォートン・スクールの本当の成功の授業を読んだ

ウォートン・スクールの本当の成功の授業 - リチャード・シェル を読んだ。

本の内容

本書は、二部構成になっている。それぞれの部で、以下の質問の答えを自分で導く。

  • 成功とはなにか?
  • どうやって成功するか?

目次

各概念を説明するためのエピソードが多い印象を受けた。結論を知りたければ,各章の要点は、ほんの末尾にまとめられているので、そこを読むのがよい。また、Amazon の紹介文も大変参考になる。ここでは、概要は省略。

はじめに 自分の道を見つける「2つの大きな質問」
第I部 第1の大きな質問「成功とは何か?」
第1章 成功とは「自分らしい人生」を選ぶこと
第2章 成功とは「幸せ」になること 
第3章 成功とは「地位・名声・富」を得ること
第4章 成功とは「やりがいのある仕事」
第 II 部 第2の大きな質問「どうやって成功するか?」
第5章 素質──「うまくできること」を見極める
第6章 モチベーション──自分に火をつける
第7章 自信──リスクを恐れず前に進む
第8章 集中──情熱・想像力・直感・理性を集中させる
第9章 信頼性と対話──人を動かす
おわりに それぞれの道へ

感想

成功するとはなんなのか、それは自分できめなければいけない。これは衝撃を受けるとともに、もっともだと思った。自分の抱く成功というものが、マスメディアによって植え付けられたものだと気づいた。

大学生のとき、人生の意味について悩んでいた。色んな本を読み、色々な考え方に触れたものの、しっくり来るものはなかった。そんなとき、カウンセラーは言った。「人生の意味は自分で決めなければいけません。人が決めたものは信じられないでしょう」そのとおりだ。自分で決める、これが大事なことなんだ。成功に関しても、富や名誉ではなく、自分自身で決めた成功を全うすることが大事なのだ。

現在会社を休職していて、将来が全く見えない不安な日々が続いていたので、成功への道筋が見えたことで、生きることへのやる気が出てきた。人間は、目標があると、頑張れる。本書は、生きるチカラを与えてくれる本だ。

2 つの質問に対する自分の答え

成功とはなにか?

  • 数学とプログラミング(機械学習)を通じてお金を稼ぎ、テクノロジーの発展に貢献すること。
  • 英語を駆使して、世界で活躍するソフトウェア開発者になること。
  • 常に努力を怠らず、目標を持って仕事に情熱を燃やすこと。
  • 幸せな家庭を築くこと。

どうやって成功するか?

以下のことをつねに心がける。

  • 小さいことを積み重ねることが、とんでもないところへ行くただひとつの道
  • スピードよりも着実な理解を優先する
  • やる気がでないときは勉強する意味を考える
  • 達成よりも学習の過程を重視する
  • 屈辱をモチベーションに変える
  • この世で目標を達成するために与えられた時間には限りがある
  • 才能は努力で克服できる、努力は必ず報われる。努力次第でいくらでも上達できる
  • 他人と自分を比較しない、自分は必ず目標を達成できる。自分を信じること

SelfCheck に対する自分の回答

第 1 章: 6つの演習

私は、石工を一番の幸せな人生に選んだ。これは、内発的動機だけで十分にやりがいを感じられるということ。第二に、プロテニスプレーヤーを選んだ。これは、認められた人生でたゆまず努力する人生。逆に6番目に選んだものは、教師。高い水準の成功を成し遂げるために貢献する人生。他人への貢献が気に入らなかった。

第 2 章

  • 瞬間的幸せには、セックスを選びました。
  • 総合的幸せには、数学とプログラミングをつかってお金を稼ぐことを選びました
  • 魂の経験には、幸せな家庭を築くを選びました。

第 3 章: 宝くじの演習

100 億 円 を 手 に し たら、自分はどう行動するか? 私ならば、大学に再入学し機械学習の研究を一日中、ずっとしていたい。

第4章

この章で、自分にとっての成功を定義する。以下のように定義した。

  • 数学とプログラミング(機械学習)を通じてお金を稼ぎ、テクノロジーの発展に貢献すること。
  • 常に努力を怠らず、目標を持って仕事に情熱を燃やすこと。
  • 英語を駆使して、世界で活躍するソフトウェア開発者になること。

  - 幸せな家庭を築くこと

第5章 性格の強みテスト SAME

社交的スタイル 行動傾向 思考傾向 感情的気質


内向性 100 計画型 50 実用型 50 情熱型 50 協調型 50 張り詰め型 50 分析型 50 現実型 100 平和型 50 決行型 50 革命型 50 感情抑制型 100 率直型 100 慎重型 50 特化型 100 ストレス虚弱型 50

  • 大学 教授 ─ ─ 内向 型、 知識 型、 分析 型、 特化 型 が近い。

第 7 章

自信 の セルフ チェック   心 の 支え と なる 言葉 を くれ た 人

おじいちゃんに、お前なら大学に合格できると言われた。

自信 の セルフ チェック 2 自信 を つけ て くれ た 経験

うつ病による休職体験、その克服。

第8章

目標 達成 プロセス の セルフ チェックあなた 自身 の 目標 を 振り返る −>パス 思いつく目標達成の体験がないので。

06 Dec 2016, 05:31

SoftSkills を読んで思うこと

SoftSkills ソフトウェア開発者の人生マニュアルを読んだ。

書評は Amazon によく書かれているので、そちらにゆずる。

この記事では、自分、が分章を読み、なにを考えたかを書いていく。

自分を事業者だと思う

自分 の こと を 事業者 だ と 考える よう に なる と、 自分 という 事業 の ため に 優れ た 判断 を 下せる よう に なる。 自分自身 の 業績 とは あまり 関係 の ない「 いつも の 給料」 を もらう こと に 慣れ て しまう と、 自分 は 会社 の 従業員 に 過ぎ ない という マインド セット に 簡単 に 染まっ て しまう。

マインド セット を、 雇用 契約 で 縛ら れ た 奴隷 から、 自分自身 の 事業 を 経営 し て いる 事業者 に 切り替える.

サラリーマンの自分には痛い言葉だ。 自分は、いつもの給料をもらうことに慣れている。 事業主などつゆにも考えたことがなかった。 自分の生涯は全て会社が握っていると思っている。 なぜか?それはは、サラリーマンでないという安定が怖いからだ。

目標を定める

今 こそ 目標 を 決め なけれ ば なら ない。 明日 では なく、 ましてや 来週 では なく、 今 すぐ 決める の だ。 はっきり と し た 目標 を 決め ず に 踏み出し た 一歩 一歩 は、 すべて 無駄足 で ある。 キャリア の 目標 を 決め ず に、 ランダム に 人生 を 歩ん で いっ ては なら ない。

5 ~ 10 年 後 の 自分 を どう し たい のか。 少し 時間 を かけ て、 その こと について 考え て みよ う。

自分は、機械学習を専門とする職業に転職して、専門的な仕事をしたい。 今は、なにも知識がないけれども、5~10年かけて機械学習を学習すれば、 いつかは転職のチャンスがやってくるはずだ。

その前に TOEIC900 を取得したい。 なぜ、900 なのか?それは、面接官に努力できる人ということをアピールしたいがためだ。 860 よりも、900 のほうがインパクトがある。だから、900 を目指すのだ。 早く 900 を取って、TOEIC を卒業する。 英会話と機械学習の勉強にシフトする。2年以内に 900 を達成して、 5 年以内に機械学習と英会話の基礎を身につける。 5年後から先は、転職活動を開始する。それが、私の目標だ。

専門分野を確立する

専門 特化 の 法則: 専門 性 が 高けれ ば 高い ほど、 チャンス の 数 は 減る。 その 半面、 チャンス を 獲得 する 可能性 は 高く なる。

最初 に はっきり さ せ て おく べき は、 どんな タイプ の ソフトウェア 開発 を し たい か

多く の プログラミング 言語 を 使える よう に し て おく と、 キャリア の 上 で 役立つ だけで なく、 ひとつ の 限ら れ た テクノロジー、 ひとつ の プログラミング 言語 しか 知ら ない 人々 よりも、 はるか に 貴重 な ソフトウェア 開発 者 に なる こと が できる。 しかし、 何 でも 屋 として 自分 を 売り込む のは とても 難しい という こと なの だ。

まず 専門 特化 に 取りかかり、 あと で 多才 に なれ ば いい。

自分の専門分野はなんだろうか? 組み込みソフトの会社に所属しているが、特別組み込みソフトに詳しいというわけではない。 今まで、C 言語、Ruby, Java で開発を行ってきたが、どれも得意とはいえない。 つまるところ、自分には専門分野がない。

そのかわり、いろんな言語を学んできた。MOOC を利用して、 2ヶ月に1つは新しい言語に挑戦していた時期もある。 しかし、そのどれもが、今コードをかけるかといわれると、書けない。 本気で取り組んだわけではないので、忘れてしまった。

たくさんの知識に触れれば、自分の興味がある分野が見えてくると思っていた。 これから、市場価値を出すには、専門分野を持たないといけない。 関数型言語や機械学習に興味がある。これを自分の専門領域にしたいと考えた。

マーケティングをする、自己をブランド化する

偉大 な ミュージシャン と スーパースター の 本当 の 違い は、 マーケティング に 過ぎ ない。 マーケティング は 才能 を 数 倍 に する。 マーケティング が よけれ ば よい ほど、 才能 に 掛け られる 数値 は 大きく なる。ソフトウェア 開発 者 で ある あなた が、 この 重要 な スキル を ぜひとも 学ば なけれ ば なら ない のは その ため だ。

マーケティング を 一言 で 説明 する と、 製品 や サービス と それら を 必要 と し て いる 誰 かを 結び付ける こと

自分 の マーケティング は、 個人 ブランド から 始まる。

すべて の 人々 に すべて の もの を 提供 する こと は でき ない ので、 ターゲット オーディエンス( 顧客 候補) を 狭め、 ニッチ を 生み出さ なけれ ば なら ない。

マーケティングなんて言葉を考えたことすらなかった自分にとって、この主張は衝撃である。 たしかに、スゴイとおもうエンジニアはブランドを持っている。 自分のブランドはなにか?なにもない。これから確立しないといけない。ニッチなものを 。 確立しようと努力しようとした時期もあった。TDD, Clojure, MOOC その全てが途中で終わってしまった。 どうも、自分には忍耐力がないのかもしれない。粘り強く、自分を売り込めるレベルまで、ある分野を極めることが大事。

ブログを書く

定期的 に ブログ を 書く こと を 自分 に 課する と、 コンスタント に スキル に 磨き を かける こと が 義務付け られる こと になり、 自分 の 専門 領域 の 知識 を 最新 状態 に 保つ こと が できる。

多く の 有名 な ソフトウェア 開発 者 は、 ブログ の 成功 から 今 の 名声 を 直接 得 て いる。

ブログ が 成功 すれ ば、 数 十 万 の 人々 に 自分 を 知らせる こと が できる。 ブログ は、 自分 を マーケティング する ため の 方法 として は 安く て 簡単 で あり、 しかも、 自分 の 名前 を 外 に 出す ため に きわめて 役立つ。

たくさん 書く こと だ。 もっとも 大きく 成功 を 収め て いる ブロガー の なか には、 毎日 書く こと を 何年 も 続け て いる 人 が いる。

何 よりも 大切 なのは、 規則的 な スケジュール を 選び、 それ に 従う こと だ。 ブログ を どれ くらい 早く 成功 さ せ られる かは、 頻度 によって 決まる。 少なくとも 週 に 1 度 の 頻度 で ブログ を 書く こと を 強く お 勧め する。

質 の 高い コンテンツ を 書く よう に し なけれ ば なら ない。

自分 の 利益 の ため に なる こと しか せ ず、 他人 の ため に 本当に 価値 の ある もの を 生み出さ なけれ ば、 自分 を マーケティング する ため の 手法 として 正しい こと を すべて やっ た として も、 成功 し ない だろ う。

恥ずかしながら,一年間このブログを放置していた。 技術に触れるのを避け、TOEIC の勉強をしていたからだ。 しかし、私はソフトウェア開発者として生涯生きていく覚悟を決めたので、ブログは更新していきたい。 週一でブログの更新をするように心がけよう。そして、リピーターを再び取り戻そう。

価値のあるコンテンツを配信して、他の人の利益を考えよう。 この書評は完全に自分のことを書いているが・・・

燃え尽き症候群

私 たち は、 新しい もの には 最初 は 熱狂 し、 やる気 が 出 て くる もの だ。 しかし、 時間 が たつ につれ、 それ が だんだん 当たり前 になり、 さらに は 嫌い に なる ところ まで 進ん で しまう こと が 多い。

私 たち の 大半 は、 燃え尽き 症候群 に 陥る こと を もう 終わり だ と 考え て しまう。 その 先 を 見る こと が でき なく なる。 モチベーション や 興味 が なくなっ た の だ と 思い、 そこ から 離れ て ほか の こと をやら なけれ ば ならない。

この 燃え尽き 症候群 の 感覚 は まったく 自然 な こと で あり、 深刻 な 問題 の 兆候 では ない。

何とか し て 壁 を 通り抜ける の だ。

壁 の 向こう 側 にさえ 行けれ ば、 突然 あらゆる こと が 簡単 になり、 モチベーション と 興味 が 蘇っ て くる。 始め た ばかりの 新しい 取り組み では、 モチベーション、 興味 とも 高い 水準 に なる が、 マスター し た もの に対する モチベーシと 興味 も 高い 水準 を 維持 する。

私は、燃え尽きてしまった。技術に興味がなくなり、一年間このブログを放置していた。 しかし、時間がたち、再び技術についての興味が湧いてきた。 燃え尽きは自然なことと書かれていて、魂が救われる思いがした。 自分だけではないのだと、思った。良い文章に救われた。

29 Jan 2016, 05:20

Lisp 脳に洗脳させられる狂気の秘本! Land Of Lisp を読んだ

はじめに

Lisp にもっと慣れ親しみたいと思ったので、Land of Lisp を読んだ.

動機

読んだ理由

<div class="outline-text-3" id="text-orgheadline2">
  <p>
    Clojure をもっとかけるようになりたいのだけれども、 Clojure の本で手頃な本がないので、Common Lisp に挑戦してみた。 同じ Lisp ならば、それなりに得ることがあるだろうと思って。
  </p>
</div>

読むのにかかった時間

<div class="outline-text-3" id="text-orgheadline3">
  <p>
    実は、半年前に一回読んでは見たものの、途中で挫折している。2 度めの挑戦。
  </p>

  <p>
    3 日間でいっきに読んだ。読書時間は、22 時間なり。
  </p>
</div>

内容

Common Lisp についてかかれた本。

Common Lisp 文法を解説し、その文法を利用したゲームを作成する. Web サーバつくったり、SVG の描写をしたり、AI プログラミングをしたりする。

感想

非常に 難しかった。

おバカそうな挿絵に油断してしまった。ものすごく難しい. たしかに、はじめのほうはスイスイ読める。 しかし、後半にしたがってソースが読めなくなった。

とくに、ワンプス狩りとダイス・オブ・ドゥーム。 ここを理解するだけでそれぞれ4時間ずつかかった。 最後の20ページなどは意味不明で読むのを諦めた。

自分で悩んでコードを書くのではなくて書いてあるコードを写経するだけなので、 果たしてこれでコーディング力がついたかというと、ついていない。 (http://landoflisp.com/source.html からコピペできる)

正直、この本に書いてあるようなコードはかける気がしない。 こういうコードをかけるようになると Lisp ハッカーの仲間入りなの かもしれないが、自分には 10 年かかってもかけないようなコードだ。

なんだか、越えられない壁を感じた。

良かった点

<div class="outline-text-3" id="text-orgheadline7">
  <p>
    良かった点としては、マクロをつかった DSL の鮮やかさに気づかされた点. マクロってすごいと思った。
  </p>

  <p>
    それから、関数型プログラミングの聖なる部分と不浄なる部分を分けて説明する箇所も 面白かった。関数型に書くことに対して洗脳的?にかかれているところがよい。 こういう風に気を遣うことが関数型プログラミングを身につけるコツなのだと気づいた。
  </p>

  <p>
    挿絵のマンガも面白い。ゲームをつくりながら学ぶというスタイルもよい。 文法の解説書は退屈になりがちがけれども、 この本は文法で退屈に感じるところはなかった。
  </p>

  <p>
    ミュージックビデオは何度も見て、耳から曲が離れなくなった。
  </p>

  <p>
    Land of Lisp ♪ Land of Lisp ♪
  </p>

  <p>
    <iframe width="420" height="315" src="https://www.youtube.com/embed/HM1Zb3xmvMc" frameborder="0" allowfullscreen></iframe> </div> </div> </div>

24 Jan 2016, 11:07

Living Clojure を読んだ

Living Clojure を読んだ。

内容

2 部構成。前半は、Clojure の基本文法について簡単にまとめたもの。 そして、後半は Clojure を身につけるための学習プランが書いてある。

Clojure の文法はシンプルなのだが、それをさらにシンプルに解説する良書。

文法に加えて、Clojure のプロジェクト管理の方法だったり、 Web アプリケーション(ClojureScript)に章を割いているところが面白い.

後半は、7 週間をかけて Clojure をまなぶための学習プランが示される。 学習には、4clojure が利用される。

感想

やさしい英語なので、サクサク読み終えることができた。 読了までにかかった時間は 11 時間。あっという間だ。

文法書は概して読み終えるのに時間がかかったり、 途中で退屈になりやすいが、 この本は不思議の国のアリスを例にした楽しい解説が続き、 また分量としてもちょうど良く、飽きることがなかった。

ただし説明がシンプルなのはよいが、若干物足りなさを感じた。 マクロやプロトコルなど、例がすくないので、理解できていない。

この本のよくできているところは、 文法を定着させるためのトレーニングプランが 後半で示されているところ。文法書は手を動かさないと身につかない。

後半の学習はこれからやります。

06 Jan 2016, 05:20

プログラミング Clojure を読んだ

プログラミング Clojure 第 2 版をようやく読みきりました。

読むのにかかった時間は、36 時間 14 分. 流し読みしてこのくらい.

本の構成

日本語で読める唯一のまともな Clojure 入門書.

全部で 10 章構成.1,2,3 章で、Clojure の基本的な文法を紹介する. 4 章以降、中級、上級向けの内容になってくる。 関数型プログラミング、状態、プロトコル、マクロ、マルチメソッドなどなど。 そして、最後の 2 章で、より実践的なアプリケーションを作成する.

感想

序文がやたらとカッコよかった.

  • Clojure はエレガントだ。
  • Clojure は「Lisp ・リローデッド」だ。
  • Clojure は関数型言語だ。
  • Clojure は並行プログラミングを簡単にする。
  • Clojure は Java を歓迎する。
  • Clojure は速い。

この序文とポールグレアムの本で, 誰もが Lisp ハッカーに憧れて Clojure の門を叩くのではないか?

しかし、内容は難しかった。

理解ができない部分が多々あり。 そういうところは流し読みして、老後の楽しみにして飛ばした。 1、2、3章は理解できたが、それ以降は正直理解したといえない.

これは、初心者向けの本ではない. Lisp や Java を熟知している人が Clojure を使ってみようという場合を想定してかかれている気がした. また、話の展開が早く、話題が次から次へとポンポン変わって、ついていくのが苦しい。

ただし、1,2,3 章で基本的な章を理解したので、 簡単なプログラムはかけるようになった.これからこの本読むひとは、 とりあえず最初の章を理解することを目標においてはどうだろうか?

日本語で出ている資料としてはこのプログラミング Clojure を 入門の入り口として選ぶひとが大多数だと思うが、 これを読みきって理解するひとは少ないのでは? 入門の敷居が高いところにも、Clojure が流行らない理由があるのではと思う.

ちなみに、入門には以下の MOOC がおすすめ.

これからどうするか

Clojure 力をつけるには、どうしよう。 ほかに日本語で読める本には目を通してしまった。選択肢としては、

どれもあまりパッとしないなぁ。答えはここでは出ませんでした。 このままだと、ここで Clojure の勉強がストップして先に進めない.

おすすめあれば、教えてつかあさい.

28 Dec 2015, 17:39

あなたはハッカーですか?ハッカーと画家から学ぶハッカー気質について。

ハッカーと画家を読んだ.

エッセイの随所で、ハッカーの気質について語られている.

本記事では、その箇所の抜粋と要約、それに対する自分の考えをメモする.

記事を読むたびに、自分はハッカーとは程遠い存在なのだと悲観してしまう.

メイド・イン・ USA

コードは、ピラミッドみたいに、慎重に計画をしてから苦労して組みくものではない。 一気に集中して手を動かしながら、常に気を変えていく、木炭スケッチのようなものだ.

ソフトウェアの腕のよさは、素早い仕事を意味する.

そこでは大胆さが酬われる.

車や都市はそうはいかない. あまりに物質的すぎるからだ.

とにかくやる、という方法は、確かに利点がある. 速度がその理由だと思う. 誰でも作れる日用品を作ることで富を成すのは難しい. 価値は新しいものにある. そして最初になにかを作り出したいと思うならば速くやることは重要だ.

ハッカーの気質というものを、ソフトウェアや映画と都市や車の対比によって説明している.

  • ハッカー気質 … 速さ、新しさ
  • 職人気質 … 精密さ、成熟さ

アメリカ人は、日本に比べて車をつくることは下手だけれども、 ソフトウェアをつくるのは得意、それはハッカー気質をもっているから.

ハッカー気質、自分には存在するか?今のところ、ない. 一気呵成に自分の頭に浮かんだアイデアをコードに落とすことができない. それは、気質の問題なのだろうか?才能の問題なのだろうか?

ハッカーと画家

ハッカーと画家に共通することは、どちらもものを創る人間だということだ。

ハッカーと数学者は科学をやっているわけではないんだ。

科学者は、まず完璧な仕事から始める. つまり、 誰か他の人が既にやったことを再現することから始める。 そうしているうちに、独自の仕事が出来るレベルに達するのだ。 一方、ハッカーは、最初から独自の仕事をする。 ただ、最初はへたくそだろう。ハッカーはオリジナルから始め、 上手になってゆく。 科学者は上手になることから始め、オリジナルになってゆく。

ハッカーと科学者の対比によって、両者の違いを示している.

ハッカー気質 科学者


美しいデザインで評価される 独創的な論文で評価される 実践重視 理論重視 独自なものから上手になる 完璧なものを再現して上手になる

ハッカーと画家は*ものを創る*という点において共通していると述べている.

  • 昼間の仕事をもち、美しい創作の時間は別の時間にもつ。
  • 自分で書く(描く)ことによって学ぶ。ハックしながら学ぶ。
  • 技法を模倣することで上達する。
  • 次第に詳細化しながらものを創っていく(細部から全体へ)
  • 偉大な作品は到達すべきゴールのさらに上をいっていなければならない
  • 美に対する熱狂的な没頭を要求する。見えない細部にもこだわる.
  • 他の人と共同で作品をつくる。共感能力が必要。
  • 絵画同様に、ハッキングもクールな時代がやってくる.

自分は、ハッカーというよりも科学者に近い. 自分の学習スタイルは、本を買って読んでいる。 つまり、完璧なものを模倣することで上達を考えている。 これは、ハッカー気質からは遠いことだ。

ハッカー気質とは、下手でもいいからなにかを創り上げながら上達していく. なにかをつくりあげて、github に公開したこともない.

The Word Hacker

一般的には、ハッカーとはコンピュータに侵入する人物のことを指す。 プログラマの間では、優れたプログラマを指す。 プログラマにとって”ハッカー”は文字通りその道の達人であることを意味しているんだ. つまり、コンピュータに、よいことであれわるいことであれ、 自分のやりたいことをやらせることができるもの、と言うことだ.

名詞の”ハック”には二つの意味がある. それは賞賛にもなるし、侮辱にもなる. 醜い解答と独創的な解答には、共通点がある。どちらもルールを破っているということだ.

ハッカーは規則に従わない。それがハッキングの本質なんだ。

トマス・ジェファーソンはこう書いている。 『政府への慣行の精神は、ある種の状況では非常に価値のあるものだ。 だから私は、そのような精神が常に保たれることを望む』

ハッカーの気質、それはルールを破ること。 ルールを破ることが富と力の源であり、アメリカ人の気質ではなかったかと。

自分は、日本人だし、とりわけルールを破ることに臆病だ。 この点においても、ハッカーには遠い。

普通のやつらの上を行け

エリック・レイモンドはエッセイ「ハッカーになろう」の中で、 他のいろいろなアドバイスに混じって、 ハッカーになりたい人はどんな言語を勉強すべきかを述べている。 まず Python と Java から始めよ、学ぶのが容易だから。 真剣なハッカーはさらに、Unix をハックするために C を学び、 システム管理と CGI スクリプトのために Perl を学ぶべし。 そして本当に真剣なハッカーは Lisp を学ぶことを熟慮すべきだ、と。

技術を選択するときは、他の人がどうやってイルカなんて無視して、 何が最適かを見極めることだけを考えるべきだ.

プログラミング言語は、その力において差がある。 アプリケーションを書くならば、手に入るなかで最も力の強い言語を使うべきだし、 そうでない選択は、機械語を使うことが間違いであるのと同様で、間違いなのだ.

私は、Lisp が一番上にくると言おう。なぜなら、マクロがあるから。

ハッカーは Lisp を学ぶべきと、Lisp を熱く語る文章.

自分は、Lisp ができない.

素晴らしきハッカー

難しいのは、問題を解くことではなく、どの問題を解くかを決めることだ。 創造性を測るのは難しい。が、現実にはそれはコードの行数で測られるような 生産性をはるかに陵駕するだろう。

スーパーハッカーを特徴づけている資質は、 プログラミングを本当に愛しているということだ。 普通のプログラマは生活のためにコードを書く。 素晴らしいハッカーにとっては、コード書きは楽しみのためにするもので、 それにお金を払ってくれるというひとがいれば大いに喜ぶものだ。

ハッカーはよい道具が好きだ。悪い道具をつかうことに耐えられない.

素晴らしいハッカーはオープンソースを使うことを主張する。 そのほうが良質だというだけでなく、自分で多くをコントロールできるからだ。

ハッカーにとって、ソフトウェアの次に大事な道具は、おそらく仕事場だ。

ハッカーは、よい道具とともに、面白いプロジェクトを好む. 新しい技術的な挑戦があれば、どんなアプリケーションだって面白くなれる。

良いハッカーになる鍵は、たぶん自分がやりたいことをやることだ。 何かをうまくやるためには、それらを愛していなければならない。 ハッキングがあなたがやりたくてたまらないことである限りは、 それがうまくできるようになる可能性は高いだろう。

ハッカーはとりわけ好奇心が強い。 集中力について、他のすべてのことを頭から追い出せる能力。

自分を素晴らしいハッカーにすることができるとしたら、 退屈なプロジェクトの仕事は一切しなくてよい、その代わり、 絶対に中途半端な仕事はしないと誓うことだ。

この文章では、よいハッカーの特徴について乱雑にかかれている.

  • よい道具を愛する
  • よい職場を愛する
  • 面白いプロジェクトを愛する
  • やりたいことをやる
  • 好奇心と集中力が強い

自分は、いやいやながら、どんな仕事でもしてしまう。 それは、自分はプログラムを生活のために書いているからだ。 生活のためではなくて、楽しみのために書くほど実力がない。

プログラミングすら、今の自分には愛せないでいる.

まとめ

ハッカーに憧れてきた。しかし、ハッカーとは程遠い自分を再認識した.

自分の嫌になるほどの、慎重さ、臆病さが、ハッカー気質を妨げる。

自分は本当に、この道を選んで正解だったのか?

ハッカーになりたければ、もっと大胆に考えて、行動しなければいけない.