2022年04月29日

コードレビューの温度感表現に絵文字を使う

チームでのプログラム開発を行っていると、コードレビューを受け持つ場面が多々出てくる。コードレビューで返す内容は様々で、コードの問題点の指摘や良いコードの評価の他、意図の読めないコードについて質問する事もある。「コードの問題点」も、その深刻さで何段階かに分けられる。単にアルゴリズムが非効率なだけか、バグやセキュリティリスクに繋がるかと言ったような。

そういった個々のレビュー内容についての「温度感」のような物は確かに存在するのだが、それはなかなか伝わりにくい。どのようなレビューコメントも、一見、唯の「コードへの意見表明の文字列」に過ぎないからだ。

そこで、レビュー内容に、その種別を表すラベルを付けようという方法がある。修正必須な物には[must]と付けたり、質問には[ask]を付与したりといった具合に。各々のレビュー内容の頭の数文字を見れば、そのレビューがどのような種別なのかが伝わるという寸法だ。唯のテキストでは、まだ視認性が悪いからという事で、Shield.ioで専用の画像を生成して使用するというアイディアも存在する。

しかし、個人的にはShield.ioを使っても尚、難点が在ると感じる。というか、皆、英語の略やジャーゴンをよく憶えられるね。「IMO」とか「nits」とか、どうにも憶えられない。いきなり言われても「えっと、どういう意味だったっけ?」と思考が止まってしまう。本筋ではない所で脳のリソースを使う手法は避けたい。

もっと視認性と解りやすさを両立した何かが欲しい。何か無いだろうかと考えて、思いついたのが絵文字を使う方法だ。フォントに依っては、文字でありながら様々に着色されているので、通常の文字との区別もしやすい。一種の表意文字と言えるので、その形状からレビューの種別を想像させる事も難しくないだろう。

一先ず、以下のように規定して運用してみている。

絵文字意味
👍良い、評価できる部分。
必ず修正して欲しいコード。想定通りの動作をしていない、しないケースが考えられるコードや、極端に設計が悪いコード。
🤔個人的には修正した方が良いと考えるが、異論も考えられるコード。議論し、その結論に満足出来た場合、取り下げる事も考えられる。
該当箇所についての質問。回答次第で「問題なし」と判断されたり、何らかの修正をお願いする事になる。
(絵文字無し)想定通りの動作はしているが、修正は必要だと感じるコード。

もう少しブラッシュアップを行いたい所ではあるが、唯の文字列よりも伝わりやすいのではないだろうか。Shield.ioのような外部のwebサービスに依存せず実現可能な点も長所だろう。

ラベル:code_review
posted by 天井冴太 at 09:00| Comment(0) | TrackBack(0) | Programmers | 更新情報をチェックする

2021年03月24日

正規表現で何でもパース出来ると思うな

不思議な事に、世の中には、何でも正規表現で処理しようという人種が居る。例えばHTMLJSONのパース処理を正規表現を駆使してやろうとする。

何故、わざわざ正規表現を使おうとするのか。既に誰かが作ったパーサライブラリが在るというのに、そういった物は頑なに使おうとはしない。あくまで正規表現を使って何とかしようとする。

既存のライブラリを使った方が良い点として:

  • なんと言っても、正規表現は容易に「暗号文」化する。複雑な構造のデータをパース出来る、複雑な構造の正規表現を書いた当人は大いに満足しているのかもしれないが、後からそれを「解読」する人間の身にもなってほしい。
  • 枯れている。少なくとも、今この瞬間に書かれた、その正規表現よりは枯れている。つまりバグが混入している可能性は、今書かれたソレよりも格段に低い。
  • 必要な処理を実装する時間も短くて済む。例えば、「HTMLコード中の『foo』というIDを持つ要素の子孫要素として存在する『bar』クラスの要素の直接の子要素の最初のテキストノードの内容を全て拾え」、という処理が在ったとして、「任意のIDの要素を取得」「任意の要素の子孫要素を全て取得」「任意のクラスを持つ要素を全て取得」「テキストノードの内容を取得」なんて処理は、パーサライブラリが既に用意しているだろう。今からその正規表現を書く時間は無駄である。

