• ベストアンサー

プログラミングのセンス・技術とは.

こんにちは.はじめて書き込みするtoroimoです. 私は,理工学系の大学院の修士課程に在学しています. 来春から社会人です. プログラミング暦は,研究に取り組んでから2年半たちます. 使用言語はCです. 最近,自分のプログラミングのセンスというか技術について 考えてしまいます. ある権威者の人は,プログラムは慣れであり,プログラミングは芸術といいます. 芸術であるがいえに万人が優れた美しいコードはかけないと… それを聞いてはじめは落胆しました. けれど,その後は少しでも優れたコードを書けるようにと 書籍・サイトを探り読んでいます. 私は,Cに関する初級本 改訂 新C言語入門 シニア編 など4冊,アルゴリズムに関しては,1冊. また,日経ソフトウエアやC_MAGAZINEなどをよんで知識の習得に 勤める努力はしています(実力として初級はクリアしてると思うのですが.). しかし,実際研究でコードを書くとなると アルゴリズムに悩む時間ばかり費やし手が止まってしまう状態です. こんな私に社会で働いている人(SEやプログラマ)や 学生の方から御叱咤・御忠告を賜りたいです. どうかよろしくおねがいいたします.

noname#721
noname#721

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.4

一口に「プログラム」といっても、いろんなプログラムがあります。 出来云々を別にしても、そのプログラム自体が、「製品」である場合と、 そうじゃない場合、とか、消費されていく(寿命が短い)ものとして作られる 場合とか、そうじゃないとか。 > 万人が優れた美しいコードはかけないと… というのはある程度納得できますが、ふつう綺麗だ、汚いだなんて言う対象の プログラムのレベルだったら、センスの前に、まず技術、でしょう。 ただ、その「技術」を、万人が(ある程度)同じレベルにするための統一的な 方法がなく、センスの問題と片づけてしまっているということだと思います。 後、「技術」の前に「姿勢」という問題があると思ってます。 技術の修得に対するモチベーションの問題なのかもしれませんが、「動けば 良いや」っていうレベルに甘んじていると、いつまで経っても技術は向上しません。 そういう意味では、「技術を修得する為の姿勢が正しい」ということが「センス」 だったり「才能」だったりするのかも。 # なにも、プログラムに限った話ではないと思います 私が、自分でものびたなあと思った時期は「他人の汚いコードを保守・改造している」 ときでした。他人の綺麗なコードもあわせて読むのが更に良い。 でも、「研究でコードを書いている」という環境だと、ちょっと難しいかも。 > アルゴリズムに悩む時間ばかり費やし手が止まってしまう状態です これは、単に「引き出しに入っているものの数が少ない」だけですね。 早い・遅いの差はありますが、経験だけでもそれなりにカバーできるし、それようの 勉強をすれば、アルゴリズムに悩む時間はどんどん少なくなっていきます。 絶対「ゼロ」にはなりませんけどね。

noname#721
質問者

補足

a-kumaさん,なんかしみじみ読んでしまいました. >技術の修得に対するモチベーションの問題なのかもしれませんが、「動けば >良いや」っていうレベルに甘んじていると、いつまで経っても技術は >向上しません。 ごもっともです. >> アルゴリズムに悩む時間ばかり費やし手が止まってしまう状態です >これは、単に「引き出しに入っているものの数が少ない」だけですね。 >早い・遅いの差はありますが、経験だけでもそれなりにカバーできるし、それようの 勉強をすれば、アルゴリズムに悩む時間はどんどん少なくなっていきます。 すみません,引き出しの中身を増やすには,どのような経験を積んでいったら よいか御教示御願い致します.

その他の回答 (6)

  • k-841
  • ベストアンサー率27% (129/465)
回答No.7

