やったもん勝ち

主にプログラミングのこと。生産性向上の某とかも。

【書評】「はじめよう!プロセス設計」マーケティング的思想の片鱗を見た気がする

自社サービスのフローを再度考えてみるにあたって、一度もっと根幹から考え直してみようと思い、手に取った本。

はじめよう! プロセス設計 ~要件定義のその前に

はじめよう! プロセス設計 ~要件定義のその前に

[読了時間2時間程度]

結論、いい本だったと思う。

学び

この本からの学びは、以下

  • ビジネス・サービスは、顧客の課題を解決するためにあるもの。

  • プロセスの可視化をすることが重要。

  • 誰が、(誰に、)何をして、何が出来上がるのかという暗黙知を可視化して認識する。

  • プロセス中の例外は、個別に対応せずに、ある程度でまとめて「◯◯時の例外」として処理することで、フローをわかりやすくする

  • ゴールを明確にする(ゴール・ビジョン・要件の3点を設定)

  • ゴールに向けて、顧客・支援者・ITという3本のプロセスラインで問題解決を図る。

  • ユーザーストーリーを描く

といったところを今後仕事に活かしていきたい。

具体的なアクション

具体的には、
新サービスのサービスモデルでは、顧客側のストーリーそしてユーザー側のストーリーの両方を描き、それを解決するためおモデルを構築する。(これはIT以前の問題)
この点に関しては、個人プロジェクトの方でも活かしていきたい。オナニーにならないようなプロダクトを作っていかなければならない。

例外フローは入れ子にすることで、全体の把握を速やかにできるようにする。
これも新しいモデルに関してのことだが、フローを考えるときに、個別の例外やケースに対して、「スコープをどこに設定するか」という視点を持ち、適度な範囲でまとめていく必要がある。

現状では、机上の空論、理論ばかりを詰め込んでも頭でっかちになってしまう状態だから、実際の現場でのケースを体験することから始めていく。

【書評】「コーディングを支える技術」で言語に対する興味を掻き立てられた。

コーディングを支える技術を読んだ。

今までで、JavaRubypython、html、CSSJavaScriptなどを簡単に触れてきたが、プログラミング言語の本質的なところにはあまり触れてこなかったのだなぁとこの本を読んで思った。
ちょうどこの本を読んでいるときに、YouTubeRubyの父まつもとゆきひろ氏のN高校での講義の動画があったので見てみた。

www.youtube.com

プログラミング言語を開発しちゃうくらいだから、物心ついた頃からさぞかしプログラミングっ子だったんだろうなと思っていたが、実はそうでもない。
確か高校生くらいからプログラミングをやりだしたらしい。
それに、そんなに高度なことをやっていたわけでもなく、コンパイラを自作しようとしたら難しすぎて諦めたという話は親近感を覚える。
しかし、そんな状態からいまのMatzがあるわけである。
そんなわけで、ちょっと言語に対する興味が湧いてきていた時期に、ちょうどこの本を読んでみた。 コンピュータの歴史、プログラミングの歴史とともに、なぜそんな文法や決まり、仕様ができたのかをわかりやすく解説してくれている。

これは個人的にコンピューターサイエンスっぽい感じがする、大学でもちょっとアセンブラ言語っぽいverilog(本当はハードウェア記述言語)というものをやっていたので、親近感が湧いて、ちょっと勉強する気になった。

大学時代には「何だこの言語、参考書籍も全然ないし、こんなにプログラム書いてただの繰り上がりありの足し算しかできないのかよ、ゴミかよ」って思っていたが、今になってそれが帰ってきたように思う。   コンピューターって本当はこうやって動くんだということがようやく山の両方から掘っていたトンネルが繋がったみたいだ。

全体を通して言えることは、「プログラミング言語は完璧ではない」ということだ。   コンピューターの仕組みは、ある程度は完璧と言ってもいいものなのかもしれない。 (例えば2+2はいつでも4である。)
しかし、そのコンピューターを使って、人間が作るものはどうも完璧というのはなし得ないようだ。

だからいろいろなルールを作って、なるべく間違えがないようにするにはどうしたらいいだろう?という理念の基プログラミング言語が構築されているのだ。

