• ベストアンサー
  • 困ってます

美しいコードを書くとはどういうことでしょうか

こんにちは。 最近、プログラミングを始めました。 スクリプト言語はPythonです。 いろいろな本を手にしてみると『美しいコード』という表現に出会うことがあります。 これはどういうことでしょうか。 私の理解では、例えば、改行や空白、インデントなど 一定のルールに従ってプログラムを書くのだと思っていました。 そうすると、どなたが書いても同じような仕上がりになり 『美しい』と言われるコードはどういうものか見当がつかなくなってきました。 『美しいコード』とは、ルールに注目することではなく 同じ命令なら、長々と書くよりもより短く書くという 文書能力のことでしょうか。 ありがとうございます。

noname#244865
noname#244865

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数467
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.1
  • t_ohta
  • ベストアンサー率38% (4198/10785)

人によって考え方の違いはあるでしょうが、私が考える美しいコードは ・インデント等の体裁が整っている ・簡潔で無駄の無い処理になっている ・他人が読んでもすぐに理解ができる と言う事だと思っています。 特に「他人が読んでもすぐに理解ができる」と言う事が大事で、仕事でプログラムを書いていると当然ながら複数人で仕事をするので、自分の書いたプログラムを他の人が修正したり、他の人が書いたプログラムを自分が修正することがあります。 時には過去に作られたプログラムを改修するプロジェクトがあったりしますが、仕様書がちゃんと残っていなかったり、当時の担当者が退職していて居ないなんて事はよくあることです。 他人の書いたコードを読んで理解する力はエンジニアとして必要なスキルだと思いますが、それ以上に他人が読んでもすぐに理解できるコードを書けると言う事が重要なスキルだと思っています。 私は、使途が分かりやすい変数名や関数名を付けるとか、複雑な処理を無理矢理一纏めにするのではなく簡潔な処理に分解して段階を追って処理するように心がけています。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答どうもありがとうございました。 自分が読むだけではなく、後日誰が読んでも分かるように 書くということですね。そうすれば短く簡単に・・・となり 美しいですね。 やはり、どの世界でも人の為と考えるといいものができるのだと 思いました。 どうもありがとうございました。

その他の回答 (3)

  • 回答No.4
  • kmee
  • ベストアンサー率55% (1857/3366)

御存じかもしれませんが、念の為。 Pythonを使うだけで「字下げ」は綺麗になります。 というか、綺麗にしないと、正しいプログラムになりません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お忙しい中、ご回答いただきましてありがとうございました!

  • 回答No.3

PythonじゃなくてC言語をとりあげた本ですが、 プログラミングの基礎を養うのにとてもいいと思うので、 以下を読むことをお勧めします。 「Cプログラミング診断室 ~ うつくしく健康なプログラムのために」 http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html#mokuji もう20年前に出版された本で、15年前に絶版になりましたが、 筆者の厚意で本の内容をWebサイトで公開してくれています。 その後、10年前からまた改訂新版として発刊されたようですが、 改訂前の版はWebサイトの公開を続けてくれています。 この本では、「汚いコード」というのがどんなのか、 どうして汚いのかをたくさん説明してくれてます。 普通の本は、きれいでわかりやすいコードしか載せませんから、 汚い/きれいってどういうことなのか、普通の本を読んでもなかなかわかりません。 汚いものがどういうものかわかれば、何がきれいかわかるようになります。 これを無料で読めるんだから、ありがたいことです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

とても丁寧なご回答をどうもありがとうございました。 早速目を通してみました。 C自体はわかりませんが、やはり長いと見づらいですね。 貴重な情報をどうもありがとうございます。

  • 回答No.2

以下の書籍を読むことをオススメします リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック http://www.oreilly.co.jp/books/9784873115658/ 個人的には、こっちの方がより「美しい」気がしますけれど ハッカーのたのしみ 本物のプログラマはいかにして問題を解くか http://www.amazon.co.jp/dp/4434046683

共感・感謝の気持ちを伝えよう!

質問者からのお礼

貴重な情報を教えていただき、どうもありがとうございます。 現在の自分のレベルでは、数多くあるPC関連の中から自力で良書を探し出すのはとても難しいです。 早速、注文しました。届くのが楽しみです。 どうもありがとうございました。

