- ベストアンサー
プログラミングのセンス・技術とは.
こんにちは.はじめて書き込みするtoroimoです. 私は,理工学系の大学院の修士課程に在学しています. 来春から社会人です. プログラミング暦は,研究に取り組んでから2年半たちます. 使用言語はCです. 最近,自分のプログラミングのセンスというか技術について 考えてしまいます. ある権威者の人は,プログラムは慣れであり,プログラミングは芸術といいます. 芸術であるがいえに万人が優れた美しいコードはかけないと… それを聞いてはじめは落胆しました. けれど,その後は少しでも優れたコードを書けるようにと 書籍・サイトを探り読んでいます. 私は,Cに関する初級本 改訂 新C言語入門 シニア編 など4冊,アルゴリズムに関しては,1冊. また,日経ソフトウエアやC_MAGAZINEなどをよんで知識の習得に 勤める努力はしています(実力として初級はクリアしてると思うのですが.). しかし,実際研究でコードを書くとなると アルゴリズムに悩む時間ばかり費やし手が止まってしまう状態です. こんな私に社会で働いている人(SEやプログラマ)や 学生の方から御叱咤・御忠告を賜りたいです. どうかよろしくおねがいいたします.
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
一口に「プログラム」といっても、いろんなプログラムがあります。 出来云々を別にしても、そのプログラム自体が、「製品」である場合と、 そうじゃない場合、とか、消費されていく(寿命が短い)ものとして作られる 場合とか、そうじゃないとか。 > 万人が優れた美しいコードはかけないと… というのはある程度納得できますが、ふつう綺麗だ、汚いだなんて言う対象の プログラムのレベルだったら、センスの前に、まず技術、でしょう。 ただ、その「技術」を、万人が(ある程度)同じレベルにするための統一的な 方法がなく、センスの問題と片づけてしまっているということだと思います。 後、「技術」の前に「姿勢」という問題があると思ってます。 技術の修得に対するモチベーションの問題なのかもしれませんが、「動けば 良いや」っていうレベルに甘んじていると、いつまで経っても技術は向上しません。 そういう意味では、「技術を修得する為の姿勢が正しい」ということが「センス」 だったり「才能」だったりするのかも。 # なにも、プログラムに限った話ではないと思います 私が、自分でものびたなあと思った時期は「他人の汚いコードを保守・改造している」 ときでした。他人の綺麗なコードもあわせて読むのが更に良い。 でも、「研究でコードを書いている」という環境だと、ちょっと難しいかも。 > アルゴリズムに悩む時間ばかり費やし手が止まってしまう状態です これは、単に「引き出しに入っているものの数が少ない」だけですね。 早い・遅いの差はありますが、経験だけでもそれなりにカバーできるし、それようの 勉強をすれば、アルゴリズムに悩む時間はどんどん少なくなっていきます。 絶対「ゼロ」にはなりませんけどね。
その他の回答 (6)
- k-841
- ベストアンサー率27% (129/465)
「動けばいいや」なレベルに甘んじている一研究者です(汗 どんなプログラムがいいプログラムかよくわかりませんが、 センスを磨くには#1の方がおっしゃるように、 とにかくたくさんコードを書いて動かしてみることですね。 その中でも、とりわけデバグ作業がいい訓練になるんじゃないかと思うんです。 このように書くと、「習うより慣れろ」という言葉を想像されるかもしれませんが、 より的確には、プログラミングに限らず「習って慣れろ」だと思うんですね。 だって、プログラミングの技術の中には、 知らなきゃどうしようもないことがいくらでもあるんですから。 で、じゃあ何から習うか、ですが、世の中には教科書はいくらでもあります。 「教科書」はなにも本屋で売っているような書籍に限定されません。 本が買えなきゃ、OSやコンパイラのソースをのぞいてみるのもいいかもしれません。 あと、余談ですが、「動けばいいや」っていうレベルに甘んじては・・・についてですが、 最近はプログラミングの環境が豊かになりすぎているので、 動きさえすれば実用上ほとんど問題が生じないのが実情です。 最新型パソコンですら64Kのメモリと8つの8ビットレジスタを駆使して・・・とかいう、 ある意味ハードウェアの限界まで使い切らなくてはならない時代には、 かなりセンスを磨くチャンスがあったんですけど。 もちろん当時の制御用マイコンはそれよりも条件が厳しかったのですが、 現代と当時の大きな違いは、限界を感じたことがあるか否か、だと思うんですね。 そういう意味で、限界を感じたことがあるから、 さらに限界が低いマシンでも限界の克服の仕方が身についていたからなんとかなったんじゃないか、と。 って、かなり言い訳っぽく聞こえますか・・・
お礼
k-841様,ご意見ありがとうございます. まさか,研究者の方からアドバイスを頂けるとは, このサイトのありがたさ及び,なんともいえぬ 喜びがあります. さて,ご意見の方ですが, >とにかくたくさんコードを書いて動かしてみることですね。 >その中でも、とりわけデバグ作業がいい訓練になるんじゃないかと思うんです。 うんうん,納得です. 私は参考書等のサンプルコードばかりを打ち込みその仕組みを理解する といった方法で勉強してきました. 自分で考えたコードを実装し,デバックを通して成長するのですね. うーーん,感動です. >あと、余談ですが、「動けばいいや」っていうレベルに甘んじては・・・についてですが、 最近はプログラミングの環境が豊かになりすぎているので、 動きさえすれば実用上ほとんど問題が生じないのが実情です。 今日,CPUのスペックやDRAM,およびHDDの容量をみても べらぼうに性能が向上していますね. k-841さん,これからも勉強していく過程で 分からないことがあったらご意見を賜りたいので, 今後とも宜しく御願い致します. ありがとうございました.
- terra5
- ベストアンサー率34% (574/1662)
センスや技術は身に付けられます。 芸術とか頂点とかそのあたりになると、私にも別世界ですが、そのレベルでなければ身につきます。 やり方としては,やはり人のソースを読むこと、 いろんな知識を身につけること,自分で考えてプログラムを つくることでしょうか。 読むプログラムは良質な物の方がいいでしょう。 フリーウェアで昔からソースが公開されてきて定評のあるものがいいように思います。 知識としてはアルゴリズムの本とか、あとはコンピュータ自身のハードウェアとか、 OS内部の知識もあった方がいいでしょう。 直接直ぐに役立つことはないでしょうけど。 あと、余力があれば、C以外の言語、それもまったく違う タイプの言語をやってみるといいように思います。 lispなんてやると、頭が固くならずいいかも。
お礼
terra5様,お返事ありがとう御座います。 >読むプログラムは良質な物の方がいいでしょう。 >フリーウェアで昔からソースが公開されてきて定評のあるものがいいように思います。 linuxなどのソースコードのことでしょうか? ちょっと調べてみます. 私は特に, >センスや技術は身に付けられます。 というterra5さんの言葉に感動しました. 自分の能力に限界さえ感じはじめていましたので, この言葉に救われた気がいたします. もっと視野を広げ勉強していきたいと思います. 貴重なご意見ありがとうございました. なにかありましたら今後ともよろしく御願い致します. 最後にterra5さんのみならず,私の質問に対して アドバイスをして頂いた方々にお礼をいいたいです. ありがとうございました. それでは.
- a-kuma
- ベストアンサー率50% (1122/2211)
> すみません,引き出しの中身を増やすには,どのような経験を積んでいったら > よいか御教示御願い致します. 「御教示」って程ではないのですが、私の経験談を。 純粋に「アルゴリズム」という引き出しの中身を一気に増やせたのは、本でした。 その当時は Turbo Pascal 使いだったのですが、奥村晴彦著の『コンピュータ・アルゴリズム事典』 という本にであって、いろいろ勉強になりました。 最近は C++ の STL のソース(とっても汚いですが)も勉強になりました。 他にも、コード集のサイトや本なんか、それこそ掃いて捨てるほどありますので、 引き出しの中身を増やすのに、それほどお金はかかりません。 とりあえずは、あまり有用かどうかを悩まずに乱読してみるのはどうでしょうか。 良い本やコード集に出会えると良いですね。
お礼
a-kuma様,お返事ありがとうございます. >他にも、コード集のサイトや本なんか、それこそ掃いて捨てるほどありますの >で、 引き出しの中身を増やすのに、それほどお金はかかりません。 >とりあえずは、あまり有用かどうかを悩まずに乱読してみるのはどうでしょうか。 >良い本やコード集に出会えると良いですね。 うーーん,納得です.そうですね,今ある環境をフルにいかすして 知識と増やし,またスキルをみがくための努力を継続していきたいと 思います.
- mkii
- ベストアンサー率40% (43/105)
こういう回答はそれぞれの個人によって全然異なりますので、 自信ナシでいきます。 万人が優れた美しいコードは書けない… これは、その通りだと思います。 才能のある人は最初から組んでくるコードが違いますね。 私が思うに コンピュータに慣れ親しんだ人=コンピュータになりきれる人 のような気がします。 そのような人は、こう組んだらこう動くと言う事を分かりきって書いてきますので、 美しく無駄のないプログラムを組んできます。 で、誰でも最初は初心者な訳で、どうやってレベルアップしていくか というと 人のソースをガンガン見る といいと思います。 単純にテクニックをもらったり、それから発想の違いに驚くこともあります。 いい刺激になると思います。 そうしていくうちに、自分の書くコードがだんだん変わっていくのだと思います。 要するに (1) コンピュータに関する知識をつける(慣れ親しむ) (2) 人のコードを見た刺激により自分のコードを作り上げる でしょうか。
お礼
mkiiさん,早速のアドバイスありがとうございます. >(1) コンピュータに関する知識をつける(慣れ親しむ) >(2) 人のコードを見た刺激により自分のコードを作り上げる 承知致しました.少し勉強の方法,プログラムを組む姿勢を 考え直します. mkiiさん今後とも宜しく御願いします.
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 決して参考書を読むな、とは言ってないという事を補足させて下さい(^^; 参考書だけでは育たないよ、という事を言っています。 参考書はあくまで「参考」なので、良き参考として上達のための糧として下さい。 連続投稿ですいませんです(..
お礼
honiyonさん,人生の先輩として貴重なご意見を提示して頂きありがとうございます. honiyonさんがおっしゃる通り,プログラムを組むことが「好き」な 人には,やはりかないませんね.吸収力というか,その取り組む姿勢というか. 私の周りの友人もSEやプログラマーになっています. 文系からでもべらぼうにプログラムを組める方がいらっしゃると 聞いています. 頭で考える(発想力)が私には足りないのでしょうね… その発想力をつけるためには,どのような訓練をすればよいのか? と日々考えるところでもあります. しかし,honiyonさんがおっしゃっていたことは, 私にも通ずるところなので,なんとか頑張ってみたいと思います. あらためてありがとうございました.
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 現役プログラマーです。 でも自分の実力に自信がないので経験者としていつも回答させて頂いてます(笑 私の書くコードか美しいかどうかは分からないので回答して良いのか悩む所ですが、アドバイスとして回答してみます(^^; その「ある権威者」が言う事には納得出来ます。 確かに優れたコードは万人に組めるものではないでしょう。 同じ動作をするプログラムでも、センスのある人、ない人では、センスのある人の方がメモリ消費量も少なく、かつ動作も速い。 更にコードも読みやすいものであると思います。 ではその「センス」を身につけるにはどうすれば良いか? 答えはただ1つ。 ひたすら自分の力でプログラムを組むことです。 発想力は、本だけでは育ちません。 自分で考える事で育ちます。 本から知識を得るなんて誰だって出来ます。 でもその読んで得た知識を使って、実際にコードを書くのは誰にだって出来るというものではありません。 プログラマーという職が成り立っているのにはそういう理由があるのです。 まずプログラミングを好きになって、「あんなものを作ってみたい」「こんなものを作ってみたい」と、いろんなプログラムを組んでいく事で成長します。 ここから先は余談なのですが、専門校や大学を卒業して入社希望で来る方が結構います。 しかし、実際に即戦力になる人はほんの一握り。 その差は何か? はっきりいって、プログラムが趣味か否かだと思っています。 学校で言われた通りにプログラムを組み、知識だけ身につけてきた人と、プログラムを趣味とし、学校外でいろんなプログラムを組んで「技術」を身につけて来た人の違いではないでしょうか。 プログラムは知識ではなく技術(発想力)です。 車は教科書を読むだけで運転出来るようになるか。 野球も参考書を読むだけで上達出来るのか。 答えは Noですね。 それと一緒です。 参考になれば幸いです(..
補足
a-kumaさん,なんかしみじみ読んでしまいました. >技術の修得に対するモチベーションの問題なのかもしれませんが、「動けば >良いや」っていうレベルに甘んじていると、いつまで経っても技術は >向上しません。 ごもっともです. >> アルゴリズムに悩む時間ばかり費やし手が止まってしまう状態です >これは、単に「引き出しに入っているものの数が少ない」だけですね。 >早い・遅いの差はありますが、経験だけでもそれなりにカバーできるし、それようの 勉強をすれば、アルゴリズムに悩む時間はどんどん少なくなっていきます。 すみません,引き出しの中身を増やすには,どのような経験を積んでいったら よいか御教示御願い致します.