新年度に入って1ヶ月半たった今、プログラマな新人さんや初めて後輩ができた先輩方にお薦めしたい一冊

久しぶりの投稿。かなり間が空いてしまった。

5月も半ばを過ぎ、今年プログラマになった新人さんも少しずつコードを書く量が増えてきたんじゃないだろうか?

日々、わからないところはググったり聞いたりしながら、夜遅くまで必死にコードを書いて退社。
そして翌朝、出社してエディタを開き再びコードを書こうとすると、ふと手が止まる。

「あれ、ここの変数、何の値が入ってるんだ?」
「この関数って、どういう処理のために作ったんだっけ?」
「この辺りループとか条件分岐がごちゃごちゃでネスト深くて読みづらい。。。」

そう、自分が昨日書いたコードのはずなのに読みづらい。
それどころか、全くわからない。

...とまぁそこまではなくても、きっと数日前に書いた箇所がすぐにパッと理解できなかったり、コードレビューで指摘されまくって凹んだりしている方は、少なからずいるのではないかと思う。

逆に新しく後輩が入ってきてコードレビューをしているのだけれど、なんとなくダメな匂いの漂うコードに対して的確にアドバイスできないとか、そもそもまだキレイなコードが書けている自信がない(僕だ)とか、そんな方もいるかもしれない。

もし、そういった方の中でまだ読んだことがないなら是非とも薦めたい一冊がある。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

そう、「リーダブルコード」だ。
まぁ、今更感は否めない、おそらくそのくらいには有名な書籍。
それでもこの先ずっとお薦めしたい、そんな本なのだ。超良書。

例えば、

  • 良い変数名や関数名が思い浮かばず、結局適当につけてしまう(そして後でわからなくなる)
  • ループを何重にもネストしたり、バカでかいif-else節を作ってしまう(そして後でわからなくなる)
  • コードを見たままの当たり前のコメントしか書いてない(そして後でわからなくなる)
  • 一つのバカでかい関数の中でいろんな処理をしている(そして後でわからなくなる)

みたいなことが、少しでも思い当たる人はきっと手にとって損はないはず。

仮に、思い当たる節がなかったとしても、 後半のテストコードの話や、実例を挙げて設計・実装していく辺りの話なんかは、 きっとタメになるのではないかと思う。

最後に、リーダブルコードの解説にはこんなことが書いてある。

本書の内容を身につけて、自然に読みやすいコードを書けるようになるための3つのステップを紹介しよう。
・実際にやる
・当たり前にする
・コードで伝える

どんなに優れた名著を読んでも、"実際にやらなければ"身につかない。
というわけで僕も読みっぱなしはやめて、明日から実践することにしよう、と思う。

ちなみに、リーダブルコード以外の本だとこれもお薦め。

CODE COMPLETE 第2版 上

CODE COMPLETE 第2版 上

CODE COMPLETE 第2版 下

CODE COMPLETE 第2版 下

あちこちでお薦めされている名著。
上下巻で高いけどめっちゃ良い。すごくイイ。高いけど。
この記事書いた時点では、Kindle版だと上巻が結構安くなってる。

attr()とprop()とchecked属性とcheckedプロパティと...

うろ覚えでいつもググってしまう悪い癖なんだけど、チェックボックスのチェックをつけたり外したりとか、ラジオボタンの選択をソースコードからしたいとかいう場合。

<input type="checkbox" id="foo">

ここで、ググって良く当たるのがattr()を使う方法だったりして、うまくいかず「はぁ?」ってなってprop()を使う方法とかに行き着いたりする。

// チェックを付ける処理
$('#foo').attr('checked', true); // これうまくいかない
$('#foo').prop('checked', true); // こっちはうまくいく

そもそもなんでattr()使ってうまくいかないんだろうか、と思って色々調べてみた。
結論からいうと、jQuery1.6.0と1.9系以降はうまくいかない、ってことみたい。

[jQuery] attr(‘checked’)で取得したチェックボックスの値が変わらない | 黒川仁の文具堂ブログ三昧

attr()は属性に対する操作を行うもので、prop()はプロパティに対する操作を行うもの。
1.5系以前や1.6.1~1.8系のattr()は属性だけでなくプロパティに対する操作もカバーしようとしていたのだが、バグが発生しやすくメンテナンスが大変だったため、属性とプロパティに対する操作を行うメソッドを完全に分けたという経緯らしい。

また、チェックボックスラジオボタンにデフォルトのチェックを入れるためのchecked属性は、あくまで初期値を示すものであり、ページが表示されたあとにチェックの状態を変更しても属性値は変わらない。
このとき変わっているのがcheckedプロパティであり、prop()で操作できる値、ってこと。

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmer's SELECTION)

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmer's SELECTION)

Effective JavaScript

Effective JavaScript

回路の設計図がサクッと作れる『Fritzing』がかなりイイ

Arduinoの回路を組むにあたって、回路設計図を書きたいと。
なんか良いツールないかと思って探したら『Fritzing』がヒットした。

Fritzing Fritzing

ダウンロードはこちら。

Fritzing Download

フリー("No Donation"を選択)でダウンロード可能。
Windowsの場合はzipが落ちてくるので、適当なところに展開。

ドラッグ&ドロップするだけで以下のような感じのブレッドボード図を書くことができる。

f:id:tomcky:20150117222417p:plain

回路図、プリント基板やCode(スケッチ)もこのツールで書ける。
しかも、ブレッドボードの図を作成すると、それをもとに自動的に回路図・プリント基板もざっと作成してくれる。
ちょっと見栄えを調整すればこの通り。なにこれ超便利。

f:id:tomcky:20150117223215p:plain

出来上がった図はエクスポートできるのもイイネ。

Arduinoをはじめよう 第3版 (Make:PROJECTS)

Arduinoをはじめよう 第3版 (Make:PROJECTS)