お茶とスルメ

プログラミングに必要なもの

Javascript読書マラソン

まだ途中ですが、ちょっと距離が長いので、一休みしてます。

ここまでで読んだJavascriptの書籍について、紹介します。本屋でめくってみて、これは読む必要がないなと思ったものについても、その理由を含めて紹介したいと思います。
また、以下のリストには、プログラミングしたことない人のための初心者向け書籍は入ってません。そういった本の紹介は、ごまんとあるので、そちらを参照してください。

Javascript The good parts

これは言わずと知れた名著ですね。
内容はJavascriptの書き方の基本的な部分について、また落とし穴になりがちな言語仕様が記されています。
Javascriptプログラマであることを名乗るなら、この本に書かれていることはすべて理解しているべきだなと思います。

Javascriptパターン

デザインパターンも書かれていますが、もっと基本的なパターンについての本です。
Javascriptにあったオブジェクト指向や、その要点が書かれていて、勉強になります。ただ、デザインパターンの話は特にJavascriptで学習する必要は無いかなとは思いました。
基本的な部分でもありますが、Javascriptオブジェクト指向は、これを読んで学ぶべきかと思います。

オブジェクト指向Javascriptの原則

わざわざJavascriptで、オブジェクト指向自体を学ぶ必要はないので、本屋でめくってみて、読まないことにしました。
Javascriptオブジェクト指向は、Javascriptパターンを読んでいれば充分かなという感じです。
それにあまりJavascriptではオブジェクト指向にこだわる必要も無いかと思います。

Javascriptデザインパターン

これも、本屋でめくってみて、読まないことにしました。
デザインパターンは学ぶものではなく、一生懸命考えてたら、自然とその形に収まってたというものです。知見としてはいいかもしれません。
でも、わざわざJavascriptで学ぶ必要はないと思います。

Javascriptで学ぶ関数型プログラミング

オブジェクト指向ではなく関数型の本ですが、これも本屋でめくってみて、読まないことにしました。
Javascriptオブジェクト指向しすぎなくてもいいと思いますが、同様に関数型にしすぎなくてもいいと思っています。
Underscore.jsを紹介しながらの本らしいです。Underscore.jsは使いたいなと思っていますが、解説してもらう必要は無いかなと思います。

テスタブルJavascript

この本は実際に読んだのですが、まったく肌に合いませんでした。
Javascriptに固有のテストの特徴は、記述がとても少なく、一般的なテストの考え方に大量のページを割き、またツールの紹介が多い。ツールを学ぶなら本よりネットの記事のほうが読みやすく、探しやすく、また、本当にトレンドになっているものを見つけられるので、本で学ぶ必要は感じません。
また、一般的なテストの話なら、わざわざJavascriptじゃなくて、本当にテストのことに着目した書籍のほうがいいです。

メンテナブルJavascript

これも本屋でめくってみて、必要ないなと感じました。
メンテナンスしやすい設計の話は、あまり目新しい話が記載されてるようには見えなかったです。ツールの説明も多いのですが、ツールはわざわざ説明しなければ使えないものは、そもそも使いたくありません。

ステートフルJavascript

流行りのフレームワークの仕組みや思想がよく理解できます。
Backbone.jsなどがどういう思想で、どういうしくみになっているのか、とてもわかりやすく記載されています。Javascriptにおける理想的なオブジェクト指向はたぶんこうなんだろうなというのが、垣間見れる気がしました。
ただES2015からはクラスがあるので、もしかしたらBackbone.jsのようなライブラリの必要性は低くなってきているかも知れないなと思いました。ま、わかりませんが。
でも多くのライブラリが採用しているアーキテクチャを学べるので、この知識があればライブラリ選択の手助けになると思います。

Javascriptクックブック

本屋でめくってみて、読まないことにしました。内容はJavascriptのテクニック集で、かなりの量があります。
The good partsなどに書かれていないことも書かれていますが、踏み込んだテクニックが少ないようにも感じました。どちらかというと初心者向けという印象です。

Effective Javascript

とてもいい本です。正直言うと内容が新しいぶん、The good partsよりこっちを読むべきかもしれません。
Javascriptの書き方や、細かい言語仕様について、かゆいところに手が届く、とてもためになる本です。
絶賛したいのですが、ここは逆にちょっと残念な部分を。たぶんbindだと思うのですが、結合と訳されています。初めて見ました。bindを結合って訳すかな。カタカナでバインドが一番わかりやすいかなと思います。
それと「難しいにはワケがある」という表紙のコピー。僕はJavascriptはシンプルで簡単で扱いやすい言語だと思っています。確かにJavascriptで大規模開発をするのは難しそうですが、Javascript自体は難しいわけではないはずです。また、そもそも英語の原著にはそんなコピー書いていません。
色々と批評しましたが、Javascript The good partsと同様、Javascriptプログラマを名乗るなら、この本の内容は理解しているべきかと思います。