「正しく書けば、動くんだ」という無機質なものから、「どうすればみんなの考えを理解できるか、自分の考えを理解させられるか」ということを考えていかないと、プログラミング、及びチーム開発はできないのではないか?とひしひしと感じた。
ルール通りに厳格に決めきってしまうのも一方では重要であるが、なぜそれを使っているのかという大本を考えてみると、納得がいくものも多いような気がする。

Web開発でJavaを使っている新卒が「なぜJavaでつくるのか」を読んでみて

なぜシリーズが好きだ。

Javaでなぜつくるのか  知っておきたいJavaプログラミングの基礎知識

Javaでなぜつくるのか 知っておきたいJavaプログラミングの基礎知識

背景

Web系でJavaを使っているというと、大抵の勉強会では驚かれる。

主流はruby, phpあたりだろう。 自分でも、なんでJavaなんてやっているんだ…

そう思う。 一度、Javaと言うものをしっかり理解してみようと思い、この本を手にした。。

Javaが出現するまでのコンピューターの変遷を簡単に知ることが出来た。

コンピューター黎明期では、色んなメーカーが自社製品だけにしかない機能を作りまくって競争していたため、 専用のハードウェアでしか動かないソフトウェアが量産されてしまった。 これでは生産性が下がってしょうがない。やってられない。

何をするにせよ、僕たちが最終的に機械に何かをやらせようと思ったらバイナリーデータにしなくてはいけない。 このことは知っていた。

そしてその前段階に、アセンブラ言語と言うものがある。 機械語を直接技術するのではなく、命令語でプログラムを書くもの。 しかし、これも個々のプロセッサに依存する。

そこで生まれたのが、コンパイラ及びコンパイラ言語だ。 C言語COBOLなどがそれだ。

C言語で書いたコードはコンパイラによって、アセンブリ言語に変換される。 当然これはプロセッサに依存する実行ファイルが吐き出されるので、プロセッサごとにコンパイラが違ってくる。

そうしてできた実行ファイルはそれぞれのハードウェア上で動作する。

しかし、逆に言えば、それぞれのハードウェアでコンパイルしなくてはならない。 これが一般人にはちと難しいと来たもんだ。

そうして次に出来たのはインタープリタ。 これはハードウェアを介さずに、ソースコードを逐次解釈して実行するプログラム。 これにより、コンパイルが不要になった。 しかし、問題点が2つ。 ソースコードが丸見えという点と、実行速度が遅く、できることも限られているという点。(ハードをあまり動かせないから)

これを解決するべく開発されたのが、Javaなのだ!!!!!

Javaはそれぞれのハードウェア、OSの上に仮想的なOS(JVM Java Virtual Machine)を作ることで、環境による動作の違いを吸収している。

その代わり、その特定のハードやOSにしかない高機能なものは、あえて捨てている。 そして得たものは繁用性。

こんなところがプログラミング言語の簡単な歴史と対応させたJavaの位置付けらしい。

Javaのオブジェクト志向について

その後にも、色々説明をしていて、特にJavaオブジェクト指向についての説明をしてくれていた。 他の本でもオブジェクト指向の本はいくつか読んできたが、どうもオブジェクト指向のありがたみを未だに感じることができない。

この本で得た一連のプログラミング言語の歴史と合わせて考えて、そもそものオブジェクト指向じゃない言語を簡単にでも理解して、その非オブジェクト指向な仕様を体験してはじめて「うわーこれ面倒くさっ」どうにかなんないかな…?

オブジェクト指向の登場

なにこれ便利すぎぃ!!

ってなるのが本筋な気がする。

オブジェクト指向言語を知らずしてオブジェクト指向言語の良さを語ることは、カレーしか食べたことないのに、カレーの良さを語るのと同様だ。

新卒エンジニアの中期目標としてはいろんな言語を比較しながら、その長短を理解していきたい

validetta.jsがieでのみ有効化出来ないバグの解消

ずっとmacで開発していて、一応Internet ExplorerSleipnirでチェックしていたつもりで、ちゃんと動いていたのですが、 やっぱり本物で確認してみると。。。バリデーションが効かない。。。 ieSleipnirは同じエンジンを使っているらしいから大丈夫だろうという謎の慢心でした。。。 危なかった。

