Опишу только ключевые особенности IDE, а общие принципы, которые мне важны для всех программ, а не только для IDE (юзабилити, производительность, настраиваемость, расширяемость плагинами/макросами), оставлю за кадром.
- Главное: интегрированная визуальная отладка (пошаговое выполнение, бряки, «живое» наблюдение за значениями переменных, автоформатирование значений переменных по их реальным типам).
- Возможность интеграции с произвольными инструментами (в первую очередь — компиляция с парсингом вывода и возможностью перехода к строчке исходника с найденной ошибкой).
- Различные мастера для создания типичных блоков кода по параметризованным шаблонам (а-ля MFC AppWizard, ClassWizard).
- Управление деревом проекта/проектов.
- Сквозной парсинг всех файлов проекта.
- Вытекающие из него функции типа «умной» подстановки кода, описанного в другом файле, рефакторинга, быстрого перехода к определению типа/функции/переменной и т.п.
- Объединение разнородных редакторов в единой оболочке (редактирование исходного кода, диалогов, менюшек, прочих ресурсов, входящих в состав проекта).
- Автосохранение и восстановление при следующем запуске состояния работы с проектом: открытые окна, закладки, положение курсора и т.п.
Вроде, ничего не забыл. Если забыл, значит, это либо не настолько мне нужно, либо, наоборот, настолько очевиднейшая и жизненно необходимая вещь, что без неё программа вообще не имеет права называться IDE. :-)