The King's Museum

ソフトウェアエンジニアのブログ。

第 218 回 TOEIC の結果

そういえばもう一ヶ月くらい前になるけど、第 218 回 TOEIC の結果が返ってきた。 Listening Reading Total 430 415 845 結果として前回から100点くらい伸びた。Listening も Reading も前回の TOEIC よりはきちんと理解して解けたところが多かった。理解で…

『基礎からしっかり学ぶ C++ の教科書』を読んで

『基礎からしっかり学ぶ C+の教科書』という本を読んだ。 基礎からしっかり学ぶC++の教科書 C++14対応作者: 矢吹太朗,WINGSプロジェクト山田祥寛出版社/メーカー: 日経BP社発売日: 2017/02/16メディア: 単行本この商品を含むブログを見る 著者の方に贈ってい…

『ディープワーク』を読んで

ディープワークを読んだ(邦訳のタイトルは『大事なことに集中する』)。 大事なことに集中する―――気が散るものだらけの世界で生産性を最大化する科学的方法作者: カル・ニューポート,門田美鈴出版社/メーカー: ダイヤモンド社発売日: 2016/12/09メディア: …

『ファスト&スロー』を読んで

『ファスト&スロー』を読んだ。 ファスト&スロー (上)作者: ダニエルカーネマン,村井章子出版社/メーカー: 早川書房発売日: 2012/12/28メディア: Kindle版購入: 2人 クリック: 34回この商品を含むブログ (10件) を見る ファスト&スロー (下)作者: ダ…

Communicate!【The Pragmatic Programmer】

エンジニアとしてコミュニケーションは非常に重要だ。 エンジニアはコミュニケーションをとる必要があるし、上手にコミュニケーションできれば得るものも大きい。この章ではよいコミュニケーションを取るための心がけが挙げられている。 何が言いたいかを知…

Your Knowledge Portfolio【The Pragmatic Programmer】

知識ポートフォリオを構築して適切に管理しよう。 知識ポートフォリオは投資におけるポートフォリオと同じような視点で管理するとよい。各アイテムの間でバランスを取り、リスクの高いアイテムと低いアイテムを組み合わせよう。 ただし、もっとも重要なのは…

Good-Enough Software【The Pragmatic Programmer】

完璧でバグのないソフトウェアはありえない。 だからといって悲観する必要はない。 ユーザーにとって、経営者にとって、そして私たちの心の平穏にとって、充分なクオリティというものが存在する。完璧でなくても充分よければそれでいい。 ユーザーは明日の完…

Stone Soup and Boiled Frogs【The Pragmatic Prigrammer】

石のスープ 戦争から帰ってきた兵士が村に帰ってきた。しかし、彼らは食料を恵んでもらえない。そこで彼らは湧いたお湯に石を入れ『あとは人参があれば美味しいスープができるのになぁ』とつぶやく。すると村人たちが興味を持ち、人参だけでなく様々な食材を…

Software Entropy【The Pragmatic Programmer】

二つ目は "Software Entropy"。 割れ窓理論 ソフトウェアは物理世界とは隔離されているが、エントロピー増大の法則からは逃げられない。 どんなに素晴らしいソフトウェアであっても時間と共に朽ちていく。こういう状況を錆びに例えて "Software Rot" という…

The Cat Ate My Source Code【The Pragmatic Programmer】

明けましておめでとうございます。 2017年もすでに10日ほど経過してますが…。 一年半くらい書いてきた Effective Java シリーズが終わってしまって、イマイチ継続的にブログを書く感じにならない。 やっぱり、何かをシリーズ化してノルマにすることがブログ…

見積もりのずれ

