ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

CとC#、美しいコードとは何か

一応、wisdom103さんのブログにトラックバックを送っています。
wisdomさん、よかったらお読みください~。

wisdom103さんが、相互リンクしている中学生プログラマたちで、
プログラミング技能を競うプログラミング大会を開きたい
と、おっしゃっていて私もぜひやってみたい所存なんですが、

使っているプログラミング言語がみんな違うから難しいところなんですよね。

技能を競うと言っても、どんな技能を競えば公平なのか…。

ということで、いろいろ考えています。

話を変えると、JOIという大会がやっているんですよね。

プログラミングの大会なんですけど、○○を求めるアルゴリズムを書きなさいと出題されますから、
それに対して、完璧で高速なアルゴリズムを書いたら高得点らしいです。

アルゴリズムといえばC言語が黙っていませんから、コードはCで書くそうです。



つまり、JOIでは美しいコードを書けば高得点なんですよ。
しかし、美しいコードってのはあくまでC言語での美しいコードです。

じゃあ、オブジェクト指向言語でいう美しいコードとはなんなのかを書きます。




C#に比べて、C言語は古い言語ですから言語機能が少ないんですよね。

当時はB言語の次に作られた最新スーパー言語だったとは思うんですけど、やはり現在は伝統的な言語という位置づけです。

C言語ではライブラリとして提供されていないものは自作するしかありません。

何かのアルゴリズムがライブラリに無かったら自分で作らないといけないんですよ。

そのためには、色んなアルゴリズムを見た経験と、柔軟な発想が必要です。
作れただけで凄いアルゴリズムというのもあります。

それで、そのときにシンプルで高速なアルゴリズムを書いたほうが良いんです。
これがC言語の美しいコードですね。

それがJOIの求めていることだと思います。

そのおかげでC言語ではライブラリに助けてもらわずとも巨大なソフトを作ることができますし、
開発者のためにライブラリを作ることもできます。

細かい制限事項がないんですよね。


それに比べて、オブジェクト指向言語は最近のものが多く、言語機能も増えています。
さらにJavaや.NETには膨大なライブラリがあります。

難しいアルゴリズムもたくさんライブラリに入っています。
素人が書いたものではなく、達人が書くアルゴリズムですから、それなりにしっかりしています。

そのせいで小回りが利かないんですけどね…。
ほんとに、こういう言語はライブラリの言われるがままにしかできないのがデメリットなんですよ。

オブジェクト指向での美しいコードは、
いかに機能をオブジェクトでカプセル化できているか
です。

大規模な開発を想定している言語ですから、コードの量も開発者の人数も大規模です。

無造作に機能を詰め込んでいたら理解不能のプログラムになってしまいます。

そこで、ある機能の内部を熟知している者が、その機能をブラックボックス化するんです。

他の人は処理の内部なんて知らなくても、ポンと値を与えたら、ポンと結果が返ってきます。
こういう設計がオブジェクト指向言語の美しいコードです。

そして、オブジェクト指向言語では、クラス単位でのブラックボックス化を“カプセル化”と呼びます。




つまり、言いたいことは、美しいコードは言語によって全く違うんですよ。

日本では「これが!?」と思う女性が、外国では美女といわれますから(笑)

価値観はそれぞれですから、物事の判断は難しいんですよね。


(最後、話の趣向がよう分からんくなった…)

tag:

コメント

FC2側のトラブルなのかトラックバックは
送信されていませんでしたが、読ませていただきました。

クラス設計を競うのでもアルゴリズムについて競うのでも
公平でないということで凄く難しいですよね。


やっぱり、あるソフトウェアを課題としてみんなで作ってくる
というサイバー少年さんが提案してくれた大会が良い気がしてきました。

まぁ方向性をそちらに決めたとしても、
やはりどんなソフトウェアを課題にするかで悩むんですがね。

  • 2012/12/23(日) 16:17:56 |
  • URL |
  • wisdom103 #-
  • [ 編集 ]

Re: wisdom103

トラックバック送られていませんでしたか。
FC2のトラブルなのか、私のミスなのか…。
とにかく読んでいただきありがとうございます。

私のオススメのソフトウェアを作ってくる形になりそうですか。
このやり方は言語での差が無いからおすすめですよ。

しかし、細かくいうとGUI設計などでライブラリの格差が生まれてしまいますね…。
UIはCUIにしたほうがいいかも知れません。

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/208-f71743d1
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。