私の意見では、人々が口語的に「プログラミング言語」と考えるものは、実際には3つの別個のものです。
- 言語の種類と構文
- 言語IDE
- 言語で利用可能なライブラリ
たとえば、誰かがディスカッションでC#を取り上げるとき、言語構文について話していると思うかもしれません(1)が、議論に.Netフレームワークが関係していることは95%確実です(3)。新しい言語を設計していない場合、(1)を分離して(2)と(3)を無視するのは難しく、通常無意味です。これは、IDEと標準ライブラリが「快適性の要因」であり、特定のツールの使用経験に直接影響するためです。
ここ数年、私もGoogle Code Jamに参加しました。初めてC ++を選択したのは、入力を読み取るための優れたサポートがあるためです。たとえば、C ++の標準入力から3つの整数を読み取ると、次のようになります。
int n, h, w;
cin >> n >> h >> w;
C#では同じものが次のようになります。
int n, h, w;
string[] tokens = Console.ReadLine().Split(' ');
n = int.Parse(tokens[0]);
h = int.Parse(tokens[1]);
w = int.Parse(tokens[2]);
これは、単純な機能にとっては精神的なオーバーヘッドです。複数行の入力を使用するC#では、事態はさらに複雑になります。たぶん、私は単にその時より良い方法を見つけていないだけかもしれません。とにかく、ラウンドの終了前に修正できないバグがあったため、最初のラウンドに合格しませんでした。皮肉なことに、入力読み取りメソッドはバグを難読化しました。問題は単純で、入力には32ビット整数には大きすぎる数値が含まれていました。C#int.Parse(string)
では例外がスローされますが、C ++では、ファイル入力ストリームが特定のエラーフラグを設定し、無意識のうちに開発者に問題を認識させずに失敗します。
両方の例は、言語構文ではなくライブラリがどのように使用されたかを示しています。1つは冗長性を示し、もう1つは信頼性を示します。多くのライブラリは複数の言語に移植されており、一部の言語では、そのライブラリ専用にビルドされていないライブラリを使用できます(Cライブラリを使用したPythonに関する@vartecの回答を参照)。
これをまとめるには、適切なアルゴリズムを知っておくと役立ちます。コーディングの競争では、特に実行時間やメモリなどのリソースが意図的に制限されている場合に重要です。アプリケーション開発では歓迎されますが、一般的には重要ではありません。そこでは保守性がより重要です。正しい設計パターンを適用し、優れたアーキテクチャ、読み取り可能なコード、関連ドキュメントを作成することで実現でき、これらの方法はすべて社内およびサードパーティのライブラリに大きく依存しています。ですから、どのような種類のホイールがすでに発明されており、どのように適合するのか、それから自分のホイールをどのように作るのかを知ることがより重要だと思います。