個人的に、自分のプログラミングの技量に限界を感じ、
どうしても越えられない壁をどうやったら越えることができるか
を考えた中、気がついたことをメモしておきたいと思います。
具体的に現在やっていることは、主に
「プログラミング言語の利用者としての立場」で限界を感じているため、
「プログラミング言語の設計・実装・生産者が何を考えているのか」
を頭に入れるということです
オブジェクト指向はブラックボックス化と抽象化を実現し、
特に多人数での開発や商業的な開発に向きますが、
逆にホワイトボックス化する
=オブジェクト指向が構造化プログラミング言語(C)でどのように実装されているかを知る
ということも重要なのではないかと思います。
何にでも通じることかもしれないのですが、
「”動作原理”をもっと深く知る」ことで、限界を越える方法です。
「yacc、lex系統の使用方法を知っていてBNF記法を読める」
というようなことも必須ですが、
中間共通言語の生成・VMを持つ言語が多くなっていることも踏まえると、
「計算機科学」そのものをもっと根本から深く理解する必要性を感じました。
(ちょっと適当に列挙していますが)
色々なキーワード:チューリング完全、有限オートマトン、スタックマシン、レジスタマシン、
プログラミング意味論、評価戦略、リロケータブルバイナリ、LLVM、第1級関数、グリーンスレッド、ラムダ、関数ポインタ、・・・等、
を「言語生産者側の視点から改めて見直す」
とすると、学ぶべき余地が無限に等しくあることに気がつきました。
もう一つは、「C言語」の存在を甘く見ないということでした。
C言語に対して、
「特定分野を除いて、すぐにお金につながりにくい」
「最近は直感的で便利で新しい言語が沢山出てきているので、 古い言語」
「言語の提供機能や標準ライブラリ関数がメモリ安全ではないので使いたくない」
といった見方もありますが、
「その新しい言語はC言語で作られている」
ということはもっと強く意識すべきだと思いました。
(特に、オブジェクト思考言語については、
C言語の関数ポインタまわりのテクニックはもとより、
動作原理について何の疑問も持たずに
何の迷いもなく使い切ることができるのかどうか、
という点は議論が分かれるような気がします)
C言語は決して薄くて浅い言語ではありません。
また、場合によっては言語の設計情報を英語の原文で読むことも重要ですが、
(例えば、C言語の識別子宣言時の「Clockwise/Spiral Rule」の解説などは、
日本語で読むより英語で読んだほうがわかりやすい)
特に日本人にとって非常にありがたいと思われる参考文献は、
まつもとゆきひろ先生により開発された
Ruby言語の詳細実装を解説した
「Rubyソースコード完全解説」(書籍)です。