将来しなくても良くなるコーディングテクニック 141
ストーリー by reo
規模によりにけり 部門より
規模によりにけり 部門より
Anonymous Cocoichiban 曰く、
もうやらなくていい昔のコーディングテクニックあれこれという話題がありました。過去は過去として振り返るのは有効ですが、それを踏まえた上で、将来しなくても良くなるコーディングテクニック、というのは何でしょうか ?
IDE や言語環境の改善により、人間が無駄なことをしなくて済む環境は整いつつあるも、まだまだ改善しなければならない部分は多い。そんな環境改善に伴い、今は行っているけど将来的には意味が乏しくなるコーディングテクニックというのを語り合うのも面白いのではなかろうか ? 日頃の不満点、こうなったらいいな、など色々思いはあるでしょうが、コーディングテクニック関連の雑談ということでは丁度良い機会でもあることだし、忌憚無い意見をお聞かせ下さい。
将来必要になるテクニック (スコア:2, おもしろおかしい)
コンピュータをおだててやる気を起こさせるテクニック。
らじゃったのだ
Re:将来必要になるテクニック (スコア:1)
いや、アジモフで合ってます(クラークにもあるかどうかは知らないけれど)。
元ACが言っているのは多分、「問題の鍵」(『木星買います』ハヤカワ文庫所収)でしょう。
「返事をしてくれ──ませんか!」
ループの展開とか (スコア:2)
昔のプロセッサだとループを展開してやると速くなったみたいだけど、
いまどきのキャッシュ積んだプロセッサは外部バスにアクセスすると極端に遅くなるので
キャッシュにループを全部のっけて高速なクロックでブン回すほうが速度を稼げるよね。
オンキャッシュで回っている時間だけなら、同じ処理を
自前でPLD使ってハードウェアロジックを組んだ時より処理が速いとか。
Re:ループの展開とか (スコア:1, すばらしい洞察)
今どきのキャッシュを積んだプロセッサでも(キャッシュに収まる範囲で)ループ展開したほうが速いので展開する回数まで考慮しなくてはならなくなり、コーディングテクニックとしてはかえって複雑になったようです。
ところでこのストーリーは今どきのプロセッサでは もうやらなくていいコーディングテクニック [srad.jp]ではなく、将来しなくてもよくなるコーディングテクニックに関するものです。将来の夢のプロセッサやコンパイラでは人間様がループ展開する必要なんか一切なくなるといいね、という意味ならストーリー通りですが。
codingそのものが無くなるんじゃないの? (スコア:1)
# アセンブラのようなANSI C codingから未だ離れられないロートルより
Re:codingそのものが無くなるんじゃないの? (スコア:3, おもしろおかしい)
Re:codingそのものが無くなるんじゃないの? (スコア:1, すばらしい洞察)
>プレゼンしたらソフトウェア完成っていう身分になるのはいつのことやら
では、「将来しなければならなくなるプレゼンテクニック」をタレコミしてくれ。
Re:codingそのものが無くなるんじゃないの? (スコア:1)
というシステムでOKじゃないか。
そうしたらプレゼンのテクニックも必要ない。
Re:codingそのものが無くなるんじゃないの? (スコア:2)
>> オブジェクトをお絵かきソフトのように組み合わせればもうソフトウェアの完成
IntelligentPad
http://www.pads.or.jp/ [pads.or.jp]
その後進化していない様子ですね。
Re:codingそのものが無くなるんじゃないの? (スコア:2, 参考になる)
制御システム向けには、RTI 社の Constellation があります。
Constellation では、画面上で用意されたブロック (コンポーネント) を繋げるだけで制御プログラムが開発できます。
もっとも、実アプリには用意されているコンポーネントだけでは不足で、デバイス制御等でカスタム・コンポーネント (C++ で作成) を用意する必要もありますが。
実績もあり、例えば、NASA ではこの Constellation (当時は ControlShell という名前) を使ってケネディ宇宙センターの Shuttle Checkout and Launch Control System (2億円の予算のシステム!) に使用しました。その他、無人機の開発や研究等で使用されております。
しかし高価なので、それなりのシステムでしか採用するのは難しいと思います。
Re:codingそのものが無くなるんじゃないの? (スコア:1)
お絵かきソフトのように組み合わせ
TechEdに来てる「絶対プログラムとか組まなさそう」な年配の方などが、そういう風に
勘違いしそうなデモや説明なら、マイクロソフトさんが毎年披露されてるんですけどね...。
Re:codingそのものが無くなるんじゃないの? (スコア:1, すばらしい洞察)
LabVIEWは既にそれを実用の域に迄してますね。
Re:codingそのものが無くなるんじゃないの? (スコア:1)
MADO (スコア:1)
見た事もさわったことも無いけど、
ちょうど親コメントに書いてあるような趣旨のツールだった覚えがある。
SOFMAPのパンフレットでいつも読んでたな。
--------------------
/* SHADOWFIRE */
Re:codingそのものが無くなるんじゃないの? (スコア:1, おもしろおかしい)
>ブジェクトをお絵かきソフトのように組み合わせればもうソフトウェアの完成
再帰を表現するときは、合わせ鏡を使うんだよね~。
Re:codingそのものが無くなるんじゃないの? (スコア:1)
「N次元 超多包体の幾何学とその扱い方」
とかがプログラマーの必修科目になったりして。
Re:codingそのものが無くなるんじゃないの? (スコア:1)
グルー言語なんて概念も出てきているからね。
コンポーネントの持つインターフェースの標準化とかができれば、用途を特定して必要な機能を推定しやすくなれば、積み木を重ねるだけでコーディングというのも不可能じゃない。LabViewとか、REGOとか、特定分野に限ってなら実現できているわけですし。
Re:codingそのものが無くなるんじゃないの? (スコア:1, すばらしい洞察)
ノ ‐─┬ /
,イ 囗. | / _ 丿丿
| __| —ナ′
/ ‐' ̄
,‐ /
ナ' ̄ / 、___
/ ノ`‐、_
/ _ 丿丿 _メ | _/
—ナ′ 〈__ X / ̄\
/ ‐' ̄ / V /
/ \ l レ ' `‐ ノ
/ 、___ Χ ̄ ̄〉
\ 丿 /
\ / _
—ナ′__
| _/  ̄ ̄〉 / ,
X / ̄\ ノ / _|
/ V / / く_/`ヽ
レ ' `‐ ノ ———'フ
/ ̄ ┼┐┬┐
み | 〈 / V
つ `− 乂 人
を
┼‐ | —┼‐
┼‐ | |
{__) | _|
| く_/`ヽ
逆に絶対無くならないと思われる (スコア:1)
# これが作れたらその言語は習得できたような気になるよなぁ。
## 気のせいだ。
並列化・分散処理 (スコア:1)
並列処理のためのテクニックとかノウハウとかがなくなる
…といいな。
# それはそれでメシのタネが減るので複雑な気持ち。
Re:並列化・分散処理 (スコア:1)
同意。
今後必ず必要になるプログラミング技術でありながら、まだスマートな解決方法が見いだされていないのがマルチスレッドプログラミング。
OpenMPに高精度な依存チェック機構がついてくれればとりあえず何とかなると思っているんだけど、
今後はよりコンパイラによる自動適応が進んで欲しい。
また、複数台のコンピュータによる分散処理も標準的なライブラリなどで可能になって欲しい。
これらは需要が大きいし現在でもある程度の対応はできているもので、いずれは可能になると思う。
タイピング (スコア:1)
誰かにプログラム読んでもらってそれを(人が)正しくタイピングできるなら曖昧さは解決できるってことだよね。
バックスペースとかはなくせないかもしれないけど。
英語の綴りが問題か、なでしこの出番だ!
AVG anti-virus data base out of date
Re:タイピング (スコア:1)
世の中のタイピング練習ソフトが淘汰されて、
早口言葉練習ソフトが巷に広がるんですね?
アホな保守スタッフのために・・・ (スコア:1)
なんていう配慮をしなくてよくなる未来。
Re:アホな保守スタッフのために・・・ (スコア:2)
while (c = getchar(), c != EOF)
が好き。
# よけいわかりにくい?
Re:アホな保守スタッフのために・・・ (スコア:1)
うろ覚えですが..カンマ演算子の左右の評価順序はAnsi Cでは定義されてないんじゃなかったっけ?
だからこの場合 c != EOFが先に評価されることもありえるんじゃない?
gccは左から評価してるみたいだけど
Re:アホな保守スタッフのために・・・ (スコア:2)
while (TRUE) {
c = getchar();
if (EOF == c) {
break;
}
....
}
// いやまあ、美しくないのはわかっているけど、将来の自分の可読性のためにもこう書く。
//// そういえば、比較のときに定数を左辺に持ってくるテクニックは、さすがに死んだか。
Re:アホな保守スタッフのために・・・ (スコア:1)
> そういえば、比較のときに定数を左辺に持ってくるテクニックは、さすがに死んだか。
未だによく見ますよ。
古のコードのメンテナンスだけではなく、新規分にも。
コーディング規約に明記しようとしたヒトを必死で止めたこともありました。
「比較演算子の左辺に定数」「ハンガリアン記法」「カッコ前後の改行、空白」
は、コーディング規約の体裁を整える(項目数を水増しする)ためによく使われますね。
Re:アホな保守スタッフのために・・・ (スコア:1)
私も疑問に感じて調べていたのですが、
アンダースコア+大文字、アンダースコア二つで始まる識別子は常に予約されている。
アンダースコアで始まる、ファイルスコープの識別子は、通常の名前空間とタグ名前空間で予約されている。
ファイルスコープの識別子の扱いが別になるのが、ちょっと不思議ですね。
Re:アホな保守スタッフのために・・・ (スコア:1)
Re:アホな保守スタッフのために・・・ (スコア:1)
有る人が唱えてました。どんな世界でもプロフェッショナルの中でトップレベルの者の半分未満の能力しかない者はプロ失格で退場を強いられる。 ITの世界もトップレベルプロの半分に届かないの能力の者を追い出さなければ、良くならない。と。
つーか、OOやLLの世界についていけなくて退場を宣告されるかも > 俺
仕様書の作成 (スコア:1)
仕様記述言語でシステムを定義するだけで完成とか・・・
#あれ?それって結局仕様記述言語でコーディングしているだけ?
Re:仕様書の作成 (スコア:1)
仕様書がいい加減でもプログラムで何とかする→仕様書をプログラム並みに正確に書かないと動作しない
に移行するだけってこと忘れてるよね。
Re:仕様書の作成 (スコア:2)
いやいや。仕様はあくまで仕様なので、具体的なアルゴリズムは書く必要はありません。
入出力の関係さえ正確に書けば、欲しいプログラムが自動的に出来上がります。
たとえばこんな風に書けばその場に応じた適切なソートアルゴリズムを生成して…
sort(XS, YS) :- permute(XS, YS), sorted(YS).
permute([], []).
permute([X|XS], ZS) :- permute(XS, YS), insert(X, YS, ZS).
insert(X, YS, [X|YS]).
insert(X, [Y|YS], [Y|ZS]) :- insert(X, YS, ZS).
sorted([]).
sorted([X]).
sorted([X,Y|XS]) :- X = Y, sorted([Y|XS]).
…ということを1982年ごろから10年かけて国家プロジェクトでやろうとしてたんですよね。
Re:仕様書の作成 (スコア:2)
> sorted([X,Y|XS]) :- X = Y, sorted([Y|XS]).
右辺は X <= Y, sorted([Y|XS]). ですね。
希望的観測 (スコア:0)
しなくて済むようになるといいなぁ。という話しか出てこないんじゃないの?
#裏づけを持って語れるツール屋がこんなとこみてるはずないし。
人間はいらない (スコア:0)
人間がいなくても勝手にコーディングしてくれる
Re:人間はいらない (スコア:1)
人間?コンピュータ様が地球環境の一部として保護してくれることを期待しましょう。
汚物として消毒されちゃう可能性と、どっちが高いでしょうね。
コントを書く (スコア:0)
Re:コントを書く (スコア:1)
Re:コードにコードを書かせる (スコア:2)
え? (スコア:1)
ある程度指示したら、ある程度自動で書いてくれるようなもの
「実施したい処理内容を自然言語に近い(ということになっているが,実際は…?)言語で書き表したものを入力すると,自動でコンピュータが認識できるコードを書いてくれるもの」なら,既にありますよね…?
人はそれを「コンパイラ」と言う…
Re:コードにコードを書かせる (スコア:1)
>コードにコードを書かせることってできないものですかね。
コンパイラ、或いはインタプリタのことでしょ。
そして、より高レベルに移動するだけで、コードを書く作業はなくならない。
quine @ ruby (スコア:1)
たった一行指示するだけで、自動的に自分自身を出力してくれます。
30分あまり試行錯誤しました。Cやなんかで書く人はすごい。
Re:最適化 (スコア:4, 興味深い)
また、微妙に違うんですけど、MacのロゼッタがPPCのAltiVecをSSEに変換しているなんていう話を聞いたときには、正直、もう、SSEすら手書きする必要はないんではなかろうかとも思いました。
Re:最適化 (スコア:1, 参考になる)
Intel C++ だと各機種用のコードを全部生成して実行時に CPUID を見て
切り替えたりするコードを吐くことができますので、そういうコンパイラを
使っている限り、コンパイル時に機種を指定する意味はあまりないです。
Re:最適化 (スコア:2)
いえいえ、PGOですら、静的に特定の環境におけるプロファイル結果をコードに反映するに過ぎないじゃないですか。
それからすると、VM系言語のJITは、まさに実行中にコードを最適化することもできるわけで、私の妄想としては、これらの言語が将来的に、CPUの動的なコア数の増減やクロック変化、メモリ空き状況、その他のI/Oから、ユーザーのステータスまで、ありとあらゆる状況を加味して、コードの「その場限り」最適化を行える可能性を持っているのではないかなぁと。
Re:最適化 (スコア:1)
最適でないコードを実行するコストと比べて
最適なコードを生成するコードを最適化するコードを最適化するコードを生成するコスト(オーバーヘッド)がどれだけの割合になるか
計算するコードを実行(ry
しかし、CPU別に最適化オプションやら、バージョンを作らなくても
起動時に、自動的に環境に合わせて拡張命令やGPUを使うように最適化してくれるというのは確かに夢の技術ですね。
Re:最適化 (スコア:1)
時々でいいので、autoのことも思い出してあげてください…
# 最適化とは関係なさそうですが
Re:最適化 (スコア:1)
C++0xでauto大活躍の予定です
C++0x - auto [hatena.ne.jp]