2018年
平成30年 昭和93年
141日経過 残り224日
21
営業日
05月 月曜日
May 皐月 Mon 仏滅
May Monday
今月営業日
008 / 019 日
今月休業日
002 / 012 日
今年営業日
137 / 241 日
お知らせNo.339. SSLはじめました。 2017/12/18
お知らせNo.305. ユーザー様整理いたします 2017/09/28
お知らせNo.223. Firefoxのパスワード記憶について 2017/03/23
お知らせNo.218. プラグイン機能の説明を作成しました。 2017/03/22
お知らせNo.211. LINEを公開しました。 2017/03/17




USER:
PASS:
新規登録
  • BBSみしお より
  • BBSみしお より
  • BBSみしお より
1人の会員

8
Unique
Visitors
Powered By Google Analytics
インフォトップ公告表示プラグインの実演です。

文系のプログラミングのプロ

担当@みしお 開始日:2017年04月05日 更新日:2017年04月05日

文系のプログラミングで見かける「こうしたらプロっぽいかも」という改善点があります。
まず文系なので、文脈の構成に文系力をつかいましょう。
文系力とはなにか。いまつくった造語ですが文系力とは「肯定」だといえます。
いえますもなにも今おもいついたので厚みはまったくないですが、ともあれ否定をしないこと、分岐に直進しないことです。

具体的にいいますと、ORを連続させない、IFで多角的にしない、除算で絞り込まない、です。
ざっくりいうと「ネガティブな言葉はつかわない」、ポジティブ宣言です。

なぜポジティブに形成するとプロっぽいのか、それは社会人生活を送っていればわかることです。
否定で追い込んで愚痴ですっきりする上司の命令を聞きたい部下はいないのです。
明るく笑って肯定的にありかたを指導してくれる先輩についていくものです。

まあそれは冗談ですが、肯定と否定では複数回行う、複数個確認する場合の作業量が全然違います。

100個のうちから1個を抽出するのには最大で100回(実際には初回を一致しなければ最後の一つ前まで循環するなど)確認作業が必要です。
これが100個のうちから2個を抽出するのにも、100回です。2個を満たすかどうかわかりませんが、不足している2個目を何回同じ分母から探しても見つかることはありません。
なので100回の確認が必要です。

では100個のうち2個が含まれていないこと確認するには何回の作業が必要でしょうか。含まれていない AND OR 含まれていない という式だとまず確実に200回は確認しますよね。
確実に、100回確認して含まれていないかを確認しなくては、最後の1つまでも合致している可能性は捨てきれないからです。
肯定と否定のミックス、「ない場合はフラグを立てる」で2本のフラグを準備しても確実に絶対100回は最低でも確認することになります。
肯定は運が良ければ数回の確認で2本のフラグを満たすことができます。もちろん可能性としては最大で否定の構文と同じ量になることはあります。

これが3個の要素を、4個の条件を、となると、どれだけの計算が必要になるかと考えると、含まれていないとき、いないとき、いないとき、と続けることの恐ろしさがわかると思います。
社会人生活とまったく同じですね。文系としては。

では含まれていないこと抽出するには一体どうしたらいいのか全く見当がつかないし望んでいる方向とまったく逆ではないか、と思われるのは文系としてはこまったものです。
文系ならば「合致するやつらを甘い言葉でそそのかして集め、それを一網打尽にする」という手を思いつくべきです。
取り除きたい候補を、合致するたびに抽出したり、合致した時点で不合格をつけて、状況を進行させないという結果を返します。肯定が否定的な結果につながるのです。

状況の進行を許可するフラグを宣言して、合致する条件分岐を1分岐ずつ列挙して、合致した時点で検査は終了、作業も終了という流れであれば、全部がないときをしっかり検証したうえでの同じ結果という作業よりも楽になるはずです。

おそらく元あった構文を利用してつぎはぎつぎたしし、増築を繰り返して迷路になった建物のように 条件 || 条件 || 条件 || 条件 || といった形になってしまっているような文章をときどきみかけます。
もう人間からみてもなにがでてくるかよくわからないですし、機械も実際自分がなにをやっているのかわからなくなっていると思います。
また、否定する形で値を取り込んだりすると、それを検証する段階などで弱点を突かれてサイトに問題がでることもあります。
肯定でさっさとすませて、必要な結果を表示する作業にすすみたいものです。
もちろん雑巾がけをかけたところ延々と就業時間までかけさせる上司や、同じ確認作業で全項目チェックがついても二度三度繰り返して確認させる上司にあたってしまい無駄を感じたり非効率にいらだつこともあると思いますが、それは効率化を考える機会だと思えば有益なものになるかもしれません。
無駄な作業で給料泥棒をしたりさせたりさせられたりしている上司の愚痴をいって炎上して追い込まれることと比べれば、どんどん業務を効率化していける人ネガティブにまけない人になったほうが同じ条件構文であれば効率はいいかもしれません。
文系としてはもちろんそんなポジティブモンスターは現実の世界には存在しない文字上の形容表現であるということには気が付くべきです。

