やっぱり動的型付け言語は大規模開発で効率が悪い 3
転載
987 名前:979[sage] 投稿日:2011/11/09(水) 11:14:08.03
>>981 >えと、それなりの人数で開発していれば、普通にある話だよね?
ンっ、
>>981 の世界ではそれが普通なの?
少なくとも自分が過去に関わったプロジェクトでは、
(言語とは無関係に)コンポーネントの公開インターフェイスや
共通で使用される(=内部ライブラリである)モジュール/クラスは、
あらかじめ(暫定案でもいいから)固めて文書化しておくのが普通(常識)
そうしないとコンポーネントごと複数人数で分担する、あるいは
複数の会社で開発を分担して最終的に統合してプロダクトとするような
規模のプロジェクトでは、仕様変更に伴う大混乱が「間違いなく」発生する
それとも最近のIDEというのは、この辺りの仕様変更まで自動的に追従してくれるのかな?
>>987 完全なウォータフロー型の開発だね。
インターフェースならまだしも、プライベートな関数や
プライベートなクラスまで最初にきっちり決めてしまうってことが可能で、
そのあとは変わらないのが原則。そしてドキュメントを作るってならそれでいいよ。
だけどそれがアジャイルのやり方ではないってのは分かるね?
うちはアジャイルでやってるので、そういう最初にきちっと決めるやり方は合わない。
アジャイルは各イテレーションで仕様変更が入るもの。
> それとも最近のIDEというのは、この辺りの仕様変更まで自動的に追従してくれるのかな?
自動的に追従してくれるのは、リファクタリングブラウザで出来る範囲まで。
引数の入れ替えとか名前の変更とか長いコードを関数に追い出したり、
逆に関数をインライン化したり、クラスをまたがったメソッドの移動とか
ようするに機能的な仕様変更ではなく、アプリの動作を変えないコード上の仕様変更のうち
機械的に処理できるものだけ。
それでも十分便利だけど。たいてい機能的なの仕様変更には、
コード上の仕様変更が多かれ少なかれ含まれるものだからね。
4 :
3 :2011/11/09(水) 19:15:31.44
ちなみに、アジャイルであっても、外部の会社との連携がある部分は
きっちりとインターフェース決めるよ。
だが、自分の会社で開発をするのであれば、
自分の会社の中で自由に決められる部分はあるだろ。
(ようするにプライベートなコードだ)
>>987 の会社はそんなのが一切ない開発なのか?
> 998 名前:デフォルトの名無しさん[sage] 投稿日:2011/11/09(水) 17:29:33.14 > そんなに全てを静的に決めたいならsubtype polymorphismも含めて > 全ての多相性を禁止にしろよ > どのメソッドが呼ばれるか静的に決まるぞ お前は、ずれてるw すべてを静的に決めたいなんて誰も言っていない。 動的型付けを否定しているのであって、 動的を否定しているのではない。 「ポリモーフィズムを使うJavaは静的型付け言語です」 これを理解してから話してくれ。
なお、IDEを知らない人は、間違った想像をしてそうだから補足しておこう。 ポリモーフィズムを使ったら、どの関数が呼ばれるかわからないから コード補完ができない。 たぶん、こう考えてるでしょう? 違う。ポリモーフィズムを使ってもコード補完は出来る。 まずインターフェースは同じだから、どんなメソッドがあるかは分かる。 どんなメソッドもがあるかはわかっても、実際に呼び出されるコードはどれかわからない。 たしかにそうだ。だがその場合、候補が出る。 インターフェースを実装しているクラスの候補が出る。 これもコード補完だ。候補すらわからない動的型付け言語より何倍も良い。 そして、インターフェースを変えると、その内容に応じて自動〜半自動で 実装クラスの修正が行える。これも静的型付け言語ならではのIDE機能だ。
ウォーターフォールでの開発でも ある程度自由にできるところはあるでしょ? 何もかもきっちりと決まっていて開発はそれに従うだけ。 そんなドカタみたいな堅苦しい開発はやりたくないな。
>>3 >完全なウォータフロー型の開発だね。
いや、スパイラル型だ(ウォーターフォールとアジャイルの中間)
ウォーターフォールはもはや現状に追従できないし、
アジャイルは個人の力量に依存しすぎという判断
固めて文書化しておくのは公開インターフェイスまで
具体的にはコンポーネントの外部入出力と内部ライブラリの仕様
内部の詳細(プライベートなクラス/モジュール)はインプリメンタに自由に任せ、
コードレビューで品質を判断する
この公開インターフェイスを事前に設計するのが技術リーダの仕事で、
その設計品質がプロジェクト全体の品質確保に強く影響を与える
9 :
デフォルトの名無しさん :2011/11/09(水) 20:24:14.41
IDE信仰者はREPLを余り知らない。逆に、REPL信仰者はIDEを余り知らない。
>>5 前スレの
>>995 に言ったんだよ
お前が言ったかどうかなんて知るかよ
例えば、完全にsubtype polymorphismを禁止すれば、メソッドを補完するときに
メソッドの中身すらIDEで表示することが可能になる
つまり、よりIDEが出来る範囲は増える
そのかわりに言語の表現能力は落ちるがな
つまり何事もバランスなんだよ。何でもIDEで出来りゃ良いってわけじゃない
個人的には、Javaの言語仕様はIDEでやってほしい事にマッチしてるとは思う
分かれればいいだけ 言語仕様の進化を止めて開発ツールIDEの進化を模索するか さらなる言語仕様の進化を望むか 俺はこれ以上言語仕様を拡張したところでc++のようなカオス言語が増えるだけ そう確信したから開発ツールの進化の道を選ぶべきと主張しました REPLが何なのか知らないけど開発ツールだろ、動的静的関係ない
>>13 だったらいいんだけど。ここを読んでてpythonでipythonやrubyでirbを一
度触ってみればいいのにな。と思うことはある。Rでもいいな。vimや
textmate,emacs使いが絶滅しない理由も分かりそうなのに。
プロトタイピングに便利なのはもちろんわかるが、 大規模なシステム開発で、そういったインタラクティブな スクリプティング環境で仕事をするというイメージがわかない。 個人的には、そういう環境がよく適合するのはプログラマよりも 大学の研究者や学生という印象なのだが。
>>12 ここで言う「大規模」の数値は共通認識有るんだっけ?
それなしじゃ議論にすらならないよな。
「大規模」=自分が書いてない(読んでもいない)コードのほうが多い。
具体性がないな。 次の方どうぞ。
>>6 動的型付けでもメソッド名補完できるし
メソッド実装しているクラスを探して修正できる。
っていうか君がドヤ顔で語ったその機能、
動的型付け言語のIDEが発祥なんだけどw
動的言語のIDEのメソッド補完は、静的言語に比べて遙かにプア。それは動的言語の性格上、当たり前。
22 :
デフォルトの名無しさん :2011/11/10(木) 09:15:36.54
動的で既存してよく使われているIDEを利用するメリットって あまりないからね。むしろ、動的言語の良さを殺してるような 印象を持ってる。やはり静的専用のものなんだと思うよ。
IDEでの補完は、コード中の文脈の中で型が固定的な部分についての支援機能だからな。特定は困るんで使い分け例だけ書くと、固定的な型の集合を事前に決めて解決できる問題領域については、型からの補完を活用すれば良い。 一方、金融とか大規模シミュレーションのように刻々と変わるデータでアルゴリズムを自動調整(より正確にはある種のカタログとの照合)する、とかの問題領域だと、事前に型構成を決めてしまうこと自体が無意味。 世間のビジネスの9割は単純な事務処理の集合だから、静的型ベースでも問題ない。
>>21 インターフェース型のメソッド補完と大して変わらんよ。
動的型付けといっても実装されるメソッドの組み合わせにはパターンがあるから。
>>24 確かに。
言語仕様、ライブラリの範囲では動的・静的に依らず、組込み可能だな。
困るのはJSONとかMaybeみたいに、型を固定化したくない場合だろうけど、スレ違いなんでやめておく。
あと「動的言語では補完が難しい」論の引き合いによく出されるRubyは便利だが、言語仕様が無いwって揶揄される位だからあまり参考にはならないだろうな。
動的型付けでまともに補完が使えるIDEってどれよ?
ま、俺は色々試しても結局 vim + screen + REPL に戻って来ちゃうんだけどな
>>26 無いと言っていんじゃね
NetBeans とかはかなり頑張ってる部類だが、
それでも「使える」って言えるレベルではない
Python Tools for VisualStudioとかPydevとかRSenseなんかは割と使える
かなり頑張っても残念な程度のIDEが現実なのに なんで動的厨は その機能は動的型付け言語のIDEが発祥なんだぞ(ゝω・)vキャピ とか言っちゃうんだろう
32 :
デフォルトの名無しさん :2011/11/10(木) 16:35:50.09
>>31 すべてを理解してから大きい口は聞くもんだな。知らないことがありありと
わかる
>>32 つ 隔離
型からの補完が少ないくらいで破綻する大規模開発wって楽しむスレだから。
InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState # クラス名 supportsDataDefinitionAndDataManipulationTransactions # メソッド名 補完無しではやってられませんよね
静的厨かどうかの判別は簡単なんだけどな。 質問の一部は、ソースの内部表現にPrintableCharacterを使わない場合の積極的な理由は?と言うもの。 これで調べるやつは軽症。
IDEや開発ツールや言語を自分で作るという考えがないから 他人に困難な仕事を押し付けるんだろう 全部自分で実装するつもりで考えれば型を省略してひゃっはーという アホな言語開発者はいなくなる 誰かが思慮浅い要求をする、自分の担当する部分には影響があまりないから取り込む IDEや開発ツール担当が死ぬほど負担を押し付けられる 成果は言語仕様に奪われ、IDEやツールはできて当然と罵られる 発言力の強い連中が好き勝手やって楽に成果を得ている裏で 発言力の弱い連中に負荷がかかって死にそうになってるのが見える みんな勝手なんだよ、俺のやってることはとてもすばらしい天才的な役割で 俺以外の連中がやってることはとてもくだらないバカでもできる役割だ やったこともないくせにこう決め付けて、こう結論付ける 俺は天才なんだ俺以外は馬鹿なんだ 俺と同じようなことをしてる奴も俺の次に天才なんだ 九割の人間はこんな思想を振り回してる
動的型付けで大規模開発やってる奴なんていないから 効率以前の問題
>>34 スマンが、この言語は何?で、どんなフレームワーク(?)の一部なのか教えてくれ
Rubyでもこれくらいの長さの名前空間を使う事はあるけど、
Rubyならクラス名はモジュールで名前空間を分離できるから
以下のようになるから補完の必要性は少ない
InternalFrame::TitlePane::MaximizeButtonWindow::NotFocusedState # クラス名
メソッド名については短縮できないけど、
これは1個のメソッドに多機能を詰め込みすぎた設計の失敗例に見える
supports_data_definition_and_data_manipulation_transactions # メソッド名
結局、言語設計の欠陥とメソッド設計の失敗という負債を、
補完という形でプログラマが背負わされているだけじゃね?
動的厨は大規模開発なんてしたことないくせに 口だけはでかい
ちょっと気になったんだが、IDE自体が動的技術のかたまりだって事知らないまま会話してるひと居る? 単なる切り貼りエディタじゃないんだから、キーを押す度に静的コンパイラが走ってるなんて考えて無いよな?
このスレってどれくらいの規模からが大規模なの?
スレを終わらせるなとあれほどw
>>45 FedEx程度の国際物流ネットワークのシステムや
アメリカの金融系のシステム程度じゃ
大規模とは言えないらしいぞw
>>45 具体的な数字は誰も出してないようだ。
俺は10の6乗ステップ以上が目安だと思うが。
なにそのJavaドカタのダラダラコード向けの基準はw
動的型だと短く書けちゃうから行数単価のプロジェクトで稼げない 静的型なら同じ案件でも効率良く大規模に膨らませられる、って意味なんじゃねーの?
>>45 linuxのカーネル*程度*と思ってて、あれがIDEで開発されていると思ってる
スレ
>>44 静的型付け用IDEで本当に動的なサポートってあんまりない。
キータイプごとに反映されるのはソースの色付けぐらいなもので、
ファイルをまたいだ整合性チェックとかは定期更新待つか更新ボタン押さないと
再チェックされないとか、そんなポンコツなのが多いよ。
>>53 最適化後のASTノード数での比較なら少しはマシかもしれん。
>>55 名前でカタログするか、型でやるかの設計の違いもあるから、静的型向けのIDEセットにそこまで望むのは可哀想な気もする。
単純な事務処理ベースのブロジェクトの場合は特に、IDE以外の問題が大きいしな。
本当にスレが終わっちまったw
>>56 じゃば
int sum = 0;
for (int i = 0; i < array.length; i++) sum = sum + array[i];
または今時なら
int sum = 0;
for (int each : array) sum = sum + each;
大抵の動的型言語
sum = sum(array)
ASTサイズでも比較無理っすorz
60 :
デフォルトの名無しさん :2011/11/10(木) 20:28:02.91
>>50 金融系と言っても、勘定形と情報系じゃ規模もMC性も全然違うしな…。
REPLで aproposがある言語だったらREPLと連携させれば補完は難しくない と思うよ。でも、ネーム空間の関係もあって、補完は大切な機能の一つでも Javaのような じゅげむじゅげむほにゃららあほんだらくそったれ と続くような馬鹿げた仕様にはなってないから、Java使いほど重要視してな いかも。ある意味仕様の欠陥を埋めてるのがIDEなんだろうし。
仕様の欠陥じゃなくて 使用者のを埋めてるんだろな
63 :
デフォルトの名無しさん :2011/11/10(木) 21:21:10.46
特定の言語に入れあげてることがあったりすると、その言語で優れている 機能でや関連するもので鼻高々というのは言語スレを見たら時々見かける けど、その機能が他の言語でほとんど無意味だったり、他の機能で問題なく 代用されてるってよくあることなんだよね。基準として持ってるのはいいけど それがどんなものでも必要ですごい重要な機能なのかは、慎重に考えたほうがいいよ。
いいから 動的言語でまともなIDEの名前を 最高のもの一つでいいから言ってみ。
smalltalkだな
smalltalkは言語名だ。 具体的なバージョンまで含めて言え。 使ったことなくて噂だけを信じてるようにしか見えんぞ。
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?PostIntelliJ マーチン・ファウラー
2000年の後半、私はツールに注目していた――特にJavaのリファクタリング ツールにだ。 その頃、
まともなJavaリファクタリング ツールは存在しなかった。 Smalltalk Refactoring Browserによって実証されてはいたが、
私はRefactoring Rubiconを超える者を待っていた。 それは(現在JetBrainsと呼ばれる会社の)IntelliJ IDEAを最初に触ったときに表れた。
そのリファクタリング機能には感動した――Javaにおける最初のリファクタリング ツールであった。
しかし、私が注目したのはそれ以外の機能だった。 このツールの機能のエッセンスは、編集時にメモリ内に解析ツリーを作成することだった――
この解析ツリーを使ってユーザーを支援する。
この時、静的型はコンパイラによって警告されるものではなく、 エディタが正しい型のメソッドを補完してくれるものとなった。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IntelliJの最大の支持は、ThoughtWorksの開発者から出てきた。 ThoughtWorksでは、誰かがプロジェクトで使う標準IDEを提案すると、 暴動をおさえるための催眠ガスが必要だった。
JBuilder信者、textpad信者、slickedit信者がいたからだ――頼むからemacs信者は刺激させないでくれ。
しかし、6ヶ月以内に、ほぼすべての人間がIntelliJを使うようになった。 自発的に使っている者もいれば、一生懸命使おうとしている者もいた。
Simon Harrisも諦めて使うようになった。
私は「SmalltalkのIDEはどんなものよりも優れている」と言ってウザがられていたのだが、 もうそんなことはない。
私にとってIntelliJとは、Smalltalk以来のIDEとなった。 そのパワーとユーザビリティは、他を寄せ付けなかった。 我々はポストIntelliJ時代に突入したのだ。
IntelliJがこの世界の唯一のIDEではない。 Eclipseが非常に早いスピードで後を追っている。 Eclipseには、IntelliJを好きになった機能の多くが搭載されている。
だが、Eclipseのことも敢えて「ポストIntelliJのIDE」と呼ぶことにする。 Eclipseがどんなに優れていようが、ThoughtWorksではIntelliJの方が好まれているようだ。
>>66 言語でもあり、(仮想)OSでもあり、開発環境でもあるんだよ
Squeakなんて、まさにそう
VisualWorksは仮想OSってよりはjavaと同じVMって感じだが
69 :
デフォルトの名無しさん :2011/11/10(木) 22:22:46.53
簡単に言うとEmacsってことか。 なるほど信者がうざいわけだ。
> ―頼むからemacs信者は刺激させないでくれ。
>>68 IDEでも開発環境でもなんでもいいから、
具体的にバージョンを言えって。
俺はemacsをかなり使い込んでるから、信者かもしれないけど、黙って聞いてる。 彼らが井の中の蛙の自慢なのかどうかというのを見極めるために、口を挟まない ほうがいいから。
73 :
デフォルトの名無しさん :2011/11/10(木) 22:30:00.57
IDEの話をしてたのか。 俺が使ったことのある動的言語のIDEといえばDWなんだが、使いづらかったな。 まあ、人によってはIDEと認めないかもしれないな。 IDEなんだけどな。
>>72 ようするに、井の中の蛙って罵倒したいんだろ?
十分口挟んでる。
75 :
デフォルトの名無しさん :2011/11/10(木) 22:31:23.34
>>72 わざわざ書かなくても皆わかってるって。
人を試すようなことをするのは、いろんな人がいるといえども、Emacs信者くらいだろ。
ほらほら、emacs信者の勘違いぶりが露呈してきてるぞw 俺は詳しいんだ的な発言。それこそ井の中の蛙だろう。
77 :
デフォルトの名無しさん :2011/11/10(木) 22:32:21.59
>>74 何言われようと、とりあえず口にチャックしてます。
上から目線=井の中の蛙 これ、だいたいあってる。
>>77 アメリカンジョーク?
口にチャックしてるから喋れない。
だから手を使ってカキコする。みたいな?
これだけemacsの名前を出して釣れるとは。。。。 いずれにしても高みの見物 してます。
だから喋らないというのなら、レスするなよw
本当は気になってしょうがないんだろう。だからどうしてもレスしてしまう。我慢ができないw
>>64 最高かは分からないけれど、いいなと思ったのは Dolphin Smalltalk X6 かな。
http://www.object-arts.com/ Win 専用なのと、UI ビルダが期待より貧弱なのが難点だけど、補完とかのコーディングサポートの方面は
しっかり作り込んである。もちろん Smalltalk 処理系全般の特徴である OODB みたいなものの中に
処理系自体が組まれていて、エンティティがすべて第一級オブジェクトとして扱えるとか、
それによって強力なメタプログラミングやイントロスペクションが可能であるとかはデフォとして。
XEROX 純正 Smalltalk-80 の直系の子孫にあたる VisualWorks と Squeak については
言語としてはともかく、IDE としては作り込みがいちいちゆるい感じ。
84 :
デフォルトの名無しさん :2011/11/10(木) 22:39:04.35
Dolphin Smalltalk X6は確かにいいな。
85 :
デフォルトの名無しさん :2011/11/10(木) 22:39:23.27
口は動かしてないよ。 でもこれでレスはやめとく。かまってくれてありがとう ニヤリ
>>71 バージョンって…
誕生当初より言語でOSで開発環境ってスタンスは変わってないから、どれでも良いとしか…
自分が使ってた頃はsqueak 3.4とかだったけな
今はどこまでバージョン上がってるか知らん
勝手にググってくれ
Eclipseにはかなわないけど、Dolphin Smalltalk は 動的言語の中では中々やれてると俺も思うよ。
>>83 誰も静的型言語のIDEより良いとは言ってないんだな。これがw
>>86 だから今話しているのは、IDEの機能の話なんだから
具体的なバージョンを言わないと、わかり用がないだろ。
どうせ使ってないんだろうなって思ったとおりの答えのようだな。
かの有名な、 マーチン・ファウラー様も 静的型付け言語のIDEをべた褒めしてますからね。 ただの文法チェックが コーディング支援機能に化けた!と。
思い出した!! VBだよ!! 最高の動的型のIDE!!!
VBは静的型付け言語だぞ。
VBって静的じゃないっけ
VBは動的型付け言語っぽいコードを書くことも出来る。 だがそうやって書かれた部分はもちろんコード補完やコンパイルチェックなど出来ず、 IDEが有効活用されているとは思えない。 VBがIDEとしての真価を発揮できるのは、やはり静的型付けで書いた部分。
96 :
デフォルトの名無しさん :2011/11/10(木) 22:58:47.10
これは最高だなあ。
正直に白状すると、困った時にgoogleで解決できる言語が効率がよい 検索しても答えが見つからない言語は効率が悪い オレっちは所詮そんなもんです みんなが使ってる言語がいい マイナー言語はマイナーという理由で効率が悪い 言語仕様とか関係ないっす
>>95 Squeak Smalltalk のしょぼさにくらべると、補完機能の出来がすばらしいですね
注:VBとVB.netは違います 初期のVBは(ry
>>98 OCompletion もがんばっているんだけど、まず Squeak でまともにインストールできない
(いまんところ誰でも使えるのは Pharo に組み込みのやつってことになる)のと、なんとか動かせても
組み込みの alt/cmd-q とかを壊しちゃう。個人的には alt/cmd-j が踏みつぶされるのが非常につらい。
結局、静的厨はSmalltalkが言語でありライブラリであり環境であり仮想計算機だということも ましてやSmalltalkでは実行環境=開発環境だということの意味もまるで理解しないまま 動的環境を小馬鹿にしてたってこと?
俺はVisualWorksに自作の補完機能つけて使ってる。 Smalltalkerならみんなやってるよね、開発環境の自作拡張。
Smalktalkを知っているファウラーやベックがRubyを持ち上げる意味がわからん。 Javaを使ってて頭が狂ったか、たんに老害か、 あるいはまさかの、ぢつわSmalltalkよくわかっていませんでしたーとかか? ベックは最近だとMongoDBエンジンもまともに組めない体たらくだと聞くし。
>>101 別に動的環境を小馬鹿にはしていませんが、Smalltalk は使っていないのでよく知りません。
ところで、大規模開発という場合には IDE そのものの出来もさることながら
VCS (バージョン管理システム) や ITS (タスク管理システム) とのシームレスな
連携が必須だと思います。
Eclipse は、やはりコミュニティの大きさもあってその辺りがよくできていると
感心するのですが、Smalltalk での開発の場合はどのようになるでしょうか。
Subversive や Mylyn と同等な仕組みはありますか?
>>104 RubyだけでなくRuby on Railsを褒めてる
Smalltalkを知っててもSeasideを知らない可能性はある
>>104 Ruby on Rails がよいと言っているのではないでしょうか。
私の経験では、Web 系はプログラミング言語そのものは何ら問題ではなく、
フレームワークの出来不出来で全てが決まります。
>>104 っていうか、
> 我々は、Groovy、F#、Python、Smalltalkなどを使うべきだろうか?
> これまでRubyについて見てきたトレードオフが、その他の言語についても同じ結果になったとしても、私はさほど驚かない。
> いずれこれらも我々の道具箱に入って欲しいと願っている。
と書いてるから、内心では「皆Ruby使ってるけど、ぶっちゃけSmalltalk最強だろ、言わないけど(うざがられるから)」とか思ってるかも
その記事に書かれている次の部分が、動的言語の長所でもあり短所でもあると思います。 >我々の強みは、典型的なIT企業では引き込めないような非常に有能な人たちを雇用しているという点だ。 >Rubyには、あまり有能ではない開発者をエラーから守るよりも、 >有能な開発者がさらにうまく物事を成し遂げられる環境のほうがよいという哲学がある。 率直に言って、能力の高い経験豊富な開発者は動的言語の方が効率的に開発を進められると思います。 問題は、プロジェクトが大規模になればなるほど、そういった精鋭を揃えることが難しい点です。
TDD Static vs. Dynamic
http://www.youtube.com/watch?v=RLAZjiK4UHc http://www.youtube.com/watch?v=wXW9WN9ay2E Java(Eclipse)とSmalltalk(Pharo)とで同じプロダクトのTDDの様子とかかった時間を比較
結果がどうとかはともかく、Smalltalkでの開発のライブ感みたいなものを見ておくのにいい資料。
Javaサイドは分かると思うので、Smalltalkサイドでやっていることを以下に簡単にまとめてみた。
▼パート1
4:40 Test1クラス定義 4:50 test1メソッド記述 5:30(コンパイル操作)→テンポラリ変数pc宣言忘れ指摘→宣言挿入
5:40 Productクラス未定義指摘→宣言 5:45テンポラリ変数erectonic宣忘指摘→宣言→同eletronicスペルミス指摘→訂正
5:50コンパイル完了 5:58(テスト実行操作)→category:のコールでエラー→デバッガ起動
6:15 category:メソッド仮作成→実行継続→エラー 6:20デバッガ内で定義変更→(コンパイル操作)
6:38インスタンス変宣忘指摘→追加 6:47実行継続→categoryコールでエラー 以下同作業
7:28説明抜きで再計測 12:15メソッド名変更→assert:式変更→electronicのクラス変更
→(コンパイル操作)→Categoryクラス未定義指摘→定義→コンパイル完了(テスト実行操作)
→includes:がエラー→Categoryに仮定義→実行続行→デバッガ内で定義変更→(コンパイル操作)
▼パート2
04:37メソッド名変更→assert:をdenny:へ→(コンパイル操作)→コンパイル完了 (テスト実行操作)
→デバッガ起動→巻き戻してincludes:の定義へ→デバッガ内で定義変更→(コンパイル操作)
5:20Categoryクラスブラウズ用にウインドウ開く→初期化メソッド定義 5:35デバッグウインドウに戻り
メソッド再実行後実行継続 6:20(テスト実行)→デバッグウインドウ→巻き戻し・逐次実行→
category:メソッドで定義変更→実行継続→addProduct:メソッド仮定義→実行継続→エラー→
定義変更→実行継続→完了 5:56(テスト実行操作)→test1失敗→デバッグウインドウ→
test1メソッド変更(ObjectをCategoryへ)→実行継続→成功(完了)
動的言語が効率いいとかないわな
>>110 rubyの良さがわかる人って、ハッカー系には多いよね。結局その引用のとおり
だから
Javaはドカタがほにゃらら ブルーカラーの言語うんたらかんたら
動的で効率が悪いと言ってるのって、ファウラーの文章にある >RubyはUNIXの世界で生まれた。そして、このプラットフォームに集まる人たちは、 >ディレクトリパスにスラッシュを使う。 Windowsプラットフォームでも、Rubyの >実行、デプロイ、開発は可能だが、いくぶん扱いにくいものとなっている。我々 >のアドバイスとしては、開発はすべてUNIXプラットフォームで行ったほうがいい。 この点が影響してるんじゃないの?rubyに限らないけど、関数型言語やオープンソースで 作られてる言語の多くはwindowsでの開発はかなり不利だよ。
Windowsで開発しないと大規模開発が破綻する説
PythonもPHPもWindowsとLinux両方で全く問題ないのだが WindowsでおかしくなるのRubyだけだろ
PHPの場合、本番環境のサーバはLinuxが多いだろうけど、開発はWindowsのXAMPPでやってる人はかなり多いと思う。
少数精鋭だと動的言語が有利なのはそうだと思うけど、そういうプロジェクトも開発が継続して規模が大きくなると、動的言語は不適切になる事が多い。 TwitterがRuby捨ててScalaになったみたいに。
TwitterがRuby捨てたのは処理速度が遅いから
それもあるし、型がないと自前の型チェックが増える一方でやってられないからって。Twitterのエンジニアが座談会で答えてる。
そこで型チェックできるデコレータを書けるPythonですよ
IDEやリファクタリングに詳しいファウラーの出した結論 動的型言語 > 最高のIDE + ドカタ言語
Rubyはコード汚くて読みにくい上に Windowsでまともに動かないなんて
windows大好きMS教徒には残念な言語だろう
128 :
デフォルトの名無しさん :2011/11/11(金) 15:04:27.65
ところで windowsに入れ込んでるハッカーっておるの?
129 :
デフォルトの名無しさん :2011/11/11(金) 15:20:41.65
Pythonで型のこと心配だったら、assertとisinstanceを利用して、最適化前に 洗い出しそうな気もするが。python -Oつけると、assertは無視する仕様になるし。
>>105 バージョン管理も構成管理も分散レポジトリも
標準で組み込まれていて、
デバッガのソース表示上でコード書き換えても
全自動でバージョン登録されるぐらい
IDEのあらゆる部分とシームレスに結合されてますが、
何か?
マーチンファウラーは動的静的にこだわってないんだが 開発効率を上げるものは全部褒めてる 高機能なIDE最高 DSL書きやすいruby最高 オブジェクト指向書きやすい言語最高 ちなみにrubyに関してはこう言ってる ruby書いてて楽しいけど、ときどき何やってるかわからなくなるから困る ついでに書くとruby開発者のおっさんはrubyのIDE作るのすげームズイと言ってる マーチンはオブジェクト指向言語で DSL開発をしやすく、そのDSL用のIDEをすばやく作れればいいな という考え、今のところは
html5ブラウザの時代に突入しようというときに windowsだのlinuxだの言ってる奴は頭が古いな osと心中しなくて済むjavaの方がよほど前向き
html5使わんでも 普通にwindowsでもlinuxでも動くから Ruby以外は
134 :
デフォルトの名無しさん :2011/11/11(金) 20:17:26.96
また、視野の狭いやつ。きてる
ルビ厨の視野の狭さは異常
rubyよりもahkやautoitの方が便利だから使ってる rubyが悪いとは言わないけどautoitの方が便利
Rubyは書いているときは楽しいけど 気が付いたらメンテナンス不能のゴミの山
やはり視野が狭い。と言うより、他の言語たまには勉強したほうがいいよ。
139 :
デフォルトの名無しさん :2011/11/11(金) 21:13:48.72
Rubyもいいらしいけど、俺は便利なのでHSP使ってる。
140 :
デフォルトの名無しさん :2011/11/11(金) 21:16:29.95
autoitってなんやねんって調べたら、windows専用か すでに
矛盾してるで おっさん
>>133
141 :
デフォルトの名無しさん :2011/11/11(金) 21:22:19.84
HTML DOMをトラバースして文単位にSPANで切り分けるって処理をPHPで書いたことがある。 めちゃめちゃ遅かったな。 スクリプトって単純にプログラムの実行も遅いんだろうけど、一番の原因は メモリーを使いすぎるってことだね。
> HTML DOMをトラバースして文単位にSPANで切り分けるって処理をPHPで書いたことがある。 > めちゃめちゃ遅かったな。 ま、たいてい書いた奴が遅いコード書いただけってのが答えなんだけどなw
144 :
デフォルトの名無しさん :2011/11/11(金) 21:41:17.56
自己書き換えは昔からあるけど、最近はウイルスと誤検知されるからできない。
>>144 Javaなら問題なくできるよ。
そもそもバイトコードはネイティブコードじゃなく
ただのCPUから見ればただのデータなんだから。
ネイティブコードの書き換えはできなくても
バイトコードの状態であれば、ただのデータ編集だ。
ネイティブコードでも自己書き換えはできる。 できないのは、データではなくコードとマークされている部分を バッファオーバーフローなどによって無理やり書き換えること。 もともと、自己書き換えをするという前提で作られたものは 当然書き換え可能。実行ファイルを圧縮して、実行時に 展開して実行するPackerなどと呼ばれているプログラムは そうやって作られている。
147 :
デフォルトの名無しさん :2011/11/11(金) 21:50:04.36
ところが、書き換えたとたんにビヨンとお知らせが届いちゃうから。 やっぱりできない。
答えは
>>144 に書いてある。
誤検知した場合は、できないと。
つまり
>>144 は自分で認めている。
それはウイルス対策ソフトの「誤検知」であると。
149 :
デフォルトの名無しさん :2011/11/11(金) 22:05:54.04
じゃあマニュアルにそう書いとくか。 【ウイルスと思われる動作を検出しましたと表示され停止する問題について】 この動作は当社製品に起因する問題ではありません。 市販のセキュリティー製品には粗悪なコードが使われており誤動作を引き起こす場合があります。 【対策】 当社製品と同時にセキュリティー対策を行わないでください。
>>149 いやさ、自己コード書き換えは出来るんだよ。
お前嘘つくなって話なんだが。
動的言語なんて、自己書き換えコードのオンパレードだしなw
Squeak Smalltalkでバイトコード列の書き換え。 plus := [3+4] plus value => 7 plus method symbolic =>' 25 <8F 00 00 04> closureNumCopied: 0 numArgs: 0 bytes 29 to 32 29 <20> pushConstant: 3 30 <21> pushConstant: 4 31 <B0> send: + 32 <7D> blockReturn 33 <81 C2> storeIntoLit: flipFlop 35 <7C> returnTop' plus method byteAt: 31 put: 16rB8 plus method symbolic =>' 25 <8F 00 00 04> closureNumCopied: 0 numArgs: 0 bytes 29 to 32 29 <20> pushConstant: 3 30 <21> pushConstant: 4 31 <B8> send: * 32 <7D> blockReturn 33 <81 C2> storeIntoLit: plus 35 <7C> returnTop' plus value => 12
>>130 標準で組み込まれているというのは、果たしてメリットと言えるのでしょうか?
そういったものは言語とは独立のシステムなのですから、
チームが使い慣れたものを選べるようにプラグインとして提供されるのが
あるべき姿ではないかと思います。
別にSmalltalkがまともなIDEを備えていたとしても、 じゃあ、他の動的型付け言語は? 備えてないのなら、話しにならないよね。 静的型付け言語 or Smalltalk使ってないなら、黙っとれ。
別にIDEのカタログスペックの優劣だけで
開発効率が決まるわけじゃないしなぁ
>>103 のリンク先では、IDEの出来がお粗末なRubyでさえ
優秀なIDE+Javaで開発するよりも優れてると結論付けてるわけだし
このスレが「動的型付け言語用の優秀なIDEは開発出来ない」ならまだ分かるよ
といっても、それもSmalltalkの存在が反証になってしまうけど
>>156 リンク先のは優秀な開発者がいれば、
Rubyでもそれなりに開発できるってだけだよ。
その優秀な開発者は、Rubyで開発する方が 優れたIDE+Javaで開発するよりも効率的だと感じているようだね
そりゃ自分一人でやるなら、そうだろうさ・・・ でもそれは現実的ではない。 自分の知らないコードがたくさんになったら・・・。 現実を見ようぜ。
コードを書く効率と 読む効率は別だと思うんだよね。
うん、いろんな人が書いたたくさんのコードを 把握して、バグを修正するという観点から どっちが効率がいいか調べる必要があるだろうな。
開発者は一人だけのケースに限るとか、書く効率だけで読む効率は考慮しないとか
そういったことは
>>103 のどこにも書いてないんだが……
つーか日本の標準的な組織でどうかって話じゃないと意味なくね? ファウラーの環境を引用してどうすんの? 君らファウラーに匹敵するスキルを持っていて、周りもそういうレベルの奴に囲まれた環境で仕事してんのか?
>>162 じゃあ答えは出てる。
そういった情報が書いてない記事を信用するな。
>>163 つまり日本の底辺ドカタに動的型は使いこなせるか?を議論すればいいのか
じゃあスレタイも「動的型付け言語ではドカタは大規模開発できない」に変更しなきゃな
>>165 そうしたけりゃそれでもいい。
そうやって皮肉を言おうと蔑もうとそれが日本の現実だ。
rubyハカーの俺天才と言ってる奴が マーチンファウラーの本を読んでるとは思えないんだけど この人の本ってjavaやc#使ってる人の方が読んでるだろうから javaをバカにしてる奴は絶対に読まない
Rubyは馬鹿にする奴は視野が狭い(キリッ
Ruby使ってるのは、開発者が日本人だからだからね。 英語の論文なんて読まないでしょうね。
>>163 我田引水なんだって、欲しい答えが決まってて、その答えに合わすために
問題を変えるって事自体が。
>>169 いま実装の人ってとーだいのせんせーちゃうん?
ああささだはだめだ。ろくに論文なんか読んでねーし、YARV程度で力出し切ったって感じ。
>>163 > 君らファウラーに匹敵するスキルを持っていて、周りもそういうレベルの奴に囲まれた環境で仕事してんのか?
はい。
173 :
デフォルトの名無しさん :2011/11/12(土) 07:45:49.45
174 :
デフォルトの名無しさん :2011/11/12(土) 08:08:11.22
昔、JavaはC++の20倍速いって話が有ってね。 最近はRubyがJavaより速いって話があるね。 すると、RubyはC/C++の400倍速い可能性があるんだよね。 ってことはだ、C/C++で書かれたコードをRubyで書き直せば、100円の チップで4万円の性能が出せる。
175 :
デフォルトの名無しさん :2011/11/12(土) 09:22:01.93
smalltalk製のソフトが使われているの見たことないけど smalltalkerは実在してるの?
fortran製のソフトが使われているの見たことないけど fortran programerは実在してるの? cobol製のソフトが使われているの見たことないけど cobol programerは実在してるの?
うん、それで存在しているの?
>1 Smalltalk developer = 2.5 C++ developers FortranもCOBOLもこんなふうなこと言わないわけで
182 :
デフォルトの名無しさん :2011/11/12(土) 13:08:51.07
1 Smalltalk developer = 3.75 Java developers. うーん。 密度的な事なら 1 Sml. dev. = 20 Java dev. くらい? 知識量だったらたぶん 1 sml. dev. = 5 Java dev. たぶんsmalltalkerだったら 他の言語も使えると思うんで。
そうか、Javaの人ってakb商法なんだ。一盛りなんぼで売り出している ようなものなのか 謎
VisualAge for Java 昔ちょっと使ったわ あれsmalltalkで出来てたんか 1 Smalltalk developer = 3.75 Java developers. が本当なら なんで廃れてしまったんだろうね
環境を揃えるのが大変だったんだと思うよ。費用的にもね。
>>185 土方を集める方が遙かに容易で安価だからその等式がほんとならむしろ必然じゃない?
というのは半分冗談として、マジレスすると、処理系にいろんなコストがかかりすぎたのが敗因。
今でこそフリーの処理系があるし、ネットブックレベルでマシンパワーも十分だけれども、
かつては処理系からEWSまでまともに揃えていたら数百万〜一千万仕事だった。
VisualAge Smalltalk の身売り先での価格を見れば受け継がれた強気度がうかがえる。
http://www.instantiations.com/products/purchase.html もしろんその特殊性な設計思想(
>>154 ) ゆえに、
既存の処理系に熟達した人ほど頭の切り替えが難しいというのもある意味コスト高かも。
売れない商品は高くなるってだけじゃないのか?
twtterってrubyからScalaに移ったんでしょ? ScalaとかOCamlとか、LL系と同じくらい記述が簡潔な言語を使えたら、静的のほうがいいでしょ。 LLがもてはやされるのって、動的だからってより記述が簡潔だからってほうが大きいんじゃないの。
>>188 もちろんあるだろうね。だからクオリティが低くてもSqueak/Pharoとかのほうが賑わっちゃう。
で、SqueakはSqueakで人が集まるからTraitsとかの新機能が生まれ他言語へ輸出されたり
する反面、あちこちいろいろいじられてクオリティの低下を招くって面もあって痛し痒し。
>>189 機能や仕様が流動的なうちは動的言語の方がベターだけど、
だいたい決まったら静的言語で書き直す―っていうのが古くからのよくあるパターン。
仕様が流動的で試行錯誤する場合でも IronPython使うより C#使った方が楽なんだけど
>>191 それいうなら、動的型付け言語だろ。
今の言語はほぼすべて動的言語だ。
(インターフェースなどで実行時に呼び出す関数が決まる)
動的型付けは型を省略できるという点で楽を出来るのであって、 修正するという点では楽ができないからな。 静的型付け言語だと、修正するときが楽になる。 修正漏れがあったら警告してくれるからね。
大学にいけばNeXTとかxeroxのwsとかIRISなどは1000万単位でも簡単に 見られて触れる所があったけど、普通じゃかえないもんな。
>>194 よく考えて作ってないと動的はごちゃごちゃするのは仕方がないかも。
設計がうまい人ならば、問題はないと思うが、作る前に熟考を要する
からなぁ。
私が知る中で、書く人がタイピングよりも考える事に費やす時間が長い言語は、SQL, Lisp, Haskellだけだ。 - Philip Greenspun
select * from user where name = 'hoge'; 絶対、考えるよりもタイピングする時間のほうが長いよw
いや、 君ら静的型派の言う「仕様が流動的で試行錯誤する」レベルは 動的型派の言う「だいたい決まったら」フェーズのうちだから。^^;
>>198 つまり動的型は勘違いしてるってことかw
動的型付けが効率がいいのは、ちゃんと設計もできて 最初から書くときだけ。つまり修正する必要がないときだけ。 試行錯誤するフェーズというのは、そこで書いたコードは捨てるレベル。 捨てるのだから修正する必要はない。だからここでも動的型付けは効率がいい。 だいたい決まったフェーズとか完全に間違い。 実際のプロジェクトの多くは、修正がメインになる。 プロジェクトが大きい物ほど、すでに作られたものを修正することのほうが多い。 そしてプロジェクトが大きい物ほど、人の入れ替わりも多く つまり「なにも知らない人がいきなり修正を任される」ってことが多くなる。 バグの原因は、想定外のことが発生したから。 なぜ想定外のことが発生するかというと知るべきことに気づかなかったから。 なぜ気づかなかったかというと、その知るべき情報を手に入れられなかったから。 これが静的型付け言語だと、簡単の情報を手に入れることができる。 メソッドを右クリックしてぽちっと押すだけで、そのメソッドを使っている箇所が すべて判明する。これは一例であり静的型付け言語だともっと多くの情報を手に入れられる。 よって、動的型付け言語はなぐり書きするのは効率がいいが 修正するときには静的型付け言語のほうがはるかに効率が高い。
試行錯誤は修正ってことじゃないかと言うかもしれないが、 そういう話ではない。 試行錯誤の段階は、コード量は少ない。 少ないから、それを書き換えるのは楽。 俺が言っている修正っていうのは、 一旦は完成されたものとして、出来上がってしまったものに 手を入れるという話。影響範囲が大きく、一つ変更するだけでも 他に修正しないといけない箇所が出てくる状態。 それを動的型付け言語で把握するのは大変な作業。
> これが静的型付け言語だと、簡単の情報を手に入れることができる。 だうと
>>201 > それを動的型付け言語で把握するのは大変
そこらへんはもう分かっていることで、だから「だいたい決まった」フェーズでは
静的型のほがいいし、動的型で引っ張るなら修正が入る前にテスト書いとけっていうのが
最近の流れなんじゃないの?
205 :
デフォルトの名無しさん :2011/11/12(土) 15:00:14.87
>>201 設計変更の影響がどこまで出てくるかを見極めるのは設計者の技量でも
あるよ。何も考えずにだらだら作るのと、変更する箇所を予めよそくして
変更しやすい設計にしておくことでは、全然違うから。
>>201 > それを動的型付け言語で把握するのは大変な作業。
それは能力が低すぎるぞ。
>>200 Smalltalk環境を体験したことない童貞がしそうなドヤ顔だな。
今さらsmalltalkを体験しても何のメリットもないだろ
>>200 > メソッドを右クリックしてぽちっと押すだけで、そのメソッドを使っている箇所が
> すべて判明する。
その機能、動的言語のIDEでは遅くとも70年代には実装されていたのだが…
> これは一例であり静的型付け言語だともっと多くの情報を手に入れられる。
Squeakなら今実行しているソース、バイトコード、そのバイトコードを実行するVMのソースまで簡単に手に入れられるのだが、
Javaの場合はどうなんだい?
>>206 動的型付け言語だと、能力が必要になることなのかい?w
>>209 > その機能、動的言語のIDEでは遅くとも70年代には実装されていたのだが…
じゃあ、今の動的型付け言語で
同じことが出来るIDEを教えて下さい。
smalltalkは知らないし、あまり使われていないので
それ以外で!
>>209 > Squeakなら今実行しているソース、バイトコード、そのバイトコードを実行するVMのソースまで簡単に手に入れられるのだが、
> Javaの場合はどうなんだい?
CGLIBやJavassistはバイトコード(クラスファイルの中身)を操作するライブラリ
代表的なのはこの3つ
・ASM
ttp://asm.ow2.org/ 低水準なライブラリ
JVM言語の処理系では自作を除けばこれが定番
Java7リリース前からinvoke dynamic に対応するなどJSR292チームと連携して開発されてる
・CGLIB
ttp://cglib.cvs.sourceforge.net/viewvc/cglib/cglib/ ASM上に作られたやや高水準のライブラリ
SpringやHibernateで使われたため有名だが開発は停滞してる
Springが依存するcglib-nodep-2.2.jarにはASMのクラスファイルが含まれてる
・Javassist
ttp://www.csg.is.titech.ac.jp/~chiba/javassist/ 東工大の千葉先生が開発した高水準のライブラリ
現在はJBossでメンテされてる
HibernateやSeasar2で使われてる
これらを使うと動的にクラスを作ったり、クラスファイルを読み込んで
フィールドやメソッドの追加、メソッドの書き換えができる
図星だったらしい…
少なくとも今の動的型付け言語のIDE機能が 静的型付け言語用に比べて大きく劣っていることは事実だろう。
>>210 つまり静的言語では能力は必要ないってことか?
だから静的厨はみんなバカなんだなw
センダサーチぐらい、なんならgrepでもできるだろw 静的厨ってEclipseがないと何もできないの? もっとも、Eclipseがあっても何もできないようだがww
>>211 >smalltalkは知らないし、あまり使われていないので
>
>それ以外で!
ついには静的厨もSmalltalkには敗北を認めざるをえなかったみたいだなw
レベルの低い相手にしかイバルことができない卑屈なヤシwww
実際に、中国人が作ったバグだらけ、重複コードだらけ、 継承関係もおかしいコードをリファクタリングしたことあるけど、 Javaじゃなければ無理だと思ったよ。 リファクタリングフェーズでは、人間による修正は 最小限コードの順番を整えるだけにして、 あとはEclipseに付いているリファクタリングブラウザを使って 自動的にメソッドの移動を移動したり継承関係を整えていった。 あれが他の動的型付け言語だと完全に不可能だね。 まず、リファクタリングブラウザがついてるIDEあるの? まあ無いことはないけど、ローカル変数書き換え程度しかないような とても実用レベルには達しないものだった。
でさ、Smalltalk厨ってさ、 やっぱり他の動的型付け言語用のまともな IDE知らないんじゃないか。
>>222 そこまでしてSmalltalkを避けたいわけ?
>>218 お前日本語おかしいよ。
簡単なことに能力は必要ないって言ってるだけ。
なぜ、「簡単なこと」を省略して
どんなことにも能力は必要ないってことに
しちゃうのか?
>>221 リファクタリングブラウザの元祖はSmalltalkだということすら知らないの?
>>223 お前仕事したことある?
Smalltalkを避けたいのではなく、
使われてないんだよ。
実用レベルの話しようぜ。
>>225 Smalltalkは使われてないんだよ。
実用レベルの話しようぜ。
>>224 > なぜ、「簡単なこと」を省略して
元レスのどこに「簡単なこと」なんて書いてあるの?
>>210 >
>>206 > 動的型付け言語だと、能力が必要になることなのかい?w
おまえ、日本語つーより頭おかしいよ?
でさ、Java厨ってさ、 やっぱり他の静的型付け言語用のまともな IDE知らないんじゃないか。
>>216 すまん。
これのどこに「3+4」のバイトコードを書き換えてかけ算をさせる要素が含まれるの?
くだらん奴は相手にせず、本題に戻そう。 最初から書くときだけ。つまり修正する必要がないときだけ。 試行錯誤するフェーズというのは、そこで書いたコードは捨てるレベル。 捨てるのだから修正する必要はない。だからここでも動的型付けは効率がいい。 だいたい決まったフェーズとか完全に間違い。 実際のプロジェクトの多くは、修正がメインになる。 プロジェクトが大きい物ほど、すでに作られたものを修正することのほうが多い。 そしてプロジェクトが大きい物ほど、人の入れ替わりも多く つまり「なにも知らない人がいきなり修正を任される」ってことが多くなる。 バグの原因は、想定外のことが発生したから。 なぜ想定外のことが発生するかというと知るべきことに気づかなかったから。 なぜ気づかなかったかというと、その知るべき情報を手に入れられなかったから。 これが静的型付け言語だと、簡単の情報を手に入れることができる。 メソッドを右クリックしてぽちっと押すだけで、そのメソッドを使っている箇所が すべて判明する。これは一例であり静的型付け言語だともっと多くの情報を手に入れられる。 よって、動的型付け言語はなぐり書きするのは効率がいいが 修正するときには静的型付け言語のほうがはるかに効率が高い。
コピペミスったw 動的型付けが効率がいいのは、ちゃんと設計もできて 最初から書くときだけ。つまり修正する必要がないときだけ。 試行錯誤するフェーズというのは、そこで書いたコードは捨てるレベル。 捨てるのだから修正する必要はない。だからここでも動的型付けは効率がいい。 だいたい決まったフェーズとか完全に間違い。 実際のプロジェクトの多くは、修正がメインになる。 プロジェクトが大きい物ほど、すでに作られたものを修正することのほうが多い。 そしてプロジェクトが大きい物ほど、人の入れ替わりも多く つまり「なにも知らない人がいきなり修正を任される」ってことが多くなる。 バグの原因は、想定外のことが発生したから。 なぜ想定外のことが発生するかというと知るべきことに気づかなかったから。 なぜ気づかなかったかというと、その知るべき情報を手に入れられなかったから。 これが静的型付け言語だと、簡単の情報を手に入れることができる。 メソッドを右クリックしてぽちっと押すだけで、そのメソッドを使っている箇所が すべて判明する。これは一例であり静的型付け言語だともっと多くの情報を手に入れられる。 よって、動的型付け言語はなぐり書きするのは効率がいいが 修正するときには静的型付け言語のほうがはるかに効率が高い。
>>231 > メソッドを右クリックしてぽちっと押すだけで、そのメソッドを使っている箇所が
> すべて判明する。
Smalltalkでは70年代から実装されている機能ですが何か?
>>235 Smalltalkは使われてないんだよ。
実用レベルの話しようぜ。
>>234 つまり知らないってことね。
知らない事は恥じゃないよ。知らないということを自覚していないことが恥なんだ。
覚えておこうね。
Smalltalk以外の動的型付け言語はクソっていう 結論になっていることに気づけ馬鹿ども 自滅したいのか
>>236 じゃあ、スレタイを「やっぱりSmalltalkを除く動的型付け言語は…」に変えとけ。
それまではSmalltalkアリだ。
リファクタリングはSmalltalkで始まったけど リファクタリングブラウザは、Smalltalkじゃろくな実装作れなかっただろ。 知らないのか?
静的厨って、リファクタリングもデザパタもSmalltalk由来だってことすら知らないの? それってプログラミングのプロとしてすごく恥ずかしいことだと思うんだけど。
Smalltalk童貞のくせにEclipse自慢のやつって、 ジョブズがSmalltalk GUIをパクったことを知らないでドヤ顔の 旧マカに似ててかわいいな。
>>239 えーと、それは
・動的型付け言語であっても大規模開発規模に対応可能なIDEは実現可能である
という事実を認めたということでいいのかな?
>>246 > ・動的型付け言語であっても大規模開発規模に対応可能なIDEは実現可能である
いいえSmalltalkだけです。ちゃちなIDEが作れるのはw
Smalltalkを知らずにIDEを語るヤシって 自分じゃ恥ずかしくないのかな?
>>243 知ってる。
Smailtalkから始まって、その他の言語に移っていった。
そして今はSmailtalkは殆ど使われていない。
0号機が一番強いなんて設定は
アニメの中だけだよw
>>251 知らないってことは恥ずかしいことじゃないが、
知らないことを自覚していないことはすごく恥ずかしいことなんだぜ?
>>247 なつかしいな、それ、15年ぐらい前だったか?
よく探してきたな、そんな初期のパッケージ。
おまえ、実はロートルスモールトーカーなんじゃねーの?
なんで世の中でSmalltalkが普及しないんだ!って 地団駄踏んでるw
>>255 Smalltalkで開発されたシステムなら、ウォールストリートにいっぱいあるぜ?
人は見たいものだけを見るものだってカエサルの言葉が、お前見てると頭によく浮かぶよw
>>258 だってそれ、標準との差分の説明だから。おまえ、英語大丈夫?
>>259 他人が何を作ったかなんか関係ないよ。
Smalltalk に限らんが、一般にマイナー言語厨は人の褌で相撲取りすぎ。
ここの静的厨、Smalltalkの宣伝をしたいとしか思えんww
Smalltalkのリファクタリングが凄いと言い張っているやつが 動画なり資料を見つけてくるべきだな
>>261 おまえはキチガイか?
使われていないというから、使われていることを示したのだが?
そんなに自分が書いたコードに限定したいなら、
まずはお前が書いたコードを示せ。今すぐだ。
動的型付け言語だと、メソッドの引数の順番を変えるとか 継承関係にあるクラスのメソッドを修正するとか そういったことを自動的にするのが壊滅的だよ。 修正したら、何かを壊してしまう。 Smalltalkもそれは例外じゃない。
>Smalltalkで開発されたシステムなら、ウォールストリートにいっぱいあるぜ? これは示したことにならんだろw
>>263 Smalltalkのリファクタリングが凄いつーより、
Java厨が例示する「静的型付言語の最強リファクタリング機能」ってのが
Smalltalkでは黎明期から実装されている常識的基本機能だと言ってるだけ。
文句あるならJava厨に言えw
>>264 コードっつーか実体験で書いてるっつーレスがないから
全然なんだよ。
大規模開発の話だろ?
今まで「協力会社さん」の面接100人以上やってるが、
業務経歴書のプログラミング言語欄にSmalltalkなんて書いてる奴いねーよ。
人も集まらん言語でどうやって大規模開発するんだ?
そろそろ厚顔無恥無断転載じじぃきむら(K)がやってくるレベル。
>>265 それは仕方ないね。
型がないから、同じものなのか、同じ名前で違うものなのか区別できない。
動的型付け言語で機能が限定的になるのは仕方ないこと。
「静的型付言語の最強リファクタリング機能」ってのは 具体的にどのリファクタリング機能を指しているんだ?
>>265 ぷ
それ、本気で言ってんの?
すげえ面白い冗談だなw
教えてくれよ。Smalltalkで開発できる技術者って人月いくらだよ。 相場教えてくれよ。なあ。
今から
>>273 が証拠つきつけてくれるらしいw
さあ、正座してまとうw
>>275 証拠もなにも、
Squeak/Pharoの標準ブラウザのmethod refactoringに
add parameterとremove parameterがあるが、
それがどうかしたか?www
>>245 言えてる
「アップル以外のマウスじゃボタンがいっぱいで使いにくい!」とか
言ってたアフォなおっさんが昔いたのを思い出したわw
>>277 それはいつからあったの?
SqueakでもPharoでもよいけど、世に出た最初のバージョンから
既に標準ブラウザのmethod refactoringにadd parameterとremove parameterがあったの?
教訓: 1. IDEをネタに動的言語をDISって遊ぶときは、めんどくせーからSmalltalkはあらかじめ除外しておけ。 2. 動的言語を尻目にEclipseの自慢をするときは、事前にSmalltalkの機能くらいはさらっておけ。
な?
言語自慢は威勢がよくても
>>274 みてーな大前提でだんまりだよ。
結論:
人がいなけりゃ開発できない
>>279 どうしてそうなるの? 可不可の問題じゃないの? 馬鹿なの? 死ぬの?
>>279 Sun JDKが世に出た最初のバージョンではリファクタリングはどうだったのよ?
>>282 えっ黎明期から当たり前だったんじゃないの?違うの?
>>281 俺は良い時で人月250万ぐらいだったな。今は200万ぐらいか。
一番景気悪い時でも150万まで落ち込んで、マジで落ち込んだわ。
今Javaなら60万くらいで集まるわな
さて、では
>>274 と
>>281 の人月単価を晒してもらおうか。
他人様に要求した以上は、当然自分の人月単価を晒すよな?
これで答えないようなら、人間として最低のクズだぞw
キチガイsmalltalkが荒らしているだけか
Smalltalker1人いれば、少なくともJavaドカタ10人チームよりは開発能力あるからなーw 単価200万とか、バーゲン価格だろ
smalltalk使って仕事ができないから 八つ当たりしてるんだろうw
他人様に人月単価を言わせといて、荒らし呼ばわりか。 静的厨って、みんなこんな程度の人格なの?
>>292 リアルでそんな事言っている奴がいたから、
じゃあSmalltalk使っていいから1/10の給料で働いてくれって
言ったら黙ったよw
>>285 それ個人だろw
「Smalltalk開発者5人よろしく」
って話なんだよ。わかってねーなー
口だけで10倍とか言ってないで 実力を見せたらどうだw
>>295 で、おまえの単価はいくらか答えろ。命令だ。
1億万円
相場を聞いているのに 自分の単価を言って いちゃもんつける 真性のキチガイか
自己申告は嘘の可能性が高いから 相場を聞いているわけだな。
>>300 お前は技術論以前の、人間として最低なクズ野郎だ。
軽蔑にも値しない。消えろ。
>>301-302 それが言い訳か?おまえはその程度の倫理観の人間なんだな。よくわかった。
結論:静的型言語をつかっていると技術以前に人間として狂ってしまう。
SmalltalkのIDEの話が一瞬で全部消えた。分かりやすいな
どう転んでも敵わないからな
相場と自分の単価の区別もつかないのに大規模開発は無理だろw 仕様書読めるかどうかも怪しい
そりゃ単価200万の奴を60万では押さえられんだろw
RubyやPythonやPerlやPHPのIDEの話をしよう。 それぞれの言語で、最高のIDEはどれだ? 最低限リファクタリングツールの機能は付いているもので。
単価は上限が決まってるから、 どれだけ本当に凄腕でも無理なもんは無理。 ご縁が無かったということで
おまえら、関数型の人も頑張ってSmalltalk勉強してみようって言っているこの時期に おもちゃなんか触っているひまねーとか…
315 :
310 :2011/11/12(土) 16:20:32.19
ちくしょー、やっぱり動的型付け言語だと無いのか!
Scalaは関数型なのか?
>>315 Smalltalkは別格。ザクとは違うのだよ、ザクとは!
いい加減、動的言語と動的型付けの区別ぐらいつけろよ。 無能ども。
一番優れた動的型付け言語が 一番使われてないのはなぜ?w
優れているってのは自称だから
>>283 への答えは?
静的厨は煽ることしかできないのか?
>>319 おまえ、本気でJavaやWindowsが一番優れているとか思っているの?
Smalltalk は今という時期の理由がわからん 関数型は、マルチコアマルチスレッドやGPGPUといった流れの中で、 参照透過性と並列処理との相性の良さが理由になって持て囃されるのはわかる むしろ今こそ KL1 でどうだ
はいはい。Smalltalk童貞のまま年喰ったおじいちゃんはあっちいっていようね。
326 :
デフォルトの名無しさん :2011/11/12(土) 16:27:31.84
>>323 JAVA+IDE+Windowsって一番多いんじゃないの?ここでいう土方ならほぼ100%
だろ?
>>324 ダイナブック論文を読めば、Smalltalkの真価が発揮されるのはこれからだとわかる。
多ければ優れているというドカタ言語の論理は、 大腸菌こそが至高の生物だと言っているようなもの。
正直論文とか勘弁してください。 ム板だからしょうがないか。スレがマ板向けだよなこれ。
Smalltalk勉強会って ちょっと古文や漢文読んでみるみたな軽いノリだろ Smalltalkをメインに使っていこうって感じじゃないでしょ
そんなにSmalltalkが使われていないと言うんだったら その証拠持ってきてみなさいよ。
はいどうぞ
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 1 1 Java 17.874% -0.63% A
2 2 C 17.322% +0.61% A
3 3 C++ 8.084% -1.41% A
4 5 C# 7.319% +1.61% A
5 4 PHP 6.096% -1.72% A
6 8 Objective-C 5.983% +2.79% A
7 7 (Visual) Basic 5.041% -0.43% A
8 6 Python 3.617% -2.06% A
9 11 JavaScript 2.565% +0.90% A
10 9 Perl 2.078% -0.39% A
11 10 Ruby 1.502% -0.40% A
12 20 PL/SQL 1.438% +0.78% A
13 13 Lisp 1.182% +0.09% A
14 15 Pascal 0.991% +0.21% A
15 21 MATLAB 0.955% +0.32% A--
16 12 Delphi/Object Pascal 0.872% -0.77% A
17 23 ABAP 0.847% +0.25% A--
18 22 Lua 0.635% +0.02% A-
19 16 Ada 0.622% -0.07% B
20 19 RPG (OS/400) 0.620% -0.04% B
21 Logo 0.592%
22 Transact-SQL 0.550%
23 Visual Basic .NET 0.533%
24 Assembly 0.529%
25 COBOL 0.522%
26 Scratch 0.522%
27 R 0.500%
28 Scheme 0.453%
29 NXT-G 0.447%
30 Fortran 0.440%
31 ActionScript 0.405% 32 Erlang 0.404% 33 VHDL 0.398% 34 C shell 0.393% 35 SAS 0.386% 36 Go 0.364% 37 Prolog 0.353% 38 Forth 0.331% 39 D 0.322% 40 Haskell 0.314% 41 APL 0.277% 42 Tcl 0.264% 43 Smalltalk 0.263% ← ここ 44 ML 0.261% 45 Ladder Logic 0.251% 46 Awk 0.247% 47 PL/I 0.242% 48 Alice 0.234% 49 F# 0.230% 50 Q 0.221%
勉強会ってのは横のつながりを作るために開催/参加するもので ぶっちゃけネタは何だっていいんだよ
Smalltalk的なシステムはマイナーと言いたいようだが、、、 Objective-Cはオブジェクト指向部分は動的型付けだしC系では一番Smalltalk的だな。 Objective-Cって、アプリのインストール数でいえばマイナーなのかな?
>>330 (アジェンタより)
今後なにやるか
- Amber Smalltalk
http://amber-lang.net/ の開発に貢献
- メディアアート向けのフレームワークの開発
(ProcessingやOpenFrameworksのような)
- Smalltalkを改造
+ パターンマッチ
+ モナド用の構文(F# のコンピュテーション式)
+ trait(amberにはない)
- blue bookを和訳
-プログラミングのローレベルな部分(コンパイラ・インタプリタなど)のコードを読む・いじる
>>336 いや「的」じゃなくてSmalltalkがマイナーだと名指しで言われてるだけだろ
プログラミング言語を使って ものづくりをする人間は smalltalkを選ばない法則
>>333 いや。TIOBEって10位より下はあてになんないから。メディアリテラシー欠如なの?
>>339 を読むと、静的型付け言語を使う人の品性がわかるね♪
>>334 を見れば分かる通り
実際に選ばれてないからなぁw
>>336 Objective-CはC/C++のコードも動かせるからな
大部分のコードはC/C++だよ
>>343 え、それ、本気でそう思ってる?
なんともはや…
>>343 正直に答えてくれ。あんた、Objective-Cで開発したことないだろ?
>>342 いやいや。TIOBEはネットでの言及ランキングだから。メディアリテラシー皆無なの?
1位から20位まで。まとめただけ。 Statically typed Java, C, C++, C#, Pascal, Delphi/Object Pascal, Ada, RPG (OS/400) Statically typed, Dynamically typed Objective-C Dynamically typed PHP, (Visual) Basic, Python, JavaScript, Perl, Ruby, PL/SQL, Lisp, Matlab, ABAP, Lua
>>342 みてわかるのは、おまえが統計データの読み方を知らないということ。
>>346 反論したいなら、お前が信じるデータもってこいと言う話だよ。
>>349 それがナナメ上なデータでドヤ顔した言い訳か?
>>340 10位以上と10位より下で区切る根拠は?
もしかしてPerl厨ですか?
あんまり土方をいじめるなよw こいつら、どうせ開発言語を選ぶ権利なんてない底辺肉体労働者なんだからww
>>349 メディアリテラシー欠如者にどんなデータ持ってこいと…
はっ。もしかして「メディアリテラシー」すら分からないのか?
単価60万の頭脳じゃその程度だろww
そのデータは信じない! じゃあなにを信じるの? 信じるのは己だけだ! つまり、何のデータもない、妄想を信じると?
単価60万が休日に2chやってるのと 単価250万が休日に2chやってるのと どっちが滑稽かって話だろうな
Smalltalkが使われてないのは事実なんだから そんな勝ち目のない所に口を出さなきゃいいのに・・・。 それとも勝ち目があるの? なら勝ってみせてよ。
Smalltalkに単価なんてないだろw 募集してないんだからwww
別に誰もSmalltalk自体が糞言語だなんてdisってないのに。 大規模開発のスレなんだから、その言語がいくら優れていたとしても、 現実問題として、大規模開発に使えない技術以外の要因があるんだから しょうがないでしょと。それだけなのに。
金は言語に対して払うんじゃない。 作ったものに対して払うもんだ。
ぶっちゃけさー。 なんでみんなエスペラント勉強しないの?馬鹿なの? って言ってるようなもんですよ。 ここのSmalltalkの人。
優秀なSmalltalkプログラマ1人と 優秀なJavaプログラマ10人なら 後者のほうがはるかに開発量は多いだろうな。
>>343 >Objective-CはC/C++のコードも動かせるからな
>大部分のコードはC/C++だよ
痛イ、痛スグルwwwーーー
これだから静的厨ってのは....
>>365 学がないのは分かったから、ぶっちゃけるならせめてラテン語に喩えておけ。
>>363 > 別に誰もSmalltalk自体が糞言語だなんてdisってないのに。
このスレの今日分のログ読んでもそう思うのなら、日本語を勉強しなおしたほうがいいよ。
煽りじゃなく、アドバイス。
一時的に仮付けした名前を InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState みたいなステキな名前に変更するためにIDEのリファクタリング機能必要でしょ 最初からこんな名前考えるのも面倒だし
>>366 開発量を行数で測るなら、そうだろうな。
開発量を、同じ案件を実装した時の工期の逆数として測るなら、おそらく前者のほうが上。
>>370 逆。そんな長い名前をつけてしまったものを
あとから正しく直すのがリファクタリング機能の一つ
>>370 開発中に自分用メモとして仮付けした名前を仕様書にあわせて
F5291 みたいなステキな名前に変更するためのリファクタリング機能です
少なくとも日本には優秀なsmalltalkerなんていないだろ
smalltalkは仕事もないしな。
Smalltalkに関しては色々あるが簡単に特定されそうなので黙っておこう 一応アランケイとは面識がある
ぶっちゃけ、今の若いエンジニアはJavaなんて相手にしてないでしょ。 大学で情報系やってきた就活生は、大抵はObjective-CかHaskellあたりに興味を示す。 あとはC++とか、たまにRだな。 Javaとかやってもスキルの商品価値はあと5年も持たないと知ってるからね。
関係者の言うことは、宣伝が入っているから 話半分に聞くことにしている。
一応ストラウストラップとは会ったことがある 相手は覚えてないだろうけど
>>378 話半分で聞かれることを想定して話しているので半分も聞いてはいけない
学生は所詮、素人だからね・・・。
>>379 今のうちにコボルオヤジの体験談を聞いて対策しておけ、ってことだろw
エスペラント語とか馬鹿にして、動的言語に何年か遅れて静的言語にもTraitsが入ってきたとき Smalltalkに呪いに言葉を吐きつつ土方たちが必至こいて勉強する姿が目に浮かぶようだ。
じゃあ全く関係ない俺の話。 SmallTalkは現場では全く使われていない。
大学は時 間 が ゆ っ く り 流 れ て い る よ ね
>>385 結局、静的言語に取り入れられるのかよw
Javaはandroidで超人気だよ 少なくともsmalltalkなんかよりは
Traitsと言われてもC++のtype traitsしかわからん
>>385 もうScalaには入ってるんじゃなかったか?
このスレでは静的型言語=Javaなのか?
実際のところ、Javaは「ブルーカラーの言語」だから難しい機能は入らない可能性が高いよ
>>388 そりゃそうだろ。
今までもずっと、動的言語で発案された技術が静的型言語に移植されて、ドカタがドヤ顔で自慢してきた。
歴史は繰り返すのさ。
>>388 うん。動的型付け言語は実験的な言語の意味合いが強い。
そこで研究されてから、そののち静的言語に洗練された形で
統合される。
今までの歴史がそうだろう?
>>392 あ、「難しい機能」なんだw お前にとっては?w
>>385 何にせよ、プログラミング言語一つ覚えるときに一々必死にはならんだろ
というか必要な時期に勉強する方が
それこそ先駆者が必死に作ってくれた「ドカタでも分かりやすい」情報が
溢れているから楽だ。
庶民には庶民の知恵がある。先頭を走る奴とは価値観が違うんだよ
関数型言語というパラダイムも動的型付言語が発祥だな。 オブジェクト指向というパラダイムも動的型付言語が発祥だな。 もっと遡れば、 チューリングマシンも動的型付だし、ラムダ計算も動的型付だ。
>>395 だってクロージャごときが「難しい機能」としてマジで議論される言語だぜ?
動的言語には洗練されないまま残るわけだ smalltalkのリファクタリングみたいに
ジェネリクスが難しいとかねーよ ドカタすぎだろ
Javaのジェネリクスは不完全だから余計に分かりにくい。
基本的に年寄りは新しいことを覚えるのが遅い。 だからSmalltalkも拒否する。
>>392 Scalaのあれは名前だけで中身はただの抽象クラスの多重継承。
新しいものが好きな奴は、今時2chにいない。 ネラーのユーザ構成は基本年寄りだと認識しなさい。
もしもJavaのジェネリクスが完全だったら、 ヌルポとは永遠におさらばできていたんだよな..... (遠い目)
>>405 だから、研究用なんだよね。
なぐり書きするのは最適、
でもそのあとで大きく作るのは大変。
大きくしてしまったら、そのあとは修正がメインになる。
修正フェーズでは、コードを把握するのが楽な静的型付け言語が有利となる。
>>409 nullで初期化できるんだから型の問題じゃなくね?
Smalltalkは新しくないだろ
こんどPHPが、PerlのRoleとかより比較的ちゃんとしたTraits入れてくるよね。
俺の周りでは15年くらい前にSqueakが流行っていた
いや、ヌルポはなくならないだろ。
>>410 いや、だからSmalltalkはSmalltalkで書かれていて修正もされつつ運用されているわけで。
つーかリンク先ぜんぜん読んでねーだろ?
mixinと何が違うんだ?
>>416 「できる」と簡単に出来るかどうかってのは話は別。
たとえば、ヨットでだってアメリカにいける。
>>410 Javaでのチーム開発とSmalltalkでのチーム開発を比べた経験から言えば、
メンテはSmalltalkのほうが遥かに簡単だ。
なにせコード量が違う。ドカタコードはメソッドが長いし、クラスも大きなクラスが多い。
Smalltalkのほうが単機能なメソッド、単機能なクラスにまとめやすい。
なぜかそうなるのかというと、それぞれの言語の既存のライブラリのコードがそうなっているから。
新しく書き下ろしたコードも既存のライブラリを使えば、どうしても既存コードの粒度に引きずられる。
書き下ろされたコードをリファクタリングしたりデバッグしたり機能拡張する時は、
Javaのほうが周囲のコードからの束縛が強いことが多い。
だからJavaのコードをいじるときには本当に神経を使う。Smalltalkのほうが分解しやすい。
以上、俺個人の経験だから、そうじゃないという経験がある人は反論してくれ。
> ドカタコードはメソッドが長いし、 これが答えなだけじゃんか。 結局違いが出てるのは、プログラマの技術力に違いがあったからってだけだろ。 俺の所の優秀なJavaプログラマなら、コード量は少ない。
>>416 仕事じゃねーから読みたいと思うもんしか読まねーよ。
長文ならなおさら。
読みたい!と思わせるような紹介ができないのが問題。
マイナー言語を宣伝するなら宣伝力を身につけよう!
>>422 Smalltalkでの経験をベースにして、比較した上で言っている?
それとも単にJavaのコードしては短いほうだと思う、という話?
優秀なJavaプログラマより 10倍優れているという Smalltalkのコードを見せてみ?
>>420 そもそも静的言語で出来ていないことをSmalltalkはやっているだろ?
静的言語で組まれたソフトで、30年動き続けているものがあるのか?
修正がラクなら出来るんだよな? つーか動かしながら修正すらおぼつくまい。
>>421 次はチームが使う言語を逆にして比べるべきだね。
Smalltalkを使っていたチームがJavaを使うと、ドカタコードになるのか。
JavaチームがSmailltalkを使うと、驚異的にコードが良くなるのか。
それを経験してからまたおいでw
>>423 > 仕事じゃねーから読みたいと思うもんしか読まねーよ。
カエサルの言うとおりだな。凡人は事実を見ずに、見たいと思うものだけを見る。
>>425 Scratchのコードでもダウンロードして読んでみれば?
> 静的言語で組まれたソフトで、30年動き続けているものがあるのか? それはバージョンアップなしで? Smalltalkならそういうのがあるというの? 名前は? バージョンアップしていいのならWindowsとかもう30年立つだろう。
Javaドカタは他の言語をマスターできないから比較は不可能じゃん
>>427 ほぼ同じメンバーのチームで、ほぼ同じ内容のシステムの開発を比較したんだけど。
ちなみに、Smalltalkが先で、Javaは後で開発。それでもSmalltalkのほうが整理されていた。
>>432 それはJavaの経験が浅かっただけだなw
>>429 このレベルのプログラムなら
Javaには無数にあるだろ
10倍優れたのを出せよw
>>434 Springのソースコードとかどうだい?
>>433 いや、ほとんどのメンバーは5年以上の経験を持っていた。
むしろSmalltalkのほうが初めてという形だった。
>>436 いやさ、だから先とか後とか関係ないんだよ。
両者を”入れ替えれ”と言ってる。
>>430 VisualWorksとかSqueakとかXEROX Smallalk-80直系の子孫はみんなそうだよ?
再起動(と呼べるかどうか分からないけれど、オブジェクトの再配置)すら、数度しかない。
へー、もしかしてstarlogoのことかな? でも、starlogoとscratchじゃ、断然scratchのほうが高度だし、より多くのユーザ数だと思うけど。 それ以外に分散並行logo環境のJava実装があるなら、教えてくれ。面白そうだから使ってみたい。
なぜlogoで比べるんだよw
>>438 VisualWorks 1.0がでたのって、90年代なんだけど、
30年前から動き続けてる?
お前なに言ってるの?w
また他人の褌になってきたな。 一ついいか。少なくとも国内の事例を紹介してくれんか。
>>444 VisualWorksという新参者の1.0がどうかしたって?
で、お前は優秀なsmalltalkerなの? 何か優秀なJavaプログラマが書くプログラムより 10倍優れたプログラム書いてみてよ
NでもFでもHでも構わん。国内の大手でSmalltalkって例は一つでもあるのかいな。
>>444 そういう理屈なら、Visual Basic.NETは1.0より前の
Visual Basic 1.0の前のQuickBasic 1.0の前の
Basicとかさかのぼって、30年前から使ってるといえるよな。
>>446 俺は俺自身が入ったプロジェクトでのjavaとsmalltalkの開発結果を比較して書いている。
具体的な案件名を挙げるとほぼ個人特定されるから勘弁してくれ。
勘弁しない。 それが通用するというのなら、俺の入ったプロジェクトでは Smalltalkを使っていたチームよりも Javaを使っていたチームの方が優秀だったという結論も 事実として受け止めよう。
>>450 Smalltalk-80の流れの処理系は、基本的なアーキテクチャはあまり変わってないのだが。
>>452 なら結構。
おまえの自己満足のために個人特定のリスクを冒すつもりは毛頭ない。
バイバイ
>>451 その時、JavaとSmalltalkで使った
ライブラリとフレームワークを教えてくれ。
あと言語のバージョン。
それが答えだと思うから。
>>455 あーなるほど。Smalltalkでは便利なものを使っていて
Javaは全部まるまる自分らで作ったとか
そういう流れかw
>>455 すまんけど、それ言うとマジで個人割れる。
>>458 ということは、何の情報もないチラ裏ということだ。
同意も反論もしようがない。
結論:Javaドカタはクレクレ言うばかりで自分では何もしないw
smalltalkのプログラマってどこで募集してるの? 検索しても出てこないんだが
>>460 ま、信じる/信じないはあんたの内心に任せるよ。
繰り返すが、あんたのためにこんな所で個人割れのリスク冒すほど馬鹿じゃないんで。
>>463 だから信じる根拠も信じない根拠も何もないってことだよ
信じない根拠はあるだろw 相場を聞かれたのに、自分の単価を勝手に言って 他人に単価を言うのを強制するくらい馬鹿なんだから
>>465 そうなんだよね。独特すぎてなんかようわからんかった。
そのイメージファイルってのが、ぬか床みたいなもんだね。
>>467 そうそう。秘伝のタレだね。VisualWorksとSqueakは元は一緒なんだけど
のれん分けした一つをアップルが腐らしていたの(Apple Smalltalk)をフェローだった
アラン・ケイが見つけてまた育てた。
個人的には、Smalltalk は普通のプログラミング言語とかなり概念が違うので 静的型、動的型なんていう対立の枠外にあるという印象しかない。 出自から、オブジェクト指向言語のルーツというような言い方をされるが 手続き型、関数型、オブジェクト指向、論理型、そういうパラダイムで オブジェクト指向言語の一つと捉えることも、適切じゃないような。 SmalltalkはSmalltalk。Smalltalkという世界。 プログラミング言語の一つという理解が、そもそも間違っていると思う。 Smalltalkを学ぶのは、プログラミング言語を一つ学ぶという話とちょっと違う。 得体の知れない未知の体験
472 :
デフォルトの名無しさん :2011/11/12(土) 18:08:07.66
もうイイから、みんなでoz/mozartやろうぜ。いいIDEついてるぜ ワラヒ
>>466 が「俺の敵は全部自作自演」という被害妄想の持ち主だということは、よくわかったw
IDE云々という話も、Smalltalkのそれを、EclipseだのVisual Studioだのという ものからの類推で理解するのは違うと思う。 IDEがSmalltalkであり、SmalltalkはIDEである。世界。
>>473 こんなとこに馬鹿なsmalltalkerが
一度に二匹も来るわけないだろw
1
2
3
4
オブジェクトはSmalltalkの世界の中で生きているって感じか。 生物だから、何か言えばちゃんと言う事を聞く。 言う事を聞いて、Smalltalkの世界の中での生き様が変わる。 コンパイルとか再起動とか。なにそれ意味がわからない。 僕らはみんな、Smalltalkという大宇宙に生きています。 それがSmalltalk!
イメージが保存されたり再起動されたりはイベント取れるけどね。 あとSmalltalkの規格外ぶりはGemStoneが顕著だな。 あんなDBMS他にないだろ。
ちなみに俺はマニアな知り合いから熱く布教活動されただけで 自分ではSmalltalkを使ったことがない。480はその時の印象で適当に書いただけ
5
「お前だったのか…」「私だ…」 暇を持て余したSmalltalker達の遊び。
いろいろ積み残しがあるなぁ…。Smalltalk以外でこれをどう書けるか見たかった。 plus := [3 + 4] plus value => 7 plus method byteAt: 31 put: 16rB8; decompile => DoIt ^plus := [3 * 4] plus value => 12
smalltalkスレでやれ
>>345 いや、Objective-CにはC++のコードを混ぜられるって知ってから、ほとんどC++で書いてる。
俺面接する立場にあるから、俺偉い立場にあるから 俺部下がたくさんいるから、だから有能だから 俺の単価は一千万、選ばれたエリートだから 俺の言ってることは正しいから ↓ >ま、信じる/信じないはあんたの内心に任せるよ。 >繰り返すが、あんたのためにこんな所で個人割れのリスク冒すほど馬鹿じゃないんで。
Objective-CはVC++なんかよりよっぽど まともなC++コード書けるでしょ
個人割れがこわければ、都合悪いことはおとなしくスルーしてたらいい。 ここは匿名掲示板で嘘もハッタリも真実も何でもある。ただひとつ、 真面目な議論をする場ではないよ。
接待議論に慣れてる奴は頭が悪いから 立場が上の奴が発言力を行使して意見を言ったら みんな黙るからな そうすると万能感を得られる つまり会議の場が接待の場になってるのと同じ 匿名で議論するのは合理的 頭が悪い奴が自分の意見を押し通したい場合には最悪だけどな ここでまともな議論にならないのはスレタイが悪い 討論風になってるから無理 最初から荒れることを想定してるからな わしがこのスレを育てたという全能感が欲しいんだろ ネトウヨも最初は政治板にいたけどぼこられて追い出されたから こいつもム板でぼこられて逃げてきたんだろう ずれた居場所で大声を張り上げるとみんな避けていくから 俺最強感を得たり勝利した気分になれる そう考えると哀れすぎて嘲笑する気も起きないから 精神分析して遊びたいのでもっと挑発してください
それとマーチンファウラーの本を読んでるなら 数百文字程度の文なんて一瞬で読めよな それくらいできないと理解できるはずもない
493 :
デフォルトの名無しさん :2011/11/12(土) 21:12:10.05
ゆとり世代に「ゆとり」っていうとホントにきれますね。 「好き好んでゆとりになったんじゃない!」とか。怒るなよ。
誰か怒ってやれ、かまってちゃんのお出ましだ。
予定調和会議 あらかじめ結論が決まってるのに会議すること 理由は失敗してもみんなで決めただろと責任転嫁するため こういう会議が繰り返される組織は独裁されていると考えてよい 逆らう奴にはレッテル貼って個人攻撃だ それが信者の義務であり社畜の義務でもある 難しいことがわからないんなら下品な口げんかで数押しするしかないだろ 一体感を感じれ
>>487 自分がそうしてるからって、みんなObjective-CをC++として使ってると思い込んじゃったの?
>>490 > ここは匿名掲示板で嘘もハッタリも真実も何でもある。ただひとつ、
> 真面目な議論をする場ではないよ。
そうか、他の人はともかく、おまえは議論する気なんて持ち合わせちゃいないんだな。
じゃ、おまえが出ていけばいい。
荒らしは禁止って、2ちゃんルールにもローカルルールにもあるよ。
どんなに単価が高くてもSmallTalkは案件数ゼロだから、売上ゼロだな ギャハハ
(Tはわざとだな)
500 :
デフォルトの名無しさん :2011/11/13(日) 09:46:03.71
>>497 そんなことよく考えたらわかることじゃない?ここは匿名だからな。
キチガイも出入りしてくるのは当然だし。ちょっとした恨みで、道理が通じず
個人割れに力を入れるような奴もいる。まだfacebookで議論するというならば
わかるけどな。
すでに
>>11 でJavaはVBA以下と結論が出てるのに
Java vs. Smalltalk で盛り上がるとか
ここでSmalltalk系の話が出てるから、ちょっと触ってみようと思って調べたけど Pharoの情報は少ないし、squeakの情報は子供向けだし。 取っ掛かりがちょっと面倒ですね。Pharoのwelcomeを読むことしかしてないけど
>>496 いやおれは
>>343 じゃないから。
「Objective-Cを使ったことがないだろ」に対するツッコミ。
505 :
デフォルトの名無しさん :2011/11/13(日) 11:59:25.47
>>504 ふーんで 284もブックマークがついて、原著がacmに載せられるんだ。
面白い解釈だと思う。:-)
acm?どこの系列だ?N?F?H?
507 :
デフォルトの名無しさん :2011/11/13(日) 12:09:36.15
acmを理解できないってのは、ちょっと・・・ 土方と揶揄されても仕方がないよ。
>>504 Javaが最低なことくらい、わざわざ言われなくても誰でも知ってるもんなw
基地外登場w
もしかしてXcodeのObjective-CにC++も書けるというのを Objective-Cの言語仕様だと思ってる香具師がいるのか?
Javaは5年前からずっと右肩下がりだな。
>>513 トップに向かって、右肩下がりだねぇといっても、
虚しくない?
トップジャバw ドカタのエースww
周回遅れのランナーが、トップに向かって ペースが落ちてきたなって言うようなもんか。 周回どころか動的型付け言語トップのPHPでさえJavaの1/3程度でしか無いけど、 動的型付け言語トップのPHPも、右肩下がりだけどね。 その次に頑張ってる動的型付け言語PythonはPHPの半分しかなく、 こっちも右肩下がり。 動的型付け言語で頑張ってるのはJavaScriptぐらいか? javaの1/7だけどな。
tiobeを定量評価だと思ってる人がいるwおもしれww
TIOBEでドヤ顔っすか!さすがセンパイ、ぱねえっす!!
じゃあ、TIOBEよりも信用できるものを持って来いと。
JavaはVBAよりも糞な言語だけど、ドカタに大人気だよ どんなプロジェクトも持ち前の冗長さで大規模開発にしてしまうから、 大量のドカタの雇用を守ってるよ
githubのプロジェクト数とかStack Overflowの質問数とかを総合したデータがあればTIOBEよりおもしろいかもね
>>521 つまり、オープンソース限定にするってこと?
そうだね。オープンソース限定なら、Javaは少なそうだから 動的型付け言語というかスクリプト言語に有利な結果が出そうだ。
>>524 上位はC/C++、Javaなどの静的型付け言語、ついでPHPとJavaScriptとPythonが頑張る。
そのあとはそこそこ有名な言語が入り乱れて、
マイナーな関数型言語やSmalltalkなんかが尾を引っ張るって感じか。
>>509 ありがとう。最初pharo 1.3を入れたけど、pharobyexampleの内容(画像)が若干違うことの
戸惑いがあって
いろいろ仕様変更してるんだな。と思って見てた。1.0出始めるのが良いってことですね。
>>526 Cを静的型付言語と呼んでもいいのか?
呼ぶのなら、Cが抱えた型に関する欠陥は静的型付の欠陥ということになるが
Cを動的片付けって言うやつはいない。
>>533 え?静的型付けと動的型付けの二択だと思ってるの?どこのドカタ?
>>532 で、このスレで主張している静的型のメリットというのはCでも享受できるのかい?
サポートしている具体的なIDEを挙げて説明してみろ。
>>534 あーまた変な理屈言い出したよ。
ドカタとか煽りだしたってことは、もうまともな議論できませんって敗北宣言だね。
まともな反論がくるまで無視するからそのつもりで。
>>537 そう言えば、動的でなければ静的型付だとかいうアフォの言い訳になると思ってるのか?
一般的には静的だといわれていますね。 これは屁理屈をこねてもくつがえせません。
Cは変数は型があるけど、値には型はないって言い方を見たことあって、 これは納得できたけど「動的でないけど静的ともいいきれない」とか屁理屈がすぎるな。 まあ、自分の主張が弱くなったら、言葉の定義がどうこうとか細かい議論に逃げるとか いつものことだけど。
学術的にはCは弱い型付け言語ですね… 一方静的型付けというのは通常強い型付けのうちの1つです
>>529 Smalltalkは良くも悪くもパーソナルゆえ動的で仕様や機能も流動的なので、まず
お手元のドキュメントやチュートリアルのバージョンに合わせた環境(イメージと呼ばれます)を
動かせるように心掛けるのが初学時にはよいと思います。古いバージョンでもコツをつかめば
その後の変化を吸収することは難しくないので、必ずしも最新版を追いかけなくても大丈夫です。
あと、疑問な点が環境の中で解決できたり、Programming by Example というスタイルも
他の言語には見られにくい慣習で、Smalltalk を学ぶのにまず Smalltalk を知らないといけない
という学習時のブートストラップ問題みたいな奇妙な障壁があります。
ググるにしても検索キーワード選びにもコツがいるので、最初わからないこと、試してみたいことが
あれば、自力解決に拘らず、臆せず気軽にSmalltalkスレでもここでもどこでもどんどん訊いてください。
http://hibari.2ch.net/test/read.cgi/tech/1131349633/
>>535 も指摘していますが
このスレッドでリファクタリングや静的分析ができることが静的型付の長所です
しかしCには当てはまりません
なぜならCの型付けは弱く、静的型付のようには依存関係を保証できません
分析可能性としては、Cは動的型付言語よりも弱いです
なのでCを持ち上げることはこのスレッドで主張されている静的型付の利点を
否定することになります
Visual StudioでもEclipseでも C言語もリファクタリングも静的解析も できるんだから、やっぱり静的型付け言語であってるんじゃね?
>>546 thanks, 読んでみた。この辺か。
3 ページ目
Execution errors and safety
Typed languages may enforce safety by statically
rejecting all programs that are potentially unsafe. Typed languages may also use a mixture
of run time and static checks.
4 ページ目
Lack of safety
In reality, certain statically checked languages do not ensure safety. That is, their set of forbidden
errors does not include all untrapped errors. These languages can be euphemistically
called weakly checked (or weakly typed, in the literature) meaning that some unsafe operations
are detected statically and some are not detected. Languages in this class vary widely in the extent
of their weakness. For example, Pascal is unsafe only when untagged variant types and
function parameters are used, whereas C has many unsafe and widely used features, such as
pointer arithmetic and casting.
5 ページ目冒頭の Table 1
静的型付け = static checks
弱い型付け = weakly checked
C は `certain statically checked languages do not ensure safety.'
静的型付けだが型安全性を保証できない。
>>546 > In reality, certain statically checked languages do not ensure safety.
> That is, their set of forbidden errors does not include all untrapped errors.
> These languages can be euphemistically called weakly checked (or weakly typed, in the literature)
> meaning that some unsafe operations are detected statically and some are not detected.
> Languages in this class vary widely in the extent of their weakness.
> For example, Pascal is unsafe only when untagged variant types and function parameters are used,
> whereas C has many unsafe and widely used features, such as pointer arithmetic and casting.
> Weakly checked language: A language that is statically checked but provides no clear guarantee of absence of execution errors.
Cは弱い静的型付け
弱い静的型付けってことは 動的型付けってことですよね?
>>551 しつこい。いい加減諦めろ
いくら言ったってお前の好きな動的型付け言語の
一位はPHPで、Smalltalkははるか下なのは変わらん。
>>554 いくら言ったってお前の好きな動的型付け言語の
一位はPHPで、Smalltalkははるか下なのは変わらん。
>>553 おいおい
大規模開発に向く言語=土方用言語。だろ
土方でも使えて、バッチリ土方の量産するバグを取れる動的言語を提示しないか
今週ももドカ太郎は ハッスルしてるなw
「木を隠すなら森」 バカが自分のバカさを隠す目的で 糞レスをばら撒いてバカを集めようとすること
559 :
デフォルトの名無しさん :2011/11/13(日) 18:42:04.23
>>543 またおじゃまします。OOPの本拠だからちょっと楽しみです。:-)
JavaともCLOS(Common LispのOOP)ともまた違うものですから、どのような発想が
あるのか時間をかけて感じたいと思います。:-)
>>559 自由自在Squeakという入門書オススメ
英訳して海外でも出版していい出来
Squeak入門書では新しい方なんだが、Squeak入門書自体、ほとんど出ないからな… こればっかりは、洋書当たるよりは中古で自由自在Squeak探してくれ 洋書と和書合わせても、これ以上のSmalltalk入門に適した本は多分無い
スレ違いが分からん馬鹿ではないだろうから、嫌がらせでやっているのだろう。 変なのに居つかれてしまったものだ。 議論のストレスを嫌がらせで発散する輩というのはあちこちで見かけるが、 どうにも有効な対策がない。 匿名掲示板というのはこの手の厄介な知能犯に極めて無力だ。
自分の思い通りにならないと発狂する精神病みたいな奴が多いからな 日本人は頭がおかしいのがデフォ 特に完璧主義な奴多いだろプログラマは 自分の想定していた人間関係が完璧じゃないと発狂する奴がいるんだよ そいつはバグを潰すためにどんな手を使ってでも追い出しにかかる 他に居場所がある場合は逃げるのが普通だけど 日本は狭すぎて逃げ場がなかったりしたせいでとどまる性格の奴が多い 閉鎖的な集団がいじめを発生させるのも、精神病の頭のおかしな奴がいるのと 逃げ場がない二点に原因がある そして頭のおかしな奴も親や周りの大人がおかしいので洗脳されてる その連鎖が今の日本を作り出した
565 :
デフォルトの名無しさん :2011/11/13(日) 22:43:43.65
>>566 丁寧に調べてもらってありがとう :-)
他にも入手できるところはあるけど、仮に入手が難しかったら近くの図書館で 借りるリクエストをしてみれば、持ってる図書館から回してくれる。継続はで きないけど2週間OKかな。大学なら多分情報系があればあるんじゃない?
570 :
566 :2011/11/14(月) 00:44:58.86
俺が
>>566 だよ。
どういたしまして。
でも、静的型付け言語のほうがいいよ。
571 :
566 :2011/11/14(月) 00:49:40.26
なんだ。普通にAmazonにあるじゃないか。 ばか?
ちなみに、アカデミアでは買わないほうがいい。 SSLを使っていないから。
アマゾンで検索したら smalltalkの本 30冊もあるじゃん わりとメジャーなんじゃないか
古い本ばかりだろ。 一番新しいのが3年前の本だぞ。
SmalltalkのIDEまわりで面白いと思うのは、 メソッドもオブジェクトでソースはその属性扱いであることと、 加えてインクリメンタル(つまりメソッド単位)コンパイルである特性を活かし、 ごく初期からメソッド単位でバージョン管理が非常にシンプルな形で実現されていたところ。 もっとも、その流れでチェンジセット(変更点集合)みたいなものの必要性が生じ、 それによる変更点の管理がややこしいことになっていたのが 古典的Smalltalkにおけるバージョン管理運用の欠点か。
Smalltalkのバージョン管理は多分、他の言語とは違うと思うんだよね。 その辺りに興味があるので、教えてくれると嬉しいです。 素朴な疑問としては、イメージ(バイナリ)をマージできるの?とか。 コンフリクトの解消はどうやってるの?とか。
>>576 イメージファイルはデータベースのバイナリのようなものなので、
特殊な事情でその必要に迫られない限りマージとか差分をとったりはしませんね。
コミットごとのコンフリクトの解消は、初期はチェンジセット(変更点の集合)が非力だったので
ほとんど手作業でしたが、その後徐々に改善されてきて、最近は通常のバージョン管理システム同様
ある程度半自動化できるようになっています。それでも、最後は人間が取捨選択しないといけないのと、
メソッド単位のマージではdiffライクな機能を支援に使ったソースレベルでの作業に落とし込む必要があります。
ここはマイナー言語の利用者とメジャー言語の利用者のしのぎをはる場 になってるな。つぎスレは計算機言語バトル・ロワイヤル。にしたほうがいいかも。
>>577 ありがとう。上の方でイメージファイルが秘伝のタレ状態になると
書いてあったので、イメージのままマージしてるのかと思ってました。
次の展開は、Smalltalk スレで大規模開発の話が始まる、だぞ。 わかってるな?>ここでスレ違いやってる奴ら
Smalltalkスレってどこにあんの?
582 :
デフォルトの名無しさん :2011/11/14(月) 23:39:29.89
すれ違い? はて? ネタ切れなんだろ。IDEカラ始まって、動的IDEの smalltalk系の話が出てきただけじゃない。 大規模開発に向いてるかどうかは触れないが 違ったパラダイムも触ろうとせずに理解もできないからね。 ここの人がマルチの言語使いばかりではないのは仕方がないが 頭を柔らかくすることも少しはやってみてもいいんじゃないか? smalltalk系って知識を持ってる人より知識がない人のほうが習得 しやすいみたいだって話があるな。lisp系でも同じようなことは 感じてるけど、やっぱり一つのパラダイムに浸ってしまったら 融通が効かないというのはあるのかもね。たしかに、squeakを最初に さわって、今までの経験を忘れて触ったほうがとっつきやすいとも 思った。
もうそろそろSmalltalk以外の動的型付け言語の IDEの話も聞きたい所。
>>585 まずはEclipse以外の静的型IDEから始めようか…
Eclipse自体がSmalltalkの脱け殻なんだから…
eclipseFPを語れってか?
Eclipse以外の有名なIDEってこの辺か Visual Studio, NetBeans, IntelliJ IDEA
EclipseとSqueakを比べると、北朝鮮とフリーセックスの国の違いみたいに 感じる。謎 一つのOSみたいだもん
IDEつーか、OS上の全てが何処からでもソースやオブジェクト階層見れるって感じだしな
触ってみて思ったことは589なんだけど、結局触らずして、語る人が いかに多いかというのもよくわかったよ。やはり批評する前に少しでも 触ったほうがいい。
動的言語最強IDE はvs2010のjavascript だろうな
>>591 あれ、今は違うの?
昔、トランスクリプトをクリックしてクラスブラウザ呼び出して眺めた記憶あるんだけど。。。
>>593 > 昔、トランスクリプトをクリックしてクラスブラウザ呼び出し
'70年代の暫定ダイナブックOS色を排除するためにデスクトップを無くしたSmalltalk IDEでは、
トランスクリプトウインドウに各種機能(クラスブラウザなど)を呼び出すための
ボタンを配置するUIがよく用いられますが、それのことですかね。
>>594 いんやSqueak
ああ、VsualWorksとか、そっちのSmalltalkの話か
>>593 バージョンによって使い勝手かなり変わってる。
トランスクリプトもクラスブラウザも、自分で簡単にどうにでも変えられるところもSmalltalkらしさ
動的のREPLはterminalの代わりの感じになるし、 動的系はやっぱり柔らかさがある感じがする。 アップデート後の再起動の必要もあまりないし、動的系言語で 静的言語IDEを作らせて見たらいいような気もする。 Javaで言えば、ClojureでJava用のIDEを作るみたいな感じ。
>>598 気持ちは分かるが、javaで作られたEclipseでさえ遅い遅い言われてんのに、その上で走る動的言語にIDE作らせたら、どんだけ遅くなるのよ
Squeak SmalltalkはJavaからすれば100倍くらい遅いのに(マイクロベンチマーク比べ)、 IDEではそんなに遅くは感じない、というか、Eclipseよりはるかにキビキビうごくんだよね。なんでだろう。
アルゴリズムが悪いとか Squeakにない機能を積んでいるとか CPU以外がボトルネックになっているとか あたりじゃね?
>>600 Javaの場合、JavaVM本体の起動に時間がかかるから・・・
何だかんだで起動時間以外は体感できんよ
Eclipseはメモリフットプリントでかすぎ 静的言語で無理にIDE作るから、無駄に複雑になってるんだろうな
まだSmalltalk以外の動的言語用IDEは でてないのかよ。 開発すらされてないのか?
Eclipse以外のJavaのIDEは重くないけどな
じゃあ、どうして重いEclipseを使い続けるの?
動的言語で作られたIDEが見てみたい。 もちろんIDEなんで、コード補完とかバックグラウンドで リアルタイムで処理しているものね。 なにもやってないから軽いとか ジョークにしかならないから。
補完君は、開発時にセンダーサーチとメソッド名補完しかしないのかな?
>>607 とりあえずこれでも見てみてくれ。
>>111 ここで使われているPharoっていうのはSqueakと実質同じSmalltalk IDEだ。
>>608 リアルタイムコンパイルで、構文エラーを
すぐに教えてくれる機能も便利だよ。
>>609 あ、Smalltalkはもうお腹いっぱい。
それ以外の動的言語でまともなIDEは無いんだねって
結論になってるのをくつがえそうぜ。
>>610 そうだよね
構文チェックぐらいはSmalltalkどころかemacs上でも
とっくの昔に実現されているよね
Smalltalkには勝てないので勘弁してください
動的でIDEは商用ならLispworksとaclはあるが、使ったことがないので 評価できない。どちらも無料版はあるんだけどね。lisp系はemacs+slime があまりに強力すぎて、IDE,IDEと言わなくなってしまう。common lispや clojureではemacs+slimeがIDEの役目をしているかな。 あとは、schemeならdrrachetがある。こちらはオートインデントなどは 効くけど、補完はあるとしたら誰かが作ってるかもという程度。
rubyならide的に使われてそうなのがtextmate/redcarだろうけど触ったことがない。 ちなみに、slimeの強力なのは、lispのREPLの強力さに由来する。
>>614 そうだね
emacsの場合はリアルタイムじゃなくてキー押下イベント毎だね
>617 キー押下イベントごとにmake実行すんの? とんでもなくイライラしそうだなw
だからすごく小さな開発しか、してないのでしょう?
ああREPL使った事無いとこういう反応になるんだwww
REPLは実行してしまうので、 間違った行に戻れません。
>>621 え?www
お前がREPL使った事無いのは分かったwww
いつものアサッテな人なんだろうけど、何人だろ? 1人でここまでオールラウンドにアサッテなのは難しいと思うんだ
>>622 どこが間違ってるというのかい?w
書いてる時に実行したくないんだよね。
実行してしまったら間違って実行してしまったらどうする。
そんな行き当たりばったりの開発。
小さなスクリプトでしか使い物にならない。
clojureはプロジェクト管理システムはまた別にあって、leiningenという ものでまかなわれている。
REPLは関数型言語では それなりに使い物になると思うけどな。 副作用があるような開発では使えないよ。
副作用のせいかどうかは知らんが、GNU Smalltalkは一種の精神修養だw SmalltalkはGUIも込みの言語だということがよくわかる
VB6使っていたことあるけどREPL機能があるよね。 ブレークポイントで止めて、イミディエイトウィンドウから いろんな関数を実行できる。 あれはあれで便利だけど、これはIDEの一機能ではあるが、 IDEを置き換えるものではないだろう。
scalaのプロジェクト管理システムはsbtがある。 プロジェクト管理システムは分けてるから、IDE使わない派が出てくる。
なんでREPLの話になってるんだ? リアルタイムなコード補完からか。 REPL環境にならないとコード補完ができないっていうのは 制約だろう?常にREPL環境にいるわけじゃないし、 エディタ状態でもコード補完ぐらい出来なくては。
大抵の動的言語のIDEがエディタのemacsである件 (あれ、静的言語もか?)
633 :
デフォルトの名無しさん :2011/11/15(火) 21:15:04.38
C#とかVBなら当然VSだし、JAVAもNetBeansやInteliJがよく使われてる。
607の質問に答えたらemacsとreplの話になってしまったんだが。 これほど拒絶反応があるとは・・・ ある意味面白い。
動的言語で作られたIDEの名前はやっぱりでないのか。 EclipseやNetBeansを出してくると思ったんだけどな。 (中途半端ながら採用している)
636 :
デフォルトの名無しさん :2011/11/15(火) 21:59:52.17
このスレのタイトル・・・ 何を今さらw
Scalaはいいよね。強い静的型付けだし。
補完はできて当然として クイックリファレンスを自動的にチップ出して表示するぐらいが最低ライン 関数の呼び出し元や先、定義実装辺りも同時に表示すべき コードを書くという行為以外の全てを自動的にバックグラウンドで行うのが理想
その全てが可能だとしても、Javaはうんこ メモ帳で書くRubyの1/10の生産性
emacsはエディタと言うより環境だわなあ
emacsを拡張するよりもahkで拡張した方が楽だと気づいた エディタ以外でも使えるし ブラウザでも使える、そしてhtml5の時代 emacsに求めていたものが本質の人は移行すると思うし emacsそのものを求めている人はそこで化石になればいい
emacsが環境()
Smalltalkでおなかいっぱいなところに「emacsは環境」とか強調されても困惑する
でもeclipseみたいなもっさりIDEと比べたらemacsのが遥かにマシ eclipse使って満足してる奴って思考速度が常人より数段劣ってる感じ
まだintelliJなら使えるなと思ったけど、eclipseは思考ツールとして使おう と思ったら、厳しいと思った。淡々と資材を並べて組み立てていくなら問題ない。
言葉を選んでるけど、それってドカタ仕事専用ってことだよね
このスレって要するに 「動的言語をドカタに使わせていはいけない」でFA? ってことだったのか。
CUIでの開発作法を身につけた上で、 EclispみたいなGUIベースのIDEで作業効率化!! という話なら分かるけど、 どうもこのスレのJava厨はGUIしか使えないドカタだものなぁ....
落ち着けLisper
Java厨にFizzBuzz書いてってお願いしたら 「FizzBuzzクラス無いんですか?じゃあメソッドは?無い?あばばばば」 って言い出すイメージ
それで補完が無くなったらFizzBuzzという言葉すら打てない(ry
Javaでは printTheNumbersFromOneToOneHundredButForMultiplesOfThreePrintFizzInsteadOfTheNumber AndForTheMultiplesOfFivePrintBuzzAndForTheMultiplesOfBothThreeAndFivePrintFizzBuzz っていうメソッド名になるよ 補完無しでは打てないよ
"FizzBuzz" は変数じゃなくて文字列定数なんだから補完できない 正規表現もSQLも補完できない なるべく定数を少なく変数を多くするためにフレームワークを発展させた
補完できないからフレームワークが発達した説が登場 常に補完を軸に考えるその発想が面白い 文字列定数だから補完できないって謎主張も面白い
現在選択している文字列に対して、全ソースコード中の文字列定数から補完する、とかならSmalltalkなら10行ぐらいで書けそうだな。
環境にこだわる人はプログラム作れない言い訳をしているのかね?
ギリギリ作れるか作れないかのプログラムを前提としている。 環境がなくても作れるプログラムや 環境があっても作れないプログラムでは勝負がつかない。
動的型付け言語って何?
性的種なし言語とは違う。
660 :
デフォルトの名無しさん :2011/11/16(水) 20:48:20.58
emacsユーザーは勘違いしてる あれはlispを使うためのエディタとして開発されたのであって 使いやすいエディタという思想はない 操作を見ればすぐにわかる 上下左右移動 ctrl-n ctrl-p ctrl-f ctrl-b 使いやすさじゃなくて覚えやすさでとりあえず決めてみました 使い慣れたのでこのままにしておきます、後はカスタマイズしてね おかしいと気づけ
next,previous,forward,back... なんのことでしょう?
undoのキーバインドが標準ではctrl-x uなのはアホかと思った
ストールマンがlisperなのは周知だが gosmacsは別にlisp用じゃないぞ 確かにelispは強力だしあの拡張性のおかげで 20年以上も使い続けられてるんだしな
elispはあえてlispでも動的な仕様になってて エディタ使いながら動的に機能追加や 変更が出来る stもだが動的言語で環境作る利点だし 静的な環境でも参考にすべき特徴だと思うがね
eclipseもプラグイン開発環境で作業すれば動的に機能追加や変更はできるね。 emacsほど手軽ではないが。
やっぱり今日も、動的型付け言語は 大規模開発では効率が悪いって結論か
大規模開発がドカタを一人でも雇わなければ成り立たない現状、その結論でやむを得んな。
emacsではautoitやahkみたいなのには勝てんよ 環境としてもos相手に戦えるほど高機能じゃない 初心者には使いづらい しかもemacsを使い続けると保守的になりすぎて他のエディタが使えなくなる emacs村の住人として永住を決めない限り無理
autoitやahk?ウィンドウズ専用か そりゃ違う世界だな。 どうぞゲイツの尻でも舐め続けてください。
>>667-668 出来る事と言えば用意されたメソッドを順番に呼び出す事だけ、
自分一人ではFizzBuzzすら書けないドカタを使った大規模開発か
そういうドカタを片っ端から首切るのが一番効率が良さそうだが
だいたいこの流れ↓になるよね。 ・動的型付け言語だと〜は? → Smalltalkは〜できる ・静的型付け言語はリファクタリングが強力 → Smalltalkが元祖
Smalltalkのリファクタリングって、どの程度のことまで出来るん?
scalaって読みづらいよね。省略が多すぎる。_とか。
>>672 開発にそんな奴いないからw
この仕事してるなら常識でわかるよね?
・動的型付け言語だと〜は? → Smalltalkは〜できる ・静的型付け言語はリファクタリングが強力 → Smalltalkが元祖 ・Smalltalk以外は? → 動的型付け言語だめだめじゃんw
・動的型付け言語だと〜は? → Smalltalkは〜できる ・静的型付け言語はリファクタリングが強力 → Smalltalkが元祖 ・Smalltalk以外は? → 動的型付け言語だめだめじゃんw ・でもSmalltalkはでk → でも仕事でSmalltalk使われてないじゃん。お前も使ってないでしょ? ・ぐぬぬ
動的型付け言語は大規模開発で使えるか? → Smalltalkなら可能 → ただし大規模どころか小規模開発でも使われない言語
抽象化が得意な人ならどうでもいい技術なんだろうな。結局センスの悪い プログラムが多いから、リファクタリングを騒いでる感じ。 CSを学んでる 人だったら、そのへんのセンスは改善されるだろう。力技に夢見るより ちょっとくらい勉強したほうがいいよ。 ガウディ本を勉強するならozと遊ぶことになるだろうがoz/mozartはIDEで 騒いでいる人には悪夢かもしれない。
>>676 「FizzBuzz書ける」と言ってるドカタも、
ちょっと問題をアレンジしたら書けなくなるけどね。
ネットに落ちてるコードを探してコピペしてるだけで、
実際には自分で書いてないから。
例えば、端末へ出力する代りに結果をリストで返すようにして、
さらに戻り値のリストの中の数値の総和を計算するとかね。
もちろんリストで戻すときは、数値は数値型のまま、"Fizz"や"Buzz"は文字列型で。
FizzBuzzレベルを自力で書けない奴には 実際には使われないダミーのコード書かせている
究極の動的言語とは実行時に自らの言語仕様を変化させる
>>683 Qiやmaximaを調べてみればいい。
>>682 CUIでなおかつ動的型付けなら、テストコード書かせればいいと思うけど
GUIはテスト自動化できないし静的型付けはテストしたら損かなと思う
この閉塞感はたぶん脳に悪い
>>685 テストに失敗するたびに
条件分岐が増えるから
ダミーを書かせた方がいいよ
なんで雇ってるんだろ。そんな人
大規模ってのが売りなんだから、人数を減らすのはおかしい
規模に関わらず わりとよくいるけどな
大規模開発の定義を静的派が一向に明示しない事からしても、ここが隔離スレなのは明らかだが、何れにしても、雇用に影響しない程度のしょぼい規模では話にならないだろう。 公共事業レベルだと、品質は勿論重要だが、それ以上にスキルのばらつきが多い要員をあえて採用して(公共事業だからね)、如何にプロジェクトを軟着陸させるかがポイントになる。 つまり熟練者には邪魔でしかない機能や、一貫性がなくても世間的にそういうものだと思われている方法、回りくどい手続きが外せなくなる。 動的派が見落としているのはまさにこの点で、彼らは自分のスキルを基準に考えるからおかしくなる。 「大規模」というのは、信じがたいほど低スキルの人間もあえて使わざるを得ない、という現実を知っておいた方がいい。
昔出てた話じゃが 少数精鋭が 大規模に勝るのは当然という結論ですね。
すいませんemacsでC-sってキーボードの何を押すのですか?
FizzBuzzレベルが書けないドカタが戦力になるの? Javaはすげーな
戦力にならんから ダミーコード書いているんだって
大規模開発に携われば君も分かるよ。
ダミーコードのメソッドをIDEで延々とリネームし続けるわけですね
いやリファクタリングとか教えてないから
職場ではダミーコードしか書かせてもらってないドカタが このスレで「動的言語は効率が悪い」と言ってると思うと なんだか悲しい気分になるな
学生なんですがFizzBuzz書けなくてもお金もらってる人がいるってそれ本当なんですか?特異な例ではないのですか?
>>700 求人サイトで
コミュニケーション力のある方って
求人良く見るでしょ
>>700 このスレのJavaドカタにFizzBuzz(
>>681 みたいなの)を書いてとお願いしたら?
本当に書けるなら書いてくれるよ。一分くらいで書けるはずだし。
あ、一分じゃeclipse起動するだけで終わっちゃうかw
>>699 少数に群がるなんとかだから大規模といって大手を振ってこのスレに
来る時間があるんだよ!
>>694 > FizzBuzzレベルが書けないドカタが戦力になるの?
> Javaはすげーな
本気でそう思っているんだろ?
動的厨は。
だから馬鹿だと言われる。
世間知らずで仕事やってない証拠でもあるんだろう。
Java屋じゃないけど書いてみたぞ、だからコードはたぶんJava屋らしくないだろう
http://ideone.com/7mPvk Javaには組み込みのジェネレータや無限リストが無いからそもそも面倒くせーし
さらにこれはBigInteger使ってないからすぐオーバーフローするダメなコードだ
正直この程度のコードパッと書けないやつなんてゴロゴロいるんじゃねーかな
「プログラミング好き」には理解しがたいことだと思うが
>>706 いつもどんな言語を使っている人?
すごく冗長だよね。
>>707 Javaで書くとこんな感じになると思うけど……ためしに自分で書いたらどう?
ジェネレータっぽいものはたぶんjava.lang.Iterableで実装するんだけど
ジェネレータがないから明示的に4つぐらいのメソッドと状態機械を
実装しないといけない
メンバ変数のケツにアンダースコアが付いてたり++nと書いてたりするあたりからC++じゃね?
それと、言うまでもなくtakeとかfilterみたいな便利関数もないからね
>>706 設計がおかしいね。
イテレータ使うのはまあいいとして、イテレータの終了条件が、
イテレータが持っているのではなく、無関係のループ内部にある。
これじゃイテレータじゃなくて、数値生成してるだけ。
とおもいきや、イテレータでやるべきではない条件判定処理が
イテレータ内部にある。
どう見ても”こんなテクニックを知ったから使ってみた”レベル。
>ちょっと問題をアレンジしたら書けなくなるけどね。 現実的な「アレンジ」というのは、 count は DB から読むこと。DB は Oracle, Postgresql を切り替えられるように抽象化すること。 これをサービス化して総和をクライアントに返すこと。 こういう事を言う。 プログラミング「好き」なだけの奴は、こういうアレンジに弱い。 普及していない言語は、こういうアレンジに弱い。
>>711 ?
無限列なんだから終了条件がitratorの側にあるわけがないんだが……
無限リストやジェネレータというキーワードを言ってるのにそういうことを
言うってのは、話が通じていないということかしら?
>>708 普通に作るのであれば、
FizzBuzzクラスが、FizzBuzzを解くという責務を持ったクラスなら、
ループはFizzBuzzクラスが持つべき。
FizzBuzzクラスが(その名前に反して)数値の集合を生成するものであれば、
new FizzBuzz(0,count)とするべき。
一番ひどいのは、for (Object x: 略 { を使っているのに、
その終了条件が、if (--count < 0) break; であること。
結局 FizzBuzz を効率的にエレガントに書けるというのは、 むしろ「小規模開発で力を発揮する言語」だ。
無限列なら終了条件はいらないだろう?
>>714 そこは無限列から有限個の要素をtakeしたいんだけど、takeのような便利なものは
ないからベタにループで書いてるだけですよ
大規模開発で効率が悪いってのは言い換えると、 小さなプログラムなら動的型付け言語のほうが得意ってことだよ。 だから小規模なFizzBuzzが得意でも、「大規模開発で効率が悪い」を 否定することにはならないからね。
>>716 FizzBuzzジェネレータには終了条件はいらないし
無限列を生成するほうが汎用的
総和を計算するにはどこかで計算を打ち切らないといけないので終了条件が必要
>>717 自分で、takeメソッドを実装すればいいだろう?
そのtakeメソッドの戻り値(有限個の要素)をfor(x : ここ )に指定すればいいんだよ。
>>720 もちろん作れるが、この程度のコードでは行数が無駄に増えるだけだな
えっ
それと、この場合は実際にはリストを返すtakeは必要がない (1-passで総和を計算したいだけ) なので、実際にはtakeを作ると効率も悪化する
書かない奴の方が偉そうなのがいつもの2chだな
ここで問題になってるのはFizzBuzzレベルが 書けないプログラマがいるかどうか?なんだが そんで、動くJavaのコードを書いてみせてるのが 今のところJava屋じゃない奴しか居ないってのが
>>724 うん。だからそもそもイテレータを使わないほうがいいんだよ。この場合は。
そもそもそこがおかしいんだけど、それはそれでそういう考え何だろうってことで
> イテレータ使うのはまあいいとして
って書いたんだけど。
>>723 そんなもん
List take(Iterable seq, int count) {
List xs = new ArrayList();
Iterator it = seq.Iterator();
for (int i = 0; i < count && it.hasNext(); ++i) xs.add(it.next());
return xs;
}
程度で済む話だろ
見ればわかるようにこの場合には完全に無駄で、無益だ
>>727 いやそれは元の問題がリストを返せと言ってるから
無限リストの代用としてIterableを使ったんじゃないか
ちゃんと理解してるか?
>>726 > FizzBuzzレベルが書けないプログラマがいるかどうか?
ほうw
じゃあ、それを証明する方法を考えてくれ。
たぶんその証明方法を使えば、
どんな言語でも「FizzBuzzレベルが書けないプログラマがいる」は
成り立つだろうな。
そもそも無限リストなんか使わなくていいんじゃね? 俺なら、FizzBuzzはただのループで書くよ。 そのほうが効率的でコード量も減るだろう? ↑これに反論があるならレスよろしく。
つまりこれは、どうしても無限リストを使いたいがために 冗長になってしまった例である。
関数型の作り方なら、イテレータで無限リストやmap+判定関数で十分だけど Javaって末尾再帰できないんじゃなかったっけ? 元々の問題は無限リストじゃなくて1..100だから。抽象性を下げた作り方 で十分なんだろうな。
>>731 だから問題は
>>681 なんだって
ただのFizzBuzzならこんなコード書くわけがない
関数型やってる人って、どうしても普段から抽象性を重視するクセがあるから java屋たちとは感覚がかなり違うのは仕方がないかも。
> もちろんリストで戻すときは、数値は数値型のまま、"Fizz"や"Buzz"は文字列型で この条件をつけたのは、わざとJavaで不利になるように?
>>735 それは違うだろ。っていうかあまり関係ない。
public class FizzBazz { static List fizzBazz(int n) { List l=new ArrayList(); for (int i=1;i<=n;i++) l.add((i%3==0?"Fizz":"")+(i%5==0?"Bazz":"")+((i%3)*(i%5)==0?"":""+i)); return l; } public static void main(String[] args) { int sum=0; for (Object x:fizzBazz(100)) try{sum+=Integer.parseInt((String)x);}catch(Exception e){} System.out.println(sum); } }
>>735 >>711 ,
>>714 あたりにはちょっと驚いた
関数型やジェネレータを有する言語をまったく知らないのは明らかなんだが
設計常識として自分の正しさを信じて押し付けてくるタイプのようだから
上司だったら嫌だな
>>739 笑。それはお前の勘違いだ。
俺が知らないいのは、過去スレ読んでないだけだよw
途中から参加したから、過去スレ読んでない。 スマンなwww
scalaサイコー def fizzBuzz = Iterator.from(1).map { case n if n % 15 == 0 => "FizzBuzz" case n if n % 3 == 0 => "Fizz" case n if n % 5 == 0 => "Buzz" case n => n } def fizzBuzzSum(count: Int) = fizzBuzz.take(count).collect{case x: Int => x}.sum
>>742 やっぱりscalaは静的型付け言語の中で最高の言語だよな。
動的型付け言語をはるかに上回ってる。
は? Scalaは動的言語なんだけど?
>>744 無知発見w
いや、それとも、動的言語と動的型付け言語の区別がついてないのか?
Scalaは静的型付け言語です。
http://ja.wikipedia.org/wiki/Scala > Scala (スカラ、スカーラ、スケイラ、Scalable Language) は
> オブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。
> 型付け 強い静的型付け
>>738 それは短くて効率もいいんだが、大きなnに対し大量にメモリを消費するし
終了条件が単純な個数でない場合に使いにくい
>>742 まったく、Javaで書くのが馬鹿らしくなるな
>>746 JavaもScalaも同じ静的型付け言語なんですから
ケンカしないでください。
>>746 小規模なコードを Java で書く奴はいないだろ。例が悪い。
>>747 いや、実際の開発はそんなもんだが……
実際はそこまで必要ではないことは多いが
いずれにせよ見ればすぐに気づく程度の欠点だ
>>750 いや、だからメモリ消費を気にしなきゃいけない規模で、Java なんだったら
「リストで返せ」という仕様が馬鹿そのものだと上流で噛み付くべき。
まあ、そうだな
>>746 毎回文字列を数にパースし直す(失敗するたびに例外発生する)コードが効率良いか?
>>753 ああ、よく見てなかったwwwごめん
効率に関する発言は、単にIterableとArrayListの差に関するもんだと思って
>>753 文字と数値を混ぜて返すという仕様が馬鹿そのものだと
上流に噛み付きましょう。
Scalaいいんだけど
>>742 がベタにループで書いたコードと同程度の効率なら言うことはない
そうではないのが残念だ
そういやRubyからScalaへの乗り換えが多いんだって? Ruby遅いから。
むしろ738はウケ狙いでバカコードを書いたつもりだったんだが、普通に盛り上がると思わんかった。 というか、Java で真面目に書くなら、 まずは「Integer もしくは String」を表現する型を定義するところからだろ。 そういう所を端折って Object 型にするなら、それこそ Java で書く意味がない。 土台から丁寧に固めて行くのが Java 流だし、その手堅さこそが大規模になった時に生きる。
で、そこから話が進んでいって、 動的型付け言語は大規模開発で効率が悪いという結論になる。
>>755 いやそう馬鹿でもないんじゃね
動的型ならごく自然だし
ADTがある言語ならただのunionだし
Cでも低レベルのunionを使ってvariant的なことはできる
タグつきunionみたいなのは言語処理系の実装ではたいてい使われているはずだ
Javaで手抜きをするとObjectを使うことになってイマイチ、というだけ
> 動的型ならごく自然だし いい加減動的型と動的型付け言語の区別つけろよ。 Javaは動的型だぞ。 あと動的型付け言語は遅い。
何か大規模=良いことと勘違いしてるのが紛れ込んでるな。 必須機能を実現するのに、リソースを大量消費するのはスキルが低いせいなんだが、バブルが忘れられない団塊かな?
>>742 の scala のコード、
型は Object ではなくちゃんと union 的になってるの?
つまり case x:Int のところに Int でも String でもない型を書いたら、
それは有り得ない case だとして弾いてくれる?
>>739 JavaはJavaのバッドノウハウが必要なんだろうけど、関数型やってると
どうもね。。。
>>765 関数型には代入というバッドノウハウが。
>>763 大規模開発は知らずに一生を終えられるならその方が幸せだよ。
好きでやってる人は少ないだろう。原発作業員のようなものだ。
そういう人をドカタと馬鹿にするのはどうかと思うけどね。
さしずめ Smalltalker は東電のエリート様のような存在でしょう。
>>763 お前何か勘違いしてないか?
大規模ってのは、開発の規模が大きいってことで、
リソースを大規模に使用する開発のことじゃないんだがw
バブル後もいわゆる請負SI屋はゲーム屋やパッケージソフト屋(日本ではほとんど 死滅したが)に比べて競争力にさらされる度合いが低いので、 それほど淘汰がすすまずスキルの低い要員をかかえて雇用するという形態が 成立してたと思う 社会における雇用、という高い観点で考えるとこれも重要なことっす 役人じゃなくても大企業の責任のある立場にある人なら考えなければいけないこと ま、競争が激しいところだと非効率は結局淘汰されることになりますよね 要はプログラマとして食える人間が少なくなる
日本語でおk
要は優秀な人間どの会社も雇わなくなったら 社会が社会としてなりたたなくなるでしょう、という話
>>772 ロボットが人間の仕事を取るようなものだな。
×要は優秀な人間どの会社も雇わなくなったら ○要は優秀な人間以外どの会社も雇わなくなったら ごめんwww 上じゃ意味わからんわwww
>>772 もともと優秀かどうかより、
>>701 みたいはなしが多いから。
社会がだんだん弱ってるんだろうな。
>>764 Any型っていうJavaでいうObjectみたいな型になるunion的なの使うならこんな感じ
sealed trait StrOrNum
case class Str(s: String) extends StrOrNum
case class Num(n: Int) extends StrOrNum
def fizzBuzz = Iterator.from(1).map {
case n if n % 15 == 0 => Str("FizzBuzz")
case n if n % 3 == 0 => Str("Fizz")
case n if n % 5 == 0 => Str("Buzz")
case n => Num(n)
}
def fizzBuzzSum(count: Int) = fizzBuzz.take(count).collect{case Num(x) => x}.sum
let rec fizzbuzz n = let x = match (n mod 3, n mod 5) with (0, 0) -> `Str "FizzBuzz" | (0, _) -> `Str "Fizz" | (_, 0) -> `Str "Buzz" | (_, _) -> `Int n in [< 'x; fizzbuzz (n + 1) >] let fizzbuzz_sum n = let add x = function `Int y -> x + y | _ -> x in List.fold_left add 0 (Stream.npeek n (fizzbuzz 1))
def fizzbuzz(n): return map(lambda n: 'FizzBuzz' if n % 15 == 0 else 'Fizz' if n % 3 == 0 else 'Buzz' if n % 5 == 0 else n, range(1,n+1)) def fizzbuzz_sum(n): return sum((x for x in fizzbuzz(n) if isinstance(x, int)))
>>769 それで「開発の規模って何で測るのさ?」という問いが出るたびに
何の答えも出てこないんだよね、このスレは。
さて、fizzbuzz自慢が花ざかりのようで結構結構。 さらに次の条件を加えてみよう 7で割り切れる時にはbaka。 合計する時、bakaは3.14として計算する。 さあ、各言語のfuzzbuzzsumはどれだけ変更が必要かな?
>>712 それってFizzBuzzレベルのコードは書けないけど
APIは知ってますよってことだろ?
まさに
>>672 が指摘するドカタの人物像そのままじゃん。
お前自身はケチつけるだけで一行もコード書けなかったみたいだしね。
ホントお前面白いわww
>>781 3と7の公倍数や5と7の公倍数はどうすんの?
>>783 そういう仕様を煮詰められないとこがドカタだよな
たぶん
>>781 はFizzBuzz問題を理解してない
fizzbuzzの問題って、いじる所が、条件わけの部分か数列の部分 のどちらかだからな。 iota = iterate succ 1 engine c1 c2 c3 x = ... fizzBuzz = engine (15,"FizzBuzz") (5,"Fizz"),(3,"Buzz") take 100 $ map fizzBuzz iota くらいで大抵のもの対応できるんだよね。engineのc1..c3とiotaを適当に変えればね。
更に一般化するんだったら、条件がいくつもある場合ということになるけど そのときだったら関数型ならばfilterと組み合わせればなんとでもなる。
>>783 それが正解。
指定されていないのだから、それをどうするか訊くのが当然。
冷やかすことしかできない
>>784 はプログラマではないね。
とりあえず適当に命令して訊き返されてからもう一度考えるのは 完全に動的型付け言語のスタイルだね それがプログラマとして当然だよね
一人で何レスも続けて書いて何がしたいんだろう
一人でいくつもレスを書き続けてると思い込むっておめでたい方ですね。
なんか流行っているみたいなのでSqueak Smalltalkでも書いてみた。 Integer >> fizz ^(self isDivisibleBy: 3) ifTrue: ['Fizz'] ifFalse: [''] Integer >> buzz ^(self isDivisibleBy: 5) ifTrue: ['Buzz'] ifFalse: [''] | fizzbuzz | fizzbuzz := [:n | (1 to: n) collect: [:m | m fizz, m buzz ifEmpty: [m]]]. ((fizzbuzz value: 100) select: #isInteger) sum Bakaな仕様変更時の追加・変更はこんな感じ。 Integer >> baka ^(self isDivisibleBy: 7) ifTrue: ['Baka'] ifFalse: [''] | fizzbuzz | fizzbuzz := [:n | (1 to: n) collect: [:m | m fizz, m buzz, m baka ifEmpty: [m]]]. ((fizzbuzz value: 100) collect: [:each | (each asString includesSubString: 'Baka') ifTrue: [3.14] ifFalse: [each]] thenSelect: #isNumber) sum
>>788 「それが正解(キリッ」じゃねーっつのw
コードも仕様も満足に書けない奴が上から目線とか笑わせんなw
Javaの連中は仕様を変える前に、まずObjectへキャストしたり
Stringに変換してから数値に戻すようなコードじゃなくて
「Integer もしくは String」型を使ったコードを書くのが先だろ。
静的型チェックは飾りか?
intとstrだけじゃつまらん と言われていることに気付けw
どうせ大規模とか言っても レベルの低い末端には バラした結果しかやらさないから どーでもいいんだよね 動的な機能なんて理解もされないしな
>>794 その簡単すぎてつまらん問題すら
満足に解けないJavaってなんなのよ?
そして、ダミーを欠かされる毎日・・・
>>796 Javaはポインターやメモリ割り当てで挫折する人でも開発できるように、
と作られた言語だから、他言語のエキスパートと比べるのは可哀想だ。
まあ、そのお陰で公共事業と同じで、とにかく大人数を動かす事の役には立ってるけどね。
経済そのものが無駄で成り立っているので、無駄を究極まで削減すると、失業者が溢れることになる。
>>798 >Javaはポインターやメモリ割り当てで挫折する人でも開発できるように、
>と作られた言語だから、
それは初耳だ。ソースはいずこ?
仕様変更ついでに条件分け部分を少々一般化 let rec conv n = function [] -> `Int n | (m, s) :: xs -> if n mod m = 0 then `Str s else conv n xs let fizzbuzz n = [conv m [(15,"FizzBuzz");(3,"Fizz");(5,"Buzz");(7,"Baka")] | m <- 1--n] let fizzbuzz_sum n = let add x = function `Int y -> x +. float y | `Str "Baka" -> x +. 3.14 | _ -> x in List.fold_left add 0. (fizzbuzz n)
仕様追加を鑑みれば15の倍数の場合の処理を書いたら負けだろう。
Scalaというオブジェクト指向+関数型言語+静的型付け言語という 最強言語がある今、動的型付け言語に価値を見いだせなくなったね。
scalaって、騒ぐほど優れてるとは思えない。better Javaとしての地位 を狙ってるんだろうが、jetbrainやeclipseが別の言語をつくろうとするあたり やっぱり無理があるんだろう。
動的型付け言語厨のいう、Javaの欠点を なくしたのがScalaだからね。
それが関数型を普通にやってた人からは余り魅力を感じないようなんだ。 どちらかというとJavaカラの人が多いのが特徴じゃないかな。
Ruby好きな人はScalaも好きそう。共通点は可読性が低いって事。
>>807 Ruby好きにはHaskell好きが多いという話は聞くし、それには理由がある
でもRuby好きはScalaも好きという話は聞かないなあ....
(ただし自分はRuby好き&ML好きだけど、それは人それぞれ)
>>806 の言うようにJava好きの人が好む言語じゃないかと思われ
Javaを嫌になった人がScalaに走るんじゃないの。
Cを嫌になった人がC++を使うわけじゃない。 Cにオブジェクト指向を加えたのがC++であるように Javaに関数型言語を加えたのがScala
Scalaは静的型付けのうえ、Javaの資産が使えるからね。 この2つのメリットは大きい。
>>801 公倍数の扱いを統一する(3と5と7の公倍数なら"FizzBuzzBaka")ならこんな感じで
let rec conv n = function
([], "") -> `Int n
| ([], x) -> `Str x
| ((m, s) :: xs, x) -> if n mod m = 0 then conv n (xs, x ^ s) else conv n (xs, x)
let conv n xs = conv n (xs, "")
let fizzbuzz n = [conv m [(3,"Fizz");(5,"Buzz");(7,"Baka")] | m <- 1--n]
>>802 オカムルです
>>811 ScalaはIDEも急速に育ってるらしいしね
>>811 逆にJava資産の無い人にとっては、ScalaのJava環境前提は「負債」でしかない
静的型付けな関数型言語であれば、他にいくらでも選択肢はあるからね
そういや、この手のスレのわりには Rubyのコードを見ないんだけど(Smalltalkすらあるのに) 実はRubyプログラマって存在しないの?想像上の生き物?
煽っても出てこないと思うよ。:-)
Rubyはオワコン
もう3スレ目も終わりに近づいているが、 実行前の型チェックが「無い方がよい」と積極的に主張する人は一人もいない。 それが結論。
じゃあPython素人のPythonコード: def engine(lst): def engine2(x): tmp = filter(lambda i: x % i[0] == 0,lst) if tmp == []: return x else: result = reduce(lambda i,acc:(i[0]*acc[0],i[1]+acc[1]), tmp,(1,"")) return result[1] return engine2 def option(f): def option2(x): if isinstance(x,str)==True: return x else: return f(x) return option2 fbb = engine([(3,"Fizz"),(5,"Buzz"),(7,"Baka")]) mag = option(lambda x: 3.14+x) show = option(lambda x: str(x)) map(lambda x: show(mag(fbb(x))), range(1,100))
>>800 ,812,818
どこまで本気で書いてるかは知らないが酷いコードだな
関数型の言語(pythonは違うが)を使っていても考え方は全く理解していないのが分かる
というかFizzBuzzをまともに書けない人がいるというのは本当なんだな
煽り乙。
ごく当たり前の感想で煽ったつもりはないんだけど それくらい酷い
そもそもbakaの扱いの仕様を満たしていないし。というかもはやバグレベル。
誠に僭越では御座いますが、是非とも関数型言語の考え方を具現したコードを愚輩に御下知賜わりたく馳せ参じ候某。
Rubyが関数型言語だ。
具体的なことが含まれない批判なんて 好きか嫌いか明言しただけだよ キー操作を何文字当たり何秒短縮できただのそういう具体的な分析ぐらいしろ autoit autohotkey keyhac nilscript ironahkその他色々 全部同じような機能を持つツール これだけ同じような機能を持つツールが乱造されている現実から目をそらすなよ それだけの価値がある何かだという意味がある 関数型言語と違う部分は プログラムが書けないユーザーですらこのツールを使うためにプログラムを書いているという点 関数型はプログラマでさえも積極的に覚えようとしない使わないのに対して これらツールはプログラムを書けなくても使いたいと思える何かがある 何かが普及するときに大切なのはその何かであって すばらしい言語仕様じゃないって事だ ahkの言語仕様はクソだクソだと言われてるけどそれでも使われてる 関数型なんてすばらしいすばらしい言ってるくせにまったく普及しない 泣けよ お前のそれは好き嫌いを言ってるだけで分析すらもしてない 身につけたアクセサリを見せびらかして自慢しているのと同じレベル emacsなんて化石はごみ箱に捨ててしまえ
> キー操作を何文字当たり何秒短縮できただのそういう具体的な分析ぐらいしろ object. TAB TAB で長い文字を省略できちゃった! 静的型付け言語はキー操作を減らすことが出来る!
Rubyこそが真の関数型言語だ。
818=820=735
>>670 何一つ具体的なことを言えないお前が唯一言った具体的な事
>どうぞゲイツの尻でも舐め続けてください。
お前がなめろ
いいや、お前がRuby使え。関数型言語だからな。
>>805 > 動的型付け言語厨のいう、Javaの欠点を
> なくしたのがScalaだからね。
その対価として、静的型付け言語厨のいう、動的型言語の欠点を
装備したのがScalaだからね。
>>830 動的型付けの欠点って、
静的型付けではないことなわけで、
Scalaは静的型付け言語なんだから
なにも欠点持ってないんだが。
もしかしてわかってない?
静的型付け言語は素晴らしい、
Scalaは静的型付け言語だ。
こういう流れなんだけど。
any型が台無しにしてることに気付かない静的型信者w 鰯の頭も信心、か。昔の人は知恵があったんだなww
クラスを作ってからインスタンスを作るのは効率が悪い 関数リテラルとオブジェクトリテラルが有る方がよい JavaScriptかOCaml
>>825 関数型言語が素晴らしいかどうかは知らんが、
未だにJavaでまともなFizzBuzzコードが出てこないってことは
そういうツール使ってキー操作を短縮しても
FizzBuzz書くのに何日も掛かるってこと?
JavaのFizzBuzzはこのスレに出てるだろ。 まともではないという意見で却下するなら自分がまともなのを出せ。
え?あんなコードでOKのつもりなの? お前等本番でもあんなコード書いてんの? あんな文字列と数値の違いすら静的型として区別しないコードで 良く静的型言語は素晴らしいとか言ってられるな
わかったわかったコードで語れ
まあ、俺がJavaで書いてあげても良いんだけどね? でもさ、「JavaドカタにFizzBuzzは書けるか?」というのも主題なわけだから 俺が書いたらそのテストにならないわけよ
はいはい書いて書いて
てか関数型言語で書かれたコードでもまともなの無いよね? 設計のセの字も知らない学生が使い捨てで書くようなプログラムしか出てこないじゃん
>>840 どうまともでないか「具体的に」説明してみてよw
文字列を数値にパースしなおすような糞コードは存在しないみたいだけど
え?あんなコードでOKのつもりなの? お前等本番でもあんなコード書いてんの?
public class FizzBuzz { abstract static class SI { String s = ""; int i = 0; boolean is_i = false; } static class S extends SI { S(String x) { s = x; } } static class I extends SI { I(int x) { i = x; is_i = true; } } static SI fizzBuzz(int i) { return i % 15 == 0 ? new S("FB") : i % 3 == 0 ? new S("F") : i % 5 == 0 ? new S("B") : new I(i); } public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 100; i++) sum += fizzBuzz(i).i; System.out.println(sum); } } どうでもよくね?
> range <- 1:100 > data <- data.frame(N=range, Fizz=range%%3==0, Buzz=range%%5==0) > sum(subset(data, !Fizz & !Buzz)$N) [1] 2632
動的型付け言語のRが最強ということで宜しいですね?
どうでもいいよ845=846だし
所詮fizzbuzzだからどうでもいいが、仕事なら"fizz"だの"buzz"だのをハードコードされた時点で殴る。
てかRで書くからそれっぽく見えるだけで 846くらいは総務のネーチャンでもexcelで5分で書くよな
ScalaとかOCamlとか冗長すぎワロスwww
(defun fizz-buzz (length) (loop for i from 1 to length for tmp = (cond ((= (mod i 15) 0) "FizzBuzz") ((= (mod i 3) 0) "Fizz") ((= (mod i 5) 0) "Buzz") (t i)) collect tmp into list when (numberp tmp) sum tmp into number finally (return (values list number))))
Excel 最強 A1 =IF(MOD(ROW(),3)=0,"Fizz","") B1 =IF(MOD(ROW(),5)=0,"Buzz","") C1 =IF(AND(A1="",B1=""),ROW(),0) D1 =SUM(C$1:C1) 求めたい行までコピペ
お前らの大好きな糞マイナー言語でシコシコ書くより excel の方がよっぽど分かりやすい
Rと同じ事すれば良いならこうだが、いわゆるFizzBuzzとは違う # type fizzbuzz = {n:int; fizz:bool; buzz:bool};; # let data = [{n=n; fizz=n mod 3=0; buzz=n mod 5=0} | n <- 1--100];; # List.fold_left (+) 0 [x.n | x <- data; not (x.fizz || x.buzz)];; - : int = 2632
しかしあれだな。仕様変更してる部分に合わせて作ったけど、 抽象化の技法を全く理解してないんだな。
岡村はともかく、Scala、Schemeでも15の倍数の場合を書いてるドカタレベルがいるのか。
これじゃあ 未来が明るくないね。少しくらい、勉強したほうがいいよ。
>>857 そゆこと
条件の真偽の組み合わせに対するcaseだってことを
理解できてないドカチン大杉
こういう流れの時に、自分のコードを平気で晒せる奴と、それができない奴。 ここが、プログラマを二つに分ける一番高い壁。 この壁に比べれば他は全部誤差。
必要なのは、この壁を自力で乗り越える意志。 ここさえ越えれば、あとは世界中のプログラマがボランティアで教育してくれるのでどんどん伸びる。
もうそろそろ短いコードでの競争はやめて、 実用的なレベル(大規模)での コードの書き方の話をしようぜ。
>>857 ,859
15の倍数の場合を書くのは問題ないだろ
批判するポイントがずれてる
>>859 おれここの批評を見てて、土方批判が散々されてる現状を
目の当たりに見た感じがしたよ。抽象化するときに使った
テクニカルなことをつかったらわからないみたいだし。
この辺ってSICPの1,2章レベルなのにな。
>>864 お前も批判のポイントがずれてる。
わからないやつをお前がドカタと言ってるだけで、
大半のドカタ(仕事をしている奴)は
おまえなんかよりもずっと分かってるよ。
大規模開発の話をここでやるのは現実的には難しい。 FizzBuzzと違って具体的なコードはなかなか出せない。 実体験としてバックグラウンドを共有している開発者同士でなければ理解できない話がどうしても出てくる。 ここでは、趣味や学生のようなアマチュアが煽ってくるから、まともな議論にはならないだろう。
実際になにを作りましたか?と聞かれて 教科書に載ってるようなものぐらいしか言えないんじゃ ドカタよりも劣ると思う。
>>866 じゃあ、どんなフレームワークがあるかの話ぐらいはできるのでは?
ほんと、匿名で批評してる連中は恥を書く前に、勉強したほうがいいよ。 高速に作るときと、抽象に作るときとの2つの技法くらい身につけたほうが いいと思うんだがな。場所によって使い分けしなきゃならんし。
FizzBuzzの話も仕事やっていて作れない奴はいないわけで、 ○○の機能を使ったFizzBuzzを実装しろって話なら、 それはFizzBuzzではなく○○の機能を知っているかどうかでしかないわけで 本質がFizzBuzzではなくなってる。 こんな知ってるかどうかで成績が決まるのは学生時代までだよ。
ここをみてて 日本のソフトウェア技術者に深刻な何かを感じたくらい。 これじゃあ国際競争力も生まれないわ。
>>869 そういうのは使うときに調べればいいんだよ。
コード晒すのはいいが、この程度の仕様
>>681 ・仕様追加
>>781 くらいは最低限
満たしたのを書いて出してくれよ。
>>871 うん、ドカタとばかにするような連中ばかりだからね。
文句があるのならお前がやれって話。
でやらせると、何も出来ない。
口ばっかり。そういう奴が多い。
ユーザーが要求しているものを作れ。
>>873 それは言いだしっぺが書かないからいかんのだよw
>>875 確かに。自分で答えも用意しない出題者とか涙が出てくる
あらかじめ保守性や拡張性を考慮したコードを書くかどうかってのは仕事の スタイルにかかわっている気がするな 当面の仕事をてっとりばやく済ませる(余計なことはしない) 当然その後のことはあまり考えてない、後から要求が来たら当然金をもぎ取る 自社の製品やサービスとして提供しない請負仕事ならそんな感じだろう
>>873 ぶっちゃけ、そういった仕様は読んでない。
いちいち過去のレスをちゃんと読む?
読まないでしょ。ほんの数レスしか読まないで書き込む。
だから違ったコードがでるのは当たり前。
それを見て、仕様理解出来ないんだーって勘違いしている人がいる
ここが2ちゃんねるだってことをわかってないよね。
その場のノリの適当なレスみて、優越感に浸るなよw
>>865 この人もトンチンカンだな。やっぱり腕を磨かないといけないよ。
まだ、2つの数字の辛味だけで話がすんでるからおおくて条件は2つ、3つだが
これが4つの数字なら、4もしくは10になるんだよ。
nの素数を使ったわけかたなら、条件をnもしくはn(n-1)/2になる。これをいちいち
if文に書くのか?というのが目先の問題をとく方法と抽象化の方法の違いだよ。
当然、使い回しするから保守が楽だったりするけど、そういったことも理解できな
いんだろ?ゲロっちゃえよ。
いずれにしてもここの連中に呆れてるよ。
>>877 > あらかじめ保守性や拡張性を考慮したコードを書くかどうかってのは仕事の
> スタイルにかかわっている気がするな
だが、それが一番重要なことだろう。
そういった話ができないのが
実務経験無いやつなわけで。
882 :
853 :2011/11/19(土) 11:10:34.49
C 列挿入 C1 =IF(MOD(ROW(),7)=0,"Baka","") D1 =IF(C1="",IF(AND(A1="",B1=""),ROW(),0),3.14) コピペ
実際の開発では細かいコードの書き方よりも 対局を見た設計の方が重要だからね。 設計といっても紙に買いたい資料の話じゃないよ。 コード全体の構造の話。 構造がちゃんとできていれば、細かいコードは ダメだとわかれば書き換えればいいだけになる。 そういった構造の話が教育の現場では行われていないんだよね。 でいきなり実践に入って、フレームワーク(構造の一例)を使わされて なんじゃこりゃ?ってなる。 今までやってきたことよりも、更に大きな視点が要求されるから。
やっぱり動的型付け言語はFizzBuzzもまともに書けないドカタを入れざるを得ない大規模開発で効率が悪い
>>883 そうゆうことなんだけど、仕様変更に強い作り方をどうすればいいか
って学んでないんだろうと思ったよ。考え方を知ってるか知らないか
だけでずいぶん違ってくるんだけど、知らないがために幼稚な世界で
満足をしている。。。そうゆうふうにここの批評家の多くの人を
とらえてる。
保守性・拡張性=善、とする教科書の教えと現場の実情は違うわけだ ただな、要は請負でコードを書くという業務形態が ソフトウェア品質を向上させるという方向にプログラマを動かさないなら 本当はそういう構造自体に問題があるんだよ 現状は経済として成り立っているが、長期的に日本のソフトウェア産業の 競争力という観点から見れば良いことじゃない
>>885 その仕様変更に強い作り方をしたコードはもう出てる?
>>879 公倍数で割り切れる時の出力が各素数の組み合わせだからそれで済むだけで、
3ならfizz
5ならbuzz
7ならbaka
3と5で割り切れるならunko
3と7で割り切れるならtinko
5と7で割り切れるならmanko
3でも5でも7でも割り切れるなら3.14
と出力するように仕変が入ったらどうすんだ?
なんでn(n-1)/2だと言えるんだよ?
n個の素数の組み合わせで条件が入ることを想定して組むならパターンは2^nだろ。
中途半端な抽象化が一番使えない。最初に無駄なコストを使った挙句、
結局想定を超える仕変が入って無駄になるだけ。仕事してりゃ、これ常識だと思うけどな。
>>884 動的言語だって15の場合を書いてるドカタレベルは実際いただろ。
抽象化は通常はタダで得られるものではない(空間効率、時間効率、またはその 両方が犠牲になることが多い)ので、全部トレードオフとして考えないといけない 関数型のループや再帰に代わる構造はそれでもコードが非常に簡潔になるという 利点があるけれども(ただしScalaのような言語ではただの配列とwhileループ のほうが比較にならないほど効率がいい)、Javaの重量フレームワークのようなタイプの 層を何層も重ね、大量の設定ファイルを用いるタイプの「抽象化」は、 本当にそれが必要なのか、よく考えたほうがいい
で、どうすんだって話よ。 引数の数値に対してあらゆる条件を想定するなら デフォルトルールを末端に置いて chain of responsibility で書くか? fizzbazz を書けと言われてそういう設計をするのか?アホか。
>>888 > 3と5で割り切れるならunko
この時点で元ネタのFizzBuzzゲームの枠組み関係なくなっちゃってるって事に
いいかげん気づけよ。
>>893 >まだ、2つの数字の辛味だけで話がすんでるからおおくて条件は2つ、3つだが
>これが4つの数字なら
この時点で
>>886 保守性拡張性はあと楽になってくるし、だからDSLという話も出てくるんだけど
それと同時に、ここはかなり最適化を頑張らないとというところもでてくるから
そちらはまた違った発想が必要になってくる。場所による使い分けのセンスは
大切なんだけどな。でも、ここの人って目先さえ満たさればOKという人が多い。
なんか残念な人たちが集まってる。
つまりどういう将来拡張を想定できるか。 予想し得る拡張には備えなければならないし、発生し得ない拡張に備えるのは無駄。 ここを的確に押さえて必要十分な設計を行うことが要求される。 プログラミングスキルだけではなく業務ドメインの知識になってくる。 むしろ真剣に事前の勉強が必要なのはそっちだ。開発言語なんか細かな話。 上流での設計ミスは取り返しがつかない。 仕事をしてない奴は、こういう話が分かってないんだよな。 だから実装レベルの話しかしない。 自分で仕様を決めて自分で実装するなら全知全能の神だからな。そりゃ楽だろ。 ここんとこの話は FizzBuzz では議論にならん。 出題者が脳内で想定している拡張には備えておき、出題者が想定していない拡張には備える必要がない。 FizzBuzz のような現実に結びつかない問題でそれができるのは、本人とエスパーだけ。
>>896 サンデープロジェクトのハリーになった気分みたいだな。
そもそも、どこに拡張性が絞られるかすらも考えるも放棄しているような
記述が見られる所が、どの程度のことまで考えられるかも見え隠れする。
これじゃあまともに人も育てられんだろうよ。
>>897 では FizzBuzz の例で具体的に。
3で割り切れるならfizz
5で割り切れるならbuzz
両者で割り切れるならfizz buzz
さあ、将来の拡張性はどこに絞られるでしょうか。最適な設計をどうぞ!
まともな企業全てに共通する大原則 批判だけで提案しない人間は相手にされない
15 で割り切れる場合を書くことを叩いてる人がいるけど、
ttp://ja.wikipedia.org/wiki/Fizz_Buzz もともとのルールが
3 で割り切れる場合
5 で割り切れる場合
両者で割り切れる場合
と、3 通りの場合分けになっているのだから、その通り書くのが素直だと思う。
「複数の条件を満たす場合には、条件を満たすものを全部出力する」という仕様ではないので。
ちなみに、もしそういう仕様なら、"Fizz Buzz" なのか "Buzz Fizz" なのかという順番が問題になるけど。
素直に書くなら 3で割り切れて5で割り切れない場合 5で割り切れて3で割り切れない場合 3でも5でも割り切れる場合 3でも5でも割り切れない場合 じゃない? これが良いかは別として。
>>900 3で〜、5で〜ってきて続けて「両者で割り切れる場合 FizzBuzz」と書いてあったら
それは「複数の条件を満たす場合には、条件を満たすものを昇順に全て出力する」
って読むだろJK。
(defun fizz-buzz-baka (length) (loop for i from 1 to length for tmp = (format nil "~:[~;Fizz~]~:[~;Buzz~]~:[~;Baka~]" (= (mod i 3) 0) (= (mod i 5) 0) (= (mod i 7) 0)) if (string= tmp "") do (setf tmp i) collect tmp into list sum (cond ((numberp tmp) tmp) ((string= tmp "Baka") 3.14) (t 0)) into number finally (return (values list number))))
CLならもうちょっとひねりをいれてくれよ。遅れてきたわりに面白くも何ともないコード。
>>899 Objectにキャストしてはいけない
整数を文字列にしてはいけない
15で割ってはいけない
などというルールを提案する人間も相手にしたくない。
何かを禁止するルールを提案する人間は、批判だけする人間と同じ。
perl最強? perl -le "print(($_%3?'':Fizz).($_%5?'':Buzz)or$_) for(1..100)"
>>906 しょっちゅうそういう注意をされているんだろう?
いかにもドカタが言うそうな言い分でわらえる。
>>907 お客様。
こちらではお下手くそなゴルフの素振りは他のお客様のご迷惑になるので
ご遠慮ください。あるいは仕様書を良く読み直してからおいでください。
>>886 > 保守性・拡張性=善、とする教科書の教えと現場の実情は違うわけだ
教科書の、保守性・拡張性というのは
○○言語を使えば、保守性拡張性が高くなる程度の
机上の空論レベルでしか無いからダメ。
保守性・拡張性ってのは、そんな何かを導入すれば終わりみたいな簡単なものではなく、
それらが高くなるような設計で作ることを意味する。
で、作りましょうで終わるのが教科書で実際に作るのが実践。
教科書は所詮教科書。心得までしか書いてないんだよ。
教科書ってのはセンスを養うためのものだよ。 学がない奴の言い訳はいろいろあるけど、適した考えを理解しておくことが プラスになることがあってもマイナスになることはない。 ここの人って、プログラム作業にしても目先を考えるので精一杯なんだもの。 残念だよ。そりゃIDEだのリファクタリング*機能*だのって話になるわ。考え られないんだから。
全然違う
>>910 > ○○言語を使えば、保守性拡張性が高くなる程度の
> 机上の空論レベルでしか無いからダメ。
> 保守性・拡張性ってのは、そんな何かを導入すれば終わりみたいな簡単なものではなく、
それ言ったらこのスレ終わる
だってここは静的厨が「静的型付け言語を導入すれば効率が改善する」
「IDEを導入すれば効率が改善する」って言ってるスレだから
>教科書の、保守性・拡張性というのは >○○言語を使えば、保守性拡張性が高くなる程度の そんな(○○言語を使えば〜みたいな)教科書は見たことがないな エセ教科書じゃねーのか 教科書ってのはSICPみたいなやつのことだぞ まともな教科書には理論と実践の両方が書いてある(後者は演習問題) それがどう(業務的な)実践に役に立つのか、立たないのかを判断できずに 「机上の空論」の一言で済ませるような奴は、一言でいえばリテラシーがない 先人の知恵を自分の糧にする能力がないということだ
教科書でセンスは養えないぞ。 スポーツでも実際に練習して初めて身につくんだ。 実践を積んでないスポーツ選手はいない。 リファクタリングも同じ。 実際に使っている人のほうがはるかに技術は上だ。
>>914 > 教科書ってのはSICPみたいなやつのことだぞ
そんなのを教科書に使っているのは
情報工学科ぐらいなもんだろ。
たいていの大学生はそんなの読んでない。
実際にうちの大学でもそんなの使ってないし。
SICPなんかもはやMITですら使われてない。
自分はまともなcomputer scienceの教育を受けたことがないことを 自慢しなくていいのに
当然教科書といえば、SICPだわな。あれの演習問題は保守拡張能力を 鍛えるのにはかなりいいからね。そこに基礎力を作るヒントがある。 SICPなら一部の企業では輪読してる連中もいるし、勉強会もマメに行 われてる。別に大学にいなくてもやれるよ。独学でやるのはかなり骨 が折れるが不可能ではない。その差は技術を磨く気持ちがあるかないかさ。 教科書という言葉で浮かべるイメージの違いもあるもんだなって914を指摘を 読んで思ったよ。極論だがまなたんを浮かべる奴とSICPを浮かべるやつでは違うだろうし。
ガウディ本はozを使おうとすると emacsが必要になってくるからここの人には嫌われるかもな。
>>918 大規模ドカタの巣窟にのこのこやってきてCS教養自慢する馬鹿も十分はずいけどな。
あんなの使ってないこんなの使ってないはどうでもいい。 何使った?
オープンソース
Code complete
↑現実世界で動作する生きた教科書
SICPは現場では古典的な扱い。 古くて誰も参考にしていない。
一つ言えること。 この業界では science > engineering という不等号を持っている人は使えない。例外は無い。
SICPは言語としての拡張性とかそういう話であって、 システム全体の拡張性とか保守性とかそういう話じゃないからね。 現場で要求される、拡張性とか保守性ってのは お客の仕様変更やメンテナンスやバージョンアップにたいする 拡張性とか保守性だから。
SICPは純文学のようなもの。 一般教養として身に付けておくべきとは思うが それは一々話題にするようなことではない。 仕事をこなす上では、やはり実用書を読まなければ。
オライリーの本とか読んだこと無いのかな? 教科書に書いてあるものと 実践で要求されるものが全く違うと分かるはずなんだが。 オライリーの本を教科書に使ってる 大学って無いの?
>>925 C=1とするとJava=2.5 VB=4.5 Perl=6だそうだ
これが現実世界か
>>931 鮮度という概念で重み付けくらいしないと。
(defun fizz-buzz-baka (length parameter &optional sum-parameter) (setf parameter (sort parameter #'< :key #'car)) (loop for i from 1 to length for tmp = (format nil "~{~:[~*~;~a~]~}" (loop for (n s) in parameter append (list (= (mod i n) 0) s))) when (string= tmp "") do (setf tmp i) collect tmp into list sum (if (numberp tmp) tmp (loop for (s n) in sum-parameter if (string= s tmp) return n finally (return 0))) into number finally (return (values list number)))) (fizz-buzz-baka 100 '((7 "Baka") (3 "Fizz") (5 "Buzz")) '(("Baka" 3.14)))
15の倍数のcaseまで書いちゃう人は、 場合分けの基本ができていない証拠。 つまり、任意の数に対して、 ・該当するcaseが少なくとも1つ存在し、 ・該当するcaseが多くとも1つしか存在しない、 ことを満たすことを簡単かつ明瞭に示す。 それが安全性・保守性・再利用性の高いソフトウェアを書く基本だ。 そしてそれを言語レベルでサポートできるのが静的型付けのメリットでもある。 このスレの静的型厨は、静的型付けの重要なメリットを知らずに ただ静的型付け最強、動的型付けクソ、と喚き続けていたことを 自ら証明してくれたわけだ。 ご苦労さんw
15の倍数とか、まだfizzbuzzやってんのか?
> このスレの静的型厨は、 > 静的型付け最強と喚き続けていたことを > 自ら証明してくれたわけだ。 なにも問題なさ過ぎてワロタw
やっぱり動的型付け言語はドカタ雇用前提の大規模開発で効率が悪い 4
>>935 静的言語しかしらないから、混ぜっ返さないで答えて欲しいんだけど、
> 15の倍数のcaseまで書いちゃう人は、
> つまり、任意の数に対して、
>・該当するcaseが多くとも1つしか存在しない、
これって矛盾しないの?
やはり話がわかってないみたいだな。仕様変更を上手にできる ことに関する腕を上げられると言ってることが読めないんだな。 SICPってそのセンスを巧みに育てる演習問題をだしてるよ。 基礎がない人間って、応用が聞かないし融通が効かないのって ふつうのコトなんだがな。
>>938 それでいいんじゃないか? ほんとそんな感じだもんここの
。。。
>>939 > これって矛盾しないの?
静的厨は矛盾している、ってことだw
わかんないの?
だから ドカタと揶揄されてるのにな。 ここの多くの批評家の知的レベルも高くはないけど、スキルも低そうと いうのが率直な感想かな。
>>937 そうだね、ドカチン稼業には何の問題もないだろうね。
本当に複雑なシステムをちゃんと動くように構築する係の人には
とても大切な基本スキルだけどw
>>940 SICPなんか読んでて当たり前で、一々ドヤ顔で喋るようなことじゃねーだろって言ってんだよ。
まったく学歴しか取り柄のない奴が伝家の宝刀のようにSICPSICP連呼する流れ、いい加減お腹一杯です
>>945 当たり前な割に、まるで実行できてないじゃんw
>>947 SICPしか読んでねえからパズルしか解けねーんだよ
実際問題、SICPを読んでても偉そうに評論家気取るだけで 自分では模範解答一つ書き込めないんだろ?それ読んだ意味なくね?
>>942 混ぜっ返しはいいから、矛盾ないことを説明してみてくれ。
やっぱり 学ぼうとしない人ってだめだとおもうな
書くことは学ぶことです
>>944 いや、静的型付け言語厨が
静的型付けが最強と自分で証明するのは
当たり前だろってことなんだが。
>>935 良く分からん。
関数だから入力に対して出力が一意に決まるし、
関数の中をどう表現するかは書き手次第でしょ。
> 関数だから入力に対して出力が一意に決まるし、 それは副作用を持っていない関数限定だ
まとめ - 大規模開発にはドカタ動員が必須 - ドカタは静的型チェックやIDEの補完の助けなしではFizzBuzzも書けない。 - 逆にコンパイラとIDEの助けを借りれば、なんとか動くコードは書ける。 - 動的言語には現状まともなIDEがない(Smalltalkerはこっちくるな。Emacs?笑えんな) - よって大規模開発で動的言語を使うと炎上する
煽ってるわりには良いまとめだ。
そのダメな人が必死に否定してるのがこのスレ。結局 図星なんだろうと思う。ほんとどの教科書でもいいから 基礎くらいは身につけたほうがいいよ。しょーもない反論 聞かされるより、本を開いて読んで見たらいい。 IDEの使い方を勉強するだけじゃ面白くないだろ? その基礎をどう応用するかは貴方次第。 できないのは残念ですが、その程度の人間ってこと。 これでいいんじゃないの?ここのスレの結論は。
煽らない版まとめ まとめ - 大規模開発には技術力も経験も考え方も違った開発者が多く必要 - コンパイラとIDEの助けにより、開発の高速化とコードの書き方の統一ができる。 - 動的言語には現状まともなIDEがない(Smalltalkは殆ど使われていない。Emacs?笑えんな) - よって大規模開発で動的言語を使うと炎上する
>>955 写像(関数)だから、対応が一意でしょ。
煽ってない方は全然面白くないな
言ってることは全く同じなのに 面白くない。不思議!
動的型付け言語は自転車みたいなもん ちょこっと近所にでかけるには便利
動的型付け言語で一定規模以上の開発を秩序立てて進めるにはTDDの実践が必須と言っていい。 そのレベルの開発者を集められないなら諦めるべき。
>>940 SICP訳がおかしくて
原書読まなきゃ解けないもんだいがあるとか
動的型付け言語を使った開発って殆ど見ないんだよね。 TwitterがRuby on Railsを使っているってことぐらい。
JavaでもTDDの実践は必須だよ。
自分がパソコンで使うソフトも 静的型付け言語で作られた物が殆どだしな
動的型付け言語で優れた最適化コンパイラを持っている言語ってある? パッケージソフト開発で動的型付け言語が殆ど使われないのは、要はそこなんじゃないのか?
TwitterってRubyだったのか。 Rubyは遅いと思っていたのだが。
違った考え方→ ダミーコード要員もいっぱいいるくらいスキルが低い。近視眼的な目線だけでOK。 この辺だろうな。
>>971 パッケージソフト開発で動的型型付け言語が使われないのは
ソースコードを公開しないといけないのが一番の理由。
>>970 逆に、君がブラウザで利用するサービスは
かなり多くが動的型付け言語で作られているよ。
>>974 いや、だからコンパイラさえあれば、
ネイティブコードにコンパイルしてバイナリで売ればいいだろ?
動的型付けは、実行時にソースコードを書き換えたりできるから ソースコードの公開は必須になるんだよな。
>>978 しなければいいだろ。
実行時のソースコード書き換えにしか動的型付け言語のメリットってないの?
>>972 TwitterはScalaに変更になったぞw
ウェブサービスも最近は静的型付け言語が多い。
特に大規模になってくると、tomcat(つまりJavaだろう)とか
ASP(.net)とか出てくるでしょ。
個人が使うようなものはPHPが多いけど。
>>979 どこでやってるのかわからんだろ。
自分が作ってない所(ライブラリ内部)で勝手にやってるかもしえない。
しかも静的型付けではないから、そういうコードは
実行するまで検出できない。
動的型付け言語で良く使われるのってPHPらしいね。 そんなに良い言語なのかな?
規模だけで言うなら、誰でも参加できるオープンソースが一番大きい 参加者を限定して大規模にする意味がない
>>978 必須ではないけど、実質必須になることが多いよね。スクリプト言語が多いしね。
修正BSDライセンスのSBCLやCMLCLならば、バイナリ配布だけでも良いし。
外に見せたくないものならどうしても静的なコンパイラーをつかった言語に
なるのは自然の流れかと思う。
もうこのスレも終わりでいいかもね。なんだかつきあいきれねーっつーか
さらばするわ。ダメっぽさの中にいると自分までダメになってしまいそう
で怖い。ほな
伽藍とバザールの議論は別の場所でいいんじゃないか?
>>983 > 規模だけで言うなら、誰でも参加できるオープンソースが一番大きい
えっと、参加人数ではなく、工数で考えてください。
何となく956のまとめをきっかけにスレタイに沿った流れになってきた気がする
989 :
デフォルトの名無しさん :2011/11/19(土) 16:27:08.47
え?
動的型付け言語を使うと心が荒みます 証左はこのスレ Q.E.D.
炭鉱労働者並みのドカタを撲滅しよう 高効率でクリーンで安全な動的言語をもっと使おう
なんか原発のCMみたいだなw
カチャカチャしてみる?
もう
>>956 のまとめでいいや
次スレはいらんけど、もし立てるなら「ドカタ」のキーワードはスレタイに入れろよ
動的型の略がドカタ
梅。
梅。
>>953 いや、静的型付け言語厨が
静的型付けの長所を台無しにするようなコードを
当たり前のように書いてドヤ顔してどーすんだ、
って話w
結論 : 静的型付け言語も大規模開発ドカタには宝の持ち腐れでした。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。