На мою думку, те, що люди розмовно розглядають "мови програмування", - це фактично три окремі речі:
- Тип мови та синтаксис
- Мова 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).
Для завершення цього допомагає знання правильного алгоритму. У змаганнях з кодування це дуже важливо, особливо коли такі ресурси, як час виконання та пам'ять, навмисно обмежені. У розробці додатків це вітається, але, як правило, не має вирішального значення. Там важливіше технічне обслуговування. Цього можна досягти, застосувавши правильні шаблони дизайну, маючи гарну архітектуру, читабельний код та відповідну документацію, і всі ці методи сильно залежать від власних та сторонніх бібліотек. Отже, мені важливіше знати, які колеса вже винайдені і як вони підходять тоді, як зробити свої власні.