Nodeクックブック

node.jsの本も必要だろうと読みました。
node.jsの書籍は他にもありますが、今のところ一番踏み込んだ部分まで記載されているように感じました。内容は、node.jsでコーディングするときの、基本的なテクニック集です。node.jsで開発する前に読んでおくべきものかなと思います。



ここまでが、読んだ本、読まなかった本です。 以下の本は、これから読む予定です。

上記の本は、内容がいままで読んだ本と比べて高度そう、あるいは読むのに、理解するのに時間がかかりそうだと思いました。ゆっくり読んで行こうかなと思います。



他にもJavascriptの書籍はありますが、僕が読む必要があるなと思った書籍は以上になります。ただ、初めてプログラミングするのであれば、ここに挙げた書籍では難解すぎると思います。
また、僕は読みませんでしたが、オブジェクト指向や関数型の考え方をJavascriptで学ぶなら、そういった書籍も有用かもしれません。

Javascriptは、柔軟でとてもシンプルで簡単な言語です。好きな言語なので、今後も勉強していきたいです。

vim再インストール

vimにもいろいろバージョンがあるらしく、僕のインストールしたDebian jessieにはvim smallというものがインストールされていました。
これだといろいろ機能がオフになっているので、vim hugeというものがほしいのですが。

対処方法は簡単で、インストールするだけ。

sudo apt-get install vim

しかけはよくわかりません。

PostgreSQLの導入

これでインストールします。
Haskellから使うのですが、libpg-devが必要なようです。

sudo apt-get install postgresql-9.4
sudo apt-get install libpq-dev

こうするとpostgresというユーザも自動で作成されます。パスワードもpostgresです。

なので最初はこうして入ります。

su - postgres
psql

それで自分のユーザとDBを作ります。

CREATE ROLE [username] with CREATEDB LOGIN PASSWORD [password]
DROP ROLE [username]
CREATE DATABASE [username] OWNER [username];

あとは適当にテーブルでも作ればいけます。

mecabのインストール

これでいけます。

sudo apt-get install mecab
sudo apt-get install libmecab-dev
sudo apt-get install mecab-ipadic-utf8

辞書は今後かえていこうと思いますが、とりあえず動けばいいや。

stackのインストール

Haskellの開発環境?パッケージ管理ツール?
とにかく便利に開発するならstackが必要なようです。

以下のサイトを参考に。
https://docs.haskellstack.org/en/stable/README/

これでインストールできます。

wget -qO- https://get.haskellstack.org/ | sh

でもそれだけだとghcが入ってないので、これ。

stack setup

新規プロジェクトを作るときとか、その他もろもろは、stackコマンドから一発で呼びだせるようになります。

Apache Cassandraの導入

以下のサイトの通りにすればいくはずです。

http://cassandra.apache.org/

こんな感じ

echo "deb http://www.apache.org/dist/cassandra/debian 39x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra

一番最初の39xの数値を変えることで違うバージョンをインストールできるそうです。

でも僕はJavaが入ってなくて怒られました。
いろいろやったけど、うまく行かず、これが効きました。

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | sudo tee -a /etc/apt/sources.list.d/java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | sudo tee -a /etc/apt/sources.list.d/java.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886

sudo apt-get update

Javaで動いているのでjdkが必要なのですが、入ったのはOraclejdkでした。そんならOracleのサイトからダウンロードすればよかった。
どうやらOpenJDKだとCassandraがうまく動かないっぽい感じです。よくわかりませんが。

一応Javaのエンジニアでメシを食ってるのですが、Javaが一番難しくて、開発のハードルが高いような気がします。
なので、このブログではJavaの記事が出てくるのはこれで最後になりそうです。

Python開発環境

用意するのは以下です。

  1. pyenv
  2. Python2系
  3. Python3系
  4. pip

Python開発環境の記事はたくさんあって、どうすればいいか迷ったのですが、とりあえずいれたのは上記です。
特に必要なのは2. Python2系で、ansibleを動かすのに必要だからです。あとは学習のために1. pyenv、3. Python3系を入れます。pipは何かと必要そうだからです。

1. pyenv

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

それで.bash_profileに以下を書き込みます。

export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

そしてpythonインストールのために必要なパッケージをインストールします。

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils

これ以降pyenvを使ってインストールをするので、困ったら以下のpyenv githubwikiを参照します。

https://github.com/yyuu/pyenv

2. Python2系

これはすでに2.7.9が入ってました。

3. Python3系

pyenv経由でインストールするので以下。

pyenv install 3.5.2

4. pip

pipは以下のどちらかのコマンドで。
最初のものを叩いたら、次のやつを叩いてねって言われました。

curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python
curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python

機械学習とか勉強したいですね。