入門書レベルのことが、どう実践の役に立つのか?(5/5)

解決済みの質問

入門書レベルのことが、どう実践の役に立つのか?

 私は興味と暇つぶしでC言語の入門本を読んでいる者です。
 プログラマーになるつもりは全くないです。 純粋に興味で質問させていただきます。

入門書レベルのことと実際の仕事ではだいぶ差異があると聞きましたが、では入門書レベルのこと(※)が実践やその勉強で具体的にどう必要で、どう役に立っていくのでしょうか?

ある程度技術的な説明を、ド素人にもわかりやすくお願いしたいです。
「基礎だから」というお答えでしょうが、そこのツッ込んだ解説を知りたいわけです。
(困難な要求ですいません!)

※----------------------------
if,switch,for,while
2次元配列、自作関数、ポインタ、
関数への・コマンドプロンプトでの引数の渡し方
ファイルへの読み込み・書き出し
バイナリファイルの入出力
構造体、共用体と列挙体、マクロ、
複数ファイルのプログラム
malloc関数
----------------------------

投稿日時 - 2009-02-09 21:49:30

QNo.4703703

暇なときに回答ください

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

そもそも「技術的な説明が難しい」のではなく、
質問そのものが「技術的に説明できない」たぐいものです。

実務面から見ても、※で挙げられた要素は全て、仕事でも使います。
では、入門書と実務とでどう違うかというと、
入門書では、それぞれの要素を個別に説明していますが、
実務では「それらの要素をいかに組み合わせる」かが重要になってきます。
入門書が「ポインタは○○するものである」といった感じで、各要素について、その意味を理解するものになっているのに対し、
実際にプログラムを組む場合は、「○○するためにポインタを使えばよい」といった感じになります。
「プログラムを組む」とは、プログラムで実現すべき処理内容を把握した上で、それを実現できる要素を当てはめていく作業なのです。
それが出来るようになるためには、前提知識として、個々の要素を知っていないといけません。知らなければ「当てはめる」こともできませんから。だからこその入門書ですね。

例えば、JPEG圧縮された画像を読み込んで展開するプログラムを考えます。
JPEG画像を読み込むためにはバイナリファイルの入力が必要です。
読み込んだデータを保持するメモリ領域の確保にはmalloc関数が必要です。
JPEG画像のヘッダ情報を取り扱うには構造体を使い、そのヘッダの記録内容を表現するのには列挙体を使うのが普通です。
よく使う数値はマクロを使わないと保守が難しくなります。
1ファイルが大きくなると管理が難しくなりますから、処理内容ごとに複数ファイルに分けるのが基本です。
読み込んだ圧縮画像を展開する処理は複雑ですので、個々の処理に分割して自作関数を作るのが必要です。
関数を使うからには、関数への引数の渡し方はわかってないとダメです。
バイナリデータの取り扱い時にはポインタを使った方がデータの取り扱いが楽になります。
読み込んだデータを処理するには、forもしくはwhileでループを回す必要があります。データの内容によって処理が変わりますから、その判定にはifかswitchが必要です。
展開して出来た画像は2次元配列で表現するのが普通です。

といった感じで、※で挙げられた要素は全部出てきますね。

投稿日時 - 2009-02-10 00:21:47

お礼

「作品(プログラミング)は個別の要素をいかに効率よく組み合わせれるかであり、入門書はその個別要素の基礎を解説しているものである」

非常に明確でわかりやすい説明をありがとうございました。

投稿日時 - 2009-02-10 06:08:38

ANo.8

7人が「このQ&Aが役に立った」と投票しています

 |  次へ ]

ベストアンサー以外の回答(24件中 21~24件目)

ANo.4

 こんにちは。

 ド素人さんに解りやすくということなので、ちょっと技術的
ではありませんが参考にしていただければ幸いです。

 C言語(プログラミング)を料理に例えると解りやすいと思います。

 C言語の入門書の内容は料理でいう材料の切り方や、塩の振り方
などの調理方法に該当します。
 そして実践とは指定された料理を作ることに該当します。なので
材料の調理方法は必須になります。
 C言語も指定されたプログラムを作成するために必須になります。

 よく初心者の方で入門書の技術を追求される方がいらっしゃいます
が、重要なのはやりたい事を明確にしてそれを実現する手順、及び
その各手順に必要な処理(if, for)を選択することです。
 料理でいうなら、材料の切り方を極めただけでは料理はできません。
 作りたい料理が何で、どの材料を選び、どういうレシピを組み、
どの調理順序で料理していくかを考えることです。

 C言語で言えば、材料がデータ、レシピが設計書、各調理方法が
アルゴリズムと考えられます。

 料理人は指定された料理を聞いたら直ぐに材料、レシピ、調理手順
が解り、料理に取り掛かれます。そして自分なりのアレンジも加えます。
調理方法を応用して洋風にも和風にもできます。
 同じ様に、C言語の熟練者は指定されたプログラムを聞いたら直ぐに
必要なデータ、処理手順、実際の処理が頭に浮かびます。

 それらを実現する為には、必ず処理方法が必要になります。

 長文失礼しました。ご参考までに。

投稿日時 - 2009-02-09 23:10:54

お礼

できれば例え話ではなく、具体的な技術的説明を期待したかったのですが、やはりド素人相手にそれは難しいでしょうか、、、

投稿日時 - 2009-02-09 23:12:16

ANo.3

入門書レベルのことは、何をやるにも必ず必要になってきます。入門書レベルのことが理解できており、実際に活用できる状態になっていて、はじめて実践的なことができるようになります。

例えていえば、人間が生まれてから最初の約1年間で、目が見えるようになり、首がすわり、寝返りができるようになり、座れるようになり、這えるようになり、つかまり立ちができるようになり、伝い歩きができるようになり、独り立ちができ、やっと普通に歩けるようになります。
これらの過程をすっとばして、いきなりアスリートを目指そうとしても話になりません。
それと同じことです。

投稿日時 - 2009-02-09 23:07:11

お礼

できれば例え話ではなく、具体的な技術的説明を期待したかったのですが、やはりド素人相手にそれは難しいでしょうか、、、

投稿日時 - 2009-02-09 23:11:39

ANo.2

四則演算がまともにできない人が方程式を解けますか?
それと同じ事です。

投稿日時 - 2009-02-09 23:04:29

お礼

できれば例え話ではなく、具体的な技術的説明を期待したかったのですが、やはりド素人相手にそれは難しいでしょうか、、、

投稿日時 - 2009-02-09 23:11:03

ANo.1

>※----------------------------
>if,switch,for,while
中略
>malloc関数
>----------------------------
これらは、全て基礎です。これを自由自在にあやつれて、初めて実践(実戦)が可能になります。車の運転にたとえれば、右折、左折、車庫入れ、坂道発進等のようなものです。たとえ、それらの基礎ができても目的地に間違いなくスムーズに到着するためには、その基礎ができただけでは不十分です。しかしながら、その基礎も満足にできなければ、目的地に安全に到着することはできません。
これでは、説明になっていませんか?

投稿日時 - 2009-02-09 23:03:42

お礼

できれば例え話ではなく、具体的な技術的説明を期待したかったのですが、やはりド素人相手にそれは難しいでしょうか、、、

投稿日時 - 2009-02-09 23:11:01

あわせてチェックしたい
  • malloc関数の使い方 ...
  • 列挙型switch文での利用が、実行できません ...
  • バイナリデータのファイル入出力について ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら