コードとファイルの世界観です。
僕は、プログラミングの基本は、コードとファイルだと思います。
プログラム自身を表す「コード」があり、その上で、プログラムから読み書きされる「ファイル」があります。
どのようなプログラムであっても、まずコードとファイルがあります。
このことをつかむことが、プログラミングを行う上で、重要だと僕は思います。
まず、コードはプログラミング言語で書きます。
このことは、C/C++であっても、Javaであっても、Perlであっても、Pythonであっても、Lispであっても変わりません。
プログラムというテキスト形式のデータが、コンパイラやインタプリタによって機械語に翻訳され、その機械語のプログラムをCPUが実行するのです。
また、ファイルは永続化されたデータです。
コードが、プログラムにおいて、どのような振る舞いをするかという、「変わらない不変のもの」であるとするならば、ファイルは、その場その場で変わるデータであり、「変わりやすいプログラムの処理対象」であるでしょう。
Webなどの場合は、データの保管のためにファイルではなくデータベースサーバを使うこともあります。
単にファイルと言っても、プレーンテキスト、ini、HTML、XML、JSON、CSV、エクセルなど、さまざまな形式のファイルがあります。XMLと文書形式やデジタル情報を参照のこと。
どんな機能を持ったプログラムであっても、プログラムはコードとファイルで成り立ちます。
コマンドプログラムも、ネットワーク通信も、テキスト処理も、GUIも、マルチメディアも、言ってしまえばなんであってもコードとファイルでプログラムは成り立ちます。
ですが、カーネルは少し話が変わります。なぜなら、カーネルはプログラムとファイルシステムをそもそも「成り立たせるための仕組みを提供」するからです。
なので、カーネルのやっていることは、コードとファイルを成り立たせることであり、それによってプログラムの「実行環境を作る」ということであると言えます。
このような、コードとファイルによってプログラムが成り立つという実例は、昔の2ちゃんねる専用ブラウザが分かりやすいです。
サーバーから掲示板のデータファイル(datファイル)をダウンロードし、ローカルに保存し、datファイルをテキスト解析して、タブとリストあるいはブラウザコントロールでGUI表示し、巡回や投稿、HTMLのスキン機能などをつけた2ちゃんねる専用ブラウザは、まさに「プログラミングの基本がよく分かる」ようなアプリケーションの題材でした。
ですが、今は、そもそも2chが5chに変わって、いろいろと2ちゃんねる専用ブラウザは肩身が狭くなりました。
ほかの適当な実例としては、Gentoo Linuxのパッケージ管理システムであるPortageなどが分かりやすいと思います。Portageは、ネットワーク上のリポジトリとローカルのツリーを同期し、コマンド操作で自動的にebuildスクリプトを実行して、ソースtarballをビルドしてシステムにインストールします。ここでもコードとファイルが大活躍します。
なので、昔の時代を知っている人であれば、「専ブラとPortageがプログラムの基本だな」ということが分かると思います。
XMLと文書形式を参照のこと。
シリアライズと永続化とO/Rマッピングを参照のこと。
高度なアプリケーションの場合、永続化のためにファイルではなくデータベースを使うこともあります。
RDBMSを参照のこと。
Linux設計も参照のこと。