2016年11月アーカイブ

プログラマ向け情報サイト

プログラマ向け情報サイトや情報収集ツールを教えて下さい
http://q.hatena.ne.jp/1478270283
回答ありがとうございました。

英語サイト漁ったりコミュニティのメーリングリストに入ったりソースコード見て確認したり、やりようはいろいろあるけど、全然「効率的」に情報収集できていないと実感する今日この頃。マジメに最新の情報を追っているだけで一日が終わる。みんなどういうスタイルでやっているのか未だに全く想像つかない。

「リーダブルコード」読んだ

プログラマを対象として、より良いコード(特にこの本では読みやすいコード)を書くにはどうすればよいかについて語った本。プログラマ一人ひとりが取り組むようなボトムアップの部分を対象にしている。特定のプログラミング言語を対象にはしていないが、逆に色んな種類の言語が出てくるので、初心者は戸惑うかもしれない。

「バグの少ない変更しやすいプログラム」を考えた場合、大きく2つのジャンルがあると個人的に思っている。システム構成やモデリングを行う全体設計のジャンルと、バグを生みにくくする構造化プログラミングなどのコーディングのジャンルと。前者はトップダウン的で後者はボトムアップ的で、しかも両者の間が思いの外離れていてそのギャップに苦しむプロジェクトも多いと思う。

そういう分け方をした場合、この本は後者に該当する。ただ、後者によくある「カバレッジ」「静的解析」「複雑さ」にはたち向かず、むしろ定量的にしづらい部分を経験則から明文化しようとしている。・・・とか書くと堅苦しくなるけど、要するに、変数名・インデント・コメント・ブロックやステートメントの粒度・テストのしやすさ、を経験則的に書いている。

あと個人的にそうだよなぁと感心したところ
・ 標準ライブラリをちゃんと読む
・ 不要コードを消す勇気を持つ
・ デバッグ開始前にテディベア相手に説明できないといけない

挿絵があまのじゃく的で個人的には非常に高感度が上がった。日本語訳もそのノリを踏襲しているので、文章としては非常に読みやすい。反面、重みのある内容を軽快に述べているので、経験がない人が重みをどこまで理解できるのかというところに不安はある。

コードを書く人はぜひ読むべきとオススメしたい本。特に初心者のころに読んでほしい。逆にコードを書かない人はこういうの読んでも身にならないんだろうなぁとかは思う。

今時の圧縮ツールいろいろ

gzip/bzip2/xz/brotliなどをいろんなデータとオプションでテストしてみたな記事はよく見るので、「そういうのはいいからもっと突っ込んだ話を」な目的でまとめてブログのネタにしようと思って下調べしてたら、かなりしっかりした記事を見つけた。
2016年のOSS圧縮ツール選択カタログ
圧縮・解凍をただのツールとみなさずに目的別に書いてたりするあたりもよい。こういうのが欲しかったんだよ、10日ほど前に書かれたほやほやの記事。

上記の記事がちゃんと書かれているので重複になっちゃうけど、私として目的や存在意義で強調しておきたいのはこのへん。

● 保存目的
保存目的とは、容量の少ないメディアにできるだけ詰め込みたい、圧縮は1回きりでネットなどで公開しその後DLしたたくさんの人がそれぞれ解凍する(解凍は何度も行われる)、というようなもの。保存目的の場合、圧縮にかかる時間は無視して、圧縮率と解凍速度が求められる。今はxzやbrotliが最適。

● リアルタイム目的
リアルタイム目的とは、要求が来てから圧縮・転送・解凍が行われるもの。ネットワーク越しの転送(HTTP)とか、機器内部のバスのデータ転送とかが当てはまる。すべての速さと圧縮率のバランスが求められるため、ネットワーク・バスの転送速度と圧縮・解凍にさけるリソース(端的にはCPUとRAM)により最適なものが変わる。また転送されるものがあらかじめ予測できる場合は圧縮だけ事前にやっておくことが可能、Apacheが「.html.gz」なファイルを転送する場合、ブートローダがLinuxKernelをストレージから読む場合などが該当する。

● マルチコア対応
「最近のパソコンはCPUコアたくさんあるんだから並列スレッド処理しようよ」の思想で、マルチスレッド対応して高速化対応したものが出てきている。ファイルに保存したりデータ転送したりしないといけないからデータ形式は既存のものと互換保とうとしているので、逆に置き換えをしやすい。このへんドゾ。
pigzで圧縮を並列処理して高速化
「マルトスレッド処理に適した新しいデータ形式」が出て来る可能性もあるけど、そこまでがんばる以前に、世の中のマルチコアCPUの環境違いで何が最適なのかが見えてこない。デュアルXeonでCPUいくらでも使えるならpixzでいいけど、だいたいの人はCPUコア2個か4個くらいだし、とか。

● 汎用性
世の中必ずしも最先端を全力で追える開発ばかりではない。フットプリント(プログラムの大きさ)、RAM使用量、移植性の高さ、バグのなさ、ハードウェアアクセラレータが使える、なんかもターゲットによっては重要な要因になる。未だにzlibが大人気なのもこのあたりが理由と思われる。

個人的には、zlib互換のライブラリがあるというのを上記の記事で知れたのがよかったかなぁと。ぜひテスト・評価してみたいです。

このアーカイブについて

このページには、2016年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2016年10月です。

次のアーカイブは2016年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.5.0