Наткнулся на чудесный пост от Moshe Zadka. Почему мы пишем программы сегодня на Python, Ruby, PHP, а не на старом добром Си? Почему используем заведомо менее эффективные (как по памяти, так и по скорости языки программирования).
Если кратко, Moshe приводит следующие доводы:
- не все могут писать на Си, многим это просто недоступно, но это даже хорошо, если становится больше программистов – больше программ, больше удововлетворения для общества;
- на языке высокого уровня писать быстрее – быстрее выпустим продукт на рынок, следовательно опередим конкурентов;
- слишком много ошибок в программах на Си, которые можно избежать в языках высокого уровня;
- люди готовы поменять деньги, вложенные в более мощное железо, на более «умные» программы.
Мне кажется, что вообще вопрос разработки на хороших языках высокого уровня не только быстрее, но и качественнее. Я думаю, что отсутствие в Си и Си++ прямо в самом языке так необходимых типов данных (хеши, списки и т.п.) приводит к неправильному мышлению начинающих программистов, они неправильно кодируют алгоритмы, получаются всё равно менее эффективные программы. А хороший язык высокого уровня уже в tutorial приучает читающего к правильному использованию структур данных, даёт сразу много готовых алгоритмов. Конечно, STL в Си++ решает несколько эту проблему, но даже Страуструп рассказывает о ней в отдельной главе, а часть книги предлагает заново написать тип строк и т.п.
Что то эта тема резко, на этой неделе, приобрела популярность
Буквально и я вчера писал на сходную тему, тоже склоняюсь к тому что стоимость времени разработчика постоянно растет, и тратить время на реализацию низкоинтеллектуальных моментов программы становится слишком дорого, по сравнению с покупкой сервера помощней. Но вообще не всегда выбор иных технологий выливается в более медленную программу, другой язык часто подталкивает к смене самого алгоритма реализации, на более высоком уровне, а при выборе более правильного подхода часто можно добиться ускорения в десятки раз. Часто было что оптимизируя по мелочам не замечаешь глобальные проблемы подхода, в общем за деревьями леса не видно, и при смене языка иногда проще взглянуть на все сверху и заметить более важные оптимизации.
А как насчёт написания многопользовательских ресурсоёмких серверов? На мой взгляд, в данном случае решение со встроенной сборкой мусора будет более безопасным. Например, код серверной части некоторой mmorpg был написан на си++ и имел утечки памяти. Эти утечки не «ловились» инструментами типа valgrind, поскольку на реальных объёмах данных такие утилиты просто загибались. До того, как код переписали на C#, серверы перезагружали раз в день («натекало» где-то 4гб).
Что касается ресурсоёмких программ, здесь можно упомянуть факт № 6 из списка на http://www.habrahabr.ru/blog/sport_programming/39790.html . И ведь везде так. И даже если поверят, что можно всё делать проще, то обязательно спросят, почему не сделали так же хорошо раньше.
Я как-то более к Джоэлу склоняюсь: Си – фундаментальный язык, требующий особый мозг, способный к работе с указателями и рекурсией.