Entry

C/C++ の入門資料を書こうと改めて決心した日

2010年04月05日

しがないソフトウェアベンダのうちの会社も,今年は新卒君を採ったんだそうで,ただ今研修中だそうです。「新卒」っていい響きだなあー……予算が振られてなくて……などと,小姑じみた一言も浮かんでしまいます。うちの部署は新卒君が入るようなところではないので,今まで通り,どんよりとした空気の中でお気楽プログラミング。遠目に彼らを見つつ,若いエキスを吸収しています。

それはともかく,うちの会社に限らず,新卒君の集まりには一定の役割分担があるみたい。今の時期,電車やご飯やさんの中でも見かけることができます。あたしゃ本屋に通うことが日課になっているんですけれど,コンピュータ書籍売り場では,ほぼ確実にそゆ集団に出会えます。なんでその集団が新卒君か分かるかって?そりゃ分かるって,話を聞いてれば。別に,耳をそばだててるわけじゃないんですけどね(知識をひけらかすように話しているので聞こえてきてしまう)。

役割分担というのはひとつ。集団の中に必ずひとり,したり顔の人がいるという法則です。周りの人間は,それをヘェーと感心したように聞いている。

「C言語はプログラミングの基礎とかいうけど,今は Java や C# が基本っしょ?C なんかできなくても問題ないよ。」とか「C++ なんて難解なだけで勉強する意味ないって」とか,「Java ですらもう古いのかもね,これからは Ruby でしょ?」とか……。そゆ言葉を聞いて,普段 C/C++ でプログラムを書いているあたしは,心の中でさめざめと泣くのです(ウソ)。

新卒君の話は,具体的な実装なり設計なりの話に話題が及ばないことから,聞いててすぐに分かります。C言語はほげほげ,とか,これからはふがふがの時代とか,概括的な話しかできない。それはそれで構わないんですけどね。むしろ,かわいいな,と思う。数年のキャリアを持っていながら,この程度の話しかできないのは問題だとも思うんだけれど。

で,C/C++ の入門資料の話。

新卒君だけでなく,今年入った新人さんの教育係として,どういうわけだか今年も出向することになったのでした。この教育係,ここ何年かやっているんだけれども,なんだか,年々ハードウェアとソフトウェアを関連付けて考えられる人が少なくなっている気がしています。あたしが見聞きした人に関する限り,これはかなり顕著な傾向だと思う。

例えば,「メモリアクセス」という言葉があるとしますよね。仮想メモリや CPU の特権命令のような,やや細かい部分は措いておくにしても,メモリアクセスなるものがプログラムを通じて,OS 的またはハードウェア的にどのように実現されているのか,基本的なところで理解していない感じがするわけです。とある人は,「変数に代入する」といったら,どこかの時点で勝手にムクムクと格納場所が生まれる……みたいなイメージでいるみたい。当然,そうしたイメージでいると,「メモリアクセスのコスト」みたいな話があっても「?」になってしまうわけで……今まで何勉強してきたの?となってしまう。

また,スレッディングにしてもそう。マルチスレッドを CPU なり OS なりがどのようにサポートしているのか,マルチタスク(マルチプロセス)との大きな違いは何か(「タスク」という言葉も揺れのある用語なんだけれど),そゆ基本的なことが理解できていないと,非効率な同期処理を書くことになったりする。

冒頭の新卒君は,C/C++ は不要とか言っていて,ま,それはそれで構わないんだけれども,上のような基本的な知識は,Java でも C# でも問題になります。メモリアクセスひとつにしても,Java や C# では GC(garbage collection)が絡んでくるので,C/C++ よりよっぽど難しい。C/C++ を知らないのにこうした仕組みを理解しているのだろうか,とか思うわけです。実のところ,こゆ基本を知るには,むしろ C/C++ の方が理解しやすかったりします。

C/C++ の入門資料を書こうと思ったのは,「自分が今何をプログラミングしているのか」理解するための橋渡しを書く必要があると思ったからです。ま,おっさん的な考えでもあるんだろうけれど,プログラミングというのは,あくまでもそれを通じてハードウェアを動かすもんだと思うんですね。自分のプログラムを通じて,最終的にどのようにハードウェアの挙動に反映されるのか,そこらへんを再確認しよう,ということ。あと,もういちいち説明するのに疲れたというのもある。

せっかくだから,このサイトでも折を見て公開するつもり。僭越ながら,ぼちぼち書くことにします。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN