読者です 読者をやめる 読者になる 読者になる

あかりんパパのブログ

ほぼ雑記です

2017年の目標・やりたいこと

・生活・その他の勉強

 ・英語の勉強を毎日続ける

  ・通勤電車の有効活用

  ・システム英単語ベーシックをしゃぶりつくす

  ・技術系ドキュメントは公式が英語版がある場合はそれを見る

  ・技術系のサイト英語サイトもチェックするようにする

   ・フォローするネタ元

    ・フォロー方法の拡充

     ・既存(twitterfacebook)

     ・追加、試してみたい(RSS、etc)

 ・数学の勉強を毎日する

  ・少なくとも1年で高校3年分をやり直す

  ・できれば、圏論のあたりの領域に踏み込みたい

 ・日々の情報収集を怠らない

  ・情報ソースの拡充

   ・twitterFaceBook、Qiita、Poistd、各種ブログ

 ・早寝・早起(23時就寝、5時起床)

  ・早起きして数学を少しやる習慣をつける

 ・マラソンを継続(目標週2)

  ・朝走る

  ・来年の埼玉のマラソン大会に出場

・技術系

 ・昨今のフロントエンドフレームワークに触れてみる。

  ・各フレームワークのチューとリアルをやる

   ・Knockout.js(すでに知っている枠、自分のための比較用)

   ・React + Redux

   ・Vue.js

   ・Angular

   ・TD4エミュレータを各フレームワークで作る

 ・HTML・CSSの基礎を身に着ける

  ・必要に応じて深堀する

  ・デザインに関する基礎も身に着けたほうがよいか?

 ・Node.jsに触れてみる

  ・チュートリアルやドキュメントを読んでみる

  ・1つWebサイトを作ってみる

 ・DDDの理解を深める

  ・本

   ・エバンス本

   ・TDDD

   ・ドメイン駆動(積読本)

 ・Rustの勉強

 ・詳解Linuxを読切りたい

OSS活動

 ・ネタ

  ・マリオカートの自動集計サービス

   ・結果画像をアップロードすると自動ができるようにしたい

   ・マリオカート効率化(やってないけどもね)

・仕事等

 ・勉強会の積極的開催

  ・上記の以外の知識を勉強会をうまく使って並行して吸収する

   ・セキュリティ

   ・Scalaの深堀

 ・みんなが早く帰れるようにタスクの調整

  ・自分は19:30までには帰りたい

本「プログラムはなぜ動くのか」の感想

実は読み終わって大分時間がたっていたりします。たしか、一か月前ぐらいには読み終えていたと思います。ちょうど、twitterで「CPUの創りかた」を読み始めるとか宣言していた時期ですね。

 

ブログのネタはいくつかあるのですが、なかなか書く時間がないという。まー、「取らない」の間違えで、言い訳ですね。別に言い訳なんてしなくてもいいんですけども。垂れ流しですし。。。

 

本題

さて「プログラムはなぜ動くのか」ですが、結論からいうと、この本を読んだだけではプログラムがなぜ動くのかはわからないと思います。

Amazon CAPTCHA

※ちなみに僕が読んだのは第1版です。

 

「〇〇〇はなぜ×××か」シリーズにしたくて、このようなタイトルになっただと思います。この本はプログラムが動くうえで必要な機器・機構とその仕組みの説明が割と平易な文章で紹介されています。たとえば、CPU、メモリ、OSなど。

これらの仕組みを1つ1つ理解して、なるほどだから動かくのか、と読者の努力次第で到達できるのとは思います。どちらかというと「どのようにプログラムは動くのか」という名前のほうがしっくりくる気がします。

 

なかには浮動小数点数(コンピュータで少数を取り扱う仕組み)や圧縮ファイルに関するものなど、直接的に「プログラムがなぜ動くのか」に関係のない章もあります。ただ、悪い本かというとそうではないと思います。浮動小数点数の仕組みなどは、不勉強な僕にとってはとても有益でしたし、コンピュータ関連を生業にする人はどれも知ってて損はない(知っているべき)知識が平易な言葉で説明してあります。

 

ただし、多少プログラミングをしたことがある方を想定にしている気がします。IT用語が説明なしでバシバシ使われているという意味で。そういう意味では、この本は駆け出しのプログラマが、いわゆるソフトウェアの「低レベルなレイヤー(コンピュータの物理的な側面に比較的近い概念たち)」の知識を拡充するためのきっかけになる本だと思す。そして、駆け出しであっても全くの初心者が1人で読むのは少しつらいと思うので、一人で読む場合は、研修が終わってからか現場に出て数か月たった後に読むとちょうど良い内容になっていると思います。

