表計算ソフトはコードレビューがしにくいため重要な仕事には向いていないという説 95
ストーリー by hylom
適切なテストツールがあれば良いのでは 部門より
適切なテストツールがあれば良いのでは 部門より
danceman 曰く、
計算機科学の専門家であるDaniel Lemireという人物が、経済書「Capital in the Twenty-First Century」を例に、なぜ大切な仕事には表計算ソフトを使用するべきでないのかを説明している(Slashdot)。
Piketty氏は著書の中で、「賃金が増加することより資本の配当のほうがより大きな利益をもたらすため、少数のエリート層が全ての富を手に入れることになる」という説を展開している。Piketty氏はデータ分析を行ってこの説を正当化しているのだが、そこで使われている表計算ソフト内の記述に間違いが含まれていたという。
Lemire氏によると、表計算ソフトはコードレビューを困難にするという。何十もある小さなセルにコードが隠れているため、もし慎重にコードを査読しなかった場合、また他の人がレビューしづらい状態になっていた場合、信頼できるコードになるはずもないとのこと。つまり表計算ソフトは重要でない仕事を急いで片付けるときには向いているが、重要な仕事を確実に完成させるようには設計されていないという。
全く同意 (スコア:4, 興味深い)
>何十もある小さなセルにコードが隠れているため、もし慎重にコードを査読
単純な計算だけなら追うのも楽なんだけど、一つのセルの中にif()関数を入れ子にして、さらに別のシートを表引きしたりするものになると、見るのもイヤになる。
単純な計算ならシートの機能だけで作ればいいけど、複雑な条件判断が絡んでくるならマクロを使うべきだし、表引きだとかが絡んでくるならデータベースで作った方が構造がスッキリしてわかりやすくなるんだけど。
で、そういうのを作ってる人に言わせると、Excelなら誰でもいじれてメンテナンスできるとのこと。
私は絶対手をつけないな。というより怖くてできない。
あと、表計算ソフトって、セルの保護機能が弱いから、うっかりデータを書き換えても気がつかないのが怖い。
よく、表計算ソフトを使って集計しているのに、電卓で検算していると揶揄されているけど、表計算ソフトの融通無碍な操作性が、データの完全性に不安感を引き起こしているのが原因だと思う。
私の場合、表計算ソフトを使うのは、単純な表か、データ処理の最終段階で見栄えを整えるくらいにしている。データ処理自体は、ここ十年ほどはAccessで行ってる。リアルタイムで計算結果を表示するような使い方で無いなら、データベースのほうが業務には使いやすいと思うな。
普通の事務員こそ、データベースの使い方を覚えるべきだよ。
Re:全く同意 (スコア:4, 参考になる)
えっと、私自身は今はExcelのワークシート関数積極的利用派です。
マクロウィルスが流行ったせいで、今時のExcelはマクロを自動実行させない設定なのが普通でしょう。「このファイルはマクロを動かしても大丈夫かどうか」を一体どうやって確認するのか、そういう点で、私は「ワークシート関数で実現出来る処理には、マクロは使うべきではない」と思ってます。今はもう、積極的にできるだけマクロは使わないようにしています。
> 表計算ソフトって、セルの保護機能が弱いから、うっかりデータを書き換えても気がつかないのが怖い。
それは制作者がちゃんと保護設定してないだけ。Excelにはそれなりな保護機能があります。必要最小限の「手入力するセル」だけ変更可能にして、残りのセルは全て変更不可にすれば、「うっかりデータを書き換え」るなんてことはありません。
Excelの保護設定での最大の問題は、保護されていないセルに対して、「カットアンドペースト」すると、そのセルに対する参照まで移動してしまうこと。
(例えば、保護されていないセルA1とB1があった場合、A1もB1も書き換え可能なので、A1をカットしてB1にペーストなんてこともできます。ですが、それをやっちゃうと、別のセルがA1を参照していた場合、たとえ保護していたセルであっても、カットアンドペーストに追従してB1への参照に書き換わってしまうし、B1への参照があったとしたら、参照先が消失したので#REFになっちゃう)
これについては、ちょっと泥臭いですが、INDIRECT とか OFFSET とかを使って解消可能です。
まあ、そうやって安全なシートを作ってると、どんどんコードとしての可読性は悪くなっていきますし、コードの一覧表示が出来ないから保守性が悪いという点についてはもう確かにその通りなのですが、
とりあえず、セル内のコード記述レベルでは、改行を多用しインデントすることで、できるだけ可読性を高めるようにしています。例えば
って感じ。
これを全部一行にまとめて
って書くより格段に読みやすいと思います。
#これは、「A→B 100」って入力があったら、Aを-100、Bを+100するための処理の一部。
#OFFSET($H2,0,-3)・OFFSET($H2,0,-2)は、E2・F2への参照です。E2・F2は保護されていないセルなので、上述のカットアンドペースト問題から守るため、「H2の3つ左」「H2の2つ左」という指定にしてます。
そんなときこそFileMaker (スコア:3)
確かに,データベースでロジックは済ませといた方が楽ですね。
FileMakerなら,Excel並みの手軽さだと思う(Accessほどの自由度はないが)ので,
もう少しその手の分野にも使われてよいと思うのだが,Excel代わりに使うには高いんだよなあ。
Re:全く同意 (スコア:1)
if()関数の長大な入れ子を一つ作れば、あとのセルにコピペで済ませられるのが表計算ソフトの良いところ。
ただ、そのコピペが何かの拍子に間違っていることがあるんだよな。
Errorが表示されてれば発覚しやすいけど、たまたま計算できてもっともらしい数値を表示してると気付かない。
Accessは個人的には好きだけど、引き継ぎが大変なのであまり使えません。
Excelバリバリ使う人でも一歩引いてる感じ。
Excelをそれなりに使えている人は尻込みして仕事を引き継いでくれません。
Accessで作った簡単な表を引き継いでもらって、何年かして戻ってみたらExcelのフィルター機能使いまくった凄いものに改造されてた。。。
Re:全く同意 (スコア:2)
関数ダイアログを使えば計算経過を確認できるんで、Debugによく使うんだけど、
関数をネストすると関数ダイアログは途端に使いにくくなるんだよなぁ。
データベースの敷居の高さ (スコア:1)
Excelの場合、手元にある手書きの表かなんかにあわせて見た目を作ってから、プログラム的な動作を作り込むことが比較的容易なので、初心者も手軽に気軽に使える。
一方、Accessの場合、最初に対象業務で必要なデータ項目を考えて、データ構造を設計しないと、実用的に使えないあたりが敷居の高さにつながってる気がしますね。
けど、対象業務を適切に分析してデータ構造を設計すれば、データ再利用もしやすいし、変更もしやすくなるんだけどね。
このプロセスを必要以上に難しく考えてしまってるんだよな。
その業務で必要なデータが何かと、データ同士がどのように関連しているか、を理解できて、 データベース設計の基本を理解すれば、それほど難しくは無いんだけど。
引き継ぎが難しいのは同意です。
まずAccessを使おうという人自体が少ないので。
データ共有の手段として、AccessやSQL Server(のようなRDBサーバー)を活用できれば、かなり業務効率が上がる組織も多いはずです。
Don't repeat yourself (スコア:1)
「メンテナンス性がおちるから、コードをコピペするなとあれほどw」
というのが、スプレッドシートでコードを書く時の問題の一つだと思う。
AfterEffiectのエクスプレッションも大概 (スコア:2)
まあ,あっちは見た目がどうか,なわけで致命的ではないけど。
コードレビューのしにくさは同等かそれ以上。プリコンポーズされてた日にはもう…
Excel Hater Rant (スコア:2)
そうだそうだ。データ分析をするなら、何かデータだけが格納されたシンプルな形式のファイル(CSV形式、Json 形式、なんでもいい)と、何かオープンな実行環境(R言語、Python、Haskell) こちらのほうがずっと書きやすい。コードを構造化しやすくて、人間にとって読みやすい。
式がセルに隠れるからわかりにくい? (スコア:1)
>スプレッドシートを使ってしまったために、せっかく公開したコードに誤りが含まれている
評価式はセルをクリックしないとわからないとかで、表示されてる数値を見るだけだとチェックしにくいってことなのかな。
他の手段で数値を求めて結果を表にしたりしても結局は一緒の様な気がするけどそうでもない?
ソースと計算過程をレポートに添付すればいいんでしょうけど。
もしくは研究ノート。
シートにロジックを組むか,セルにロジックを組むか (スコア:5, 興味深い)
セルにロジックを組まれると一覧性が悪いってことでしょうね。
flashですら,AS4.0からステージにしかロジックが組めなくなってるわけで,
表計算ソフトというのは,時代遅れなのかもしれませんね。
とはいえ,表計算ソフトって,電卓みたいに手軽なものだから,
セルにロジックを組ませない,というのはそれはそれで元々の用途から外れている気もする。
Re:シートにロジックを組むか,セルにロジックを組むか (スコア:1)
なんというかもうあの「表計算ソフト」だけで確立した世界(分野)になっちゃってる気がする。
表計算はもちろんとしてさらにワープロ、(簡易)DB、お絵かきソフト、プレゼンの機能まで持ち合わせてるし。
それだけで、スケジュール管理やプロジェクト管理まで頑張ってできなくはないし。
Re: (スコア:0)
AS4.0ってなんだ?
as3でもタイムライン上にスクリプトがかけた気がするけど
Re:シートにロジックを組むか,セルにロジックを組むか (スコア:2)
ごめん,3.0。
フレーム毎に書けるけど,ステージだけじゃん。
As2.0まではフレーム上のステージ上のインスタンスにも
スクリプトが埋められたのよ。
すげえ便利だったんだけど(特に動画関連),
考えてみれば一覧性が悪すぎるというか。
ただでさえ,フレーム毎にスクリプトが埋められたわけで。
Re:シートにロジックを組むか,セルにロジックを組むか (スコア:2)
にゃるほど,確かに。
まあ,一定規模以上になるとデータベース使った方が収集も結果も確実だよなあ,という気はするけど。
SASとか,準備は大変だけど,処理は確実だしね。大学とか研究所だったら普通にあるだろうし。
Re:式がセルに隠れるからわかりにくい? (スコア:3)
かなり昔からある機能だけど、今の Excel だと「数式」リボンの「ワークシート分析」のグループにある「数式の表示」ってON/OFFボタンで計算結果じゃなくて数式が一覧できるよね?
セル番地だと読み難いのは、相対参照は仕方ないとしても、絶対参照は「名前の定義」で適切に名前付ければ防げる問題だし、その程度の機能では対処出来ないクラスの余程複雑な数式を詰め込んでる人が多いのか、単に使い方を知らない人が多いのか。
結局可読性の悪いコードしか書けない人が問題であって、この際 Excel かどうかは関係ない気がするなぁ。
uxi
Re:式がセルに隠れるからわかりにくい? (スコア:1)
単に使い方を知らない人>わたし
でした。
そんな機能もあるんだ。
月に数回使う程度で、他人が作って送ってきたのを見るくらいでこの体たらくです。
Multiplanの頃はもっと頑張って使ってたけど忘れた。
一方日本は (スコア:1)
スプレッドシートの使い方を理解してもらえなかった……
今更、それ、ガッチガチにVBAだのマクロだので作り込まなくても、
スプレッドシートだけで簡単に実現出来るんですよとはいい出せない雰囲気だぞ……
Re: (スコア:0)
保守しながら使い続ける用途の場合、最初からロジックは VBAで組んだほうがメンテしやすいとか?
VBAとワークシートとでロジック・プレゼンテーションの分離ができたるする?
Re:一方日本は (スコア:1)
VBAは無理。読めない。わけわからん。
できればC#か、マクロ用にカスタマイズした廉価版C#を搭載して欲しいな。
精一杯妥協したとしても、JavaScriptが限界。
VB系は可読性が悪すぎる。
Re:一方日本は (スコア:1)
ヘタレが書いたらどんな言語でも同じ。
ぐちゃぐちゃなJavaScriptのコードはthisに何が入ってるか全くわからん。
とても読めたもんじゃない。
Re:一方日本は (スコア:1)
> VBAは無理。読めない。わけわからん。
PowerShell [blogspot.jp]にしなよ。
.Net Frameworkのオブジェクトなら触れるし、対話的作業もできるし
> できればC#か、マクロ用にカスタマイズした廉価版C#を搭載して欲しいな。
君の手元のPCがWindowsなら、C#は標準搭載だよ。
Csc.exeでコンパイル可能 [blogspot.jp]。
> 精一杯妥協したとしても、JavaScriptが限界。
JavaScriptで我慢できるなら、JScript [wikipedia.org]って手もあるぞ。
不満ばかり言う前に、少しは自分で調べてみなよ。
よくやってる方だと思うよ、マイクロソフトは。
Re: (スコア:0)
スプレッドシートで使えるんですか?
Re: (スコア:0)
いつの間にマイクロソフトはOffice内で追加インストール無しに
PowerShellやC#やJavascriptを使えるようにしてくれたんですか?
Re:一方日本は (スコア:1)
ソースが公開されてないとハックできないとかww
Re: (スコア:0)
LibraOffice みたいなのから派生したりしないのかしら
Re: (スコア:0)
過去の資源が動かなくなるほうがコスト的に問題では無いでしょうか?
Re: (スコア:0)
csc+オートメーションで行けんじゃね?
Re: (スコア:0)
VBA自体は読みやすいですけどね。Excel組み込みオブジェクトが結構読みづらいですが。
Findとか(遅いんで自分で連想配列とかバイナリサーチとかしたほうが早いです)。
Re: (スコア:0)
他の人も書いてるけど
VBAはアプリのOLEオートメーションを呼び出してるだけなのでC#からも呼べるよ。
(MS版の)JavaScriptからも呼べる。
VBAはエディタが標準でついてるだけの話だろう。
Re: (スコア:0)
スプレッドシートは文字の位置が揃った文書を作るためのソフトです。
記入する数値は電卓で計算して全角で入力するのです。
Re:一方日本は (スコア:1)
簡易言語 (スコア:1)
「重要な仕事には簡易言語は向いていない」
と言えば何となく…通じないものか…
セル? (スコア:1)
列ごとじゃなくて?
Excelが一番普及しているのは仕方ない (スコア:1)
ExcelとIDEの中間くらいの位置付けで、もっと気軽な数字やデータいじりに便利なソフトが出てきてほしい。
単に出てくるだけじゃ駄目で、Excel並にデファクトスタンダードになっていてほしい。
事務員にExcelは使わせたくないが、だからってIDEやテキストエディタでコード書かせる訳にもいかないし。
Re:Excelが一番普及しているのは仕方ない (スコア:2)
>ExcelとIDEの中間くらいの位置付け
数字のデータなら、その位置はMATLABやScilabですかね。
全部行列演算で考えるってのが、馴染みのない人にはハードルかもしれませんが。
文字列のデータが対象なら、何になるんだろう?
コードレビューに表計算ソフトを使う場面が想像出来ないのだけど…… (スコア:1)
普通、コードレビューってコンパイルに通すファイルをエディタで直接参照して行うものでないの?
それとも何か、普段からソースコードの編集するに表計算ソフトを使ってるのか?
エクセルのマクロですらエディタは別ソフトだぞ……。
しもべは投稿を求める →スッポン放送局がくいつく →バンブラの新作が発売される
Re:コードレビューに表計算ソフトを使う場面が想像出来ないのだけど…… (スコア:1)
おそらく、他の皆さんとは全然違う話をしています。
ここでのコードレビューとは、「スプレッドシートに書き込んだ計算式が正しいかどうか確認すること」という意味なので。
それを「コードレビュー」と呼ぶのが適切なのかは議論がありそうですが、他の方は上の認識でコメントしているようです。
エクセルでやらかした人は以前にも居る.しかも多くの人の人生を変える形で. (スコア:1)
まあ、これを読んでみろ.
http://markethack.net/archives/51871682.html [markethack.net]
シャレなんねーぞ.これのせいで首くくった人も居るんじゃねーのか、というレベル.
ユーザーに欲しい機能のアンケート取ったら8割が既にある機能だったという逸話 (スコア:1)
を思い出した。
例えば「何十もある小さなセルにコードが隠れている」と仰る方には↓が役立つかもしれない。
・条件付き書式機能(数式が入ってるセルを強調表示できる)
・ジャンプ機能(数式が入ってるセルだけをまとめて選択状態できる)
・周囲のセルと異なるセルを目立たせる機能(名前忘れました)
・セル間の依存関係を表示機能(文字通りシート内にセル間の依存関係を示す矢印が表示されます)
・INDIRECT/EVALUATEによる文字列の評価 (別のセルに文字列として書いた数式を評価させられます)
・任意のセル範囲、定数、数式に名前を付ける機能
・VBAによるワークシート関数自作
・プラグインによるワークシート関数自作
・COM/OLE/DDEによる外部アプリケーションやスクリプトからの操作
などなど。
言語として考えた場合、可読性が悪い (スコア:0)
基本、機械可読の形でしかコードが保存できないから。
なにしろ、そのまま(再現性のある形で)印刷できない。
(画面ハードコピーじゃないよ)
所詮、処理系言語のRADツールでしかない。
いや、入り組んだxmlとかで出されても困るけどさぁ
Re:言語として考えた場合、可読性が悪い (スコア:2)
比べるならソフトウェア開発一般でしょう。
最良でも GUIメニューと密結合していて設定を印刷できない表計算系と、
最悪のIDEでのみ そういうことが起こりうるソフトウェア開発。
ビルド設定ぐらいmakefileで書くでしょ
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
研究者にしては不正確な言葉遣いだな (スコア:0)
Computer ScienceのProfessorだそうだが、赤を入れたくなる言葉遣いだといわざるを得ない。
「重要な仕事に使うな」ではなくて、「第三者によるコードレビューを必要とするような仕事に使うな」でしょ。
実際、重要だけど表計算ソフトが十分役割を果たせる仕事なんていくらでも思いつく。
コードはテキストエディタで (スコア:0)
もっとコーダー向けの表計算ソフトができるといいのかもね。各セルごとのコードが一覧されるような。
Excel方眼紙はコードレビューに向いていない (スコア:0)
コールシーケンスとかExcelで書いて送りつけてくる日本のお客さんの話じゃなかったのか…。
# 本社(US)に送るために英訳するんだけど文字が入力されてるセルを特定するのに一苦労
Re: (スコア:0)
方眼紙にしてるだけでもアレなのに、それぞれのセルでインデント使ってたり、
そのインデントが機能だったり半角スペースだったり全角スペースだったりその混雑だったり。
隣のセルの文字で途中から隠れてるのでも分かりづらいのに、
インデントで全部見えなくなってたり。
あ、そういう話ではないのね。
テストも本質的にはダブルチェック (スコア:0)
Excelの場合は単に、もう一回Excelファイルを作って(可能なら別の人に入力してもらって)ダブルチェックするだけで十分なことが多い
手間が掛かる作業を簡単にするのがプログラマの仕事 (スコア:0)
OLEで簡単にアクセスできるのに、なぜセルの関数を一覧化するプログラム/スクリプトを書かない?
Re:手間が掛かる作業を簡単にするのがプログラマの仕事 (スコア:2)
Word はずいぶん前から diff 内蔵してなかったかな?
Excel にはなかったので JScript で書いてたけど 2013 から内蔵されたような?
uxi
Re:そこに表示されてるのは、なんだ? (スコア:1)
前任者が関数と手入力を混在させた表を使っていたので
私が担当するにあたり全て作り直したら、今までと違った傾向の報告書が出来上がるようになりました。
それを提出した結果、私が怒られましたよ。
前任者に仕事のやり方を聞いて作り直せと。
私も頑として譲らなかったので追いやられた後、別の方が担当するようになったらしいのですが
数ヶ月後にその報告書の提出義務が無くなったと聞きました。
その程度の仕事を継続してやってる所、実は多いんじゃないでしょうか。