「動けばいいや」なレベルに甘んじている一研究者です(汗 どんなプログラムがいいプログラムかよくわかりませんが、 センスを磨くには#1の方がおっしゃるように、 とにかくたくさんコードを書いて動かしてみることですね。 その中でも、とりわけデバグ作業がいい訓練になるんじゃないかと思うんです。 このように書くと、「習うより慣れろ」という言葉を想像されるかもしれませんが、 より的確には、プログラミングに限らず「習って慣れろ」だと思うんですね。 だって、プログラミングの技術の中には、 知らなきゃどうしようもないことがいくらでもあるんですから。 で、じゃあ何から習うか、ですが、世の中には教科書はいくらでもあります。 「教科書」はなにも本屋で売っているような書籍に限定されません。 本が買えなきゃ、OSやコンパイラのソースをのぞいてみるのもいいかもしれません。 あと、余談ですが、「動けばいいや」っていうレベルに甘んじては・・・についてですが、 最近はプログラミングの環境が豊かになりすぎているので、 動きさえすれば実用上ほとんど問題が生じないのが実情です。 最新型パソコンですら64Kのメモリと8つの8ビットレジスタを駆使して・・・とかいう、 ある意味ハードウェアの限界まで使い切らなくてはならない時代には、 かなりセンスを磨くチャンスがあったんですけど。 もちろん当時の制御用マイコンはそれよりも条件が厳しかったのですが、 現代と当時の大きな違いは、限界を感じたことがあるか否か、だと思うんですね。 そういう意味で、限界を感じたことがあるから、 さらに限界が低いマシンでも限界の克服の仕方が身についていたからなんとかなったんじゃないか、と。 って、かなり言い訳っぽく聞こえますか・・・

noname#721
質問者

お礼

k-841様,ご意見ありがとうございます. まさか,研究者の方からアドバイスを頂けるとは, このサイトのありがたさ及び,なんともいえぬ 喜びがあります. さて,ご意見の方ですが, >とにかくたくさんコードを書いて動かしてみることですね。 >その中でも、とりわけデバグ作業がいい訓練になるんじゃないかと思うんです。 うんうん,納得です. 私は参考書等のサンプルコードばかりを打ち込みその仕組みを理解する といった方法で勉強してきました. 自分で考えたコードを実装し,デバックを通して成長するのですね. うーーん,感動です. >あと、余談ですが、「動けばいいや」っていうレベルに甘んじては・・・についてですが、 最近はプログラミングの環境が豊かになりすぎているので、 動きさえすれば実用上ほとんど問題が生じないのが実情です。 今日,CPUのスペックやDRAM,およびHDDの容量をみても べらぼうに性能が向上していますね. k-841さん,これからも勉強していく過程で 分からないことがあったらご意見を賜りたいので, 今後とも宜しく御願い致します. ありがとうございました.

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.6

センスや技術は身に付けられます。 芸術とか頂点とかそのあたりになると、私にも別世界ですが、そのレベルでなければ身につきます。 やり方としては,やはり人のソースを読むこと、 いろんな知識を身につけること,自分で考えてプログラムを つくることでしょうか。 読むプログラムは良質な物の方がいいでしょう。 フリーウェアで昔からソースが公開されてきて定評のあるものがいいように思います。 知識としてはアルゴリズムの本とか、あとはコンピュータ自身のハードウェアとか、 OS内部の知識もあった方がいいでしょう。 直接直ぐに役立つことはないでしょうけど。 あと、余力があれば、C以外の言語、それもまったく違う タイプの言語をやってみるといいように思います。 lispなんてやると、頭が固くならずいいかも。

noname#721
質問者

お礼

terra5様,お返事ありがとう御座います。 >読むプログラムは良質な物の方がいいでしょう。 >フリーウェアで昔からソースが公開されてきて定評のあるものがいいように思います。 linuxなどのソースコードのことでしょうか? ちょっと調べてみます. 私は特に, >センスや技術は身に付けられます。 というterra5さんの言葉に感動しました. 自分の能力に限界さえ感じはじめていましたので, この言葉に救われた気がいたします. もっと視野を広げ勉強していきたいと思います. 貴重なご意見ありがとうございました. なにかありましたら今後ともよろしく御願い致します. 最後にterra5さんのみならず,私の質問に対して アドバイスをして頂いた方々にお礼をいいたいです. ありがとうございました. それでは.

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.5

> すみません,引き出しの中身を増やすには,どのような経験を積んでいったら > よいか御教示御願い致します. 「御教示」って程ではないのですが、私の経験談を。 純粋に「アルゴリズム」という引き出しの中身を一気に増やせたのは、本でした。 その当時は Turbo Pascal 使いだったのですが、奥村晴彦著の『コンピュータ・アルゴリズム事典』 という本にであって、いろいろ勉強になりました。 最近は C++ の STL のソース(とっても汚いですが)も勉強になりました。 他にも、コード集のサイトや本なんか、それこそ掃いて捨てるほどありますので、 引き出しの中身を増やすのに、それほどお金はかかりません。 とりあえずは、あまり有用かどうかを悩まずに乱読してみるのはどうでしょうか。 良い本やコード集に出会えると良いですね。

参考URL:
http://www.matsusaka-u.ac.jp/~okumura/algo/
noname#721
質問者

お礼

a-kuma様,お返事ありがとうございます. >他にも、コード集のサイトや本なんか、それこそ掃いて捨てるほどありますの >で、 引き出しの中身を増やすのに、それほどお金はかかりません。 >とりあえずは、あまり有用かどうかを悩まずに乱読してみるのはどうでしょうか。 >良い本やコード集に出会えると良いですね。 うーーん,納得です.そうですね,今ある環境をフルにいかすして 知識と増やし,またスキルをみがくための努力を継続していきたいと 思います.

  • mkii
  • ベストアンサー率40% (43/105)
回答No.3

こういう回答はそれぞれの個人によって全然異なりますので、 自信ナシでいきます。 万人が優れた美しいコードは書けない… これは、その通りだと思います。 才能のある人は最初から組んでくるコードが違いますね。 私が思うに コンピュータに慣れ親しんだ人=コンピュータになりきれる人 のような気がします。 そのような人は、こう組んだらこう動くと言う事を分かりきって書いてきますので、 美しく無駄のないプログラムを組んできます。 で、誰でも最初は初心者な訳で、どうやってレベルアップしていくか というと 人のソースをガンガン見る といいと思います。 単純にテクニックをもらったり、それから発想の違いに驚くこともあります。 いい刺激になると思います。 そうしていくうちに、自分の書くコードがだんだん変わっていくのだと思います。 要するに (1) コンピュータに関する知識をつける(慣れ親しむ) (2) 人のコードを見た刺激により自分のコードを作り上げる でしょうか。

noname#721
質問者

お礼

mkiiさん,早速のアドバイスありがとうございます. >(1) コンピュータに関する知識をつける(慣れ親しむ) >(2) 人のコードを見た刺激により自分のコードを作り上げる 承知致しました.少し勉強の方法,プログラムを組む姿勢を 考え直します. mkiiさん今後とも宜しく御願いします.

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.2

こんにちは、honiyonです。  決して参考書を読むな、とは言ってないという事を補足させて下さい(^^;  参考書だけでは育たないよ、という事を言っています。  参考書はあくまで「参考」なので、良き参考として上達のための糧として下さい。  連続投稿ですいませんです(..

noname#721
質問者

お礼

honiyonさん,人生の先輩として貴重なご意見を提示して頂きありがとうございます. honiyonさんがおっしゃる通り,プログラムを組むことが「好き」な 人には,やはりかないませんね.吸収力というか,その取り組む姿勢というか. 私の周りの友人もSEやプログラマーになっています. 文系からでもべらぼうにプログラムを組める方がいらっしゃると 聞いています. 頭で考える(発想力)が私には足りないのでしょうね… その発想力をつけるためには,どのような訓練をすればよいのか? と日々考えるところでもあります. しかし,honiyonさんがおっしゃっていたことは, 私にも通ずるところなので,なんとか頑張ってみたいと思います. あらためてありがとうございました.

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。    現役プログラマーです。  でも自分の実力に自信がないので経験者としていつも回答させて頂いてます(笑  私の書くコードか美しいかどうかは分からないので回答して良いのか悩む所ですが、アドバイスとして回答してみます(^^;  その「ある権威者」が言う事には納得出来ます。 確かに優れたコードは万人に組めるものではないでしょう。 同じ動作をするプログラムでも、センスのある人、ない人では、センスのある人の方がメモリ消費量も少なく、かつ動作も速い。 更にコードも読みやすいものであると思います。  ではその「センス」を身につけるにはどうすれば良いか?  答えはただ1つ。 ひたすら自分の力でプログラムを組むことです。  発想力は、本だけでは育ちません。 自分で考える事で育ちます。  本から知識を得るなんて誰だって出来ます。 でもその読んで得た知識を使って、実際にコードを書くのは誰にだって出来るというものではありません。  プログラマーという職が成り立っているのにはそういう理由があるのです。   まずプログラミングを好きになって、「あんなものを作ってみたい」「こんなものを作ってみたい」と、いろんなプログラムを組んでいく事で成長します。  ここから先は余談なのですが、専門校や大学を卒業して入社希望で来る方が結構います。 しかし、実際に即戦力になる人はほんの一握り。 その差は何か? はっきりいって、プログラムが趣味か否かだと思っています。   学校で言われた通りにプログラムを組み、知識だけ身につけてきた人と、プログラムを趣味とし、学校外でいろんなプログラムを組んで「技術」を身につけて来た人の違いではないでしょうか。  プログラムは知識ではなく技術(発想力)です。  車は教科書を読むだけで運転出来るようになるか。  野球も参考書を読むだけで上達出来るのか。  答えは Noですね。 それと一緒です。  参考になれば幸いです(..

関連するQ&A

  • プログラミング初級者が中級レベルになるにはどういう学習をすればいいです

    プログラミング初級者が中級レベルになるにはどういう学習をすればいいですか? いまmacでobjective シーを、mac付属のXcodeというソフトで学んでます 基本的な文法書は読み終わり、これから何か作りたいとは思うんですがなかなか応用ができません ソースコードを公開してるところがあればと探したんですが、日本語サイトはおそらくなし(アフィリエイトサイトばかりでした) 海外のではありましたが、ファイル数が多くてよくわからず、どうしたらいいやらと頭を抱えるばかり 個人的にはマックにはあC#でいうところの.frameworkの、CocoaがあるのでGUIは作れるとは思ってます メモ帳かデジタル時計などを作りたいんですが、ちょっとしたヒントとかないとできないほど初心者です プログラミング経験はまずC言語を始めて、基本情報処理技術者用に簡単なアルゴリズムを学んだくらいで、どの言語でも 本格的なプログラミング経験はありません よろしくお願いします

  • プログラミングの習得方法

    画像処理アルゴリズムを考える仕事をしていますが、プログラミングスキルが足りておらず、思うように試行・検討が進められていないと痛感しております。 プログラミングをどのように身につけていけばよいでしょうか? 使用言語はC++で開発環境はVisual C++.net 2003を使っています。 プログラミングや画像処理の開発・研究に関わっている方のご意見がいただけるとありがたいです。 また、お薦めのWebサイトや本を紹介していただけるのも歓迎です。

  • プログラミングの学習法

    いままでいろんな言語を使って、浅いプログラミングをしていました。 しかし、技術の低さを痛感したのでC/C++言語に絞って学習することにしました。 今までやってきた基本的なことは以下のものです。 ・C/C++言語の学習 ・アルゴリズムの学習 ・VC++によるウィンドウズプログラミングの学習 ここから更に基本的な技術力を伸ばすには、どんなことに取り組めばよいですか?

  • プログラミングの仕方

    とても初歩的な質問で申し訳ありません。C言語の参考書の様なものをもらいましたが、Cを始めプログラミングの言語はどこでどのようにして記述するものなのでしょう。ウィンドウズでテキストで記述するレベルなら、基本情報処理の初歩レベルのアルゴリズムなら出来る様な気がします。プログラミングを動かすには、どの様なツールが必用なのでしょうか。

  • perlのプログラミングセンスを磨くには

    C言語とperlを独学し、1000行程度のperlのコードを書けるようになりました。 ですが自分の書いたコードは 似たようなサブルーチンが何回も出てきたり、後から付け足したコードをあちこちにツギハギしたり、いわゆるグローバル変数を多用したりと、自分で見てもあまりセンスが感じられません。 そのため見た目に分かりづらく、メンテナンスもしにくくなってしまっています。 他の方が書かれたコードをダウンロードして見てみたりしていますが、なかなか上達できません。 センスのいいコードを書くには、個々の関数の働きがどうこうよりも、もっとマクロな視点で全体の構造やメンテナンス性に注目すべきだと思うのですが、この観点でプログラミングを解説したサイト、あるいは書籍をご紹介頂けないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 連珠のゲームプログラミング

    大学の卒業研究で連珠のゲームプログラミングを作っています。 HPや本を調べたのですが詳しく載っているものがありません。 良い参考書、参考になるHPを知っている方がいましたら教えてください。お願いします。 言語はVBなのですが、アルゴリズムなど全体の流れを知りたいので他の言語でもかまいません。お願いします。

  • プログラミングで難しいと感じるところ

    今大学でプログラミング系の研究をしている者です。どこを支援すべきなのかを模索中です。 そこで、プログラミング教育の支援を行おうということで、一般的な本に書かれているここが難しいというのではなく、プログラミングを学ぶ学習者がプログラミングのどこが難しいと感じているのか知りたいのです。 言語はC言語なんでも構わないのですが、どういったところが難しいと感じているのかといったことを調査した論文等があれば教えてもらいたいです。いろいろ検索してみたのですがこれといったものがなくて・・・。また、論文等じゃなくてもホームページとか、個人の人がこう言ってるみたいなものでも多く集めて参考にしたいと思うのであればよろしくお願いします。

  • プログラミングの考え方が出来ません

    大学でC言語を習っていて、今も実験などでC言語のプログラミングをしなければならないのですが、なかなか思うようにプログラムが書けません。 いつも何回も友達や教授に聞かないと納得が出来ないし、とても時間がかかるので困っています。 情報系の学科なのでこれからも使うことになるだろうし、自分としてももっとプログラミングが出来るようになりたいと思っているのですが、良い勉強法などあれば教えてください。 今までちゃんとやったことのある言語はC言語のみで、大学では1年半C言語の授業がありました。 自分でプログラミングをしていて困ってしまうのは、主に条件分岐が複雑になってしまうときと、文字列の操作(ポインタ?)です。 今、3年後期なので4年次に研究室に配属されるまでにもっと出来るようになりたいのでよろしくお願いしますm(__)m

  • プログラミングの知識

    c言語を勉強しています。 参考書のようなもので勉強しているのですが、 コードの文法以外は知ることができません。 なのでもっと広くプログラミングのことを知りたいです。 そこでみなさんおすすめの雑誌を教えてください。 (c言語専門の雑誌でも、プログラミング全般の雑誌でも良いです。)

  • プログラミング言語が何か教えてください><

    プログラミングのソースコード(?)を見つけ、いざ打ち込んでやってみよう!となったのですが、これが何言語(FORTRAN?PYTHON??C??)なのか分からなくてどうすればいいのか困っています>< プログラミングにお詳しい方、お助けください>< ちなみに、プログラミングに関してはほとんど何もわからない情弱男です。

専門家に質問してみよう