各章はCPU、メモリなどわかりやすくテーマが決まっており、テーマをより深く理解するための、はじめの入り口になっているという感じの本です。良くも悪くも広く浅くソフトウェアの「低レイヤー」の内容をそこそこ網羅した本だと思います。ある程度経験のあるプログラマであれば、既知の内容が多いと思います。たとえば、僕は2進数の章とかは、ほとんど読み飛ばしに近かったと思います。一応、プログラマにとっては復習や知識の確認にはなると思います。各章のタイトルを見てある程度関連する技術や概念、名詞が思い浮かぶ人は読まなくていいと思います。各章のはじめにクイズ(?)があるので、それだけささっとやってみて腕試ししてみるのもいいかもしれません。

 

各章は分離されており、その章ではじめて出現する用語などは都度解説があったような気がします(なんとなく、各省の原稿をバラバラに時間をおいて執筆しただけのような印象もあります。そんなことないとおもうけども)。そのため、技術書にしては珍しく、気になる章だけ読むという読み方が許される本です。

 

僕が購入したきっかけは、疎かにしていた浮動小数点数の理解とOSがどのようにプログラムを実行するかを理解(確認)するために購入しました。浮動小数点数についてはとてもよかったです。これをきっかけにより踏み込んだ知識も仕入れることができるようになったと思います。OSに関しては、もう少し踏み込んだ内容がほしかったなーといったところですが、ある程度は参考になりました。OSの理解についてはいつ読むのを再開できるかわからない「詳解Linux カーネル」を読むまで取っておこうと思います。

 

参考のため各章のタイトルだけを引用させていただきます。

「プログラムはなぜ動くのか」目次

第1版

プログラマにとってCPUとはなにか
データを2進数でイメージしよう
コンピュータが小数計算を間違える理由
四角いメモリーを丸く使う
モリーとディスクの親密な関係
自分でデータを圧縮してみよう
プログラムはどんな環境で動くのか
ソース・ファイルから実行ファイルができるまで
OSとアプリケーションの関係
アセンブリ言語からプログラムの本当の姿を知る
ハードウェアを制御する方法
コンピュータに「考え」させるためには

第2班

プログラマにとってCPUとはなにか
データを2進数でイメージしよう
コンピュータが小数点数の計算を間違える理由
四角いメモリーを丸く使う
モリーとディスクの親密な関係
自分でデータを圧縮してみよう
プログラムはどんな環境で動くのか
ソース・ファイルから実行可能ファイルができるまで
OSとアプリケーションの関係
アセンブリ言語からプログラムの本当の姿を知る
ハードウェアを制御する方法
コンピュータに「考え」させるためには
レッツ・トライC言語!

引用元

https://www.amazon.co.jp/dp/toc/4822281019/ref=dp_toc?_encoding=UTF8&n=465392

https://www.amazon.co.jp/dp/toc/4822283151/ref=dp_toc?_encoding=UTF8&n=465392

 

結論

プログラムを書き始めて2~3か月の駆け出しのプログラマにとってはとても良い本。

知人が作成した宝くじシミュレーター

現在お世話になっている会社さんの社員さんが、個人で作成した「宝くじシミュレータ」(Web)を紹介します。次のURLから訪れることができます。

Lotto Predict

http://www.lotto-predict.com/

 

作成したのは次の方、ビセンテさんです。

twitter.com

 

今は別のプロジェクトですが、現在僕が参画させていただいているプロジェクトに1年前くらい?に所属していて一緒に開発をしていました。ツイッターのプロフィールを見てわかる通り多趣味で、なかでも「宝くじ」が大好きです。その好きさ加減はサイトを見ていただければ感じていただけると思います。

 

日本のくじだけでなく、アメリカ、スペイン、ヨーロッパのくじに対応しています。正直、自分は日本の宝くじですらよくわかっていないのですが、サイトが作りこまれていることはとしても感じ取ることができます。

特に、多言語対応しているのがすごいと思いました。対応している言語は日本語、英語、スペイン語になります(ビセンテさんはスペイン人です)。現在仕事で携わっているプロジェクトでも多言語対応はまだ未実装で、大変そうだなー、という感じはしています。。。まー対応のタイミングにも依存するのですが。

 

