Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

ソートは "Order by" なのか

勉強会の懇親会で話題になったのですが、データをソートするアルゴリズムを知らない開発者がいるとか。
「Order byでソートできるのだから、アルゴリズムを知る必要がない」と発言する人もいるとか。
確かに、簡単にソートできるのですがね。
ソートロジックは、バブル、クイックなど多種あります。各種のロジックを知る必要はありませんか、せめてバブルソートは書いて欲しい。ロジックを考えるのは楽しい事なのに。 今時の開発者は実利効果でコーディングするのかなぁ。
 ソート順序が変わっても、カスタムソートで対応できるので、ますますアルゴリズムを知らなくても、作れてしまう。
確かに、アルゴリズムを知らなくても、開発仕事はできる時代です。「知らないから困る事」は起こらないかも知れません。
(視点を変えたら)エンジンの知識やFF/FR/RRの区別がつかなくても、日常の運転に支障はないです。その意味では、知識は不要かも知れません。でも運転のプロではないですよね。
 「開発者はプロでは無くなった」と見るか、「プロでなくても開発できる」とみるか、「プロは開発に直接必要な知識で仕事する」と見るか...その他の見方もできそうです。

仕事に直結しない知識かも知れませんが、技量の基礎力になると思うのです。
でも寂しいなぁ。開発の醍醐味を知らないのは勿体ない。
 と拘っている私は、五月蠅い親父に映るのだろうか。

投稿日時 : 2010年7月18日 0:53

Feedback