そもそもの話として、正規表現は万能ではない。HTMLJSONのような、「入れ子になった構造」を処理できない。なので、そういった物を処理しようとして書いた、その正規表現には、100%バグが潜んでいる事になる。今、受け取っているデータは処理できたとしても、一寸だけ内容の変わったデータが来ると途端に木偶と化す可能性が在る。詳しくは、例えば 「Leo's Chronicle: 正規表現に見切りをつけるとき」 等を参照。

正規表現で何でもパース出来ると思うな。悪い事は言わないから、良いから黙って専用のパーサライブラリを使え。

ラベル:regexp
posted by 天井冴太 at 22:34| Comment(0) | Programmers | 更新情報をチェックする

2014年02月23日

墓標としてのオンラインソースコードホスティングサービス

Ruby WeeklyIssue 183 で知ったが、Ruby製ビルドツール「Rake」の開発者である Jim Weirich 氏が亡くなられたそうだ。

Unless you've already heard the news on Twitter, it's with much sadness I pass on the news that Jim Weirich has died. Jim was not only a well known Rubyist as the creator of Rake, but also a respected teacher, speaker, mentor, and friend to many.

氏はGitHubに、2月20日0時46分にcommitしたコードをpushしている。氏の最後のcommitのページには、彼の死を悼む人々のコメントが沢山投稿されている。GitHub社も、特別にコメントをページ上部に掲載している

さながら、このページが氏の墓標としての役割を果たしているかのようだ。

コードを書き生きるプログラマとして、その様は羨ましくもある。個人の最後の成果物が墓標のように機能する可能性には今まで気づかなかったが、割と「アリ」なのかも知れない。

願わくば、私も何時の日にか、その死に際して「墓標」に沢山の人々が集うような人間になりたいものだ。

GitHub社も、特別にコメントをページ上部に掲載している
GitHubはRubyを使っているとか使っていたとか聞くので、Rakeのお世話になっている/いた人も多いのだろう。
posted by 天井冴太 at 15:00| Comment(0) | TrackBack(0) | Programmers | 更新情報をチェックする

2007年05月30日

プログラミング初心者はPHPに手を出すべきではない

PHPが出来るという事で採用した新人は、PRINTの時点でもうわからない*ホームページを作る人のネタ帳なんて記事があって、面白かったんで紹介。

プログラムが出来るということで採用したのに、実は全く使い物にならないというのだ。

(略)

まずは彼は新人達に書籍を与えたそうです。
私から言わせて貰うと、書籍は自分で買わないと恐らく意味はないと思いますけどね。

そこで一番最初に登場する『こんにちは』を表示するプログラム。
<?php print "こんにちは";?>
この時点で物凄い悩んでいる為、先に進まないというのだ。

そもそも『PHPが出来ます』といって入社してきた新人達は、基本的にホームページは作れる。だから『こんにちわ』をわざわざプログラムで表現する行為が、全く理解できないのだ。

まぁこの場合はしょうがないのかもしれないけど、そもそもプログラミング初心者に最初にPHPを教えるのがアレな気がする。汎用言語を憶えさせるべきではないかと。

PHPはその名に有る通りハイパーテキスト処理に特化した言語な訳で、引用部分にもあるけどただの文字列出力ならわざわざprintechoを使わずに<?php?>の外にその文字列を書いた方が遥かに簡単だしパフォーマンスも良い筈だ。

アレはプログラミング経験が有り、且つHTML分かる人間が簡単にwebプログラムを作る為の言語だと思う。

そこで気が付いたんですが、ホームページを作るというスキルが全くない人は、実はprintでつまずく事も無いんです。

と有るが、それはそれで恐ろしい事になりそうな気がする。PHPでなくて良い部分までPHPで書いたり。echo '<a href="somepage.php">リンク</a>';みたいなコードを書きそうで。

これからプログラミングを憶えようという人は、PHPはやめといた方が良い。汎用のプログラミング言語を選択するべきだ。Cがイイのかも知れないが、一部難しい部分(ポインタ)があるしなぁ。PerlとかRubyみたいな軽量言語でもいいかもしれない(尖った機能を無視出来るなら)。