白いカラスはいない、だからカラスは黒いのだ、ということを証明するためには永遠にループするモジュールで白いカラスを検索しつづけ否定しつづけなくてはなりません。
実際そんなことはプログラムも現実世界も無理なわけで、事実上作業をするという言葉自体がそれを否定しているわけなのですが、国語の文法上「さも存在しているように形容できる言葉がつくれる」という状況に甘んじています。
なんの証明にもならない、ならないのかどうか証明しつづけろ、しつづけることは無理、だからある、もしそれを巨大な演算機で証明しつづけたとしても、得られる結果は「カラスは黒い」という結果に帰着するだけです。
必要なデータは「黒いカラスを検索する」ですむ話で一匹の黒いカラスが発見された時点で「現認されるカラスは黒い」の演算が終了します。否定するために白いカラスの発生までループするのであれば、肯定する要素に対しもとより回答の存在が不確定なので、演算機ではなくそれは観測機です。
そもそも無健大という変数設定が機械にない以上、確率が数値的に上限があるので、そこに含まれていなければ答えは永遠に見つからないことは確実です。

追加する、という作業は1回の作業でできますが、取り除く、は「最初に見つけた」という肯定部分を「除外する」という作業になります。その除外された分母には「さらにほかに含まれている可能性はないか」といわれると、可能性を否定できない構造のものもあります。
まだ含まれているという可能性がもしなるならば、また初めから「一つ除算した結果から、もう含まれていないかを確認しなくてはならない」となります。対象の値すべてについてもう含まれていないかを確認しつづけなくてはならないのです。
もちろん肯定とあわせて、否定対象がみつかるたびに取得し「存在する」フラグをたてて肯定していけば、対象全部を全て確認するだけでも作業が可能です。

notを多段にしたり、ORやANDをつなげたり、UNIONで一挙に取り出してみたり、それで便利になるのは最終的にできた取得データが一つの変数名にはいっていて人間の作成作業にやさしい、というだけです。
機械の作業を遅くさせる要因になるもので、倍以上のデータを個別に取り出し、合致するものをまた別の変数に取り込み、それぞれのデータを別々に抽出してひとつの画面を構成したほうが負荷が低いということもあります。

ここでスコープという概念があるのですが、個別にとりだしたデータをいつまで有効にしておくか、どこと連携させるかという規模があります。それをその局面局面で全部のせようとするので負荷が巨大になることがあります。
毎回遅刻寸前で電車にのる、いまきたからその電車にのらないともったいない、と駆け込みをすることがいかに損失の可能性を含む危険行為かというのはうまくいっているうちはわからないものです。
走って転んで怪我をしたり、忘れ物に気づいてよけいに時間がかかったり、後悔する結果となったときに反省する事としては「小分けに要素を分布し、損失を減らしたほうが安全ではないか」だと思います。
一本おくらせれば5分、10分おくれますが、忘れ物に気が付いて折り返すのにはその時間を単純に倍にした時間は待ち時間としてかかるかもしれません。一本おくれた間に取りに帰ることで取りに戻る時間だけで済むのか、往復と取りに戻る時間を費やすのかでは大きく差が出ることもあるかもしれません。
個別に値を抽出し、大きな視野で全体の作業が完了するまで保持し、完了すれば解放すれば負荷としては平均的に低く、たやすい作業の蓄積であれば平行して多くをこなすことができるかもしれません。

これを理系と、効率的に行うことを理系と形容するのは文系としてはもったいないと思います。単純に、簡単な命令ですぐに結果をだしてくれる環境であればのびのびと仕事ができる、と文系的に表現してもいいのではないでしょうか。
そののびのびと出せた結果を毎回その場で使い切るのでは文系としても国語の教科書にのっている先人のような失敗をしてしまうことを学ばなくてはなりません。その場の楽しみで流されて失敗してせつない、という趣旨のものが多く国語の教科書には例として扱われているかと思います。
なぜあんなダメ人間のオンパレードで日本語の勉強をさせているのか不思議に思いますが、大きなスパンで考えるとスコープの小さい一時的な変数をいくら列挙しても答えはでない、そしてそれを教材としてつかっている組織体はそれを経過として観察できる位置から教材にしている、グローパル変数やローカル変数の定義を相対的に体験できる、と考えれば国語の授業もすてたものではないかもしれません。

まずは、否定的な言葉遣いと、略語や外来語の使用を控えて、ググってでてきたサンプルプログラムによくわからないけど似たものを増改築しつづけて運用したりせず、なにが取れるか、取れたものをどう活用するか、そんな使い方を考えてみると、文系なりともプロのプログラマのような雰囲気が醸し出されると思います。
とりあえず何がわるい、打倒何々、○○の嘘、いますぐ○○はやめるべきだ、○○がダメな○個の理由、とか世間では大人気ですが、文系はそこにつられないことが、文系の価値を高めるものだと思います。

否定形で文章を構築しているあの系は、いったいなに系なのでしょうか。すくなくとも文系ではないことを祈っています。


このページはログインするとコメントを記入できます。
先頭に戻る