人気サイト様 最新記事

博士ちゃんねる ヘッドライン

レスの強調ウゼェー!というドクターへ

レス内の強調表示をOFFにする コチラをクリックして切り替えてください。設定は30日間Cookieに保存されます。
現在のステータス:強調有効

プログラムセンスがある人とない人の違いを感じる時 @ [プログラマー板]


プログラムセンスがある人とない人の違いを感じる時 @ [プログラマー板]
1: 仕様書無しさん 投稿日:2014/08/29(金) 11:06:04.82
プログラムセンスがある人とない人の違いを感じたことがありますか?

それはどんな時でしょうか?
3: 仕様書無しさん 投稿日:2014/08/29(金) 15:37:38.38
ない奴はぺちぱーになる奴が多い
管理人より:「ぺちぱー」というのは「PHPer」=「PHPしかできないプログラマー」のこと。
PHPというスクリプト言語は仕様に変な部分が多く、これしかできないマは業界の最底辺としてディスられる運命にあります。(ということになっています)
4: 仕様書無しさん 投稿日:2014/08/29(金) 17:01:45.54
コードが読みやすいとセンスあるなと感じる
コードが読みにくいとセンスないなと感じる
5: 仕様書無しさん 投稿日:2014/08/29(金) 17:03:05.52
再帰をうまく使える人はセンスを感じる
7: 仕様書無しさん 投稿日:2014/08/29(金) 23:34:32.97
集中モードに入りやすく、かつ途切れない人。
俺なんか趣味プログラムでもなかなか集中できないしすぐ息抜きしちゃうし。
8: 仕様書無しさん 投稿日:2014/08/30(土) 14:20:17.62
手抜き最大で実装した結果を持ってして、顧客から最大限と思える賛辞を得てしまう人

技術もそうなんだけど、それ以外の対人能力が凄いんだなと何時も見惚れてしまう///
10: 仕様書無しさん 投稿日:2014/08/30(土) 22:19:21.67
>>8
それは、プログラムセンスじゃないよ?
9: 仕様書無しさん 投稿日:2014/08/30(土) 18:56:39.72
構造がシンプルなこと
アホは複雑怪奇にしてメンテナンスと運用が死ぬ
11: 仕様書無しさん 投稿日:2014/08/30(土) 22:37:05.73
やっぱりメンテナンスしやすいかどうかだろうな

手抜きで実装するにしてもセンスがある人は、今後のことを考えて手抜きする。
手抜きされたコードもメンテナンスしやすくなってる。


逆にセンスが無い人はいきあたりばったりなコードを書く
単に動けばいいだけ。動かなかったら無理やりちょっと修正して終わり。
視野が狭いから、問題点しか見えてない。
全体の設計を考えてコードをかけない。
12: 仕様書無しさん 投稿日:2014/08/30(土) 23:26:42.46
>>11
作った人とメンテする人のやり方や考えがあってるか?が大きそう
そのためのコーディング規約やルールかな
13: 仕様書無しさん 投稿日:2014/08/30(土) 23:36:23.61
>>12
コーディング規約やルールがなくても、設計思想を読み取れるのが、プログラムセンスがある人だろう。

俺は読み取れるよ。

コードだけを見て、これ二人の人が作ったんじゃないか?って思ったら、とあるオープンソースのコードをパクって劣化改造していやがった。


通りでこういう設計に見えるのに、それをぶち壊すコードになってるわけだよ。
14: 仕様書無しさん 投稿日:2014/08/30(土) 23:42:28.00
>>13
メンテしやすさはどこへいった?
違う話題に変えるなよ
管理人より:以後超有名オープンソースの超有名プログラマー(自称)の»13さんが延々と自慢する流れに。全部カット。
15: 仕様書無しさん 投稿日:2014/08/30(土) 23:43:12.42
論理構造がシンプルなコードを生む人
データ構造がシンプルなコードを生む人
流れるように脳内でデバッグ可能なコードを生む人
複雑なことを簡単な単位(最小粒度)に落とし込んでいて、とにかく読みやすいコードを生む人
糞コードは捨ててでも書き直すくらいの人
コードを見ただけでバグの原因を特定する人

