スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

アセンブリのすすめ

 コンピュータはなぜ動くのでしょうか?

 高級言語しかやってこなかったプログラマの解答は、「プログラミングでCUPに命令することによって動く」などでしょう。
しかし、求めている解答は、もっと低レベルでCUPに命令している動作を説明できるかなのです。
要するに、「あなたはアセンブリレベルでプログラムを理解していますか?」ということなのでしょう。

 何故このようなことを聞くのでしょうか?

 今の時代、高級言語ができれば仕事はできます。
よく考えてみてください。高級言語プログラマにとってアセンブリはブラックボックスです。
そのブラックボックス部分が技術者として気になりませんか?

 そのブラックボックスを知ってどうするのでしょう?

 これは基本的な技術になるので高級言語を勉強していくときに理解が深まります。
例えば、配列のサイズを動的に確保できない言語仕様があったとします。
これをただ「そんなもんなんだ!」と思うのと、スタックをアセンブリレベルで知っているので「当たり前」と解釈するのは全然違います。
 特に原因不明のバグを解決するには、低レベルな技術は必要不可欠ではないでしょうか。

 アセンブリが書けなくても読めるようになるだけで理解力が全然違います。

次に紹介する本は、アセンブリができるようになるための本ではありませんが、
CPU、メモリ、I/Oを紙上ではありますが線で結んで結線し、CPUの動作メカニズムを知ることができます。

矢沢久雄『コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識』日経BP社、2003年

テーマ : プログラミング
ジャンル : コンピュータ

技術の伝承

 初心者の頃を思い起こすと、叩いたコードは、とりあえず目的の動きをするレベルで、
テストが始まれば、バグを収束させるのに夜遅くまで仕事をしていました。

 初心者ながらに、どうすればバグの少ないコードを書けるようになるのかを考える毎日でした。

 そこで出た一つの答えが「美しいコード」です。

 ここでは、その内容には触れませんが、美しいコードを追及していると、
自然とバグも少なくコーディング時間も短くなり、仕様変更も柔軟に対応できたり、
バグが出たとしても簡単に修正できるようになりました。

 このスキルを身に付けるのに色々と回り道をしたのも事実ですが、
簡単に人に教えられるものでもありません。
その技術の伝承方法としてコードレビューが使えないか検討しました。

 コードレビューの一つに「ペアプログラミング」というものがあります。
最近よく耳にするようになった言葉なので、ご存じの方も多いかもしれませんが、
簡単に内容を説明すると。
 2人でペアを組んでコーディングを行っていきます。一人がドライバーとしてキーボードを叩く、
もう一人がナビゲーターとして考えをいう。ときどき役割を交代しながら実装を行う方法です。
 ペアプログラミングは、コーディングが難しいときに有効な手法なので、
毎日、毎回、実施するのは非効率です。

 次に考えたのが「ピックアップゲーム」です。
恐らく殆どの方が知らない手法だと思います。
簡単に内容を説明すると。
 コードを書いて、コンパイルが完了し、テストも通って、チェックインする段取りが整ったら、
すぐにそのコードを別の開発者にレビュー対象としてピックアップしてもらう。
このような「コミットレビュー」は、事前にコードがチェックイン可能なレベルになっていることを
手っ取り早く確認する、形式ばらない方法として考案された。
マンネリ化を防ぐためにレビューをする開発者は持ち回りにしたほうがいいだろう。
例えば、前回ジェリーのコードをレビューしたのがジェーンなら、今度はマークがレビューする番だ。
この方法は非常に効果的だと思う。

Venkat Subramaniam and Andy Hunt(角谷信太郎)『アジャイルプラクティス達人プログラマに学ぶ現場開発者の習慣』オーム社、2007年、第8章

 私のプロジェクトでは実際に前述のペアプログラミング以外のコードは、
ピックアップゲームが手軽に行えることもあって100%実施しています。
 もう1年以上継続していますが、私が教えた人が、また他の人へ伝えと、
人から人へ技術の伝承はうまくいっていますし、私自身も他の人の考えを吸収でき勉強になっています。
 気になるのがコストですが、その場だけをみればコスト増ですが、
バグも少なくなり、コーディング速度も速くなってくるので、お釣りがくるほどの手法です。

またの機会に、ピックアップゲームの細かなルールや注意事項を書けたらと思っています。

テーマ : プログラミング
ジャンル : コンピュータ

スワップ swap

 ある2つの値 a と b を入れ替える(スワップ)するコードは、プログラマであれば誰でも書いた経験はあるでしょう。
 たいていのコードは、次のように第3の変数を用意するでしょう。
コード1

tmp = a
a = b
b = tmp

では、第3の変数を使わずにスワップできるでしょうか?
コード2

a = a xor b
b = b xor a
a = a xor b

 コード1とコード2、どちらのコードで書くかは場合によるでしょう。
しかしコード2は読み難いコードであることは間違いないですが、
知っていて欲しいコードです。

 xorの便利な使い方としてよく目にするのが、描画処理です。
色のxor

 上図で、緑をドラッグ移動していると想像してください。
赤の上を緑が通過するとき、もし黄のxor表示をした場合
仕様的には下になる図形が予想できるメリットもありますし、
通過後に元の赤に戻すのも画面全てを再描画しなくても、
もう一度、緑でxorすれば、もとの赤に戻せます。

先人の知恵のすごさに驚かされます。

テーマ : プログラミング
ジャンル : コンピュータ

センスを磨く

 「吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。」

だれもが知る夏目漱石先生の作品 『吾輩は猫である』 です。
なぜ、この作品が愛されているのか?

もし、次の文章だったら

 「吾輩は猫です名前はまだ無いです。どこで生れたかとんと見当がつかないです。」

面白くないですよね。

夏目漱石先生の文章のリズムにセンスを感じます。


プログラミングもセンスだと思います。
ただ目的の動作をすれば良いというものではありません。

メンテナンス性のために、読みやすいコードを書くことはもちろんですが、
その先に、あるものがあると私は信じています。

答えはまだ見つかりませんが、
一生涯を費やしても探す価値はあると思います。

センスを磨く

それが、芸術家であり職人のあるべき姿ではないでしょうか。

 ビジネス文章もプログラミングと近いものがあると、常々感じています。
私が参考にしている本を紹介します。



テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

夢追

Author:夢追
芸術プログラミングの世界へようこそ

検索フォーム
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリースペース
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。