しょうがないのかもしれない
会社としては早く使いモンにしなきゃいけない訳だし。
これからプログラミングを憶えようという人
……が果たしてこのblogを読んでいるのか、という気もするが。
ラベル:PHP
posted by 天井冴太 at 00:04| Comment(0) | TrackBack(1) | Programmers | 更新情報をチェックする

2007年05月03日

刑務所でプログラミングの教育

やねうらお氏のblogで知ったのだが、こんな取り組みが。

この計画を立ち上げたのは、刑務所まわりの業務に特化したベンチャー企業「プリズニーズ」で、07年5月1日に発表された。同社からSE(システムエンジニア)を2人送り込み、選抜された受刑者60人に対して4ヶ月にわたってプログラミング言語「ルビー(Ruby)」に関する教育を行う。
((略))
プログラミング技術を身につけた受刑者が出所した際は、そのまま同社の社員として採用していきたい考えだ。

……アレ?何か似たような内容の人力検索を見たような……ああ、あったあった。これだ。ネタだと思った方も居たようだが、マジだったのね。

まぁ、実際にプログラマとなるかどうかはともかく、コレが元でプログラミングの面白さに目覚める人が出てくればいいなぁ、と。

関連

ラベル:ruby
posted by 天井冴太 at 20:16| Comment(0) | TrackBack(0) | Programmers | 更新情報をチェックする

2007年02月07日

T先生に対する(個人的な)疑惑

以前equalsを『えくわるず』と読んだ事を紹介したT先生。この先生に対して個人的にではあるが、ちょっとした疑惑を抱いている。

Javaの講師なのに実はJavaよく知らないんじゃなかろうか。

例えばある日、次のような感じのコードを書いていた。


class Hoge {
    void f() {
        String str = new String();;

        str = "文字列";
    }
}

……何だこの初期化。中身なしのStringで初期化して、それに文字列を追加?意図が判らない。

という訳で質問してみた。
天井冴太 「先生、その初期化って意味無いんじゃないですか?」
T先生 「え?だって文字列を格納する前にオブジェクト生成しないと。」

ダウト。
文字列の代入の部分でオブジェクト生成される。仮に代入前にオブジェクトの生成が必要だったとしても、そもそもStringクラスは定数文字列。上記のようなコードで上手くいく筈がない。つかコレって常識じゃないのか?私はJava食わず嫌いしていた時からこの事は知っていたんだが。

天井冴太 「……ですよ?Sunのリファレンスにもそう書いてありますが。」
T講師 「あ、そう?でも、ま、念の為に初期化するって事で。」


ちょっ、だから意味無いって。言語の開発元のリファレンスさえ信用しないのかあんたは

他にもオーバーフロー起こすようなコードを平気で書いたり、それを指摘しても修正しなかった(たった1つのif文追加するだけなのに)り、マジックナンバーはボンボン出てくるわ、メンバフィールドは露出させまくりだわ……『Javaが使えるかどうか』以前にプログラマとしてアヤシサ爆発なのだ。……おっかしーなぁ、この学校入る前に聞いた説明だと『講師は全員業界の人間』って話だったんですが……?

……つか、この頃の授業で出てくるコードは、もしかしたら入門書見ながら打ってるんとちゃうやろか。PCで死角になってよく確認出来ないんだけど。そんな気がする。