*** コードに色や匂いが付いて見える人 ****
*** コードに色や匂いが付いて見える人 ****
20: 仕様書無しさん 投稿日:2014/08/31(日) 08:45:12.98
>論理構造がシンプルなコードを生む人
>データ構造がシンプルなコードを生む人
>流れるように脳内でデバッグ可能なコードを生む人
一筆書きは、流れるように作ってあるよ。そして構造がシンプル
18: 仕様書無しさん 投稿日:2014/08/31(日) 00:22:03.67
特殊な条件の時にだけ実行するようなコードが多いと、センス無いなと思う。
35: 仕様書無しさん 投稿日:2014/08/31(日) 11:19:58.09
コーディング規約やルールは設計思想とは全く別物だろう。
コーディング規約やルールがあれば設計思想がわかりやすくなるというものでもないし。
41: 仕様書無しさん 投稿日:2014/08/31(日) 12:38:43.00
>>35
> コーディング規約やルールは設計思想とは全く別物だろう。
まったくもってその通り。

規約とかルールとか、設計関係ない。
規約やルールは初心者を排除するためであって、守れて当然のものだよ。


足切りには使えるが、センスというのはそれよりも更に上にある。
37: 仕様書無しさん 投稿日:2014/08/31(日) 12:15:42.39
設計思想いうものはなんなの?
フェラーリという例えがあったが、プログラムのつくりかたに、すばらしい思想があるとでも
女は普段から白馬の王子様がやってくる、そういうことを期待している
プログラムの世界には、そうものではない

センスとは保守のしやすさが基準。プログラムソースとともに必要なのは設計図。
それを用意できてセンスがあるといえる
38: 仕様書無しさん 投稿日:2014/08/31(日) 12:21:09.35
>>37
センスが無いな。
40: 仕様書無しさん 投稿日:2014/08/31(日) 12:32:43.62
>>37
オープンソースの大半は、センスが無いということだね。
85: 仕様書無しさん 投稿日:2014/09/01(月) 21:41:18.81
>>40
定期的に大規模なリファクタリングをしてない限りは、センスのない残念なコードが混ざっていることは多いね。
修正が多い部分は洗練されていくんだけど、手が入らないコードはとりあえずで書いたままだったり。
97: 仕様書無しさん 投稿日:2014/09/01(月) 23:24:37.95
>>85
定期的に大規模なリファクタリングって言ってる時点でだめだろw
修正するたびに、小規模なリファクタリングをするべきだ。

あの人がコードを修正すると、修正する前よりも見やすくシンプルになってるんだ。
機能を追加しているのに!

っていうのがセンスある人なんだよ。
管理人より:「リファクタリング」というのは、動作の内容を変えずに、中身のコードを改良すること。長い目で見たメンテナンスの手間の軽減作業…とも言えます。
39: 仕様書無しさん 投稿日:2014/08/31(日) 12:23:29.15
センスとか思想とか抽象的で個人の趣味だよな
45: 仕様書無しさん 投稿日:2014/08/31(日) 12:43:16.98
>>39
スポーツやダンスの「センス」に置き換えて考えて見ればわかりやすいんじゃないかな?

センスが有る人は、スポーツやダンスが上手いのは当然のことながら、初めてやるスポーツでも素晴らしい動きを見せたり、ダンスも新しくしったステップを軽々とこなせる。

相手がやってるのを見るだけで真似出来たり、そういうのがセンスだろう。

頑張って出来るようになっただけだったり、決められたルールにそってやるだけの一般人ではセンスを感じることはないだろう。
49: 仕様書無しさん 投稿日:2014/08/31(日) 12:44:58.83
>>45
変なたとえやめろよ
54: 仕様書無しさん 投稿日:2014/08/31(日) 13:16:33.73
保守性はみんなが目指すことだろう。

だがセンスがある人が書いたコードの保守性は他と違う。
ドキュメントがなくてもわかりやすいんだ。
63: 仕様書無しさん 投稿日:2014/08/31(日) 16:16:27.27
シンプルが一番というのは、プログラミングに従事しているものなら分かる。
ソースコードの読みやすさをあげているわけ。プログラミングに従事しているものなら分かる。

さて、コードを読むというのは、構造を理解する作業なわけで、センスというのはそこを配慮しているかだ。