バリデーションにはvalidetta.jsを使用しました。

こちらです。 coliss.com

解消法は

F12でデバッグモードを開く

consoleを見てみると、

validetta.jsに関して、

「strictモードでは、プロパティの複数定義は許可されません。」

見てみると、たしかにvalidetta.jsの中に

“use strict”; の一文が・・・

これを削除。

どうだっ!?

いけました。

MacOSで既存のplay frameworkのプロジェクトを実行する環境構築をする

MacOS Siera Ver.10.12.2 おにゅーのMacでplay frameworkの環境設定を行いました。 プロジェクトは既にあったので、そこら辺は別のサイトの情報を参照ください。

Javaのインストール

まずは、Javaのインストール

$ Java -version

でinstallされているか確認する。

installされていなかったら、installページに飛べるダイアログが出現するので、クリック。

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlmacOSのDownloadファイルをダウンロード、展開

順番に進めていくと、ブラウザで確認画面になる。(Chromeだと確認できないみたいなので、デフォルトブラウザをサファリにしておく)

ブラウザでも確認できるが、(よくわからなかった) Macの左上りんごアイコンから、システム環境設定>Javaコントロールパネルで確認。

てかMacは標準でインストールされているのですね・・・

play frameworkのインストール

続いて、play frameworkのインストール

基本的には公式ドキュメントに書いてあります。 sbtがなければインストールするとのこと(sbtとはscala用のbuildツール)

$ brew install tbt

エラー:javaがないとのこと。 ???

javaはあるはずなのに… エラーログでbrewでinstallせよと言っていたので、従う。

brewjavaを再インストール

$ brew cask install java

sbt new playframework/play-java-seed.g8

コマンド。 activatorをinstallする

適当なディレクトリで展開して、activatorのパスを通す。

$ sudo atom .bash_profile

環境変数を設定する。(もちろんatomじゃなくてもなんのエディタでもいい)

activatorが~/developに展開したので、

export PATH=/Users/yoshii/develop/activator-dist-1.3.12/bin/:$PATH

を追加する。

$ source ~/.bash_profile

をしないと、パスが通らない。(更新されない)

echo $PAHT

でパスが通っているかを確認。

アプリケーションが既にあるなら、そのディレクトリに移動し、

$ activator

[play] run

これで実行できました。

play framework2.4でDBをリモート環境とローカル環境で分けるときの設定

play framework2.4で

application.confにDB接続設定がありますが、

リモートの環境設定をそこに書いている場合、

ローカル環境のDBを使用するときは、また別に設定しなくてはダメですね。

迂回策①

application.confのDB接続情報をローカル環境のDBにして、

gitignoreでリモートには反映させないで自分の環境だけで反映させるというものです。

しかし、applicationには他にも設定ファイルがあって、その変更が反映されないのはいかがなものかと

ということで、

迂回策②

local.confでapplication.confをimportして、

さらにローカルのDB接続情報を書いて上書きする方法です。

local.conf

include "application.conf"

db.default.url="jdbc:mysql://localhost/url
db.default.username=root
db.default.password=“password" #自分のPCのDBののパスワード

とします。

実行時にlocal.confを指定する

2.3では

[play] -Dconfig.file=local.conf run

だったみたいなのですが、 2.4以降では

[play] run -Dconfig.file=local.conf

とターミナルに入力します。

Oops、これではだめでした。

[play] run -Dconfig.file=conf/local.conf

しっかりパスを指定しましょう。 当たり前か。。。

これでいけました。

統計検定2級に合格するための勉強方法、勉強時間、参考書籍

先日、統計検定2級の合格通知をいただきました。 (偉そうな事書いてありますが、自己採点したらかなりギリギリの合格でした。。。)

受験したのは、2016年11月の試験でした。

目次

受験背景

機械学習を勉強したいと思い、界隈に詳しい人に色々な話を聞いていると、機械学習というのは、統計と結びつきが深い(と言うより同じようなもの)。

ということで、プログラミングと並行して、統計も勉強していこうと思い、受験しました。

勉強を始める前の知識として、

理系大学出身なので高校数学くらいの知識はありました。