関連するQ&A

  • HTMLコードを一定ルールでインデント・改行してくれるソフトは?

    既に書いてしまったHTMLコードを一定のルールでインデント・改行してくれるソフトを探しています。(Win-XP用) 先日、 「HTML整頓くん 0.10β 」 http://www.vector.co.jp/soft/win95/net/se382567.html というフリーソフトを見つけたのですが、何から何まで改行してしまうのでちょっと具合が悪いのです。(<br>とか<b>は改行したくない) どなたかいいソフトご存知ありませんでしょうか? DreamWeaverやホームページビルダーにそんな機能があるというならそれでも結構です。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • WORD: タブやインデントを使わない同僚

    3~5名のチームで仕事をしています。 Word文書を共有フォルダで作成・管理しているのですが、私以外の人たちがWordのタブやインデントを使っていません。 他の人の作成した文書を加工する場合、改行やスペースが沢山入っているため、改行や文字空けの位置を変えるたびにそれらを削除していかなければなりません。 私の作成した文書を他の人が加工すると、改行やスペースを沢山追加されてしまいます。インデントの位置もメチャメチャなので、おそらく使い方が分からないのだと思います。 なんとかしてタブやインデントの便利さを伝え、チーム内で統一フォーマットを利用することで業務の効率化を図りたいと思っています。 複数の作業者間でWord文書のフォーマットを決める場合、どのような進め方をすればよろしいでしょうか? 私自身、詳細なWordフォーマットを決めている職場で働いたことがないため、ヘタなルールを持ち込んで現場を混乱させてしまうのを恐れています。 シンプルで守りやすく、ブレが生じにくいルール設定方法を教えていただけないでしょうか?

  • fpoenからの改行コードの扱いについて

    ただいまMacOSX(10以降)でプログラミングをしています。このOSでは改行コードはLFつまり、"\n"が当てはめられているはずです。(でいいんでしょ??) ///// abc.txt(改行や空白もそのまま)////// abc def ghi ///////////////////////////////////// このテキストをfopenで開き、fgetsで1文字ずつスキャンしていて"\n"にぶちあたるとある変数をインクリメントし、最後にその行数を出すというプログラムを書いてます。 この場合改行"\n"は3回あるので最終的に3+1、つまりこのテキストは4行あるということを表示できるはずなのですが、なぜか改行が1回としか認識されず結果2行のテキストとして出力されてしまいます。 いろいろ試した結果、どうやら"\n"を判断できている場所はその次が空白の行の場合だけなのです。つまり、コンピュータ的には ///// abc.txt(改行や空白もそのまま)////// abc\n ←ここは次にdefという文字列がきているので\nが認識されていない def\n ←ここしか認識されていない   \n ←同様に次の文字列がくるので認識されていない ghi ///////////////////////////////////// としか認識されていないようなのです。 なぜ\nの続きが文字列であると なぜこのようなことになるのでしょうか? \nの扱い方が間違っているのでしょうか?解決方法がおかる方がいればよろしくおねがいします。

  • pythonの編集仕様のいろいろ

    pythonのプログラミングを少し始めているのですが、以下のような問題に直面しました。一番最初にhello world! を表示するものです。 hello.pyを作ってpython hello.py とすると実行するようです。 hello.pyの内容ですが、あるサイト(以下の画像)では、 print "Hello, Wordl!" とありますが、私の環境では動かず、さらにサイトを検索して、 print ( "Hello, Wordl!" ) が正しいとのことで、こちらは問題なく動作しました。 また、このprintコマンドですが、編集画面で左詰めでないとダメで、コマンドの前の空白(インデント)があったら正しく動作しないとのことです。 このようなささいな違い、またプログラム編集上の作法の問題とかを見ると、この言語の習得は難しいように感じてしまいます。アルゴリズムの完全性とか、文法上の問題が完全にクリアになってもなぜが動作しない、という問題に直面しそうなのですが。自分の知らない何かのしきたりに違反しているという状態で、しかもそれが本質的でないように見える言語仕様(先のインデントがダメという問題)というのであれば、後からいろいろ出てきそうなのですが。例えば、”コマンドは第一文字が大文字でなければならない”とかです。数百、数千行のコードを書いたりすると、間違いの可能性のあるところが目に見えないところにいっぱいという感じがするのですが。バグフィックスというのは絶対に絶対に間違いない、と断言してそれでいてうっかりミスが見つかるわけです。”間違っているかもしれないな”じゃバグフィックスできません。 それでいて割と巷間ではpython人気という感じがしているのですが。 pythonのどこがいい、ということなのでしょうか。私が考えている困難を補う効用があるのでしょうか。 私の環境はanaconda 3.5です。バージョン毎にかなり違うのでしょうか。

  • ワード2007での頭揃え

    文字を箇条書きをする際に  行の先頭から、空白4文字(全角)を入力して、文字列を入力する場合と文字列を入力してからカーソルを先頭列に移動させ空白4文字(全角)を入力する場合では、前者は空白で全角4文字分になりますが、後者は、インデントの位置が動き、場合によっては、文字列の先頭文字が頭揃えにならない場合があります。  ゆえに、後者のように文字列を先に入力した場合は、その文字列の前にEnterキーで改行→空白4文字(全角)を入力→文字列の最後にカーソルあわせ、Deleteで改行削除させて頭揃えしています。  後者の場合も前者と同じように、インデントの位置が動くのではなく、空白4文字(全角)が文字列の前に入るように設定変更が出来ないのでしょうか。  …以外と文書作るのにも時間ロスするので…。

  • ホームページからコピーしてきたテキストを自動改行させたい

    ホームページからコピーしてきたテキストを自動改行させたい 某社にてホームページからコピーしたテキストを、ある法則にしたがって改行する編集作業を行っています。 しかしその内容がかなり多く、改行を行うだけの作業に20分もかかってしまいます。そこでマクロにて何とか編集できないものかと考えております。 改行ルール ・半角60文字(全角30文字)で改行したい  →例外:改行した際に、次の文頭に記号が来る場合は改行せず、61文字目(全角なら31文字目)で改行する    例:、。や、」のような〆記号。小文字(っ、ぁ等) ・上記のルールでも、冒頭分は必ず60文字以上にする必要があるため、60文字を超えたら「)」←この記号で改行するようにしたい 当方マクロに限らず、プログラミングについては初心者です。 自分なりに探してみて、60文字での改行についてはなんとか作れましたが、記号が来た場合のIFの使い方が、まったく検討が付きません。 もし上記のマクロができましたら、命令文について簡単な解説がいただけるとありがたいです。 以上、よろしくお願いいたします。

  • String変数を分割するメソッドってありますか?

     urizakaです。  さて、現在データベースから検索して持ってきたデータ(住所データです)をString変数に代入し、そのデータを一定ルールで区切って、区切った間に改行コードを入れるという処理を考えているのですが、javaにはVBAのsplit関数みたいなものってあるのでしょうか?JavaScriptにはあるみたいなので、Javaにもあるのではないかとは思うのですが…

    • ベストアンサー
    • Java
  • TeraPadで見えない文字コード

    TeraPadでXMLを作成し、通常TeraPadから視認できる範囲では問題がないのに、IEなどで表示させようとすると、エラーが出ることがあるようです。見えない文字コードを挿入して一見問題がないXML文書が整形式でなくなるようにできるのでしょうか?半角全角の空白やTAB改行文字などがオプションで表示できことは知っています、この問題ではありません。キーボードからそのようなコードを入力することはできますか?あるいはバイナリデータを貼付するなりしてその様な文書にすることはできますか?

  • Pythonにおける実行ファイル作成につきまして

    はじめまして。お世話になります。 当方、プログラミングを始めての初心者ですので、 低レベルな質問等ございましたら何卒ご容赦下さい。 掲題の件なのですが、Pythonでコードを記述した際、作成ファイルを実行する際は逐次 コマンドプロンプトから実行命令を出す必要があるのでしょうか。 例えばwindowsデスクトップにショートカットがあるように、作成したソフトをダブルクリックで 簡単に実行出来るようにすることは可能でしょうか。 私が購入した書籍が3冊等ございますが、それらはみなcmdからファイルを操作していました。 結論としまして、”エディタで記述したPythonファイルをGUI形式で利用・(起動等の操作を)可能にしたい”ということは可能なのでしょうか。 また非常に低レベルな質問で大変申し訳無いのですが、エディタはEmEditor(フリー版)を 使っており、こちらのエディタで、とあるwindowが表示されるコードを記述しても、 コードで意図したwindowは表示されず、ファイルが開き、エディタの編集モードに入ってしまいました。 (原理はなんとなく理解できます。”エクセルファイルをダブルクリックしたらエクセルファイルが開き、編集可能状態になった”と同内容のことと把握しています) 自分としては、ファイルをダブルクリックしたあと、”今このエディタでかいたコードが実行されてほしいのに・・・”と少し凹みます。。。(低レベルですみません) 長くなってしまい、大変申し訳御座いません。 cmd.exe無しで、Pythonで書かれたスクリプト実行方法をご存知の方いらっしゃいましたら、 何卒ご教示頂けますでしょうか。 よろしくお願いします。

  • Python で、既存のテキストにデータを書き加えたいと思っています。

    Python で、既存のテキストにデータを書き加えたいと思っています。 こんにちは、 私はプログラミング初心者であります。仕事で必要に迫られたこともあり、知人より簡単だから、とPythonを薦められ、学習を始めています。 質問は、既存のテキストファイルの文頭に、数字と文字を付け加えたいと思っているのですが、上手く行きません。 既存のテキスト(data.txt)はこんな感じで、保存されています。 1111.1111   2222.2222   3333.3333   4444.4444   5555.5555 5555.5555   6666.6666   7777.7777   8888.8888   9999.9999 1010.1010   1110.1111   1210.1212   1310.1313   1414.1414 実際には縦横に永遠とデータが羅列されています。空白部分はタブ区切りになっています。横に7000ほどのデータを読むと、改行されています。これがテキスト方式で保存されています。 このデータ群の先頭に6行文のデータを追加したいと試みています。以下のような感じのデータです。 ncols      1019 nrows      1923 xllcorner    -67.2327777773961 yllcorner    44.63742951396 cellsize    0.000277777777779674 NODATA_VALUE   -999 open関数で data.txt を開き、write を使ってしまうと、data.txt 内のデータが全て消えてしまうのですが、どのようにすれば上記にある6つのデータを書き加える事ができるのでしょうか? 大本のデータは縦横に 9000x7000 近くのデータがタブで区切られて保存されており、その大きさが 500MB を越えていて、職場のPCではノートパッドで開いてから書き足す事ができません。 どなたかアドバイスを頂ければ幸いであります。