プログラムのセンスというのは、そういうところに集約される
ネストが深くない、関数が一画面に収まっている、クラスが1000行にまとめられている、階層を浅くしている。
というやうに作ってあるかだ。コードを読む人を疲れさせない工夫だ。
ネストを深くしているコードは、素人コード。サンプルコードにいっぱいあるよね
69: 仕様書無しさん 投稿日:2014/08/31(日) 21:26:01.37
昔はスペック低いからいかに速き処理できるかっていうのが重視されたらしいが、最近は普通に書けば速度はあんまり変わらないから、他人にも見易いのが求められてるらしい。
>>63みたいなのは経験でカバーできる。
自分がセンスあるなぁと感じるのは、Javaのデザインパターンみたいなやつ。
ああいうのは可読性の為にあるのではなくオブジェクト指向の実現の為にある。
管理人より:ネストというのは制御構造の層のことです。
if(...){
	(1個めのネスト)
	for(...){
		(2個めのネスト)
		for(...){
			(3個めのネスト)
		}
	}
}

「デザインパターン」というのは、プログラム開発におけるシステム設計の概念を整理分類して、名前をつけた感じのやつ。「commandパターン」「mediatorパターン」「factoryパターン」とか20種類くらいあったと思う。
64: 仕様書無しさん 投稿日:2014/08/31(日) 16:41:11.95
百姓プログラマに聞くんだけど、一回のルーチンの処理速度計ったことある?
センスもなにも、そのルーチンの処理で遅延するようではそれは腐っている
プログラマの感覚とはそういうもの。
65: 仕様書無しさん 投稿日:2014/08/31(日) 16:45:55.76
遅延ゼロのルーチンを書けるのか
やっぱ紙クラスのプログラマは違うな
68: 仕様書無しさん 投稿日:2014/08/31(日) 20:52:49.05
>遅延ゼロのルーチンを書けるのか やっぱ紙クラスのプログラマは違うな
レスありがとう
百姓はやっぱりルーチンの処理速度測ったことないんだ
ルーチン処理を計れば、大概 0 ミリ秒やで
71: 仕様書無しさん 投稿日:2014/08/31(日) 22:11:19.50
>>68
ルーティンに係る時間が「大概 0 ミリ秒」でいいなんていい世界だな。
7マイクロ秒くらいでも100万個処理で7秒とかおまえなめてる?
って怒られるのが普通なのに。
72: 仕様書無しさん 投稿日:2014/08/31(日) 22:43:18.71
ドヤ顔で大概0ミリ秒とかwww
組み込み向けの低速ARM使ったって処理時間が1ミリを超えるには、相当な量のコードを動かす必要があるぞ。

ミリで測ったらそりゃ大概0ミリだわwwwww
132: 仕様書無しさん 投稿日:2014/09/05(金) 17:45:35.50
>>68
内容にもよるけど、ふつー単位はミリ秒ぢゃなくて、マイクロ秒とかナノ秒だろ?
DB の検索とかネットワークの応答速度ならミリ秒とか使うけどさ
67: 仕様書無しさん 投稿日:2014/08/31(日) 19:12:11.87
選ばれし戦士はいないのか
お前ら本当にコードから色とか匂いを感じられないのか

よくそれで今まで飯食えてきたな
74: 仕様書無しさん 投稿日:2014/09/01(月) 01:44:36.12
>>67
職場のコードの臭いを嗅いだら鼻が曲がって使い物にならなくなった
73: 仕様書無しさん 投稿日:2014/08/31(日) 22:59:37.98
スキル高いやつのソース見る機会があったんだけど、パッと見普通の実装してるようにしか見えないのな
今まで色々工夫してきたのと対照的にきれいな普通のソースで一見遅くなってそうなのに計ると速い
某CPU屋さんのアセンブラをCで上回ってるの目の当りにするまで信じられなかった


本気で最適化すればもっと出せるらしいが読めなくなるとか言ってたけど
79: 仕様書無しさん 投稿日:2014/09/01(月) 12:16:53.09
>>73
最近のコンパイラの最適化、優秀なんだな
83: 仕様書無しさん 投稿日:2014/09/01(月) 19:42:46.86
>>73
それは元のアセンブラがダメダメだっただけでしょ。
VCもGCCも無駄なコード多いよ。
バカ正直なコードしか吐かないから。
86: 仕様書無しさん 投稿日:2014/09/01(月) 22:13:00.70
>>83
元のアセンブラは最適化対象のCPU作ってて、コンパイラ移植してるとこのやつが直々に手書きして速くしたもんなんだ
元のCをコンパイルしたバイナリよりずっと速くて、これ以上は無理だと思ってたものなんだ
77: 仕様書無しさん 投稿日:2014/09/01(月) 11:37:58.37
>今まで色々工夫してきたのと対照的にきれいな普通のソースで一見遅くなってそうなのに計ると速い
>某CPU屋さんのアセンブラをCで上回ってるの目の当りにするまで信じられなかった
まぁ、そういうのがセンスあるというんだわ。
ルーチン処理に7秒もかかるのは糞コードな
75: 仕様書無しさん 投稿日:2014/09/01(月) 03:00:42.32
自分がセンスあると信じ自己紹介を書く奴と、それを叩かないと気がすまない奴とのくだらないバトルくらいしか生み出さないスレになりそうだな