確か、ビセンテさんはスマートフォンアプリ(ゲームなど)もいくつか作っていたはずです。今後も作成予定のものがいくつかあるようです。

 

僕もいち開発者ですが、見習わなければならないところが多々あります。僕は本を読むのが好きで、技術的な知識は本に頼るところが大きいです。

ただし、実践に勝る経験はなく、やはり個人開発でも、少しでも多く人よりコードに触れているほうがいいと思います。僕も個人的なプロジェクトを立ち上げたいな、と思う今日この頃です。

 

だれかネタください。

ビセンテさんいろいろと教えてくださいね。

 

子育てで僕が大事にしていること1 - 子供と自分との関係

娘もあと少しで6歳になり、来年には小学校に入ります。

思えば、いろいろありましたがあっという間でもありました。

 

出産のために嫁が実家に帰省している間にマリオカートWiiにはまってしまい、ニコ生で実況とかYouTubeへ動画を投稿などして、夜更かしなどをして嫁に怒られまくっていました。自分としては子育てや嫁をおろそかにしていたつもりはないのですが、まー怒りますわなw

ごめんなさい。

 

ちなみにマリオカートWiiでは「をこ」という名前で活動をしていて、一部のコースで非公式ながらTop50に入っています*1

マリカ民(仲良くしてくれた方々)とも関係を断ってしまっているので、そのうちマリカの記事も書いていけたらと思っています。

今は全くやっていませんよ!w

たまに、やりたいけれども。

 

話が逸れましたのでもとに戻すと、僕が娘との関係で一番大事にしているのは「対等」であるようにすることです。親だから正しいとか、子供だから親に従わなければならないとかではなく、親も間違うことがあるし、子供が親よりも正しい場合があるということです。

 

よく同世代の方々と話すネタで「自分が想像していた30代より全然大人じゃない」というのがありますが、それはその通りで、しかも今後もその感覚は続いていくと思います。もっといえば、人は「完璧」にはなりえないし、さらにもっといえば、そもそも、正しいか間違っているということでさえ、何らかの前提においてしか成り立たないので、どのようなことでも何が正しいかということは究極的には判断することができないと思います。

冒頭に書いた通り、当然僕は全く子供みたいなもんです。

 

ただし、やはり親は子供より人生経験や知識も多いですから、子供は親に従ったほうがいい場面が多いと思います。

ただ、親も間違える時があるので、間違えたら「対等な立場」の人として、間違えを認め、子供に謝るなどをすることが大切ですし、子供の意見のほうが正しいと思ったらそれを認めてあげることも忘れてはならないと思います。

そのようにすることで、子供が大人に従うべき場面ではしっかりと従ってくれるような信頼関係が築けるのではないかと信じています。

 

また、僕がこのように思う理由のひとつは「小さな子供はみんな超天才」ということなのです。ちいさな子供には可能性がたくさんあって、絶対音感を身に着けたり、文法を知らなくても親がしゃべる言語を自動的に覚えてしまいます。

表現するための語彙や表現方法を知らないだけで、大人が到底かなわないぐらい、めちゃくちゃ頭がいいのです。

つまり、こちらがどのような思惑でしゃべっているのか、子供をどのように思っているかは、言葉だけではなく、態度や行動、表情など総合的な情報をもとに、子供にしかできない感覚的なもので、すべて見透かされてしまっていると思っています。言葉では表現していなくても、超天才の前では常に丸裸であると思ったほうがいいでしょう。

彼らは表現こそしませんが、こちらの考えなどはすべて感覚的に理解していると思ったほうがいいでしょう。ある意味では逆に親が「監視されている」と思ったほうがいいかもしれません。

 

そんな彼らと僕たち親がどうやって信頼関係を築くのか?

 

それは彼らを真に信頼し、心底、愛してあげるほかないのです。

ファウラー氏の廃盤本を2冊も同時に入手

オブジェクト指向界隈の重鎮、マーチン・ファウラー氏の廃盤本をブックオフで2冊同時に入手しました。

 

見ての通り、ツイッターでもつぶやいたのですがうれしかったのでブログにも記載しておきます(※そしてそれは数少ないフォロワーである保田記念日さんへ向けた自慢でした。。。)。

 

■1冊名:リファクタリング

www.amazon.co.jp

これ、でも、新しい版が別の出版社から出てたんですね。。。

https://www.amazon.co.jp/dp/B01IGW5MG0

 

