TAMALOG

プログラミングがあれば遠いところへ行けます。プログラムと人の共生を記録します。

PHPのコードを静的解析する記事を『WEB+DB PRESS Vol.95』に執筆しました

縁あって、『WEB+DB PRESS Vol.95』に8ページの記事を書きました。

gihyo.jp

プログラミングというのは、各個人がそれぞれ思想をもっていて、その表現(実装)方法は自由です。仕事であろうが、趣味であろうが、それは一緒です。ただし、思想が違うといって、実装の議論を放棄してはいけません。

僕らが議論するとき、経験や知識だけでなく、コードのメトリクスを踏み台にすることができます。コードのメトリクスというのは、あるルールに則ってコードの健全さを数値化します。ルールはソフトウェア工学研究でさまざまな視点で考案されており、個人の主観に依らないものです。

これまでの議論をコードのメトリクスを利用した議論に変化させることで、より円滑な議論が行えると僕は思っています。

ソフトウェア工学の教科書にも載っている理論が、実践で使えることを今回の記事で紹介したく、執筆しました。

ぜひとも、手に取ってみてください

あなたはあなた

あなたが、感じたものを信じればいい。なぜなら、それ以外にあなたが信じられるものは何もないのだから。あなたは、他人の何がわかるというのだ。他人が見ている世界とあなたが見ている世界は違う。あなたを信じてくれるのは、あなたが唯一なのだ。

だから、堂々と胸を張ろうじゃないか。あなたはあなたにとって代わりのきかない、存在なのだから。

考えるリンク

Rは分析用? プログラミングであることには変わりない

R言語徹底解説を読む (1) ようこそRプログラミング - 僕らはRを愛しすぎてる

記事のタイトルから、R言語特化型かと思ったが、プログラミングの大切なことがさらっと詰まっている。記事中で紹介された、『達人プログラマ』を読みたいが、絶版と聞いて先輩から借りるかと考えている。プログラムソースコードは、誰かが読むために書かなくてはいけない。仕事でソースコードを読んでいると、退社した人間の置き土産がたくさんある。至極読みづらいコードにあうと、精神をすり減らす。そんなことの無いように、テストで外側を埋めて、読みやすいコード、そして無駄な処理のない、シンプルな構成にしようと記事を読んで思った。

Googleの熱に心がざわっとした

ASCII.jp:グーグルを勝利に導いた美人 マリッサ・メイヤーとは (1/8)

仲間と将来について熱く語り合う体験というのは、滅多にない。この記事の冒頭で、Googleの将来について語り合うシーンが書かれている。将来どうなるのかまったくわからないのに、荒唐無稽で壮大なアイデアをお互い言い合って、真剣に考える。その瞬間は、本当にかけがえのない。何にも変えられない。

僕らは、さまざまな活動を行っている。会社の自分、趣味の自分、家庭の自分……。どれでもいい。一つでも夢中になって、そこにありったけの熱を傾けられるものを見つけたいと感じた。メイヤーは、自分よりも仕事のできるプログラマに会ったとき、自分はこの組織の中でどういう存在になるべきか自分に問うた。同じプログラマとして対決するのではなく、自分の役割を考えなおした。組織のために。

まとめ

  • プログラムは、他人が読むものだ。複雑にしすぎるな。シンプルにわかりやすくまとめよ。
  • 組織に対して、自分がどのように貢献できるか? そう問いなおすことが、あなたの居場所を作る。

段取りをすると会議はすぐ終わる

会議を早く終わらせたいと思ったときに、何をすればいいのか。早口でまくし立てるようにしゃべる? それとも、すぐに多数決する? そうではない。

会議なんてみんな早く終わらせたいと思っている。会議を開いたことがある人はわかると思うが、会議で意見なんて、全然まとまらない。一時間で終われば良いほう。長いときには3時間や6時間もやっていることだってある。

この原因は、一つ。会議時点でのそれぞれの足並みがバラバラであること。

会議の席に着いたはいいが、で、何を決めるの? 何をする会議なの?と発言する人だってしばしば。

会議を始める前に、必ずアジェンダを用意し、事前に配布しておくことが肝心。そして、会議の目的を必ず共有しておく。できるなら、メールではなく直接言うほうが望ましい。あと、会議のゴールを明確にしておくことが大事だ。

この会議で、得られることを箇条書きでアジェンダに書いておく。そして、会議の始めに読み上げる。会議の最後に、読み上げる。これをするだけで、会議の質がぐっと高まる。

アジェンダを作る人はいても、事前に伝えていない人は多いだろう。その場でアジェンダなんて配られても、そこから足並みを揃えるのは至極困難だ。足並みを揃えるだけで、30分はかかるだろう。

会議前にできる限りの準備・周知をしておくことがコツだ。準備こそすれど、周知を忘れる人は多い。「あれだけ準備したのに、うまくいかなかった」と頭垂れている人は、会議の出席予定者に確認と周知を一つしておくだけでぐっと楽になるはずだ。

事前に個別に話を通しておくとなお良い。本当に驚くほど、ミーティングがさっと終わり、満足度も高い。ぜひ試してほしい。

Common Lispを勉強するリンク集

Common Lispをこのごろ勉強していますが、ネット上に、まとまった情報があまり見当たりません。 ここでリンク集をまとめてみます。

入門記事は少ない割に、超絶技巧系の記事が多いように感じています。初学者が学びづらいのかなと思いますね。

入門できそうな記事

実践Common Lispを買いました。

やはり体系的に学ぶのは本が一番ということで5000円を握りしめて、買ってきました。最初の100ページくらい読んでみました。かなり実践的な印象が強く感じられて読み切るのが楽しみです。

f:id:tamanobi:20160314220044j:plain

Common Lispの練習

Common Lisp(SBCL)で簡単なファイルダウンローダを作りました。複数のURLが書かれたファイルを渡すことで、それぞれファイルをダウンロードしてくれます。

https://github.com/tamanobi/uri-downloader

画像を集めるのに便利ですね。

僕はいつも右クリックしてダウンロードするのが面倒に感じていました。[Ctrl+S]→[Enter]ですら面倒です。Chromeでは、Commandキーを押しながら、リンクをクリックすることで新しいタブで開くことができます。こうやってタブがたくさん数えきれないくらい増えていきますが、不要なタブを確認して消していきます。

すると、開いているタブはだいたいにおいて重要なタブになります。そのあとは、自前のChromeエクステンションを使って開いているタブのURL一覧を取得します。

これで必要なURLが揃ったので、今回作成したCommon Lispスクリプトにダウンロードを依頼します。あとは勝手にスクリプトがdownloadsフォルダにせっせとファイルを集めてくれるのでとても便利です。

参考にしたCommon Lisp系の記事

Macで使える便利なキーボードショートカット

テキスト編集中で使えるショートカットを示しておきます。

これを覚えると小指が痛くなります(笑)が、カーソルキーが遠く感じるようになると思います。カーソルキーは普段右手の仕事ですが、下に示したショートカットを使うと左手(小指)が仕事をするようになります。

便利な移動系ショートカット

コマンド カーソル
control+A 行頭へ移動
control+E 行末へ移動
control+N 上の行へ移動
control+P 下の行へ移動
control+F 右に移動
control+B 左に移動

便利なテキスト編集系ショートカット

コマンド カーソル
control+H 左の文字削除
control+D 右の文字削除
control+M 改行

最後に

この手続きを採用するときは、環境設定のキーボードから修飾キーの配置を変更しておくと便利です。僕はいつもcaps lockをcontrolに割り当てています。

f:id:tamanobi:20160305230438p:plainf:id:tamanobi:20160305230438p:plain