ってかスレタイの「センス」って表現も、マ的にアレな感じするわ
111: 仕様書無しさん 投稿日:2014/09/03(水) 16:10:05.34
スコープの小さいコードにまとめる力。それに尽きるわ。
つまりモジュール、局所的なコードな。キャッシュも良く効くし。


そして他のモジュールとの関連性を極限まで小さくする。
関連性すなわち、インターフェース仕様を煮詰め洗練するセンス。

モジュールの中身を、まったく別なものに取り換え可能なようにインターフェース仕様を考え、全体システムを組み上げる設計能力。
これは、多数の人間で分担してやる場合にも効く。
116: 仕様書無しさん 投稿日:2014/09/03(水) 23:16:29.67
シンプルで疎結合となるようにシステムを設計する力でしょ。
多少語彙は違ってても、言わんとしてることはわかるから、>>111には同意する。
112: 仕様書無しさん 投稿日:2014/09/03(水) 19:15:49.27
>スコープの小さいコードにまとめる力。 それに尽きるわ。
意味不明、

スコープの小さい、コードにまとめる力、なのか
スコープの、小さいコードにまとめる力、なのか

以下もわからない
>そして他のモジュールとの関連性を極限まで小さくする。
>関連性すなわち、インターフェース仕様を煮詰め洗練するセンス。
海水を煮詰めると塩が出来る、のだが
113: 仕様書無しさん 投稿日:2014/09/03(水) 22:10:02.83
スコープの中を小さくまとめる力、ってことじゃ無いか
スコープ内の複雑度を低くする
多分な


その質問なんかずれてるぞ
管理人より:「スコープ」というのは変数を参照できる範囲のこと。
141: 仕様書無しさん 投稿日:2014/09/06(土) 10:37:20.34
データ構造とアルゴリズム データ構造とアルゴリズム」とか言う本があったよな。

プログラムの実装において、データ構造と処理部分はトレードオフの関係にあるよ。
データ構造を工夫すると、処理ステップがよりシンプルでステップ数が少なくて済むとかがそれにあたる。

いわゆるテーブル駆動型のプログラムとかな。
使用するテーブルのデータ構造とセットされるデータ自体が、やるべき処理を物語るという形態になっている。宣言的なプログラムになる。

このデータ構造の設計能力が、プログラムセンスと云われるものの1つだと思うよ。

クラス設計やDB設計が難しいのも、その良し悪しがプログラムの実装の容易さ(シンプル)/保守性/実行性能に大きく関わるからだ。
142: 仕様書無しさん 投稿日:2014/09/06(土) 15:50:07.93
そういう感じで思い出したが、普通データ構造から設計しないとプログラム組めないよな?
144: 仕様書無しさん 投稿日:2014/09/06(土) 17:36:35.17
>>142
一人で好きな物組むならその場その場で素直な場所にデータ配置してきゃいいだけじゃないの

仕様を他人が握ってんなら、業務やハードウェアの都合を独断できめらんねーし、誰かに振る時に全容理解させずに実装できるようにしなきゃいけないから、絶対に設計書は必要
146: 仕様書無しさん 投稿日:2014/09/06(土) 19:21:07.04
>>144はセンスなさそうw
プログラムというより、作業しかしてない気がするw
148: 仕様書無しさん 投稿日:2014/09/06(土) 19:26:06.15
>>144
確かにバカっぽい

ハイ、なるほど。
センスの良いプログラムかぁ。管理人は主にWEB系で仕事してるせいか、あんまりセンスの良いプログラムというのを見たことがないですねぇ。他人のコードを見る機会もそんなにないですし。

「センス」かどうかはさておき、「良いプログラムかどうか」ということなら、スレでは「コードがシンプルであること」というのが最も多く、管理人もまぁ同意です。
しかし同時にこの「シンプル」と言葉で言えばひとことな概念が、プログラミングでは最も難しく、また永遠の課題であるとも言えるでしょう。

