На мой взгляд, то, что люди в разговорной речи считают «языками программирования», - это на самом деле три разные вещи:
- Тип языка и синтаксис
- Language IDE
- Доступные библиотеки для языка
Например, когда кто-то поднимает C # в обсуждении, вы можете подумать, что он / она говорит о синтаксисе языка (1), но на 95% уверены, что в обсуждении будет использоваться .Net framework (3). Если вы не разрабатываете новый язык, трудно и обычно бессмысленно выделять (1) и игнорировать (2) и (3). Это связано с тем, что IDE и стандартная библиотека являются «факторами комфорта», которые непосредственно влияют на опыт использования определенного инструмента.
Последние несколько лет я тоже участвовал в Google Code Jam. Впервые я выбрал C ++, потому что он имеет хорошую поддержку для чтения ввода. Например, чтение трех целых чисел из стандартного ввода в C ++ выглядит так:
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 ++ поток ввода файлов устанавливал определенный флаг ошибки и молча терпел неудачу, делая ничего не подозревающего разработчика о проблеме.
Оба примера демонстрируют, как использовалась библиотека, а не синтаксис языка. Первый демонстрирует многословие, а другой демонстрирует надежность. Многие библиотеки портированы на несколько языков, и некоторые языки могут использовать библиотеки, которые специально не созданы для них (см. Ответ @ vartec о Python с библиотеками C).
Чтобы обернуть это, знание правильного алгоритма помогает. В соревнованиях по кодированию это очень важно, особенно когда ресурсы, такие как время выполнения и память, намеренно ограничены. В разработке приложений это приветствуется, но, как правило, это не важно. Ремонтопригодность там важнее. Этого можно добиться, применяя правильные шаблоны проектирования, имея хорошую архитектуру, читаемый код и соответствующую документацию, и все эти методы в значительной степени зависят от собственных и сторонних библиотек. Поэтому я считаю более важным знать, какие колеса уже изобретены и как они подходят, а затем сделать мои собственные.