サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
3: 2004-09-06 (月) 14:49:01 ソース 4: 2009-11-17 (火) 12:06:24 ソース
Line 17: Line 17:
*** 2.人間本位な考えを捨ててみる *** 2.人間本位な考えを捨ててみる
--今までいろいろなプログラミング手法が提唱されてきましたが、それは常に正しいことでも正義でもなんでもなく、基本的にはプログラマが楽をするためのものでしかないということを認識しなければいけません。少々強引なことを言えば、プログラムは人間が読むために書くのではなく、機械が読むために書いているのです。だからまずは機械にとっての都合を優先してやりましょう、みたいな発想です。 +-今までいろいろなプログラミング手法が提唱されてきましたが、それは常に正しいことでも正義でもなんでもなく、その多くは基本的にはプログラマが楽をするためのものでしかないということを認識しなければいけません。しかし少々強引なことを言えば、本来プログラムは人間が読むために書くのではなく、機械が読むために書いているのです。だからまずは機械にとっての都合を優先してみてはどうでしょうか。この視点で今まで見えなかったものが見えてきます。 
--たとえば汎用的なライブラリは非常に便利ですし、オブジェクト指向はすばらしいです。しかし汎用的なライブラリは使わない機能を多く持つ場合がありますし、オブジェクト指向においても使わないインターフェースを大量に持ったものを知らずに使っている場合があります。 +-たとえば汎用的なライブラリは非常に便利ですし、オブジェクト指向はすばらしいです。しかし汎用的なライブラリは使わない機能を多く持つ傾向がありますし、オブジェクト指向においても使わないインターフェースを大量に持ったものを知らずに使っている場合があります。 
--もっと機械本位に考えてみます。サイズが小さく処理が少なくて済み、さらに必要な機能をだけを的確に提供するようなライブラリ構成やクラス構造がよいのです。またソースの読みやすさなんて機械にとってはどうでもいいことです。人間にも読みやすくて機械にもうれしいようなソースの書き方が存在します。たまにこれが両立できない場合もありますが、そのときに優先するべきは機械の都合であって、人間の都合ではないのです。+-これをもっと機械本位に考えてみます。サイズが小さく処理が少なくて済み、さらに必要な機能をだけを的確に提供するようなライブラリ構成やクラス構造がよいのです。またソースの読みやすさなんて機械にとってはどうでもいいことです。実は人間にも読みやすくて機械にもうれしいようなソースの書き方が存在します。たまにこれが両立できない場合もありますが、そのときに優先するべきは機械の都合であって、人間の都合ではないのです。
-JavaをやめてCに切り替えてみる、なんてことだけでも機械の都合に近づいているのでこの観点ではいいわけです。 -JavaをやめてCに切り替えてみる、なんてことだけでも機械の都合に近づいているのでこの観点ではいいわけです。
-移植性も当然人間の都合です。機械は移植性が高くなってもうれしくありません。もちろん、移植性を高める過程でよいコードに到達することはあります。それは機械にもとても嬉しいです。 -移植性も当然人間の都合です。機械は移植性が高くなってもうれしくありません。もちろん、移植性を高める過程でよいコードに到達することはあります。それは機械にもとても嬉しいです。
Line 30: Line 30:
*** 3.時代に依存しないプログラミング *** 3.時代に依存しないプログラミング
-今はCPUが速いからとか、今はメモリがたくさんあるから、みたいな理由でベストの解は変化しません。メモリをたくさん使うけどCPUの負荷は小さいとか、CPU時間を多く使うけどメモリの負荷は小さい、みたいなのはありえます。どっちがベストなのかは状況によりますが、どちらも重要な解でしょう。どちらか一方で済むとは思えません(だからtek1だけでいいとかtek5だけで十分であるという発想は僕にはありえない)。 -今はCPUが速いからとか、今はメモリがたくさんあるから、みたいな理由でベストの解は変化しません。メモリをたくさん使うけどCPUの負荷は小さいとか、CPU時間を多く使うけどメモリの負荷は小さい、みたいなのはありえます。どっちがベストなのかは状況によりますが、どちらも重要な解でしょう。どちらか一方で済むとは思えません(だからtek1だけでいいとかtek5だけで十分であるという発想は僕にはありえない)。
--もしあなたがプログラムの改良を「今は~」的な理由や「これからは○○だから」的な理由でやめたのなら、それはそういうものであって、OSASKがいうところのベストではありません。たぶん時代が変わるとまた書き直すことになるんでしょう。+-もしあなたがプログラムの改良を「今は~」的な理由や「これからは○○だから」的な理由でやめたのなら、それはそういうくだらないものであって、OSASKがいうところのベストではありません。たぶん時代が変わるとまた書き直すことになるんでしょう。
--今はCPUが速いからこれでも大丈夫、とかいってリリースされたライブラリは、結局そのアルゴリズムを酷使しなければいけないアプリからはボトルネックでしかなく、そのためにそのコードが書き直されることになります。ベストなコードが一個あればいいのに、中途半端なコードが大量生産される結果になります。メモリについても同じです。今はメモリが安いから大丈夫とか言っていると、そのルーチンをたくさん使おうとするときにメモリ不足のせいで書き直しをしなければいけなくなります。 --今はCPUが速いからこれでも大丈夫、とかいってリリースされたライブラリは、結局そのアルゴリズムを酷使しなければいけないアプリからはボトルネックでしかなく、そのためにそのコードが書き直されることになります。ベストなコードが一個あればいいのに、中途半端なコードが大量生産される結果になります。メモリについても同じです。今はメモリが安いから大丈夫とか言っていると、そのルーチンをたくさん使おうとするときにメモリ不足のせいで書き直しをしなければいけなくなります。
---また逆に、仮にそのルーチンが酷使されないほど重要でないとしたら、そんなものがたくさんCPU時間を浪費したり、メモリを浪費したりしても許せるものでしょうか。主役でもないのに主役以上にリソースを食って主役の計算に支障が出ているかもしれません。+--また逆に、仮にそのルーチンの利用頻度が低くて重要でないとしたら、そんなものがたくさんCPU時間を浪費したり、メモリを浪費したりしても許せるものでしょうか。主役でもないのに主役以上にリソースを食って主役の計算に支障が出ているかもしれません。
-ということで、時代に依存したプログラムは結局その場限りのものであって、多くの人に使われてはいきません(まあそれでも無理にそういうものが普及した結果がWindowsやLinuxの肥大化なのかもしれません)。時代を言い訳にしなければいけないような中途半端なものを作るくらいなら、その数倍の時間をかけてでもベストなものを一つ作るほうがずっとマシです。 -ということで、時代に依存したプログラムは結局その場限りのものであって、多くの人に使われてはいきません(まあそれでも無理にそういうものが普及した結果がWindowsやLinuxの肥大化なのかもしれません)。時代を言い訳にしなければいけないような中途半端なものを作るくらいなら、その数倍の時間をかけてでもベストなものを一つ作るほうがずっとマシです。
Line 38: Line 38:
-必要な機能はどんどんつけるべきです。しかし利用頻度が低い上に他の機能の組み合わせで表現できるなどという場合は、そんな機能はいらないということです。いらない機能がどんなたくさんあっても、それはソフトウェアの価値にはなりません。使いにくくてサイズが無駄に増えるだけで、かえって害にもなります。 -必要な機能はどんどんつけるべきです。しかし利用頻度が低い上に他の機能の組み合わせで表現できるなどという場合は、そんな機能はいらないということです。いらない機能がどんなたくさんあっても、それはソフトウェアの価値にはなりません。使いにくくてサイズが無駄に増えるだけで、かえって害にもなります。
-こんな機能は機械にはつらいから本当はあったほうがいいんだけど省こう、という姿勢は行きすぎです(その論法を強烈に押し進めていいなら、0バイトの何もしないプログラムが最高の価値だということになりかねません)。その機能が人間にとって有用ならたとえプログラムのサイズや速度の低下を招いてもつけるべきです。デザインでがんばって限界に達したらそれでいいのです(これ以上機械本意にしたら目標の便利さに到達しない、など)。ただ処理があまりにも重いのなら、設定やオプションなどによって必要なときだけ機能するようにするとか、その機能がないサブセット版も用意しておくとかの、そんな工夫はあったほうがいいかもしれません。 -こんな機能は機械にはつらいから本当はあったほうがいいんだけど省こう、という姿勢は行きすぎです(その論法を強烈に押し進めていいなら、0バイトの何もしないプログラムが最高の価値だということになりかねません)。その機能が人間にとって有用ならたとえプログラムのサイズや速度の低下を招いてもつけるべきです。デザインでがんばって限界に達したらそれでいいのです(これ以上機械本意にしたら目標の便利さに到達しない、など)。ただ処理があまりにも重いのなら、設定やオプションなどによって必要なときだけ機能するようにするとか、その機能がないサブセット版も用意しておくとかの、そんな工夫はあったほうがいいかもしれません。
--本質的にどうしても速くできない処理は存在します。そういうものは、今のCPUをもってしても高速にはできないようなものであっても、そのようにプログラミングするしかないのです。それはプログラマのせいではありませんし、ベストなのです。これは浪費ではないので全く問題ありません。速くできるのに速くしないのはおかしいですし、小さくできるのに小さくしないのはおかしいですが、もうこれ以上速くできないものや小さくできないものは、たとえどんなに遅くて大きくても、素晴らしいプログラムです。+-本質的にどうしても速くできない処理は存在します。そういうものは、今のCPUをもってしても高速にはできないようなものであっても、そのようにプログラミングするしかないのです。それはプログラマのせいではありませんし、実用レベルではなくてもプログラムとしてはベストなのです。これは浪費ではないので全く問題ありません。速くできるのに速くしないのはおかしいですし、小さくできるのに小さくしないのはおかしいですが、もうこれ以上速くできないものや小さくできないものは、たとえどんなに遅くて大きくても、素晴らしいプログラムです。
*** 5.コンパイラの最適化との関係(追記) *** 5.コンパイラの最適化との関係(追記)

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。