プログラムというのは書いてると自然にカオスになっていくものですからね。簡単にするには「細かく分割して、他の処理との依存度を最小限にする」しかないわけです。
世の中には様々なプログラミングの考えがありますが、すべてこの「シンプル」を実現させるために腐心した結果です。
具体的に言うと、いかにしてコードを短くし、細かく分割するか。これはデバッグ効率への影響がでかいので一番大事でしょう。

次に出てるのが「速度が速いということ」ですね。
まとめ範囲内では出てないけど、次に出そうなのが「効率のよいリソースの消費」ということになるでしょうか。

A. コードがシンプルであること
B. 応答速度が速いこと
C. リソースの消費効率が良いこと

とまとめた場合、だいたいにおいてBとCはトレードオフだということですね。AとB+Cもトレードオフになる場合も多いでしょう。
従って、このへんのジレンマを最適な折衝点で解決できるのが「良いプログラマー」ということになりますかねぇ~。

でもプログラムの目的によって、あるいは言語特性によって、この折衝点もかなり大きく変わってくるので、そこを左右するのはどっちかていうと「センス」よりも「経験」でしょうか。
「センス」ていうと、「問題点にすぐ気づく」とか「コロンブスの卵的解決法(あるいは代替案)をすぐ提示できる」とかそのへんかも。野生のカンみたいな。
増補改訂版Java言語で学ぶデザインパターン入門
結城 浩
ソフトバンククリエイティブ
売り上げランキング: 9,726


元スレ:http://kanae.2ch.net/test/read.cgi/prog/1409277964/

人気サイト様 最新記事

博士ちゃんねる ヘッドライン

    • ※1 : ドクター・ノオ・ネーム
    • 2015.9.5 7:58
    だらだらと冗長的なコメントを書く管理人はセンス無いだろうな。
    なにが、
    ハイ、なるほど。
    だ。
    • ※2 : ドクター・ノオ・ネーム
    • 2015.9.5 14:11
    メンテ性を気にするのは集団で開発や運用するからなのでコミュ力です、センス関係ないです
    速度は早くサイズやスコープも小さい、これらも満たしている方が良いですが絶対条件ではないです
    運用条件下に特化させる、仕様上のバグまで利用する貪欲さ、それがセンスです
    要するに、一般的なマはセンスやひらめきの前に知識や経験が圧倒的に不足してます
    • ※3 : ドクター・ノオ・ネーム
    • 2015.9.5 14:36
    大学で『データ構造とアルゴリズム』取ってるよ
    そういう学問の分野がある
    木とかヒープとか勉強してる
    訳がわかんない。落としたよ。
  1. >冗長的なコメントを書く管理人はセンス無い

    ハイ、なるほど。
    ---------------------
    >仕様上のバグまで利用する貪欲さ、それがセンスです

    そうなんですかね。
    ---------------------
    >訳がわかんない。落としたよ。

    情報学科のある大学なんですね。
    プログラミング・サイエンスの分野も今やけっこう膨大だし、そのへんは基本は基本なんでしょうけど、具体的にどう活かせるのかパッとわからないと、やる気も出ないですよねぇ。
    • ※5 : ドクター・ノオ・ネーム
    • 2015.9.5 19:09
    自分が書いたプログラムを一週間くらいしてから見直してみて
    内容が分かるようならいいプログラムを書いたなと思ってるw
    • ※6 : ドクター・ノオ・ネーム
    • 2015.9.5 23:49
    センスと言うか
    関数の行数が短いほうがバグが少ない
    >クラスが1000行にまとめられている、
    これは長いと思う
    クラスは本来必要とする機能を最小限で持って全責任を持つ
    各クラス間は自分が担当する機能以外は相手のクラスに任せて相互に連携して動作するのがオブジェクト指向プログラミングだ
    1000行もあるクラスからオブジェクトを生成破棄するというのはちょっと信じられない
    多分オブジェクト指向プログラミングを理解したつもりか勘違いしている人だと思う

    0ミリ秒の話をしているのはそれを超えた処理を書くような人が居る
    という事を言いたいんじゃないかな

    >74
    は面白いw
    • ※7 : ドクター・ノオ・ネーム
    • 2015.9.6 0:18
    ナノ? すごすぎる・・・
    参照変数は減らして、関数は極力小さく分割してクラス化
    それでも1000行くらいを目処に、だね

    論理回路は作るの楽しいよね、数学がこんなにも生きるなんて!
  1. トラックバックはまだありません。


コメ欄での議論はおおいにけっこうですが、当サイトではドクター同士の罵り合いは禁止となっております。反論する際には、相手の意見・人格を尊重し、どうぞ冷静に。
*