ただ、統計に関しての知識はほとんどなく、偏差値の計算方法も、どっかで見たことあるなーくらいで、全然無知でした。

勉強時間

勉強時間は、正味24時間程度だったと思います。

2,3時間くらいまとまった時間が取れるときにガーッと勉強しました。

あまり細切れ時間だと、理解が進まないと思うので、特に初めのうちはまとまった時間を確保したほうがいいと思います。

ただ、過去問を段階になって、あまりまとまった勉強時間を確保できなかったら、ちょっとずつわからないところを埋めていくというスタイルでも良いかもしれません。

勉強方法

勉強方法は、過去問(1回)→書籍→過去問という流れです。(当たり前ですかね)

以下、参考書籍とコメントです。

マンガでわかる統計学

マンガでわかる統計学

マンガでわかる統計学

まずは、統計ってどういうことをやるんだ…?というのが全くわからなかったので、全体を把握したいと思い、一読。

最初はマンガ部分だけ読んで、2周めで間に入ってくる解説を読んで理解を深めました。

この段階では、厳密な計算などあまり追っていなく、「統計はどういうことをやるか」ということを理解することを目的に読みました。

以下も併せて読むと良いと思います。

マンガでわかる統計学 因子分析編

マンガでわかる統計学 因子分析編

マンガでわかる統計学 回帰分析編

マンガでわかる統計学 回帰分析編

統計学がわかる (ハンバーガ統計学)

統計学がわかる (ファーストブック)

統計学がわかる (ファーストブック)

これで具体的な計算方法などを勉強しました。 実際は、書籍ではなく、サイトで勉強しました。こちらは無料です。

ハンバーガー統計学にようこそ!

こちらは姉妹シリーズです。

アイスクリーム統計学にようこそ!

統計学の必要性や、どう役に立つのかということがストーリー仕立てになっているので、すごくわかりやすく、入ってきます。

あと、演習問題もついているので、学んだことをしっかり定着させられます。(回答がないのが少し残念ですが…)

しかし、このサイトでは、かなりわかりやすさに重点を置いているので、式の説明なども言葉で行っていて、理系な自分にはちょっと分かりづらかった点がありました。 数式で表現したほうが、厳密だしシンプルでわかりやすいなと思う部分があったので、次の書籍で理解を深めました。

統計学入門(基礎統計学

統計学入門 (基礎統計学)

統計学入門 (基礎統計学)

東京大学出版の書籍です。

入門と書いてありますが、いわゆる入門とは思わないほうが良いです。 初心者向けの入門というよりは、本当にその道に進みたいという人がまずはこの1冊からと言った位置づけです。

この書籍の内容は2級を超えている部分があると思いますが、本質的な統計の理解を考えればやっておくべきです。(友人談)

そこまで内容や数式が難しいということはなく(簡単ではありませんが)、数式をちゃんと順を追って進めていくと、大部分は理解できると思います。

統計学の面白さがこの本でちょっとわかったような気がします。

(途中で膨大すぎて全部はやっていません。基本的な部分と、過去問を見て関連性が高い部分だけやりました。)

日本統計学会公式認定 統計検定 2級 公式問題集

日本統計学会公式認定 統計検定 2級 公式問題集[2013〜2015年]

日本統計学会公式認定 統計検定 2級 公式問題集[2013〜2015年]

最後はやっぱり過去問です。

統計学入門 (基礎統計学)でも2級の問題の中でいくつかカバーしきれない部分があります。

そんなに難しい内容ではありませんが、知っているか知らないかだけの問題などで、正否がわかれる問題など、これで拾っておきたいです。

最後は公式の過去問。

これは資格試験系で鉄板で、言うまでもないですね。

と言いつつも、2年分くらいしか解けていないです。

あとは前日にパラーっと見てみて、ぱっと見わからなさそうな問題を解説をすぐ読むスタイルで1,2年くらい流しました。

今後

今後は、自分の中での方針が大きく変わったので、統計は一旦置いておいて、プログラミングの方に軸をおいていきたいと思います。

実践してみて、必要性を感じたら準1級も受けてみようかなと思います。

難易度はかなり上がるらしいから、それなりの覚悟が必要みたいですね。