意味無い
むしろ無駄なオブジェクト生成処理が入る為、パフォーマンスを悪化させるだけ。まぁ、この程度ならコンパイラが最適化してくれるだろうとは思うけど。
講師は全員業界の人間
その説明を信じていた時代が俺にもありました。( ´・ω・`)
まぁ、多分、『講師は全員"元"を含めて業界の人間』って意味だったんだろうけど。非常勤なら兎も角、時間的に常勤を現役の人間が出来るとも思えないし。
ラベル:java
posted by 天井冴太 at 19:11| Comment(0) | TrackBack(0) | Programmers | 更新情報をチェックする

2007年02月02日

私の母国語は英語ではない。だけど英語の発音はちゃんと知りたいよね。

……というタイトルを英語で書こうと思ったが、意外と長くて(いや日本語でも長いんだけど)パッと見で分からない単語が幾つか在ったんで止めた。

My mother tongue is not English. However, I want to know the pronunciation of English neatly.

以下hxxk.jp - 間違いがち、あるいは「どちらを使うべき ? 」な用語を私見で集めてみましたそのはてブコメントから。

parent の発音

発音記号は pεәrәnt なのですが、 <a href="./"> と <a href="/"> はどう違う ? でおもいっきり「パレント」なんて書いていました。 当時は「パレントはありえねえ」と IRC などで指摘しまくられたものです……。

# 2007年02月01日 konaze konaze english パレント…昔、英語覚え立ての頃、languageを、『ラングアゲ』で暗記してた(もちろん正しい読み方も知ってた/覚え方の話)のを思い出した…ふとしたときに頭の中で出るんだよなー

あー、あるある。文字の並びで勝手に発音想像して、実は違うってパターン。

私は一度とんでもない発音を捏造して、正しい発音知った後もしばらく捏造した発音が口を突いて出る、というkonaze氏のような状況に陥った事があるんで、必ず調べる事にしている。

あきらかにおかしい

……で、私が通っている専門学校の講師T。彼もアヤシゲな発音をしている。

O.K.いいさ。pingを『ぴんぐ』と読んだり(正しくは『ぴん』)、Ajaxを『あじゃっくす』と呼ぶ(正しくは『えいじゃっくす』)のは。その辺りはよく聞く。さぁどんと来い(何をだ)。

しかしT講師はそんな私の考えのより斜め上行っていた。
彼はJavaの講師なのだが、equals()メソッドの事を、

えくわるず

……と発音したのだ。




いや、ちょっ、それは幾らなんでも。

そのメソッドの機能を考えれば"equals"という単語を知らなくてもそれが日本で普通に使われているある言葉だと気づきそうなものなのだが。

……彼にこの事を指摘するべきか、無視するべきか……以前pingの発音を指摘した時、「あ、そう」で見事にスルーされた事が在るしなぁ……

講師Tに対する疑惑

……を密かに抱いていたりする。実は。
それについては、また今度。

発音
正しい発音はgooの辞書の発音記号とその隣のwavファイルへのリンクを参照。日本人的に発音するなら『いこーるず』、wavに沿うなら『いーくぉず』ぐらいだろうか。

因みに今回の記事では、英語の発音が日本語の文字で表せないのを承知の上で、あえて平仮名表記した。いや、そっちの方が読みやすいかな、と。

ラベル:english
posted by 天井冴太 at 00:04| Comment(0) | TrackBack(1) | Programmers | 更新情報をチェックする

2004年07月29日

ぞっとするwarning

((前略))

警告warningの発音をカタカナであらわすと【ウォーニング】が最も近いのですが、ほとんどのC言語の書籍では『ワーニング』と書かれています。私はそのような記述を読む度に(本当に)ぞっとします。

以上の文は我が専門学校にて教科書として利用されている、定本明解C言語入門第Ⅰ巻入門編(柴田望洋著/SOFTBANK Publishing)内のコラムとして書かれているものです。

……皆さんはどう思いますか?

それでは彼は、radio(日本では『ラジオ』と読まれていますね。)を『れいでぃお』とでも読んでいるのでしょうか?……まさか、ねぇ。

彼は、『ワーニング』などと読んでいたら、恥ずかしいですよ。と言っていますが、日本人にとっては『ラジオ』を『れいでぃお』なんて読んでいるほうが恥ずかしいと思いませんか?

因みにこの本、普通の入門書では無視するような細かい(けれど大事な)事をちゃんと記している点は評価できるのですが、進め方が『変態』です。(><)

わたしは、オススメしません。

……何でこれが教科書になっているんだろう。

ラベル:english
posted by 天井冴太 at 22:19| Comment(0) | TrackBack(0) | Programmers | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。