まーいいでしょう。日本語のピアソン本持っているほうが「わかっている感」がありそうですし、「本棚本」としてはなかなかのオーラをもっているでしょう。。。

 

■2冊名: エンタープライズアプリケーションアーキテクチャパターン

英語:Patterns of Enterprise Application Architecture

IT単語が慣れない人にとっては嫌がらせのように長い名前になります。

略してPoEAAと言われていますね。

略しても言いにくいというね。

www.amazon.co.jp

 

ってかこっちもKindle版もあるし、全然廃盤になっていないですね。。。。

僕の記憶がおかしいのでしょうか。。。復活したのかしら?

 

 

 

マーチン・ファウラーを知ったのはDDD(Domain Driven Design)の名著といわれるエリック・エバンス本(ドメイン駆動設計)という本が、ニコ生をScalaで書き直したことを紹介したスライド*1で紹介されており、エバンス本を読む前に読んでおいてほしい書籍で上記の2つの書籍が紹介されていたことで知りました。

この2つの本も借りて読もうとチャレンジしたことはあるのですが、まだ半分程度しか読めていませんし、内容に至っていはまだまだ理解とは程遠いです。

 

出版された年月としては10年ぐらいかそれ以上前ですが、エンタープライズ向けの設計思想の基盤としては得るものはまだまだあると思いますので、この機会に再チャレンジしてみようと思います。

 

最大限に【自分】を表現する方法と思いやり

Evernoteによると11/17に記録したものになります。
 
最大限に自分を表現し、各場面で自分の力を発揮するためにはリラックスすること、つまりは、何事にも注意を奪われずに、思考の対象へ自由に思考をすることが大切です。
 
ただし、ビジネスの場面などでは、先方への気遣いなど、解決しようとする問題以外に考えなければならないことがたくさんあり集中することがままならないことがあります。例えば、お客様を交えた打ち合わせ・ミーティングなどですかね。
 
しかし、百戦錬磨のビジネスマンは先方への気遣いが標準的な行動になっているため、気遣いに思考や集中をする必要がないため、本質的な内容に思考のエネルギーをすべて使用することができます。
ただし、このとき、相手への気遣いが形骸化してしまってはいけません。
大事なのは、相手へ気遣いを100%(ある程度)維持しつつ、他の対象へもエネルギーを配分出来ることです。
 
そのためには、相手を日頃から思いやり、尊敬する心を持ち、そしてその気持ちに自信を持つことが大事だと思います。
そうすれば、気遣いに気遣いせずとも、自然と出る行動が、相手への気遣いの行動になりエネルギーを他の内容へ向けることができます。
 
その練習のために、どんな人に対しても相手の立場になって考え、思いやりの気持ちを持てるようにするのが大事なのだと思います。
 
例えば、電車に並んでいて、順番を抜かされた時、その場面では損をした気分になり、怒りたくなりますが、「急いでいるのかな、疲れているのかな」と相手の気持ちを想像し、特に気にしないでいるほうが長い目で自分のためになると思います。
 
ちょっとしたことで、怒りがちですが、もっと自分のデフォルトの状態を育てていきたいです。

他人は自分を移す鏡

Evernoteによると10/31に記録したものです。
 
人があるものを認識するときは「自分の既存の認識」を超えては理解をすることができないと思います。
それ故、粒度の大きな認識を簡潔に得るためには、新たな認識を得るだけではなく、小さな粒度をもう少しの大きな中程度の認識へ昇華するための抽象化が必要だと思います。
 
自分が他人を認識(評価する場合)、自分の既存認識に範囲内でそれを構成する場合がほとんどだと思う。
ある人がどんなに偉大な人であろうとも、その準備ができていなければ、それを理解することはない。
アインシュタインは、あかちゃんにとってはおじいちゃんでしかないでしょう。
 
他の人にどのような良い振る舞いをしてもらっても、その「こころを理解しなければ他の人を良く評価することはないでしょう。
 
そうした場合、良い振る舞いはなくなってしまうかもしれません。
他人の行動も自分の既存認識においてしか理解できないがゆえ、逆に他人はその認識内での行動しかとれないのです。
 
それは他人の自分への評価もそうです。
 
そういう意味で「他人は自分を移す鏡」というのは、その通りだと考えています。
 
いろいろな人と本質的なコミュニケーションをとるためには不断の努力が必要なんだと思います。自分の固定的な考えに囚われす、色々な角度から色々なことを考えられるようになりたいです。