# re: ソートは "Order by" なのか 2010/07/18 2:42 Pasie.

 あえて言おう。知らないと!(ぉ
 まあ冗談抜きで、クイックソートとかシェルソートとかは私も語れません…_| ̄|○

 ただ、これも冗談抜きで言いますが、ソートアルゴリズムの深いところは知る必要がないと思ってます。ソートに限定して言えば、私が知っていてほしいと思うのは、計算量がO(n^2)であるということ、ORDER BYに連動するなら、INDEXとの関係とかどう使われるかあたり。
 知らないより知っていた方がいいよね。という意味だと、私はソートアルゴリズムのみならず、浮動小数点フォーマットとか、CPUのアキュムレータの動作とかも知っててほしいと思う。でもそれは無茶な要求だと思ってます。
 でもさすがにSTACK,QUEUE,双方向LISTくらいは押さえて欲しいとは思うけど。常に(意識して)使われるものでもないし、知らなければ適宜教えていくしかないかなあとも。

# re: ソートは "Order by" なのか 2010/07/18 2:52 れい

たくさんの人が情報技術の恩恵を得るにはそれだけ人が必要ということですねぇ。
奥深いところまで教育するような余裕がない。

インスタントな人材でも開発できるようになったということでもあります。
それはMSなどのベンダやネットで情報発信する人のおかげでもあり。

もしそうでなかったら、いまのように迅速にソフトウェアが供給されないわけで…。

そうだとするならネットで情報発信するのは自らの首を絞める行為でもありますね。

職人が張る伝統工芸の傘では本数が足りなすぎて皆に傘がいきわたらない。
アルミとプラスチックのビニール傘をたくさんばらまいた方が幸せ総量は大きい。
だからといって和傘の価値が落ちるわけではなく。

どの業界も成長後期には経験するようで。
つぎは介護業界でしょうか?

# re: ソートは "Order by" なのか 2010/07/18 9:37 こあら

一口に「開発者」と言っても、物理層の人とアプリ層の人では必須となる知識が違うんでしょうね。それだけ専門化が進んだというか。

# re: ソートは "Order by" なのか 2010/07/18 20:57 Ognac

どこまでが基礎知識か、の線引き自体が無理なのですが、絶対数が増えるにつれて、
非職人的な「仕事」としての開発者が増えるのは宿命なのでしょうね。
「教えてくれないからできない。」「仕事に必要な技術習得の勉強時間は勤務中に含まれる」という人を責めるのは間違っている。とは自覚しているのですが、
知識は、仕事の為の知識でなく、個人の蓄積知識だと思わないのかなぁ。、
開発知識は、会社を離れると、クリアされるモノでなく、個人に帰属するものなのに。
勿体無いなぁ

# re: ソートは "Order by" なのか 2010/07/19 0:08 Pasie.

 いや、ストイックに真理を追究する姿勢云々の是非についてどうこう言いたいのではなくて。立ち位置、対象フィールドが違うんだと思うわけです。
 例えば恐らく我々はx86互換プロセッサであれば、もしかすると互換プロセッサでなくても、そんなことは意識しなくてよいフィールドで開発をやっていたりするわけです。でもCPUそのものの設計を扱っている人にとっては、同じ32bit互換プロセッサであってもi386~Corei7はまるで別のもののはずなんですね。で、その人に「CoreとPentiumは内部的には全く違うのに、最近のアプリ開発者は知ろうともしない」と言われたとしても「そういうもんですか」くらいにしか答えられないと思うわけです。そしてその人にしても、チップ内の配線の技術については全く知らないかも知れない。
 結局立ち位置によって、ある程度に線を引いて、その線の外はそういうものだと信じて仕事をしているだけだと思います。例えば、二次方程式の解の公式x=-(b±√b^2-4ac)/2aとかを疑わず使うのと同じようなことではないかと思うわけです。
 そういう意味で、ソートアルゴリズムは、CPUとか数学公式と同じレベルで、すでに定義されていて使う物、に昇華したのかな、と私は感じた次第です。

# re: ソートは "Order by" なのか 2010/07/19 1:20 Ognac

>立ち位置、対象フィールドが違うんだと思うわけです。
>二次方程式の解の公式x=-(b±√b^2-4ac)/2aとかを疑わず使うのと同じようなことではないかと思うわけです。

ブラックボックスの扱いの問題ですよね。
>x=-(b±√b^2-4ac)/2a 解の方程式ですが、方程式を丸暗記して、問題に正解しても、意味があるのかと思うのです。
問題の直接的回答だけを求める人(仕事)にとっては、方程式の使い方を知っているだけで、十分に用はたります。
結果だけの採点だと、合格します。
でも、Ax^2 + Bx + C から導出する手順を知ると、他の場面で応用が利きます。
後輩を指導するとき、「魚を与えるのでなく、魚の釣り方を教えろ」と謂うのは、その思想だと思うのです。

もっと根源的になると、云われるように、私は解っていない部分がおおいです。64Bit OS上で仮想器械に32BIT OSをはしらせたとき、開発者は32Bit機として扱えばよいし、それ以上詮索する必要がないのも理解できます。
 境界線をどこで引くかの問題になると思います。しかし、ネット上で転がっているソースをコピペして(ソースを理解しないで)仕事をしたと思うのは間違っていると考えるのです。
あ! これ境界線の引く位置の問題に帰着するのか。うーん。価値観の問題になるのかも。

CPUの命令処理でパイプライン処理と次命令の予測処理になってくると、理解できていない私がいるので、突っ込まれると回答できないことのほうが、圧倒的に多いの事実なので、薮蛇になるのですが....orz
でも,浮動小数点と固定小数点のbyte表現の違いで 1/3*3 NOT = 1  を理解して貰えない開発者には閉口するので......愚痴になってもた。

# re: ソートは "Order by" なのか 2010/07/19 7:21 組木紙織

>あ! これ境界線の引く位置の問題に帰着するのか。うーん。価値観の問題になるのかも。

価値観の問題ではなくて問題が起きた時に対処できるかどうかが境界線だと思います。
アプリケーションの開発者はコンパイラのバグに対処する必要はないし、
同様にコンパイラの開発者はCPUのバグに対処する必要はない。

ソートに関しては、Order byでどんな状況でも適切ななソートが出来るのならそれだけを使えばいいです。

#浮動小数点と固定小数点はバグの原因になるので理解すべき

# re: ソートは "Order by" なのか 2010/07/19 9:59 まりも

本格的なプログラマ歴は10年以下なので、
(趣味として軽くかじる程度ならそれ以前からやってましたが)
ソートのアルゴリズムは知ってはいますが、
仕事としてちゃんと使ったことはないです。

基礎的な知識を知った上で応用に進んだ人間からすると、
基礎的な知識は必要不可欠に思えますし、
それなしに応用なんてできるわけがないように思えてきますが。

本当にそれなしにできないかをちゃんと実証的に考えると、
案外できてしまっているんじゃないかと思います。

むしろ周りを見回してみると、低レイヤーが理解できるあまりに高レイヤーが理解できていない弊害のほうが大きいような気もします。

そもそも、ソートのアルゴリズムを理解していない人のことをわかってない扱いしたくなるわけですが、
そういう人も浮動小数点の大小比較のアルゴリズムが分かってないといわれることはあるでしょうし、
それが分かっている世代の人も、ワイヤードロジックが分かってないと言われたでしょうし、
それが分かっている世代の人は半導体のバンドギャップがとか言われて、
それが分かっている人は電子の波動関数がどうとか、
まあ本質的な理解を求めていくと切りがないわけです。

考えてみると、本当に本質的な部分から考えていくと、
コンピュータが0と1を扱っているなんてのも、
かなり高レイヤーで初めて出てくる抽象的な概念なんですよね。

とすると、ソートアルゴリズムが分かっているかどうかが重要なのだ、と言っているのは、
ソートアルゴリズムがぎりぎりわかっている人間の感性に過ぎないんじゃないかと思うのですが。
どうでしょうか。

# re: ソートは "Order by" なのか 2010/07/19 22:43 Ognac

>#浮動小数点と固定小数点はバグの原因になるので理解すべき
潜在バグの可能性がないときや、不具合が発生しなければ、ブラックボックスでよい。という主張も理解できます。
事実、細部をしらないで使っている事も多いです。
 この場合、「バグ」の定義が難しくなりますね。仕様と違う動きをするときはバグと判断できますが、知識不足で「バグがつぶれない」「この動作は仕様です。」「修正/作成に多大な工数がかかった」など、解決に必要以上の工数を費やす可能性も高くなります。
問題判別できる目と、「これ以上細部の知識は不要」の判断力....これが必要なんでしょうが、習得するのは難しいですね。


>ソートアルゴリズムがぎりぎりわかっている人間の感性に過ぎないんじゃないかと思うのですが。
>どうでしょうか。
上記のコメントと被るのですが、技術を知り尽くすこときが不可能であるので、ある程度以下の細部をブラックボックス化するのは避けられません。 その境界線をどこに引くかは、個人差があって、強制できるものではありません。
文字コードでソート(バブルソートでも、クイックソートでも)するときは
・1文字のコードを比較して、大小判定する
・順番を入れ替える手順で多くのアルゴリズムが存在する
と説明できます。
しかし、文字コード比較で、CPUレジストリーに双方の値をロードして、比較しているのか、一方の値をロードして一方との差分をとっているのか、Bit_shiftで判定しているのかは、コンパイラが吐き出すソースをみないと不明です。大抵の業務開発者は、ここまでの知識は不要です。

自分が開発している部分の一つ下のレイヤーを知らないと、不穏な動きに遭遇したとき、対処できません。
二段階したのレイヤーはブラックボックスとして扱っても許せると思います。

ソートに関して言うと。
SQL文はOrder by はソートに対応していますが、一つ下のレイヤーです。
配列のソート Array.Sort() は一つ下のレイヤーです。
Order byや Array.Sort()の照合順序とちがい体系でソートすることになった場合、
 「機能的にできません」と断るか、「ソートロジックを駆使して作る」かどちらかになりますが、
「開発者なら、断らずに作って欲しい」と思うのです。

一から勉強して作るのは、工数的にも費用が発生しますが、知識を持ち合わせていれば、さほど工数をかけなくて実装できます。
引いては、顧客に提供できる機能に直結すると思うのです。

この境界線を高く設定すると、知識不足でできないことを、「OSの機能上できません」「工数的にできません」という開発者を招いてしまうと思います。過去に幾人かいました。

確かに、線引きは難しく、下手すると、永遠の不毛な世代論争になるかも知れませんね。「いまどきの若いもんは駄目だ」というのが古代エジプトの文字にあったとかなかったとか。
オートマチック車が全盛なのて「ダブルクラッチは必須だ」と言っても受け入れて貰えませんが、それと同レベルの主張なのかなぁ。

# re: ソートは "Order by" なのか 2010/07/19 23:34 Pasie.

>その境界線をどこに引くかは、個人差があって、強制できるものではありません。
 これはある程度答えがでていると思っていて、組木紙織 さんの「問題が起きた時に対処できるかどうかが境界線」というのが的を射ているのではないかと思います。

>Order byや Array.Sort()の照合順序とちがい体系でソートすることになった場合、
> 「機能的にできません」と断るか、「ソートロジックを駆使して作る」かどちらかになりますが、
 話が別のレイヤーに飛んでいます。これは要求をどう実現するかという話であって、究極には費用面を含めた判断が必要な分野の問題です。
 また、ソートロジックなどの実装レベルについては、強いて言えば、照合順序の問題はソートロジックでは解決できず、望む照合順序を実現するキーを別に作るとかそういう解決になりそうです。

>知識不足でできないことを、「OSの機能上できません」「工数的にできません」という開発者
 それはどうしようもないですね。そのベンダーや開発者の実力だと考える以外にありません。
 それを回避するには、例えば情報処理技術者非取得者は業務にIT系開発業務に携わってはいけないという法案でもできる以外に道はないんじゃないかと。もっとも応用情報レベル(ITSS Lv3)をもってしても難しい気がしますが。

# re: ソートは "Order by" なのか 2010/07/20 0:20 Ognac

>話が別のレイヤーに飛んでいます。
たしかに、話が脱線しかけました..orz
>キーを別に作るとかそういう解決になりそうです。
比較部分の実装問題で、ソートロジックの自体は不変で解決できそうですよ。
でも、そうですね。実務作業のレベルで考えると、組木紙織さんの定義が現実解になりそうですね。
個人的希望的要素が入るとヤヤコシクなりまね。

>そのベンダーや開発者の実力だと考える以外にありません。
その場面に直面したら諦めの局地ですか。ありそうですね。

>応用情報レベル(ITSS Lv3)をもってしても難しい気がしますが。
開発現場は、個人のノウハウに依存する部分が多いということですかねぇ。
医者の世界も、生命維持に「最善を尽くせ」と法律化されていても、運命は医者のスキルに左右されますね。
開発業界は、家内製手工業から脱せないのかも。

# 
Twitter Trackbacks for

???????????? "Order by" ?????????
[wankuma.com]
on Topsy.com
2010/07/21 1:04 Pingback/TrackBack


Twitter Trackbacks for

???????????? "Order by" ?????????
[wankuma.com]
on Topsy.com

# re: ソートは "Order by" なのか 2010/07/21 15:54 刈歩 菜良 CTP

プロぢゃない人にも開発をしてもらわないと人でが足りん。
ってのが、正解だと思ったり...
(^.^)

# I believe this is one of the most vital information for me. And i am satisfied reading your article. However want to observation on some common things, The site taste is perfect, the articles is actually great : D. Just right job, cheers 2019/04/07 2:31 I believe this is one of the most vital informatio

I believe this is one of the most vital information for me.

And i am satisfied reading your article. However
want to observation on some common things, The site taste is perfect,
the articles is actually great : D. Just right job, cheers

# I have fun with, cause I found exactly what I used to be taking a look for. You've ended my 4 day lengthy hunt! God Bless you man. Have a great day. Bye 2019/04/10 19:36 I have fun with, cause I found exactly what I used

I have fun with, cause I found exactly what
I used to be taking a look for. You've ended my 4 day lengthy
hunt! God Bless you man. Have a great day. Bye

# Sweet blog! I found it while surfing around on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I've been trying for a while but I never seem to get there! Cheers 2019/05/12 0:35 Sweet blog! I found it while surfing around on Yah

Sweet blog! I found it while surfing around on Yahoo News.
Do you have any suggestions on how to get listed in Yahoo News?
I've been trying for a while but I never seem to get there!
Cheers

タイトル
名前
Url
コメント