雑記
プログラムを書くということ
最終更新:
匿名ユーザー
-
view
プログラミング、というのは難しいイメージがありますが、CPUにできることなんてたかが知れてる。
①転送
ある領域からデータを読み出す
書き込む
コピーする
②演算
四則演算(掛け算割り算ができない奴もいる)
ビット演算
③処理分岐
ジャンプ
ループ
サブルーチンコール・リターン
ある領域からデータを読み出す
書き込む
コピーする
②演算
四則演算(掛け算割り算ができない奴もいる)
ビット演算
③処理分岐
ジャンプ
ループ
サブルーチンコール・リターン
極端に言って、これだけ。
皆さんのPCも、PS2も、ケータイも、そのほか中にコンピュータの入ってるもの全て、その制御の中心となるCPUなりが処理できるのはこの3種類。
信じられますか?
皆さんのPCも、PS2も、ケータイも、そのほか中にコンピュータの入ってるもの全て、その制御の中心となるCPUなりが処理できるのはこの3種類。
信じられますか?
その意味ではちゃんとプログラムが書ける、という能力は「C言語できます」とか「Javaできます」とか言うことじゃない。言語が何であれ、それを習得しているかどうかはクリティカルな問題じゃない。
・・・だって、結局どの言語でもやっていることは上の三つだけだから。
本当の意味でプログラムが書ける、というのはターゲットとなる機器の仕組みを理解して、かつ上記の三つを駆使して機能を組み立てられる能力であると思う。
printf("hogehoge\n");
なんてやって文字を表示してプログラムが書けるというのは、甘い。エンベッドの下回りでは【標準入出力】なんてものが存在しないことなんてざらなんだから。それどころかOS無し、なんてのもさほど驚くに値しない。
そうなると、"hogehoge\n"なんてしょーもない文字列を表示するだけでも、表示デバイスとの通信なんてことをやらなきゃいけなかったり、表示する文字のデータ(ドット絵)をメモリ上で自前で作成したりなんて事もある。
この時重要なのってまずその機器の構成、表示デバイスとの通信の仕組みやタイミングといった情報からどうすれば機能を実現できるかを考えること。いくらC言語の経験があっても、WindowsなどのPCのOS上でしかプログラムしたことのない人にはおそらくは無理だろう。
でも、WindowsPCなんかでもディスプレイに表示するのって似たような処理が走っているのである。それは、OSが肩代わりしてくれているだけで。
したがって、Windowsなどでのプログラミングでも抽象化されたGDIオブジェクトの使い方だけでなく内部の処理が判ってる人のほうが有利だといえる。
Windowsになって様々なデバイスが抽象化され、少なくともWindows上でのプログラミングの敷居は低くなった。けれどその分、極端な言い方をするとエクセルで関数使うのと同じ感覚でVC++を使う人も増えてる気がする。昔のMS-DOS時代からあんまり機能的に変わらないようなアプリでもなんだかものすごいメモリ食ったり、処理が重かったり。。PCのパワーもあがってるはずなのに。
OSが色々やってくれるので入門の敷居が低くなって、ツール(VC++の統合開発環境など)もどんどん使いやすくなって、その代わりに粗製濫造なソフトウェアが氾濫する。。ITバブルとはよく言ったもので。
案の定はじけちゃったわけだけど。
案の定はじけちゃったわけだけど。
ちゃんと、もっと深いところまで理解して、プログラムを作ることを目指したいものである。