言語の「中へ」のプログラミング

最近、経験が少ない技術者育成のガイドに使えるような書籍を探しています。
そんなわけで候補のひとつとして「CODE COMPLETE 第2版 上 完全なプログラミングを目指して」を読んでいます。
いろいろな人とお話していると一般的には私が思う以上にプログラミング言語に関する関心が高い様です。
CODE COMPLETE 第2版 上 完全なプログラミングを目指して」の中でプログラミング言語との関わりについて、まさに私の感覚を説明する面白い表現がありました。
それは言語の「中で」プログラミングするのではなく、言語の「中へ」プログラミングするということです。
要するに設計やその意図はプログラミング言語の外にあって、プログラミング言語はあくまでもそれらを表現するための手段であるということだと思います。
言語やライブラリの仕様や開発環境ではなく、ソフトウェア設計の話をするときに、このプログラミング言語の「中で」設計する人とプログラミング言語の「中へ」設計する人の差は歴然としていて、さらに経験を積んでさまざまな言語に対応するときにその差はどんどんと開いていくことになります。
プログラミング言語の「中で」設計する人は言語が変わるごとに経験がリセットされますがプログラミング言語の「中へ」設計する人は常に経験が積み重ねられます。
少し話はそれますが、ドメインやプラットフォームについてもこの言語の話と同様のことが言える様に思います。(ドメインの「中で」プラットフォームの「中で」限定されるという残念な状況が多く見られると思います)


私はこう言う考え方なので最近まではプログラミング言語の違いによる生産性の違いとはライブラリや開発環境の差によるものであって、多少の手間は違っても本質的には設計品質や生産性に大きな差はないと考えていました。
しかし最近RubyC#といった言語を使うようになってすこしこの考えを改めるべきと思う様になってきました。
プログラミング言語の「中へ」設計の考えや意図を表現するためには、直感的で作業のオーバーヘッドが少ないことが生産的、というよりもクリエイティブであるためにいかに重要であるかを実感してきています。
私にとっては現状では静的型言語ではC#、動的型言語(あるいはスクリプト言語)ではRubyでのプログラミングが直感的で、楽で、クリエイティブに感じてもっとも快適です。(直感的であるとかクリエイティブであるとかは非常に主観的なものだと思うので人によっては別の言語が合っているという人もいらっしゃると思います)


CODE COMPLETE 第2版 上 完全なプログラミングを目指して」について、「達人プログラマー―システム開発の職人から名匠への道」の時もそうだったのですがタイトルのせいで胡散臭く思っていました。
「設計は妥協と優先順位の産物である」と言ったフレーズからも完璧ではなくてあくまでも完全を目指すということで、「達人プログラマー―システム開発の職人から名匠への道」よりもpragmatic(現実的、実利的)な内容だと思います。
いろいろと興味深い内容ばかりで取り上げてみたい話題がたくさんありますので機会があればまたいろいろと書いてみたいと思います。