最近、見積もりをしてから仕事に取り掛かるようにしている。プロのソフトウェアエンジニアとして見積もり能力は重要だと思う(たぶん)。「それ、簡単にできますよ(どやぁ」と放言して、できたのは半年後なんてのはプロとはいえない。 ちゃんと見積もって実…

【Effective Java】各項目のまとめ

Effective Java シリーズの各項目の一覧。 第1章:はじめに 第1章:はじめに 第2章:オブジェクトの生成と消滅 項目1:コンストラクタの代わりに static ファクトリーメソッドを検討する 項目2:数多くのコンストラクタパラメータに直面した時にはビル…

『人を動かす』を読んだ

なるべく読んだ本の感想は書いておこう。今までは書いたり書かなかったりだったから。 最近、『人を動かす』を読んだ。 人を動かす 文庫版作者: D・カーネギー,山口博出版社/メーカー: 創元社発売日: 2016/01/26メディア: 単行本この商品を含むブログ (8件) …

【Effective Java】項目78:シリアライズされたインスタンスの代わりに、シリアライズ・プロキシを検討する

Serializable を実装すると、バグやセキュリティ上の問題が発生する可能性が高くなります。 コンストラクタ以外でインスタンスが生成されるようになるからです。 これらの可能性を大幅に減らす技法が、シリアライズ・プロキシ・パターン(Serialization Prox…

子育てエンジニアの一日(朝)

いつもとは志向を変えて自分の一日について書いてみる。 自分はソフトウェアエンジニア。結婚していて子供がいる。子供は一歳で、奥さんは働いている。いわゆる共働き家庭だ。 そんな人間のある日の一日。 朝 07:00 起床する。子供はまだ寝ている。顔を洗い…

【Effective Java】項目77:インスタンス制御に対しては、readResolve より enum 型を選ぶ

シングルトンのクラスをシリアライズする場合、readResolve メソッドを使ってインスタンス制御するよりも enum 型による実装を選ぶべきです。 readResolve メソッド まず readResolve メソッドについて説明します。 例えば、次のようなシングルトンクラスを…

【Effective Java】項目76:防御的に readObject を書く

ストリームからオブジェクトをデシリアライズする readObject メソッドは実質的に public コンストラクタとして機能します。 そのため、クラスのコンストラクタで検査している正当性や不変式を readObject にも実装する必要があります。 Period クラスの例 …

【Coursera】Learning How To Learn を受講した

ひさしぶりに Coursera を受講した。 Learning How To Learn という講義。 https://www.coursera.org/learn/learning-how-to-learn 脳科学や心理学をもとにした学習のやり方を教えてくれる講義。 具体的には、 毎日少しづつ勉強した方が長期記憶に残りやすい…

【Effective Java】項目75:カスタムシリアライズ形式の使用を検討する(後半)

前回の記事ではデフォルトシリアライズとカスタムシリアライズの概要について説明しました。 hjm333.hatenablog.com 本記事では、カスタムシリアライズ実装の注意事項について説明します。 StringList のカスタムシリアライズ実装を再掲します。 public clas…

【Effective Java】項目75:カスタムシリアライズ形式の使用を検討する(前半)

シリアライズする方法には次の二つの種類があります。 デフォルトシリアライズ形式 カスタムシリアライズ形式 何の考慮もせずにデフォルトシリアライズ形式を用いることは、互換性やパフォーマンスの点で非常に危険です。 なるべくカスタムシリアライズ形式…

【Effective Java】項目74:Serializable を注意して実装する

項目74からはオブジェクトシリアライズ API について説明します オブジェクトをバイト列として符号化することをシリアライズ、バイト列からオブジェクトに復号化することをデシリアライズと呼びます。 シリアライズされたオブジェクトは仮想マシン間やネッ…

【Effective Java】項目73:スレッドグループを避ける

スレッドグループはもはや利用するべきではありません。 スレッドグループのスレッド一覧を取得するための enumerate メソッドは、スレッドを格納する十分な大きさの配列が渡されない場合、勝手に一部のスレッドを無視します。 また、スレッドの数を取得する…

【Effective Java】項目72:スレッドスケジューラに依存しない

プログラムの正しさやパフォーマンスをスレッドスケジューラーの動作に依存させてはいけません。 実行可能なスレッド数はプロセッサの数と比べて非常に大きくならないようにするべきです。 そうしておけば、スレッドスケジューラーがどのようなアルゴリズム…

【Effective Java】項目71:遅延初期化を注意して使用する

遅延初期化(lazy initialization)は、フィールドの値が必要になるまで初期化を遅らせる手法です。 static フィールドとインスタンスフィールドの両方に利用できます。 まず、第一に、通常は遅延初期化を使うべきではありません。 初期化を遅らせる仕組みに…

【Effective Java】項目70:スレッド安全性を文書化する

開発者は、クラスがマルチスレッド環境で利用された場合にどのように振る舞うかを文書化しなければなりません。 マルチスレッド環境における振る舞いを文書化しない場合、クラスの利用者は十分な同期を行わない(項目66)かもしれませんし、逆に過度な同期…

【Effective Java】項目69:wait と notify よりコンカレンシーユティリティを選ぶ(後半)

固有のロック Java は相互排他ロックを言語固有の機能として持っています。 このロックを利用するためには synchronzied ブロックを使います。 固有のロックは次のような仕組みで動作します。 synchronized ブロックに入る時、スレッドは指定されたオブジェ…

自分を使い切る

元陸上選手の為末さんがこんなことを書いていた。 http://tamesue.jp/blog/archives/think/20160924 幸福というのは自分はどこまでいったかというよりも、自分という存在をどこまで使い切れたか、能力を引き出し切れたかによるのではないかと思うようになっ…

【Effective Java】項目69:wait と notify よりコンカレンシーユティリティを選ぶ(前半)

Java のスレッド操作 API として Object.wait() と Object.notify() があります。 しかし、Java 1.5 からはより高いレベルのユティリティが導入されたので wait() と notify() は使うべきではありません。 追加されたのは java.util.concurrent ユティリティ…

【Effective Java】項目68:スレッドよりエグゼキューターとタスクを選ぶ

Java 1.5 から、エグゼキューターフレームワークが利用できるようになりました。 このフレームワークを使うと、スレッドで実行するためのワークキューを簡単に作成することができます。 // スレッドで実行するためのエグゼキューターサービスの生成 Executor…

【Effective Java】項目67:過剰な同期は避ける

前回の記事では、同期が不十分な場合にはマルチスレッド環境において予期しないエラーが発生する可能性を説明しました。 hjm333.hatenablog.com hjm333.hatenablog.com 今回は前回とは逆の視点です。 過剰に同期することによって発生する問題について取り上…

(c) The King's Museum