
質問①
何でテレビオブジェクトにアクセルペダルが付いているのですか?
そうするとプログラミング効率が上がるのですか?
何で誰もそんなもの取り払えと言わないのですか?
質問②
何で開発環境がことごとく重いのですか?
そうするとプログラミング効率が上がるのですか?
質問③
Webシステム開発で使うフレームワークが何種類も生き残っているのはなぜですか?
なぜいつまで経っても淘汰され切れず、いいとこ取りした決定版が出来ないのですか?
質問④
ソースコードlが
cfbjikdnbdznb.szrgug(xfjj.xfhcfh(cfxgjcfjy.xdghdgh(hkgj,xfhjxhf.fgjnfhnj,fhjfhyj.sfgsg)))
のように、長い文字と点がいっぱいあるのはなぜですか?
こうなっているとプログラミング効率が上がるのですか?
No.1ベストアンサー
- 回答日時:
分かるところだけ
②:人間は楽をしたいものです。また、前よりも複雑で難しい処理、高度な処理をプログラムにやらせたいと思うもの。
やるべきことが100から1000に増えたとき、人間が楽するなら、増分はコンピュータ、つまり開発環境にやってもらうしかない。
それで、どんどん開発環境は重くなりました。
でも、コンピュータの処理能力は、CPU高速化、メモリー・HDDの大容量化、高速化したため、トータルとしてプログラミング効率はアップしました。
③:Webシステムに限りませんが、現在稼働中のシステムは、今後しばらくはメンテしながら使い続けられます。
「あんな腐ったフレームワークなんて捨てちまえ!!」と思う人もいるでしょうが、それが無いとメンテナンスできませんから使われますよね?
そのメンテ担当者は、今年新卒の派遣プログラマさんかもしれない。となれば、「腐ったフレームワーク」だとしても、勉強するために本が売れるかもしれません。
少なくともフレームワークを必要とするプログラマが1人増えることは確かです。そして腐ったものは生き延びます。
「いいとこどりした決定版」までは行かなくとも、「腐った」よりもましな「腐りかけ」の別のフレームワークは誰かが作っていると思います。
でも、「腐ったもの」で作られた既存システムを「腐りかけ」のフレームワークに乗せかえると、修正工数が発生します。再テストも必要です。
新規開発するほどの要望と予算があれば、いいとこどりしたフレームワークが使われるかもしれませんが。
ということでフレームワークではありませんがJavaのような腐った言語で作られたレガシーシステムでさえも、使い続けられるのです。
某銀行のように予算がある部門では、トラブル原因となるJavaを捨てて、COBOLでシステムを作り直すこともあるみたいです。
④:プログラミング効率、言い換えると開発効率を上げるためには、新規開発を減らす必要があります。
例えば、新築の一戸建てを建てる、あるいは、30部屋あるマンションを新築するっていうとき、大きな手間(予算)を食うのが水回りです。
もし、大工さんが台所やお風呂場のサイズに合わせて、手作りするなら、金額も上がるし、工事期間も長くなります。
でも、住宅機器メーカのカタログにある売れ線のシステムキッチン、ユニットバスを使えば、金額を安く、工期を短くできます。
つまりは、ゼロから作るのでなく、事前に作られた部品を組み合わせれば、開発効率がアップするということです。
とはいえ、そこに住む人にとって、一生の買い物となる家であれば、カタログにあるセットでは、満足できませんよね?
「このキッチンの上収納は、電動で上下する可動式にしてくれない?コンロは料理好きの妻の要望で、IHじゃあなくガスコンロにして欲しい」
「組み込みの食洗機はいらない、かわりに調味料などが入れられるような収納にして欲しい」
なんて、一部の不要なものを削って、代わりに別の部品を差し込めるようにしてあれば、お客様の要望に素早く対応できます。
そんなお客様の細かなオプション要望を書類にまとめると、システムキッチンだけで20個くらいの記入欄が必要になるかもしれません。
そして、プログラムも同じことが起こっているわけです。そのため、ソースコードのある関数のパラメータが、最初は3個だったかもしれませんが、要望に応えるために関数(部品)の拡張をし続けた結果、10個とか15個になったりするのです。
それでも、そのプログラム部品を使わず、パラメータが少なくて済むようなパーツを新規で作るよりは、はるかにプログラミング効率がアップします。
ちなみに、オブジェクト指向の延長線では、このようなパラメータの数が増える「パラメータ地獄」を防ぐことはできません。
でも、ラムダ式という構文を導入すれば、この地獄をある程度防ぐことが可能になります。
C#では、2007年からラムダ式が使えるようになりました。
Javaは、C#で使われるラムダ式を横目でみながら、「あれいいなあ、Javaにも欲しいよおおおおお」と嘆き、やっとのことで2014年のJava8からラムダ式が使えるようになりました。
時代に遅れるJavaを使い続けるのは、メンテするからとか、就職に有利という考えなら仕方ありませんが、そういうしがらみが無いなら、情弱ってことかもしれません。
No.7
- 回答日時:
>>たかがListBoxに160種類もの指示がある事に、どうしても納得がいかないのです。
たしかに、「たかがListBoxのために160種類もの指示って・・・」って思う部分もありますよね?
でも、プログラムを使うユーザ側の立場からすると、細かな部分でいろんな注文がでるわけです。
それらのすべてに答えようとしたとき、共通部品(クラス)に対する指示は、どうしても増えてしまいます。
というか、自分が使うプログラムを作っているときでさえ、マイクロソフト提供のクラスのプロパティやメソッドが足りないので、プロパティを追加したり、継承クラスを作ることがあったりしますので、160種類になっていても、「しゃあないなあ」と思っています。
以前、DOS環境でつかうアプリ用の共通部品(米国製)のソースをみていたとき、「こんなに設定値が多いのって、めんどくさいなあ」なんて思っていたことありましたけど、いざ共通部品をつかって実用のアプリを作り出すと、「足りない機能を、この部品に追加したいけど、影響範囲が広範囲だからどうしよう?」なんて悩んだりしました。
まあ、長い時間かけて、そのCソースと格闘し、GUI部分の機能拡張をしましたけど、現在のC#であれば、似たようなものが極めて短期間に完成させることができてしまいます。
ところでC#の源流を探ると、今は無きボーランド社のDelphiにたどり着くそうです。
Delphiを始めて使ったとき、その機能に驚いたものですけど、最近は、C#の拡張された機能を応用することで、いままで思ってもみなかったようなことが可能となり、生産性が大幅アップして、その当時と同じような驚きを感じることがありますね。
ご回答ありがとうございます。
共通部品に対する指示が160種類あるのは仕方が無いという事を、
C#を使った時のフィーリングや、楽しさと共に示して頂けたと思います。
丁寧なご回答や体験談を頂けた事に感謝し、
最初に頂いたNo.1の回答をベストアンサーとさせていただきます。
No.6
- 回答日時:
>ListBoxは160個のプロパティ/メソッドを持っています。
多くはControlから継承しているはず。
描画や配置、イベントを考えるとこんなものですよ。
このくらいでびびってはいけません。
GUI部品というのは共通部分が結構複雑なんです。
大部分は共通なので、個別に覚えることは
僅かです。大変なのは最初だけです。
因みに腕時計の比喩は不適切でしょう。
電子部品のデータシートを思い浮かべるのが適切。
ご回答ありがとうございます。
>大部分は共通なので、個別に覚えることは
>僅かです。大変なのは最初だけです。
この一文から、クラス階層の上流から順に理解すればプロパティ/メソッドの数に納得が行きそうな気がしてきました。
>因みに腕時計の比喩は不適切でしょう。
>電子部品のデータシートを思い浮かべるのが適切。
この一文から、無駄な機能の押し付けの類ではなく、本当に必要な物を吟味して実装しているのだと理解しました。
No.5
- 回答日時:
>>そもそも、オブジェクトが無用なプロパティ/メソッドを多く含んでいるのは、
クラス設計から失敗している、いやもっと言えば、クラスという概念には致命的な欠陥があるのではないか?と思ったのです。
無用なプロパティ/メソッドなんて無いと思います。
ただ、メソッドの機能拡張などによって、使われなくなった古いプロパティ・メソッドっていうものはあるでしょうね。
新規開発する方からみれば、それらは”無用なプロパティ・メソッド”に思えるかもしれませんが、古いバージョンから使っている人にとっては、それらは”必要なプロパティ・メソッド”となります。
そして、マイクロソフトでは、質問者さんと同じように、「古いプロパティ・メソッドが表示されるなんて邪魔なだけだ!」と考える人がいるので、ある程度バージョンが進んだ段階で、そういうプロパティ・メソッドは削除されています。
ですので、勉強のために、ネットで探したサンプル・プログラムをビルドしようとすると、「そんなプロパティ・メソッドは無いよ!」と怒られたりしました。
「ネットで公開しているのだから、このサンプルって動いていたはずだよなあ??」と疑問に思って、改めてサイトの日付を見ると、しばらく前の古い日付だったりしますね。
なお、クラスという概念は有用ですけど、最近のC#では、開発手法においてクラスの地位は低くなって、ラムダ式やLinqとかリフレクション、そして、メタ・プログラミングの技法が重視されているように感じられますね。
なんというか、古い”クラス”という定番商品のみに注目しすぎて、2倍、3倍、あるいは10倍の開発効率アップを生み出す、これらの新しいテクニックが無視されているという感じがしてしまいます。
そういう点からみると、「クラスという概念には致命的な欠陥があるのではないか?と思ったのです」という質問者さんの考え方は、現象的に当たっている部分があるっていえるかもしれません。
ご回答ありがとうございます。
>無用なプロパティ/メソッドなんて無いと思います。
試しに、VB .net 2015でListBoxのプロパティ/メソッド候補を表示させてみました。
この場合は160個ほど表示されますが、これらの全てにはListBoxの操作に関してそれなりの意味があるものと理解しました。
この中から、使いたいものを使えばよいと思います。
開発効率アップをもたらす新しいテクニックがあるとのことで、そちらも調べてみたいと思います。
No.4
- 回答日時:
>Visualstudio等で"オブジェクト名."をキー入力すると、
>プロパティやオブジェクトの候補がたくさん出てきます。
う~ん、.netの話なんだろうか?
全く具体性がないので何が失敗だとかんじているのか
見当もつきませんね。
私もフレ-ムワーク設計をしたことがありますが、
ソ-スの解りやすさと汎用性/再利用性は相反するもの。
検索した程度でわかるはずありません。そんなミクロレベルの
話より前に、まず設計の基本方針と目的の理解が必要です。
No.3
- 回答日時:
No.1です
④の質問を勘違いしていました。
パラメータの数が多いのじゃあなく、長い修飾子になっていることが質問でしたね。
オブジェクト指向になってソフトの部品化が進んでゆくと、おおざっぱに見て同じ機能だけど、細かな部分で機能の違うソフトの在庫部品がどんどん増えてきます。
それらの部品を重複しない名前で管理するとなると、WebのURLと同じように点で切られた長い文字列になってしまいます。
また、短い名前だと、似たようなソフト部品がまったく同じ名前になる可能性が増えます。
長い名前にすれば、重複するのを防ぐことができます。
プログラミング効率としては悪くなりますけど、必要悪ですね。
対策として、タイピング数を減らすために、マイクロソフトのVisualStudioでは、強力な文字補完機能が導入されています。
これでタイプ数が減ると同時に、タイプミスを減らすことに大きく役立っています。
ご回答ありがとうございます。
おかげさまで、③④における諸事情を理解しました。
②は各開発環境が欲する機器の仕様を再度確認するとして、
①について補足を追記したことを、この場を借りてお知らせ致します。
No.2
- 回答日時:
質問① 何のはなし?
質問② 今時i5以上なら何を使っても重くないです。
セレロンならあきらめましょう。
質問③ 用途、規模、使い方により必要とされるものが違うから。
質問④ わかり安いコードは饒舌です。
饒舌なコードは簡潔だけど、名前は長くなります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- その他(教育・科学・学問) 小学生にプログラミング(Scratch)を教える方法 2 2022/06/01 06:39
- 就職 企業に質問した方がよろしいでしょうか? 2 2023/03/01 10:20
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- 大学受験 専門学校の志望理由書について自信が全く無くて…添削してください。 「 私は将来、IT企業の第一線で活 3 2022/10/11 01:12
- 教えて!goo 先程、或る人のプロフィール見ました。 何故見る気になったのかと言うと その人とは質回はしてない筈です 3 2022/09/13 16:57
- 哲学 この世は仮想現実? 11 2023/08/20 17:20
- Java 助けでください!!!!!!!!!!!! 4月から働き始めた新人SEです。 皆さんの体験談等を教えてい 7 2022/07/28 23:50
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java初級 引数に適用できません
-
シェルスクリプトからのJavaメ...
-
別クラスのmainメソッドの実行
-
abstract と static を一緒に付...
-
String.containsの反対機能はあ...
-
Java初心者です、エラーの意味...
-
YYYYMMDD書式の日付に対する適...
-
C++Builderで
-
C#とC++/CLI間でポインタが指す...
-
なぜprotected overrideなのか
-
djUnit コンストラクタがpriva...
-
Strutsでチェックボックスの値...
-
多数の引数で初期化されるクラ...
-
Jakarta POI での、excelのシ...
-
呼び元のファイル名、行数を取...
-
コマンドライン引数のチェック
-
javaに"search"という関数 or ...
-
JAVAコンパイルができない。
-
クラスを作るとメソッドの数が...
-
readLine()ではじめから読み直...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String.containsの反対機能はあ...
-
Java初級 引数に適用できません
-
なぜprotected overrideなのか
-
レコード件数の表示
-
abstract と static を一緒に付...
-
StringBufferからStringへキャ...
-
YYYYMMDD書式の日付に対する適...
-
C言語での文字列より値を抜き出す
-
別クラスのmainメソッドの実行
-
メソッドの引数に指定されてい...
-
Strutsでチェックボックスの値...
-
readLine()ではじめから読み直...
-
JUnitのテストメソッドごとのメ...
-
C# 点の描き方をおしえてくだ...
-
Google Apps Script で getRang...
-
C# の ByVal と ByRef について
-
javaに"search"という関数 or ...
-
シェルスクリプトからのJavaメ...
-
説明文書でのメソッド・変数の...
-
return new使用時
おすすめ情報
①を補足します。
Visualstudio等で"オブジェクト名."をキー入力すると、
プロパティやオブジェクトの候補がたくさん出てきます。
エディタが有用そうな候補を出そうと頑張っているのは解りますが、
そもそも、オブジェクトが無用なプロパティ/メソッドを多く含んでいるのは、
クラス設計から失敗している、いやもっと言えば、
クラスという概念には致命的な欠陥があるのではないか?と思ったのです。
テレビを作るとき、アクセルペダルを付けるでしょうか?
そんなシュールな製品を皆欲しいと思うでしょうか?
①に関して
・No.5さんのご回答により、各オブジェクトは無用のプロパティ/メソッドを持たない事がわかりました。
・No.4さんの回答より、汎用性を重視した結果、ソースが解りにくい傾向を示すことがわかりました。
例えばVB .net のListBoxは160個のプロパティ/メソッドを持っています。
私は、この160個うちの殆どが無用のものであると思っていましたが、それは違うという事がわかりました。
しかし、やはりこの160候補がエディタで表示された瞬間、私は「ふざけるな」と感じます。
たかがListBoxに160種類もの指示がある事に、どうしても納得がいかないのです。
デジタル腕時計が流行り始めた頃、自分の時計の機能が多さを競いあう場面があったりしまたが、そんな気持ちで機能を増やしているとしたら、私にとっては迷惑千万です。
この160個という数は、仕方なくそうなったのでしょうか。