30 October 2007

Ноябрь в Тамбове

Буду в Тамбове с 9-го ноября по 11-ое :)

27 October 2007

Время разработчика vs. время процессора

Строго говоря, этой теме уже больше 50 лет, но в среде разработчиков по прежнему разгораются споры, чей же язык лучше. Конечно, идеального решения нет и всё зависит от поставленной задачи. Так, для системного программирования и встроенных систем вам придётся выбрать C или ассемблер. В случае же прикладных программ у нас есть огромный выбор.

Современные компьютеры стали общедоступными, они обладают гигантским быстродействием и большим объёмом оперативной памяти. Всё это делает возможным использование высоуровневых языков, которые позволяют переложить часть работы программиста на компьютер. Я считаю, в большинстве ситуаций время программиста дороже некоторой потери производительности программы.

Почему не стоит писать прикладные программы, скажем, на С? Потому, что тогда программисту приходится сосредотачиваться на многих деталях, которые не имеют непосредственного отношения к тому, что должна делать программа. Большие программы на С сложно менять и сопровождать. Более подробно можно почитать здесь и здесь.

Хорошо, тогда может быть на С++? Безусловно, объём кода существенно снижается, и С++ решает часть проблем C. Но какова цена? Язык значительно сложнее С (так, стандарт С занимает около 160 страниц, а стандарт С++ — уже 310), его компиляторы заметно медленнее, из-за обратной (неполной) совместимости с С он обладает всеми проблемами С плюс вносит свои. Опять же, разработчику приходиться постоянно следить за множеством мелочей, чтобы не угодить в очередную ловушку. Мало кто из разработчиков знает или использует едва ли половину возможностей языка.

Java или C#? Оба языка предоставляют все средства для быстрой и удобной разработки «безопасных» программ. Они решают многие проблемы С/C++ и существенно упрощают жизнь разработчику. Код ещё больше сокращается, благодаря рефликсии программы проще менять, сопровождать и тестировать. Конечно, за это приходиться расплачиваться (C#, Java), но уже производительностью, а не безопасностью программ и не временем программиста.

Но это далеко не потолок, ведь есть функциональные языки, на которых часть задач решается существенно проще, чем в императивных языках. Кроме того, есть Lisp с его мощными макросами для метапрограммирования.

Не стоит также забывать о том, что в любой абстракции может быть ловушка. Поэтому на практике для того, чтобы писать эффективные и надёжные программы, любому программисту желательно знать C и особенности реализации выбранного им языка.

22 October 2007

Трансляция в LiveJournal

Спасибо _lost__soul_ за создание ленты трансляции моего блога в LiveJournal.